testing
php2shell detection
PHP2Shell脅威ハンティング実践: Suricata IDSシグネチャ、Falco動的ランタイム検知、Auditd追跡ルール集
php2shell.run Research Lab
•
PHP2Shell脅威ハンティング実践: Suricata IDSシグネチャ、Falco動的ランタイム検知、Auditd追跡ルール集
<time datetime="2026-10-23">検証日: 2026年10月23日</time> · 防御エンジニアリング基準: Suricata 7.x, Falco 0.38+, Linux Auditd
PHP2Shellの脅威に対抗するためには、単一の防御壁に依存するのではなく、ネットワーク境界(IDS/IPS)、ホストOSランタイム(Falco)、およびカーネル監査ログ(Auditd) を組み合わせた多層防御(Defense-in-Depth)の構築が不可欠です。
本稿では、セキュリティ運用監視センター(SOC)およびSREチームが即座に本番導入できる、検証済みの検知ルールセットを公開します。
1. ネットワークIDS: Suricata 7.x ルールセット
Suricataはパケットをデコードし、HTTPストリーム内のマルチパートフォームデータを高速に正規化検査します。
Suricata ルール設定ファイル (/etc/suricata/rules/php2shell.rules)
# Rule 1: CVE-2026-109618/109619 コア悪用シグネチャ (SID: 10261092)
alert http any any -> $HTTP_SERVERS any ( \
msg:"ET EXPLOIT PHP2Shell Inbound Multipart Progress UAF (CVE-2026-109619)"; \
flow:established,to_server; \
content:"POST"; http_method; \
content:"multipart/form-data"; http_header; nocase; \
content:"PHP_SESSION_UPLOAD_PROGRESS"; http_client_body; nocase; \
pcre:"/name=[\"']?PHP_SESSION_UPLOAD_PROGRESS[\"']?[^\r\n]*\r?\n\r?\n[^\r\n]{1,64}/i"; \
reference:cve,2026-109619; \
reference:url,https://php2shell.run/; \
classtype:web-application-attack; \
sid:10261092; rev:1; \
)
# Rule 2: 異常な高頻度アップロード進捗リクエストによるヒープ枯渇スプレー検知
alert http any any -> $HTTP_SERVERS any ( \
msg:"ET HUNTING PHP2Shell Heap Spray Anomalous Request Burst"; \
flow:established,to_server; \
content:"POST"; http_method; \
content:"PHP_SESSION_UPLOAD_PROGRESS"; http_client_body; nocase; \
threshold:type both, track by_src, count 20, seconds 5; \
classtype:attempted-recon; \
sid:10261093; rev:1; \
)
ルール反映と構文検証:
sudo suricata -T -c /etc/suricata/suricata.yaml
sudo suricatasc -c reload-rules
2. ホストランタイム動的監視: Falco ルール
ネットワーク境界がTLS暗号化や難読化により突破された場合でも、攻撃者がPHPワーカープロセスからシェルや不審なコマンドを起動した瞬間にホストOS側で捕捉します。
/etc/falco/rules.d/php2shell_process_spawn.yaml
- rule: PHP-FPM Unexpected Child Process Spawn (PHP2Shell Post-Exploitation)
desc: Detects PHP-FPM or Apache spawning shell or system execution binaries
condition: >
spawned_process and
proc.pname in (php-fpm, php-fpm8.2, php-fpm8.3, php-fpm8.4, php-fpm8.5, apache2, httpd) and
(proc.name in (sh, bash, dash, zsh, ksh, csh, tcsh, python, python3, perl, ruby, php, nc, netcat, ncat, curl, wget) or
proc.cmdline contains "bash -i" or
proc.cmdline contains "/dev/tcp/" or
proc.cmdline contains "base64")
output: >
CRITICAL: PHP2Shell Execution Detected! PHP worker spawned unauthorized shell
(user=%user.name user_loginuid=%user.loginuid command=%proc.cmdline parent=%proc.pname pid=%proc.pid file=%fd.name)
priority: CRITICAL
tags: [mitre_execution, cve_2026_109619, php2shell]
Falcoデーモンの再起動とテスト:
sudo systemctl restart falco
# ログ監視
sudo journalctl -u falco -f | grep "PHP2Shell"
3. Linux カーネル監査: Auditd 追跡ルール
万一侵害が発生した際のフォレンジック調査および事後分析のため、PHP実行ユーザー(www-data や nginx)によるシステムコール execve の実行を完全記録します。
/etc/audit/rules.d/php2shell-audit.rules
## PHP実行ユーザー (UID 33: www-data) による execve システムコールを全監査
-a always,exit -F arch=b64 -S execve -F euid=33 -k php_execve_monitor
-a always,exit -F arch=b32 -S execve -F euid=33 -k php_execve_monitor
## /tmp や /dev/shm 配下での実行可能ファイル生成監視
-w /dev/shm -p wa -k php_shm_tamper
-w /tmp -p wa -k php_tmp_tamper
監査ログの検索コマンド:
# 不審なコマンド実行ログの抽出
ausearch -k php_execve_monitor --start recent -m EXECVE
4. SOC インシデント対応ランブック (Checklist)
上記ルールのアラートを受信した際の初期対応手順:
- 該当ワーカープロセスの即時隔離:
systemctl kill -s SIGKILL php8.3-fpm - ネットワーク接続の遮断:
iptables -A OUTPUT -m owner --uid-owner www-data -j DROP - 改ざんファイルの特定:
find /tmp /dev/shm /var/www -cmin -30 -type f - 暫定緩和策の強制適用:
sed -i 's/session.upload_progress.enabled = .*/session.upload_progress.enabled = Off/' /etc/php/*/fpm/php.ini