PHP2Shellで侵害された疑いがあるPHPサイトのインシデント対応 ― 最初の数時間と数日でやること
PHP2Shellで侵害された疑いがあるPHPサイトの初動対応。電源を切らずに隔離し、証拠保全、Webシェル調査、シークレット失効、再構築、PDPAの72時間通知まで解説。
PHP2Shellで侵害された疑いがあるPHPサイトのインシデント対応 ― 最初の数時間と数日でやること
PHPの更新は終わりました。残る問いは、更新前に誰かが入り込んでいないか、です。
答えが出ないうちは、通信を制限しても電源は切らず、破壊的な作業の前に証拠を保全し、検証済みの基準と比較し、シークレットを失効させ、修正済みPHPで再構築する、という順序で対応し、被害の拡大と証拠の損失を抑えます。タイのPDPAの72時間は、個人データ侵害を認識した時点(信じる合理的な理由を得た時点を含む)からで、脆弱なPHPを見つけた時点や侵入を疑った時点ではありません。
なぜ侵害済みを前提にするのか。Amazonは2026年10月17日、パッチ公開の4日前に最初の悪用の試みを観測し、成功例は不明としています。成功すればPHPワーカーの権限でコードが実行され、ログインは不要です。脆弱性と修正版の詳細は本シリーズのメイン記事をご覧ください。
サイトを止めるか、隔離するか
CISAのプレイブックはサービス・人員と時間・証拠への影響を比べるよう求め、公開システムの一時的なインターネット切断も選択肢に挙げています。英NCSCも、更新も緩和策も間に合わないならオフライン化の検討を勧めています。
ただし隔離は電源断ではありません。CISAのAA20-245Aは、早すぎる対処でメモリが失われると警告しています。ロードバランサーから外してもアプリの通信が止まるだけで、ホストは封じ込められません。受信・送信・横方向の通信を制限して効いていることを確認し、証拠取得用の管理された経路だけを残します。AWSではセキュリティグループを変えても追跡中の接続はすぐ切れず、即時遮断はネットワークACLで行います。侵入経路が不明なままのIPブロックではアクセスは残り、Amazonも公開IPは共有の匿名化基盤で、遮断より調査に使うよう述べています。
破壊的な作業の前に証拠を残す
影響を受けたホストに上書き復元すると、そのホスト上の証拠を上書きするおそれがあります。CISAは複数層のログ、必要ならメモリとディスクイメージを取得し、取得記録を残すよう求めています。当社はWebサーバー・PHP-FPM・アプリのログ、スナップショット、Webルートのハッシュ、プロセスと通信の保全も勧めます。Amazonは10月17日以降(パッチ適用前を含む)の記録を調べるよう述べているので、その期間のログを確認してください。
侵害されたホスト上のログは改ざんされ得るため、事前に外部へ送ったログの価値が高く、それを担うのがzcrLogです。90日から2年保存し、MD5・SHA-1・SHA-256で完全性を確認し、AES-128で暗号化します。ただしApacheやPHP-FPMのログを読めるとは主張しません。確認できるのはファイアウォールなど実際に送ったログです。
Webシェルは何と比べて探すか
MITRE ATT&CKはWebシェルを、Webサーバーに永続的な裏口を作る手口と説明しています。NSAは本番を「known-good」(同じアプリを更新込みで新規インストールしたもの)と比べ、追加・変更されたファイルを一件ずつ確認するよう勧めています。デプロイ済みリリースを基準にできるのは、疑わしいホストの外から入手して独立に検証し、リポジトリとビルドパイプラインの完全性も確認した場合だけです。差分はすべて確認し、次も調べます。
- PHPが書き込めるupload・tmp・キャッシュ(当社の追加)
- Webユーザーのcrontab(MITREが繰り返し実行の手口として記載)
- OSの新規アカウントとアプリDBの新規管理者
- Webサーバーが起動したプロセス
- PHPやWebサーバーからの外向き通信(カナダのサイバーセキュリティセンターが調査対象に記載)
今回確認した情報源には、PHP2Shell固有のWebシェルのファイル名やハッシュは公開されておらず、基準との比較が重要です。ログ側はWebサーバーログでの痕跡調査で扱っています。
どのシークレットを替えるか
DBパスワード、.envのAPIキー、クラウドの鍵、決済の認証情報など、アプリが読めたものすべてです。同じ権限のコードなら読めるうえ、CVE-2026-109619のアドバイザリはメモリ漏えいも挙げ、CISAもローテーションを求めています。当社の推奨は、旧い値を発行元で即座に失効させ、新しい値は再構築したホストにだけ入れること。全セッションも無効化します(SansecはPHPSESSIDクッキーにメモリの内容が含まれる可能性を報告)。漏れたクラウドの鍵は、10月17日以降の監査ログで使われ方を確認します。AWS CloudTrailやGoogle Cloudの監査ログをzcrLogに送っていればそこで検索できます。
なぜ掃除ではなく再構築なのか
Webシェルを1つ消しても2つ目がないとは限りません。CISAは攻撃者が複数の裏口を持つことが多いとして、「gold」イメージからの再イメージか再構築を求めています。PHP 8.5.12・8.4.27・8.3.36・8.2.35以降(またはバックポート済みパッケージ、8.1以前はベンダーのバックポートか更新)で組み直し、全ワーカーを再起動します。コードは検証済みの入手元から取得し、復元するアップロードに.phpが紛れていないか確認し(当社の推奨)、接続前に十分テストします。再接続後もCISAは再侵入の監視を求めており、AWSはエラーがないことは安全の証明ではないと述べています。
タイで誰に届け出るか
PDPA第37条(4)は、侵害を知ってから遅滞なく、可能な限り72時間以内にPDPC事務局へ通知するよう定めています(リスクがない場合を除く)。高リスクならデータ主体にも救済策とともに通知します。2022年の告示では、やむを得ず遅れる場合は速やかに、遅くとも認識から15日以内に理由を添えて通知し、PDPCが免責を検討します。通常の期限延長ではありません。条項8は、処理者(ホスティング事業者など)が自ら認識してから遅滞なく、可能な限り72時間以内に管理者へ通知するよう契約で定めることを求めており、PDPCへの通知義務は管理者に残ります。通知は様式ตข.001でsaraban@pdpc.or.thへ送り、犯罪があれば警察へ届け出るよう様式に記されています。法的助言ではありません。ThaiCERT(監視・分析・警報・対応調整を担当)の窓口はthaicert@ncsa.or.th、02 114 3531(24時間)です。
最初の対応の流れ
| 時期 | 作業 | 次へ進む条件 |
|---|
| 疑った時点 | 通信制限(電源は切らない)、DPO連絡 | 検知時刻(72時間の起点ではない) |
| 破壊的作業・再イメージ前 | ログ・メモリ・スナップショット・ハッシュ | 取得記録 |
| 初日 | 基準比較、cron・アカウント・プロセス | 発見事項か限界付きの「なし」 |
| 初日 | シークレット失効、セッション無効化 | 失効リスト |
| 侵害を信じる合理的理由が生じた時点 | DPOがリスク評価 | 侵害認識時刻(72時間の起点) |
| 公開前 | 修正済みPHPで再構築 | テスト合格 |
| 認識から72時間以内 | 該当すればตข.001提出 | 提出控え |
| 再接続後 | エラー・新規ファイル・外向き通信の監視 | 担当者・範囲・見直し周期・エスカレーション基準のある監視 |
複数の担当者で引き継ぎ、誰がどの手順を承認したかの記録が必要なら、料金ページでプランを比較してください。
上の表の流れは当社の推奨で、次のインシデントでも同じ順序が必要になります。慌ただしい中で記憶を頼りに組み直すと、手順が抜けがちです。zcrSOARなら、この流れをプレイブックのライブラリにバージョン、承認、ドライラン付きで保管し、各ステップをAutonomous・Approval・Blockedに設定できます。情報収集は自動で進め、ホスト切断は1つの承認キューで承認待ちにし、実行ごとに時刻・ユーザー・アクション・結果を残します。zcrSIEMとは別売りで、PHP2Shellを検知するものでもなく、対策はあくまでPHPのパッチ適用です。
画面を先に見たい方はデモをどうぞ。
無料ツールで十分な部分と本記事の限界
基準との比較はsha256sum、保全したコピー上のgit --no-optional-locks status --ignored --untracked-files=all、NSAの無料スクリプトで行えますが、どれか一つで安全は証明できません。チェックリストかSOARかは、事案の複雑さ、対応者の能力、調整の必要性、証跡の義務で決めてください。本記事はフォレンジックの手引きではなく、人材がなければCISAとNCSCは外部の対応事業者を勧めています。「見つからない」は「侵害されていない」ではありません。
関連記事
全ホストのPHPバージョン確認 ・ 承認ゲート付きのランサムウェア隔離 ・ インシデント収束後に報告すべき証跡 ・ PDPAとは
お問い合わせ
対応プレイブックにどの手順を入れ、どこで人の承認を待つべきか。お気軽にご相談ください。無料でご相談いただけます。zcrが提供するのはソフトウェアで、調査・証拠取得・封じ込め・復旧の実作業はパートナーを通じて提供します。
出典
- Amazon Threat Intelligence — PHP2Shell exploitation prior to public disclosure — 2026年10月17日の最初の試み、成功は不明、10月17日以降を調査、IPは共有の匿名化基盤
- PHP advisory GHSA-w8hw-w9fx-j79w (CVE-2026-109618) / GHSA-6wmf-4rv5-p3rp (CVE-2026-109619) — 認証不要でワーカー権限のコード実行、メモリ漏えい
- PHP.net — 2026 news archive — 修正版、PHP 8.1以前、ワーカー再起動
- CISA — Cybersecurity Incident & Vulnerability Response Playbooks — 証拠保全、封じ込めの選択肢、シークレットのローテーション、goldイメージからの再イメージ、テストと監視
- CISA AA20-245A — 対処前の収集、揮発性データの喪失、IPブロック、外部の対応支援
- UK NCSC — Critical security issue affecting PHP — オフライン化の検討、対応事業者
- Canadian Centre for Cyber Security AL26-026 — 調査対象
- AWS — Using AWS WAF to apply mitigations for PHP2Shell — エラーログ、エラーがないことは安全の証明ではない
- Sansec — PHP2Shell — PHPSESSIDクッキーにメモリの内容が含まれる可能性
- NSA Cybersecurity — Mitigating Web Shells — known-good比較
- MITRE ATT&CK T1505.003 Web Shell / T1053.003 Cron
- Personal Data Protection Act B.E. 2562 (2019)(PDPC公開の非公式英訳) — 第37条(4)
- PDPC告示 個人データ侵害通知の基準と方法 B.E. 2565(タイ語) — 第5・6・7・8条項
- PDPC 個人データ侵害通知様式 ตข.001(タイ語) — 送付先と警察への届出
- ThaiCERT / About ThaiCERT — 役割と窓口
- AWS — Amazon EC2 security group connection tracking — ルール変更では追跡中の接続は即時に切れない、即時遮断はネットワークACL