Skip to content

消しても戻るWordPressの裏口は片付ける順番が肝心

改ざんされたWordPressサイトで、怪しいファイルを消したのに数秒後には元どおり、という経験がある制作者は少なくないと思います。セキュリティ企業のSucuriが、まさにその状態を作り出すマルウェアの分析結果をブログで公開しました。注入されたコードに残っていた目印から「SC」と呼ばれています。

Sucuriによると、SCは同じ裏口を少なくとも8か所に分けて置いています。.user.ini の auto_prepend_file で毎リクエストの前に読み込まれるローダー、wp-content 直下の db.php と advanced-cache.php というドロップイン、有効なテーマの functions.php の末尾に足されたブロック、そしてキャッシュ系に見せかけた偽プラグインが mu-plugins と通常の plugins の両方に置かれていたそうです。どれか一つでも残っていれば、ほかの全部を書き戻す作りになっています。

やっかいなのはファイル以外の置き場所です。本体はオプションテーブルの行にも圧縮して保存され、サーバーの共有メモリにも書き込まれていたとされています。さらにWordPressのcronに再配置用のフックが登録され、関連する亜種ではデータベースのトリガーで管理者アカウントを作り直す例もあったとのことです。ファイルを完璧に掃除しても、次のアクセスでデータベースや共有メモリから全部よみがえるわけです。

削除より先に止める

裏口としての働きも一通りそろっています。プラグイン一覧や更新チェックから自分を隠し、ユーザー一覧に出ない管理者を作り、セキュリティ系プラグインを無効化して削除する指示も受け取れます。指示はブロックチェーンの公開ゲートウェイ約20か所を経由して読み取る方式で、一つを遮断しても残りが使われます。ネットショップでは決済画面に不正なスクリプトを差し込まれるおそれもあるとされています。

Sucuriが示す片付け方の要点は「順番」です。まず auto_prepend_file の読み込み先を無害な中身に置き換えてから設定を外します。PHPがこの値を最大300秒キャッシュするため、先に読み込み先を消すとアカウント内のPHPがすべてエラーになるからです。次にデータベースの行、共有メモリ、cron、トリガー、隠れた管理者といったファイル以外の複製を消し、最後にファイルを一度に片付けます。テーマの functions.php は、目印で囲まれた部分だけを削ってテーマ本来のコードは残します。

中小企業のサイトを預かる立場で覚えておきたいのは、消したファイルが戻ってきたら「掃除が終わっていない合図」と受け取ることです。同じファイルを何度も消すより、データベースやcron、ユーザーテーブルに目を向けるほうが近道になります。共有サーバーでは共有メモリをホスティング会社にしか消せない場合もあるので、早めに相談できる窓口を確かめておくと安心です。侵入のきっかけは既知の脆弱性が多いとされているので、更新を止めないことと、復旧後に関係するパスワードをすべて変えることもあわせて進めたいところです。

[1994-2002]
ITベンチャーの幹部として、8年間で数名の企業を500名以上の企業に成長させることに貢献。95年より独学でwebデザインを学ぶ。

[2002-2023]
米国法人のwebデザイン会社のCEOを務め数々の賞を受賞。

[2023〜]
AI事業開始に伴い、つくば市を拠点として株式会社RESONIXを起業。