巧妙なインジェクションをどのように追跡し、環境を要塞化したか

マルウェアスキャンを実行する。コアファイルを置き換える。プラグインを更新し、パスワードを変更する。サイトはクリーンに見える。

2日後、クライアントから電話が入る。新しい管理者アカウントが復活している。訪問者が悪意のあるサイトにリダイレクトされている。

これこそが「永続性(persistence)」という悪夢だ。

標準的なセキュリティプラグインは、しばしば役に立たない。巧妙な攻撃者は、単一のペイロードを落とすだけではない。彼らは正当なファイルの中に隠れる、入れ子構造のバックドアを構築するのだ。

最近、3度のクリーンアップ試行が失敗したケースを担当した。症状は具体的だった:

• ゴースト管理者:ランダムな名前の新しいアカウントが48時間ごとに現れる。 • 条件付きリダイレクト:検索エンジンからの新規訪問者のみが悪意のあるサイトを目にする。開発者には何も見えない。

チームはすでにWordPressのコアを上書きし、プラグインを更新していた。スキャナーには何も表示されなかった。マルウェアはヒドラのように再生し続けた。

攻撃者はデータベースまたはcronジョブに永続化のメカニズムを仕込んでいた。コードがカスタムであったため、自動スキャナーは見逃してしまった。

私はコマンドラインを使用して真実を突き止めた。

まず、チェックサムを使用してコアファイルを検証した: wp core verify-checksums

コアはクリーンだった。バックドアはwp-contentまたはデータベース内に存在していた。

次に、過去7日間に変更されたファイルを検索した: find . -type f -mtime -7 -name "*.php"

そして、eval() や base64_decode() のような疑わしい関数を検索した: grep -rnw './wp-content/' -e 'eval(' -e 'base64_decode('

古いプレミアムプラグインの中に、隠されたファイルを見つけた。しかし、プラグインを削除しても感染は止まらなかった。

攻撃者はwp_optionsテーブルのcronオプションの下にトリガーを残していた。WordPressのcronが実行されるたびに、新しいペイロードを取得していたのだ。コアファイルがクリーンアップされてから数分後には、再び感染していた。

これを解決するには、厳格な手順に従う必要がある:

  1. データベースの洗浄 (Database Scrubbing)
  1. ファイルシステムのパージ (File System Purge)
  1. クレデンシャルのローテーション (Credential Rotation)

また、再発を防ぐために3つのガードレールを実装した:

• エッジ保護: Cloudflare WAFを使用して、機密ディレクトリへの不審なPOSTリクエストをブロックしました。 • ファイル権限: ディレクトリ構造をロックしました。ディレクトリを755、ファイルを644に設定し、wp-config.phpを読み取り専用にしました。 • 編集の無効化: wp-config.phpに DISALLOW_FILE_EDIT と DISALLOW_FILE_MODS を追加しました。これにより、ダッシュボード経由でコードが変更されるのを防ぐことができます。

プラグインが表示する緑色のチェックマークを鵜呑みにしないでください。すでに侵害が発生していると想定しましょう。サイトを内側から徹底的に保護してください。

出典: https://dev.to/jahidshah/how-i-tracked-a-stealthy-injection-and-hardened-the-environment-4clm