WordPressマルウェアスキャン・
駆除完全ガイド
「サイトが別のページにリダイレクトされる」「Googleに警告が表示される」「スパムメールを送信していると言われた」——これらはマルウェア感染の典型的な兆候です。このページでは感染の確認方法から完全駆除、バックドア除去、Googleへの再審査申請、再発防止策まで体系的に解説します。
📋 目次
このページで解説する内容
⚠️ 1. マルウェア感染の主な症状・兆候
🔀 不審なリダイレクト
自分のサイトにアクセスすると、スパムサイト・フィッシングサイトなどに転送される。モバイルや特定のブラウザのみでリダイレクトが発生するケースもある。
🔴 Googleの警告表示
検索結果にサイト名の下に「このサイトはハッキングされた可能性があります」と表示される、またはブラウザで「危険なサイト」の警告画面が表示される。
📧 スパムメールの送信
自サーバーから大量のスパムメールが送信されているとホスティング会社から通知が届く。クリプトジャッキング(マイニング)の被害も増加している。
💻 見知らぬコードの挿入
ページのHTMLソースに見覚えのないJavaScriptやiframeタグが挿入されている。特にページの最初・最後・サイドバーを確認。
👤 不審な管理者アカウント
ユーザー管理画面に見覚えのない管理者アカウントが追加されている。これはバックドアの典型的な手口。
🔍 SEOスパムの挿入
サイト内ページに薬品・カジノ等のキーワードが大量に挿入される「キーワードハッキング」が発生している。検索結果の自サイトのスニペットで確認できる。
🔍 2. 感染確認:スキャンツールの使い方
| ツール | 使い方 | 何を検出するか | 費用 |
|---|---|---|---|
| Sucuri SiteCheck | sitecheck.sucuri.netにURLを入力 | マルウェア・ブラックリスト登録・改ざんHTMLコンテンツ | 無料 |
| Wordfenceスキャン | プラグインインストール後、Wordfence→スキャン開始 | 改ざんされたコアファイル・プラグイン・マルウェアコード | 無料(一部有料) |
| MalCare Scanner | プラグインインストール後に自動スキャン | 高度なマルウェア・バックドア・難読化コード | スキャン無料・駆除有料 |
| Google Safe Browsing | transparencyreport.google.comにURLを入力 | Googleブラックリスト登録状況 | 無料 |
Sucuri SiteCheckは「ブラウザに表示されるHTMLコンテンツ」を分析するため、サーバーファイルに隠れたマルウェアは検出できません。Wordfenceはサーバー内のファイルを直接スキャンするため深い検出ができます。両方を組み合わせて使うことで検出精度が大幅に向上します。また、SEOスパムは外部スキャンでの発見が難しいため、サーチコンソールの「インデックスカバレッジ」で不審なURLが大量生成されていないか確認してください。
🛠️ 3. マルウェア駆除の手順
プラグインで駆除する(推奨・初心者向け)
バックアップを作成する
感染状態でもバックアップを作成します。駆除後に問題が発生した場合の証拠・参照資料になります。→ バックアップ完全ガイド
Wordfenceでスキャン→修復
Wordfence →「スキャン」→「新規スキャンを開始」→ 問題が検出されたら「Repair」ボタンでWordPressコアファイルを公式バージョンに自動修復します。
不審な管理者アカウントを削除
ユーザー管理で見覚えのないアカウントを削除。その後、全管理者のパスワードを変更します。
再スキャンで確認
駆除後に再度スキャンを実施して、問題がゼロになったことを確認します。
手動での駆除手順(上級者向け)
WordPressコアファイルを公式版で上書き
WordPress.orgから同じバージョンをダウンロードし、wp-admin/とwp-includes/フォルダをFTPで上書きします(wp-content/とwp-config.phpは上書きしない)。
全プラグイン・テーマを削除して再インストール
wp-content/plugins/とwp-content/themes/を削除し、公式から再ダウンロード・再インストールします。カスタムテーマはバックドアがないか確認が必要です。
データベースのマルウェアコードを確認・除去
phpMyAdminでwp_optionsのsiteurl・homeを確認し、wp_posts・wp_usermetaに不審なJavaScriptが挿入されていないかSQLでチェックします。
-- データベース内のマルウェアコード検索例(phpMyAdminで実行)
SELECT ID, post_title FROM wp_posts
WHERE post_content LIKE '%eval(%' AND post_content LIKE '%base64%'
LIMIT 50;
-- wp_optionsの不審なエントリを確認
SELECT option_name, option_value FROM wp_options
WHERE option_value LIKE '%eval(%'
OR option_value LIKE '%base64_decode%'
OR option_value LIKE '%gzinflate%';
🚪 4. バックドアの検出と除去
バックドアはマルウェア駆除後も攻撃者がサーバーに侵入し続けるために仕掛けるコードです。バックドアを除去しないと、駆除しても再感染します。
# バックドアを探すLinuxコマンド(SSH使用)
grep -r "eval(base64" /path/to/wordpress --include="*.php" -l
grep -r "system(\$_" /path/to/wordpress --include="*.php" -l
grep -r "exec(\$_" /path/to/wordpress --include="*.php" -l
# 最近変更されたファイルを確認(過去7日間)
find /path/to/wordpress -name "*.php" -mtime -7 -type f
# wp-content/uploadsにPHPファイルがないか確認(通常は存在しない)
find /path/to/wordpress/wp-content/uploads -name "*.php"
①
wp-content/uploads/内(画像フォルダにPHPファイルを隠す)、②廃止されたプラグインやテーマの残骸ファイル、③.htaccess(悪意のあるRewriteルール)、④wp-config.phpの末尾、⑤データベースのwp_optionsテーブル(シリアライズされたコードとして保存)。これらを重点的にチェックしてください。
🔴 5. Googleの警告・ブラックリスト対応
Googleサーチコンソールでセキュリティ問題を確認
サーチコンソール→「セキュリティの問題」を開く。どのような問題が検出されているか詳細を把握します。
マルウェアを完全に駆除する
このページの手順に従ってマルウェアを完全除去します。審査申請前に必ず完全駆除を確認してください。不完全な状態で申請を繰り返すと審査が拒否されやすくなります。
「審査をリクエスト」から再審査申請
サーチコンソール→「セキュリティの問題」→「審査をリクエスト」→ 実施した対策を詳細に記入して申請。審査完了まで通常数日〜2週間かかります。
🔑 6. 感染後の必須作業:全パスワード変更
- ✅ WordPressの全ユーザーのパスワード(特に管理者・編集者権限)
- ✅ WordPress秘密鍵(Security Keys)の再生成(wp-config.phpのSECRET_KEY等)
- ✅ FTP/SFTPアカウントのパスワード
- ✅ データベース(MySQL)のパスワード(wp-config.phpのDB_PASSWORDも更新)
- ✅ サーバーのコントロールパネルのパスワード
- ✅ メールアカウントのパスワード(WordPressの通知メールアドレスを含む)
🛡️ 7. 再発防止策の徹底
感染の原因を特定・解消しない限り再感染します。以下を必ず実施してください。
- 🔒 感染の原因となったプラグインを特定・更新または削除 →脆弱性対策
- 🔒 WAF(Cloudflare等)を導入して攻撃をサーバー到達前にブロック
- 🔒 ログインセキュリティを強化(ログインURL変更・2FA導入)
- 🔒 自動バックアップを設定して感染前の状態を維持
- 🔒 ファイル変更監視を設定してマルウェア再設置を早期検出
- 🔒 PHPのバージョンをサーバーで最新の安定版に更新
- 🔒 wp-content/uploadsへのPHPファイル実行を.htaccessでブロック
# wp-content/uploads内でのPHP実行をブロック(uploadsフォルダの.htaccessに追加)
<Files *.php>
deny from all
</Files>