【実録】WordPressマルウェア感染!10万件のスパムからDB復旧した手順

【実録】WordPressマルウェア感染!10万件のスパムからDB復旧した手順 Web制作

【実録】WordPressマルウェア感染!10万件のスパムからDB復旧した手順

サイトを訪れた瞬間、見知らぬ怪しい商品ページへ飛ばされる。管理画面にアクセスしようとしてもリダイレクトされてログインすらできない。

今回対応したのは、お名前.comサーバー上で運用されていたWordPressサイトがマルウェアに侵入され、サイト内に10万ページを超える不正な商品ページが勝手に生成されていたという深刻なトラブルです。

 

100サイト以上の制作・運用経験がある筆者にとっても、ファイル層の汚染がここまで広範囲に及んだケースは極めて厄介でした。

この絶望的な状態から、生成AI(Gemini)を実務パートナーとして活用し、データベースを核とした再構築アプローチで無事にサイトを復旧させた全プロセスを公開します。

 

被害の全貌:10万ページ超のスパム生成とリダイレクトループ

管理画面に入れない原因を調査していくと、背後で恐ろしい事象が起きていました。
site:https://~ でインデックスをチェックしてみて驚きました。

  • サイト内に10万件を超える不審な商品ページが自動生成されていた
  • 外部や内部リンクを踏むと、それら不正に作られた商品ページ等へ勝手にリダイレクトされる
  • サーバー内の各ディレクトリに、見慣れない不審なPHPファイルが多数生成されていた
  • 管理画面(/wp-admin)もリダイレクトに巻き込まれ、正規の手段ではログイン不可

汚染ファイルがサーバー全体に散らばっている状況下で、1つずつマルウェアファイルを特定して手動駆除するのは極めて困難であり、見落としによる再発リスクも跳ね上がります。

そこで「既存ファイルの駆除は諦め、中身が無事なデータベース(MySQL)だけを救出し、クリーンな環境へサイトを再構築する」という方針へ舵を切りました。

 

Geminiと挑んだ復旧のステップ

今回の復旧劇で頼れる相談相手となったのが「Gemini」です。たぶん他のAIでもできるはず。

手順の妥当性確認や、通常ならハードルの高いデータベース直接操作の指示出しをリアルタイムで仰ぎながら作業を進めました。

 

1. 検証用別サーバー(バリューサーバー)への一時退避

元のお名前.com環境は上位ディレクトリやサーバーキャッシュまで影響を受けている疑いがあったため、まずは手持ちの検証用環境(バリューサーバー)にクリーンなWordPressを設置。環境要因を排除した安全な土台を用意しました。

 

2. データベースの抽出とGeminiによる手順確認

  • お名前.comのphpMyAdminから、コンテンツ本体が格納されているMySQLデータを慎重にエクスポート。
  • バリューサーバーのクリーンなDBへインポート。
  • 手順に抜け漏れやデータ破損のリスクがないか、Geminiに都度コマンドや設定値を確認しながら進行。

 

3. phpMyAdminからの管理者ログイン情報再設定

管理画面に入れなくなっていたため、データベース(wp_users テーブル)へ直接アクセス。

  • パスワード欄をMD5ハッシュ関数で書き換え、管理者IDとパスワードを強制再設定
  • これにより、検証環境側で管理画面への正規ログイン権限を奪還

 

4. メディア(画像)ファイルの選別配置

データベースの復元だけではアイキャッチや本文中の画像がリンク切れ(No Image)を起こすため、元サーバーの wp-content/uploads/ から画像ファイル群を救出。

  • 不審なPHPスクリプトが混入していないか目視および拡張子チェックを行い、安全な画像データのみを新環境へ配置

この段階で、投稿データ・固定ページ・画像が綺麗に揃い、約99%の元通りの姿を取り戻しました。

 

元環境へのフィードバックとWordfenceによる完全除染

検証用サーバーで復旧手順が完全に確立できたため、同様のクリーンなファイル構成とお手入れ済みのデータを元のお名前.com環境へも適用。無事に正規のURLでサイトが正常表示されるようになりました。

復旧後、即座に実施したのが「Wordfence Security」による徹底的なスキャンです。

  • 残存していた不正ファイルや改ざんコードをプラグインで完全検知・削除
  • マルウェア特有の「バックドア(裏口)」が残っていると、数日後にcron等をトリガーに再感染する恐れがあるため、現在は数日間の経過観察期間を設定中

 

今回のトラブルから得られた教訓

課題・障害内容従来の対処法今回とった解決アプローチ
10万件のスパムファイルファイルを1つずつ特定・手動削除ファイル駆除を諦め、DBのみ抽出して新規再構築
管理画面にログイン不可メール再発行(届かない場合詰む)phpMyAdminから直接ハッシュ関数でパスワード再設定
作業の判断・構文エラー自力で検索調査(数時間〜数日)Geminiに手順とコードを壁打ちして即時解決

PHPのバージョン(今回は7.4環境)などサーバーの細かな仕様差に惑わされず、「汚染されたファイル層を捨て、コア資産であるデータベースを守る」という割り切りが功を奏しました。

未知のエラーや大規模なマルウェア被害に遭ったときこそ、クリーンな別環境での検証と、AIを活用したピンポイントな技術支援の組み合わせが最大の武器になります。同様のトラブルに悩むWebマスターの方の参考になれば幸いです。

 

 

