WordPressで作ったサイトから怪しいファイルを消しても、数秒でまた戻ってくる。セキュリティ会社のSucuriが、そんなマルウェアの調べた結果を公表しました。同じバックドアを、ファイル・データベース・サーバーの共有メモリーなど少なくとも8か所に置き、どれか1つが残れば全部を作り直す作りです。見えるファイルを消すだけでは直らないため、潜む場所と消す順番を知っておく必要があります。Sucuriの報告をもとに整理します。
何が報告されたか
Sucuriは2026年9月30日、サイトの掃除の仕事の中で、消しても数秒で同じバックドアが戻ってくるWordPressの感染を調べた結果を公表しました。中に書かれた目印「SC_」から、このマルウェアを「SC」と呼んでいます。
SCの特徴は、生き残り方です。報告によると、本体は少なくとも8か所に同時に置かれ、どの場所からでもほかのすべてを作り直せます。プラグインを消せば別のファイルが書き戻し、そのファイルを消せばテーマが書き戻し、ディスクのファイルを全部消しても、次のページの表示でデータベースや共有メモリーから全部が戻ります。Sucuriは「止めるために消せる1点が無い、輪のような仕組み」と説明しています。
報告は、最初にどこから入られたかや、攻撃者、被害の地域には触れていません。
8か所の潜み場所
Sucuriが見つけた部品は、次のとおりです。ファイル名はサイトごとに変わるものがあります。
Sucuriがまとめた、SCの8つの部品と、それぞれが読み込まれるきっかけ出典: Sucuri「SC WordPress Malware: A Self-Healing Mesh of Loaders, Drop-Ins, and a Blockchain-Controlled Backdoor」(引用)
| 場所 |
役目 |
| .user.ini(設定ファイル) |
auto_prepend_fileで、すべてのPHPの処理の前に次の読み込み役を動かす。PHPがこの値を覚えておく |
| wp-content直下の目立たない名前のPHP |
隣に隠しファイル(名前が点で始まる)があれば読み込むだけの中継役 |
| wp-content直下の隠しファイル |
偽のプラグインをmu-pluginsに作り直す読み込み役 |
| wp-content/db.php |
WordPressが早い段階で読むファイル。本体を丸ごと抱え、プラグインが無いと書き戻す |
| wp-content/advanced-cache.php |
キャッシュを使う設定のとき、さらに早く読まれるファイル。5つの写し(データベースや共有メモリーなど)から本体を作り直す |
| 使っているテーマのfunctions.php |
末尾に印で囲んだ塊を足し、db.phpと同じく本体を書き戻す |
| mu-plugins(必ず読み込まれるプラグイン)の偽のプラグイン |
バックドアの本体。管理画面に出ない |
| plugins(通常のプラグイン)の同じ偽のプラグイン |
本体の写し。それらしい設定画面まで用意している |
ファイルの外にも写しがあります。Sucuriは、ファイル以外の3か所で生きた写しを見つけました。
- データベース: 設定の表(options)の、名前がでたらめな行に本体を丸ごと保存。advanced-cache.phpが、サイト自身のデータベースのパスワードで直接読み出します。ファイルを完全に掃除しても、次の表示でここから全部が戻ります。
- 共有メモリー: 対応するサーバーでは、本体をメモリー上の決まった番号の区画に書き込みます。メモリー上にあるため、ファイルとデータベースを掃除しても残ります。
- 定期実行(cron): でたらめな名前の定期実行を登録し、サーバーの定期実行に合わせて書き戻します。
関連する種類では、データベースのトリガー(行が足されたときに動く仕掛け)で管理者を作り直す例も見つかっています。データベースの中で動くため、ファイルを丸ごと戻しても、アカウントを消しても、トリガーが残る限り管理者がまた現れます。
バックドアがすること
Sucuriによると、本体は次のことをします。
- 自分を隠す: プラグインの一覧や更新の確認から自分の行を消し、管理画面に出ないようにします。
- イーサリアムの公開の中継から指示を受ける: 決まったサーバーではなく、暗号資産イーサリアムの公開の中継(約20か所)を通じて、スマートコントラクト(ブロックチェーン上のプログラム)から指示を読みます。正規の中継を使うため、通信で見えた1か所だけを止めても、ほかが使われます。
- サイトの情報を送り、追加の指示を受ける: サイトのURL、WordPressとプラグインの版、テーマ、管理者のログインの情報などを暗号化して送ります。返事には、表のページに差し込むJavaScript(通販サイトならカード情報を盗む仕掛けにもなる)、新しいPHP、止めて消すセキュリティのプラグインの一覧が含まれることがあります。
- 見えない管理者を作る: 管理者のアカウントを作り、一覧や人数の表示から隠します。パスワード無しでログインできる認証のクッキーも作ります。
- 全部を作り直す: 多くの処理に仕掛けを付け、ほかのすべての部品を書き戻します。
同じように「管理画面から見えない管理者」を作る攻撃は、WordPressに「見えない管理者」を作る攻撃 Ninja FormsとWPC Product Bundlesの悪用と確認手順でも取り上げました。
消す順番
Sucuriは、1つずつ消すより順番が大事だとしています。間違った順番でファイルから消すと、書き戻しが起きるだけだからです。実行を止め、ファイルの外の写しをファイルより先に消し、最後にファイルを一度にまとめて消します。
Sucuriが示した消す順番。ファイルの外の写しを、ファイルより先に消す出典: Sucuri「SC WordPress Malware: A Self-Healing Mesh of Loaders, Drop-Ins, and a Blockchain-Controlled Backdoor」(引用)
- 読み込みの指定を先に無害にする: PHPはauto_prepend_fileの値を最大300秒覚えています。指定先のファイルを先に中身の無いものにしてから、.user.ini・php.ini・.htaccessの指定を外します。覚えている間に指定先を消すと、そのアカウントのPHPがすべて動かなくなります。
- ファイルの外の写しを消す: 設定の表の本体の行、共有メモリーの区画、制御用の設定を消します。残っていると、次の表示で全部が書き戻されます。
- 定期実行とデータベースのトリガーを消す: 不正な定期実行を外し、管理者を作り直すトリガーが無いかを確かめます。
- 隠れた管理者を消す: 隠された管理者のアカウントと、そのIDを指す残りの設定を消します。
- ファイルを一度にまとめて消す: 中継役と読み込み役、2か所の偽のプラグイン、復元用のZIP、db.phpとadvanced-cache.phpを消します。テーマのfunctions.phpは、印で囲まれた塊だけを削り、正規のコードは残します。
- もう一度調べて、戻ってこないか見張る: 何かが戻ってきたら、どこかに写しが残っているか、最初の入り口がまだ開いています。
Sucuriは、掃除のあとに、入り口をふさぎ、攻撃者が触れた可能性のあるパスワードや鍵をすべて替えるよう求めています。
影響する会社・しない会社
- 影響する: WordPressで自社のサイトや通販サイトを運営している会社です。とくに、古いプラグインやテーマを更新せずに残しているサイトは、入り口になりやすい状態です。
- 影響する: 怪しいファイルを消しても、しばらくすると戻ってくる、という経験があるサイトです。ファイルの外に写しが残っている可能性があります。
- 影響する: 共用のレンタルサーバーで運営している会社です。共有メモリーの写しを自社では消せない場合があり、サーバー会社の手を借ります。
- 影響しない(現時点): WordPressを使っていないサイトです。ただし、「ファイル以外に写しを残して作り直す」という考え方は、ほかの仕組みのサイトでも起こりえます。
情シスが今日やること
- 潜み場所を点検する。wp-contentのdb.phpとadvanced-cache.php、テーマのfunctions.phpの末尾、.user.ini・php.ini・.htaccessのauto_prepend_file、mu-pluginsとpluginsに同じ中身のプラグインが無いかを見ます。db.phpやadvanced-cache.phpは、正規のキャッシュのプラグインなどが置くこともあるため、置いた覚えがあるかで判断します。
- 管理者をデータベース側でも数える。管理画面の一覧と、データベースのユーザーの表で、管理者の数が合うかを確かめます。合わなければ、隠れた管理者を疑います。
- 外への通信を見る。Webサーバーから、イーサリアムの公開の中継への通信が無いかを確かめます。サイトの仕組み上、そうした通信が要らないなら、まとめて止めることも検討します。
- 掃除は順番どおりに。感染が見つかったら、ファイルから消し始めず、上の順番で進めます。自社で難しいなら、掃除の専門の会社やサーバー会社に頼みます。終わったら、データベースのパスワード、WordPressの鍵(ソルト)、管理者のパスワードを替えます。
- 制作会社に確かめる。サイトの運用を任せている場合は、プラグインとテーマを最新にしているか、上の場所を点検したかを聞きます。入り口になりやすい古いプラグインの例は、WordPressのBricksforgeに認証なしでPHPを動かされる脆弱性、悪用を観測にもまとめています。