サイト管理者なら誰もが恐れる「WordPressサイトへのマルウェア感染」。突然の真っ白画面や検索エンジンからの警告に遭遇すると、原因特定から復旧までの流れが分からず途方に暮れることが多いです。
本記事では、無料ツール・プラグインによるスキャンから、SFTP/CLIを用いた手動駆除、データベース修復、さらには再発防止策までを一貫解説します。この記事を最後まで読めば、「どこに」「何を」「どうやって」対応すればよいかが明確になり、自力で安全にサイトを復旧・強化できるようになるでしょう。
マルウェア感染確認と初期検査ポイント
結論:早期発見のためには、表示異常や検索エンジン警告の確認、不審ファイルの一覧化を最初に行うことが重要です。
理由:感染を放置すると、被害が拡大し、ファイル改ざんだけでなくSEO評価の急落や顧客情報漏洩リスクにつながるためです。
サイト表示・検索エンジン警告の確認
結論:まずはWordPressサイトの見た目や検索エンジンからの警告を確認し、マルウェア感染の「火種」を早期に発見しましょう。
理由:マルウェアに感染すると、ウェブサイトの表示崩れやリダイレクト、Google Search Console上の「不正な動作が検出されました」といった警告が最初のサインとなるためです。
- フロントエンドの異常:サイトページが真っ白になる/特定ページで「This page has been hacked」などの表記。
- 強制リダイレクト:意図しない広告サイトやフィッシングサイトへのリダイレクト。
- Search Console警告:「不正な動作が検出されました」「マルウェアが検出されました」など。
- ブラウザのセキュリティアラート:「安全でないサイト」と表示される場合。
対処手順:
- Google Search Consoleの「セキュリティと手動による対策」セクションを開き、警告の有無を確認。
- ブラウザのプライベートモードや別端末で表示の異常・リダイレクトをチェック。
- Sucuri SiteCheckなどのオンラインスキャナでURLを入力し、第三者視点でも問題を確認。
不審ファイル・コード一覧の把握
結論:テーマやプラグインフォルダ内の“未知のファイル”や、eval()
関数を多用した不審なPHPコードをリストアップしましょう。
理由:マルウェアは既存ファイルを改変せず、調査しづらい独自ファイルを追加したり、難読化コードを埋め込むことで感染を持続させるためです。
- 覚えのないPHPファイル:
alf.php
、moon.php
など。 - 難読化されたコード:
eval(base64_decode('…'))
のような記述。 - .htaccessの改ざん:リダイレクトやディレクトリリスティング禁止設定の裏に不正命令。
- wp-config.php改変:外部スクリプト読込命令の追記。
対処手順:
- SFTPで
/wp-content/themes/
と/wp-content/plugins/
フォルダをローカルにダウンロード。 ls -la
でファイル一覧を取得し、見慣れないものを洗い出す。- 公式リリースとの
diff
比較で公式に含まれないファイルを特定。 - テキストエディタで
eval(
やbase64_decode
を検索し、不審コードを抽出。
無料スキャンツール&プラグインによる感染チェック
結論:まずは手軽に導入できるオンラインスキャナおよびWordPressプラグインを併用し、マルウェアの有無を自動で検出ましょう。
理由:初期段階では手動調査だけでは見落としが発生しやすく、複数のツールで網羅的にチェックすることで早期発見が可能になるためです。
オンラインスキャナ(VirusTotal, Sucuri SiteCheck)
- VirusTotal:60以上のアンチウイルスエンジンでファイル単位スキャン。
- Sucuri SiteCheck:URLベースでマルウェア、ブラックリスト登録、不正リダイレクトを検出。
理由詳細:
- 多重検査による誤検知の軽減。
- 公開サーバーからの視点取得でホワイトリスト・ブラックリスト状況を把握。
具体手順:
- VirusTotalにファイルをアップロードし、CSVで結果を保存。
- Sucuri SiteCheckでサイトURLをスキャンし、レポートの「Malicious Code」を確認。
推奨プラグイン(Wordfence, TAC, Anti-Malware Security)
- Wordfence Security:リアルタイムスキャン&ファイアウォール。
- Theme Authenticity Checker (TAC):テーマの改ざん検知。
- Anti-Malware Security and Brute-Force Firewall:難読化コード対応スキャン。
理由詳細:
- サーバー権限なしで検査・初期除去が可能。
- 定期スケジュールスキャンで再感染を早期キャッチ。
具体手順:
- 管理画面で各プラグインをインストール。
- Wordfenceで「Start a Wordfence Scan」を実行し、Critical Issuesを即対応。
- TACで「Scan Theme Files」を実行。
- Anti-Malwareで「Start Scan」を実行し、検出ファイルをリストアップ。
マルウェア駆除のための準備と安全対策
結論:駆除作業前にバックアップ取得とステージング構築を行い、誤作業リスクを回避しましょう。
理由:作業中の誤削除やデータ破損を防ぎ、唯一の復旧手段となるバックアップを確保するためです。
バックアップ取得と検証方法
- ファイル:SFTP/SSHで全ファイルをアーカイブ(
tar czf
)。 - DB:
mysqldump
や phpMyAdminのエクスポート。
対処手順:
- ファイルは別フォルダに保存(例:
/backups/20250729/
)。 - DBダンプに日付を付与(例:
site1_20250729.sql
)。 - ローカル環境で解凍・インポートし、動作確認。
テスト環境の構築(ステージング)
- ホスティングのステージング機能や Local by Flywheel、Dockerなどを利用。
- サブドメインや
/etc/hosts
でステージングURLを設定。
対処手順:
- 本番と同一構成を複製し、ドメイン置換を実施。
- ステージング専用の管理ユーザーとパスワードを設定。
手動でのファイル差分確認と不要スクリプト削除手順
結論:SFTP/CLIを用いて公式配布ファイルとの差分確認を行い、不審ファイルを安全に削除しましょう。
理由:自動ツールだけでは検出漏れがあるため、目視とdiffで確実に駆除する必要があるためです。
SFTP/CLIでのファイル取得と正規ファイル差分確認
- SFTPで
/wp-content/themes/your-theme/
と/wp-content/plugins/your-plugin/
をダウンロード。 - WordPress公式サイトから最新版ZIPを入手し解凍。
- ターミナルで
diff -ru official/ your-theme/ > theme-diff.txt
を実行。 - 差分ファイルを開き、
eval(
やbase64_decode
を検索して改ざん箇所を特定。 - 不審箇所をバックアップ後、元コードに置換または削除。
不要スクリプト・成果物の安全な削除
- 隔離用フォルダ
/quarantine/
を作成。 - 不審ファイルを移動し、パーミッションを
600
に設定。 - ステージング環境で動作確認し、問題なければ本番でも隔離後48時間後に削除。
- キャッシュプラグインやCDNのキャッシュを完全にクリア。
データベース内のマルウェア検出とクリーンアップ方法
結論:WP-CLIやphpMyAdminでテーブルスキャンを行い、シリアライズデータ内の不正コードを除去しましょう。
理由:データベースに隠されたスクリプトを放置すると、ファイル駆除後も再感染の温床となるためです。
テーブルスキャンの実行方法(WP-CLI, phpMyAdmin)
wp db query "SELECT option_name, option_value FROM wp_options WHERE option_value LIKE '%base64_decode%';"
wp db query "SELECT meta_key, meta_value FROM wp_postmeta WHERE meta_value LIKE '%eval(%';"
phpMyAdminの検索タブで同様のキーワードを使用し、該当レコードを特定。
シリアライズデータ中の不正コード除去
- Search Replace DBスクリプトをステージングに配置し、Dry Run後にeval()を空文字置換。
- WP-CLIで
wp search-replace 'eval(base64_decode' '' --skip-columns=guid --precise
を実行。 - 変更後、再度SELECTで確認し、フロント・管理画面をテスト。
再発防止のためのセキュリティ強化策と未来予測
結論:定期スキャン、自動バックアップ、AIモニタリング、脆弱性情報のキャッチアップを行い、万全の防御を構築しましょう。
理由:マルウェアや攻撃手法は絶えず進化しており、最新対策がなければ再感染リスクが高まるためです。
定期スキャンと自動バックアップ
- Wordfenceで週1回スキャン、完了レポートをメール受信。
- Cronジョブで毎日バックアップを生成し、Amazon S3等に同期。
- バックアップ3世代保管と週1回の復元テスト。
AIモニタリングや脆弱性情報のキャッチアップ
緊急時の専門家相談と事例紹介
結論:自力復旧が困難な場合は専門代行サービスを検討し、事例を参考に適切な判断基準を持ちましょう。
理由:再感染やデータ破損リスクを抑え、迅速・安全な復旧を図るためです。
代行サービス利用の判断基準
- ファイル・DB両方対応、再発保証の有無。
- 定額プラン vs 成功報酬型のコスト比較。
- 24時間サポート、作業報告頻度、復旧後フォロー。
再感染事例から学ぶ注意点
- ファイル削除後にDBに残ったバックドアで再感染(DBスキャン徹底)。
- ステージング未整備による本番停止(隔離環境必須)。
- プラグイン未更新が原因の脆弱性攻撃(自動更新とパッチ管理)。
まとめと
本記事では、感染確認から自動スキャン、バックアップ・ステージング準備、手動駆除、DBクリーンアップ、再発防止策、専門家相談まで、WordPressマルウェア対策の全フェーズを解説しました。
マルウェア感染はSEO評価低下や顧客信頼喪失、法的リスクをもたらすため、今すぐバックアップ取得とオンラインスキャンを開始しましょう。