
クライアントのWordPressサイトがハッキングされた話。復旧までの記録と学んだこと
先日、クライアントの飲食店のWordPressサイトがハッキング被害に遭いました。
すでに発生から約2か月近く経っているため、細かい部分はうろ覚えになっているところもありますが、自分自身の備忘録として、そして同じようなトラブルで困っている方のお役に立てればと思い、復旧までの流れをまとめておきます。
異変はGoogle検索結果から始まった
クライアントからこんな連絡がありました。
「今までは検索結果にお店のファビコンとお店の説明が表示されていたのに、知らないショッピングサイトの説明文になっていて、商品画像まで表示されている!」
しかし、不思議なことにサイトURLを直接開くと、ホームページ自体はいつも通り正常に表示されていました。
「これはサイトが乗っ取られた可能性が高い」と判断し、Web制作コミュニティで相談しながら復旧作業を開始しました。
まず行ったこと
最初に行ったのは、
ドメインの初期化
バックアップからサイトを復元
という作業です。
ところが、ここで最初の壁にぶつかりました。
バックアップファイルが大きすぎる…
All in One WP Migrationで約2週間前に取得していたバックアップファイルが約2GBありました。
Xserverの初期設定ではアップロードできないサイズだったため、まずはアップロード可能な最大容量を変更しました。
その後、All in One WP Migrationで復元を試みましたが、何度やってもエラー。
PHPの設定なども変更しましたが改善せず、最終的にはプラグイン側の制限が原因でした。
Webコミュニティで「All-in-One WP Migration Unlimited Extension」を教えてをいただき、それを利用することで無事にサイトを復元できました。
復元後すぐに行なったセキュリティ対策
サイト復旧後、まず実施したことは以下です。
セキュリティプラグインの導入
ログインURLの変更
WordPress管理者パスワードの変更
Xserverのパスワード変更
Webメール設定の変更
お問い合わせフォーム(SMTP)の設定見直し
ここまでで、一旦ハッカーは追い出せたはずでした。
しかし、本当の問題はまだ終わっていませんでした。
Googleには250万ページものスパムURLが残っていた
Google Search ConsoleでURL検査を行うと驚きました。
なんと、約250万ページもの不正URLがGoogleにクロールされていたのです。
状況を整理すると、
サイト自体は復旧済み
Search Consoleには正しいURLが登録されている
Google検索結果だけが改ざん時の情報を保持
自動生成されたスパムURLが大量にインデックスされている
という状態でした。
つまり、
サイトは正常だけれど、Googleのデータベースが汚染されたまま
という状況だったのです。
実施したこと
ここからはGoogle側との戦いになりました。
実施した内容は以下です。
Google Search Consoleでサイトマップを再送信
URL検査を実施
再クロールをリクエスト
favicon.ico を確認
All in One SEOでSEO情報が書き換えられていないか確認
「site:ドメイン」でGoogle検索
見覚えのないページをSearch Consoleから削除申請
不正URLをURL検査
すると、不正URLには
「URL は Google に登録されていますが存在しません」
「404」
「ソフト404」
と表示されました。
つまり、
Googleにはインデックスだけ残っていて、実際のページは存在しない
という状態でした。
ChatGPTとの壁打ちの日々
今回、ChatGPTにはとても助けられました。
大量のスクリーンショットを送りながら、
「これは正常?」
「このファイルは怪しい?」
「この設定は?」
というやり取りを何日も繰り返しました。
普段ほとんど見ることのないファイルマネージャーまで確認しながら、一つひとつ原因を潰していきました。
そして最終的に、
サイトは正常だけれど、Googleが古い情報を保持しているだけ
という結論になりました。
Googleが正常に再認識するまでには数か月かかるため、現在もSearch Consoleを定期的に確認しています。
まだ終わっていなかった…
「やっと終わった!」
と思った矢先、ChatGPTから
「WordPressだけでなく、データベース内の管理者アカウントも確認してください。」
と言われました。
そこでWordPressの「ユーザー」を確認すると…
見覚えのない管理者が3人。
しかも全員管理者権限でした。
思わずゾッとしました。
削除する前に証拠としてスクリーンショットを保存し、その後、
不審ユーザーを削除
WordPress管理者パスワード変更
Xserverパスワード変更
SiteGuardのログインURLを再変更
ファイルマネージャーでバックドアを確認
侵入経路が残っていないことを確認して、ようやく本当の意味で復旧となりました。
今回のハッキングの流れ
今回の流れを整理すると、おそらく次のような手順だったと思われます。
何らかの方法でWordPressへ侵入
管理者アカウントを3つ作成
/items/xxxxx/や.htmのスパムページを大量生成Googleへクロールさせる
検索結果のタイトル・説明文・ファビコンを書き換える
復旧後もすぐには元に戻らない
今回の被害は5月末頃に発生し、6月末頃にはサイト自体は復旧しました。
検索結果の説明文は比較的早く元に戻りましたが、ファビコンが正常に戻るまでにも時間がかかりました。
そして現在(7月中旬)でも、Search Consoleにはまだ影響が残っており、統計データを見るには支障がある状態です。
見た目には問題なくサイトは表示されていますが、Google側の情報が完全に正常化するには、かなり時間がかかるようです。
残念ながら、「どこから侵入されたのか」という原因は最後まで断定できませんでした。
今回の経験から学んだこと
今回の経験で、改めて痛感したことがあります。
使っていないプラグインは必ず削除する
プラグイン・WordPress本体はこまめに更新する
信頼できないプラグインは使用しない
パスワードは推測できない強固なものを使用する
サイトが重くならないよう、画像サイズやサイト構造を最初から最適化する
サイト制作だけで終わらず、定期メンテナンス契約を結ぶ
現在もクライアントサイトでは、過去にアップロードされた大量の画像をWebPへ変換・差し替える作業を続けています。
「作って終わり」ではなく、「守り続けること」がWebサイト運営には欠かせないと痛感しています。
最後に
今回の経験は、本当に大変で、精神的にもかなり堪えました。
しかし、その分だけWordPressのセキュリティやGoogleの仕組みについて、多くのことを学ぶことができました。
もしこの記事が、同じような被害で困っている方のヒントや安心材料になれば、とても嬉しく思います。
「サイトは正常なのにGoogle検索結果だけがおかしい」という症状は、実際に起こります。
慌てず、一つずつ原因を切り分けながら対処していくことが何より大切だと、今回身をもって学びました。