【WordPressマルウェア復旧とDB再構築】のよくある質問(FAQ)

お名前.comサーバーで新規WordPressすらリダイレクトされる場合、WAFやキャッシュの解除で治りますか?

🛠️いいえ、コントロールパネル上のWAF設定解除やサーバーキャッシュの削除を行っても、リダイレクト障害が解消しないケースがあります。

管理画面にすらアクセスできない現象が発生した際、WAFの無効化やキャッシュクリアを試行しても事象が改善しない場合、Webサーバーの上位階層にある設定競合や、テーマ・プラグインに必要な依存ファイル群の欠損が引き金となっている可能性が考えられます。

サーバーの管理パネル側の設定変更だけに固執して時間を浪費するよりも、手持ちの別サーバー(バリューサーバーなど)へ検証環境を移し、環境要因とファイル・データ要因を早急に切り分ける作業を優先してください。

 

マルウェア復旧において、Geminiには具体的にどのような質問を行うと有効ですか?

🤖はい、「ログイン情報を変更するための具体的なテーブル名・ファイル名」や「修正箇所の特定」など、ピンポイントな指定を求めるプロンプトを投げると極めて正確な回答が得られます。

一般的な「WordPressを直して」という曖昧な相談ではなく、「管理画面に入れないため、phpMyAdminから直接管理者IDとパスワードを変更したい。対象のテーブル名とパスワードカラムの暗号化方式(MD5など)の指定手順を教えてほしい」と状況を限定して質問することで、Geminiから正確無比な操作手順を即座に引き出すことが可能です。

データベースの直接操作に不安がある場合は、実行予定のSQL文や設定ファイルの記述内容を事前にGeminiへ提示し、構文チェックとリスク確認を仰ぎながら進めてください。

 

WordPress管理画面に入れない時、データベース(phpMyAdmin)からパスワードを変更する手順は?

🔑はい、phpMyAdminから該当データベースの「wp_users」テーブルを直接編集することで、管理者のログインIDとパスワードを安全に再発行できます。

テーブル一覧から「wp_users」を選択し、復旧対象となる管理者レコードの「編集」をクリックして、パスワードが格納されている「user_pass」カラムの関数(Function)プルダウンに「MD5」を指定した上で、新しいパスワード平文を入力して保存します。

WordPress公式ドキュメント(サポートガイド:パスワードのリセット方法)にも、phpMyAdminを介したMD5ハッシュ化による強制復元が公式な緊急リカバリー手段として提示されています。

パスワード変更完了後は、即座にクリーンなブラウザ環境またはシークレットウィンドウから正規のログイン画面(/wp-admin)へアクセスし、ログインの成否を確認してください。

 

サーバーが10万件のスパムファイルで汚染されている時、画像(uploads)フォルダはどう移行すべきですか?

📁はい、画像フォルダ内に不正な実行ファイルが量産されていないかを検証した上で、通常のファイル転送ツールを用いて安全に移行できます。

悪質なマルウェアの場合でも、画像が格納される「wp-content/uploads/」ディレクトリ内に不審なPHPスクリプトが混入していなければ、画像ファイル(jpg, png, webpなど)そのものは汚染を免れている事例が存在します。

念のためFTPソフト等で一括ダウンロードを行う前に、拡張子が「.php」「.ico」「.suspected」などの実行可能ファイルが混ざっていないかフィルタリング検索を実施してください。

安全が確認できたメディアファイルのみを新規環境の同一ディレクトリ構造へアップロード配置することで、記事内の画像リンク切れを最小限に防ぎながら安全な復元が完了します。

 

復旧作業中にInstagramの埋め込みエラーが発生した場合、どのように対処すべきですか?

📸はい、ランディングページ(LP)や単一訴求ページであれば、APIの再連携に時間を割くのではなく、埋め込みコード自体の削除または静的画像への差し替えが最も合理的です。

過去の制作会社による不要な外部連携や脆弱なスクリプトの埋め込みは、APIトークンの有効期限切れによる表示崩れを招くだけでなく、外部サイトへの意図しないリンク露出などセキュリティ上の盲点になり得ます。

クライアントや関係者と「コンバージョン導線において本当に必須のパーツであるか」をすり合わせ、不要と判断できた場合は該当ブロックを完全に削除してください。

外部スクリプトへの依存を減らすことは、ページの表示速度改善(Core Web Vitals向上)や将来的なセキュリティリスクの低減にも直結します。

 

Wordfence Securityでマルウェアを削除した後も数日間の経過観察が必要な理由は何ですか?

🛡️はい、サーバー内部に検知をすり抜けたバックドア(裏口)が残存し、時間差で悪意あるスクリプトが再稼働する危険性があるためです。

マルウェアの中には、WordPress本体のデータベースやプラグイン領域ではなく、cron(定期自動実行)やサーバーの別領域にトリガーを仕込み、数日後に再び10万件の不正ファイルを自動生成するタイプが確認されています。

JPCERTコーディネーションセンター(JPCERT/CC)の注意喚起でも、改ざん被害に遭ったCMSにおけるバックドアの潜伏と再発防止のモニタリングが強く推奨されています。

スキャンによる削除完了後も安心せず、最低3日から1週間程度はサーバー内のファイル生成ログやGoogle Search Consoleのセキュリティステータスを継続監視してください。