PHP 漏洞事件防護架構:防火牆前 Trellix IPS、防火牆後 Trellix NDR
原始來源: Trellix ARC
面對 PHP2Shell 這類「公開數小時就被大規模利用」的漏洞,建議以兩道網路防線補上修補空窗:防火牆前放 Trellix IPS 做虛擬修補,把攻擊請求擋在邊界;防火牆後放 Trellix NDR,偵測漏網後的 Web Shell、木馬回連與橫向移動。
重點先看
IPS 負責「擋」攻擊流量,NDR 負責「看」入侵後行為;兩者分工,不必等每台伺服器都修補完成才有防護。
事件背景:PHP2Shell
- 事件:2026 年 10 月 21 日 PHP 緊急修補 CVE-2026-109618 與 CVE-2026-109619(合稱 PHP2Shell,CVSS v4.0 9.2),未經驗證即可遠端執行程式碼。
- 規模:VulnCheck 估計全球超過 110 萬台對外主機仍執行停止支援(EOL)的 PHP,其中多數等不到官方修補。
- 攻擊:揭露當天即出現 Mirai 變種(Potassium)載入器與 PHP Web Shell 落地,隔天出現 DDoS 殭屍程式與 Go 遠端控制程式。
- 一外一內:IPS 負責「擋」攻擊流量,NDR 負責「看」入侵後行為;兩者分工,不必等每台伺服器都修補完成才有防護。
- 修補仍是根本解法;本架構是讓無法立即修補、或永遠無法修補的主機,在這段時間內仍被保護、仍看得見。
漏洞位於 PHP 執行環境本身,而非任何應用程式或外掛,因此即使網站自己的程式碼寫得再安全,只要底層 PHP 版本受影響就會暴露(Trellix ARC)。
漏洞原理
- CVE-2026-109618:PHP 處理記憶體不足時,請求在內部資料只建立一半時中斷,後續清理流程卻把這些資料當成有效內容處理。
- CVE-2026-109619:釋放後使用(use after free),請求狀態在記憶體釋放後殘留,被同一個 worker 的下一個請求重複使用。
- 最常見觸發方式:帶有 PHP_SESSION_UPLOAD_PROGRESS 欄位的 multipart POST,在預設設定下即可成立。
- 風險最高的環境:Apache + mod_php,在任何應用程式碼執行前就能達成程式碼執行;PHP-FPM、CGI、FrankenPHP、LiteSpeed 同樣受影響。WordPress、Drupal、Joomla、Magento、Nextcloud、phpMyAdmin 都已被證實可利用。
- 後續:10 月 23 日 PHP 另行公告 CVE-2026-115560,僅影響特殊設定,官方認為風險較低(The Hacker News)。
時間線(新到舊)
| 日期(2026) | 事件 |
|---|---|
| 10 月 22 日 | 攻擊者投放 DDoS 殭屍程式與 Go 遠端控制程式,並開始輪換請求內容以規避 WAF 規則 |
| 10 月 21 日下午 | 首批成功投遞的惡意酬載出現:14:38 UTC 偵測到 Mirai 載入器,當晚出現寫入網站根目錄的 PHP Web Shell |
| 10 月 21 日 | PHP 約 13:34 UTC 發布修補版 8.5.12、8.4.27、8.3.36、8.2.35;數小時內 PoC 與掃描工具擴散,Cloudflare 觀察到攻擊嘗試從數千次增加到數百萬次 |
| 10 月 20 日 | 漏洞細節在協調揭露前外洩 |
| 10 月 17 日 | Amazon 威脅情報在誘捕系統記錄到利用嘗試,比公開揭露早 4 天 |
| 8 月 | Calif 與 Wiz 研究人員借助 AI 模型各自發現漏洞並通報 PHP |
受影響規模
- VulnCheck 估計超過 110 萬台對外主機執行 EOL 版本 PHP(Trellix ARC)。
- CybelAngel 依 Shodan 資料統計,約 224 萬台對外主機暴露 PHP;可辨識版本者中有 59% 跑的是不會再有官方修補的版本(CybelAngel)。
- PHP 只為 7.4、8.0、8.1 提供原始碼層級的回補分支,更舊的版本完全沒有修補。
成功利用可能非常安靜:CrowdStrike 指出 PHP worker 不會當掉、仍回傳正常 HTTP 200,應用程式日誌可能毫無異狀。這正是需要網路層偵測的原因。
為什麼只靠修補不夠
PHP2Shell 從揭露到大規模利用只花了數小時,7 天或 30 天的修補週期對關鍵對外系統已不再實際(Trellix ARC)。修補空窗主要來自三個地方:
- 修補有流程:升級 PHP 後還要重啟 PHP 與 Web 服務才會生效,正式環境通常需要測試與維護時段;代管主機則要等服務商排程。
- EOL 系統等不到修補:PHP 7.3 以前的版本官方完全不提供修補,7.4~8.1 只有原始碼回補,需要自行編譯。內嵌 PHP 的設備與第三方產品還要等原廠。
- 攻擊在揭露前就開始:誘捕系統早在揭露前 4 天就記錄到利用嘗試,因此調查範圍要回推到 10 月 17 日,而非揭露日。
官方暫時緩解措施(如關閉 session.upload_progress.enabled)只能降低風險,無法消除風險。加上漏洞是研究人員借助 AI 在存在十多年的程式碼中找到,未來同類漏洞只會更快、更多。 結論:修補仍要做,而且要更快;但在修補完成前,需要「不管漏洞叫什麼名字都有效」的網路層控制,讓沒來得及修補的主機依然被擋住、被看見。
架構總覽
所有來自網際網路的請求先經過 inline 的 Trellix IPS,已知攻擊在此丟棄;防火牆放行的流量再由核心交換器鏡像給旁路的 Trellix NDR,監看伺服器被入侵後的回連與往內網的橫向移動。
防火牆前:Trellix IPS(擋)
Trellix IPS 以 inline 方式串接在網際網路與防火牆之間,對進站 HTTP 流量比對特徵碼,命中即丟棄,攻擊請求根本到不了伺服器。這就是「虛擬修補」:在網路上補洞,而不是在每台主機上補洞。
本次事件的 IPS 特徵碼(Trellix ARC,狀態皆為已發布)
| 特徵碼名稱 | 對應漏洞 |
|---|---|
| UDS-HTTP: PHP2Shell Out-Of-Memory Remote Code Execution Attempt I | CVE-2026-109618 / 109619 |
| UDS-HTTP: PHP2Shell Out-Of-Memory Remote Code Execution Attempt II | CVE-2026-109618 / 109619 |
| UDS-HTTP: PHP Runtime Session Serialization Switch RCE Vulnerability | CVE-2026-115560 |
為什麼放在防火牆前
- 最早攔截:攻擊在進入內部網路前就被丟棄,防火牆、負載平衡與 Web 伺服器都不必處理惡意請求。
- 一道防線保護多台後端:所有對外 PHP 主機共用同一組規則,包含無法修補的 EOL 系統與內嵌 PHP 的設備。
- 不動伺服器、不停機:更新特徵碼即生效,不需要重啟任何服務,可在正式修補排程前先行防護。
- 看見完整攻擊面:記錄所有來自網際網路的掃描與利用嘗試,作為事件調查與 IOC 擷取的依據。
佈署注意事項
- HTTPS 檢測:多數 PHP 網站走 HTTPS,IPS 必須能看到明文才能比對特徵碼。需規劃入站 SSL 解密(匯入伺服器憑證)或調整檢測點位置,否則加密流量中的攻擊將無法辨識。
- 故障旁通:inline 設備建議搭配旁通(bypass)機制,避免設備異常時中斷對外服務。
- 先觀察後阻擋:新規則可先以偵測模式觀察誤判,確認後再切換為阻擋;本次這類高風險 RCE 規則建議盡快切換為阻擋。
- 流量雜訊較高:防火牆前會看到大量網際網路背景掃描,告警需設定閾值與彙整規則,避免淹沒值班人員。
IPS 的限制在於只能擋「已知樣態」的攻擊。攻擊者已開始輪換請求內容規避規則,因此需要第二道防線偵測漏網之魚。
防火牆後:Trellix NDR(看)
Trellix NDR 透過 TAP 或 SPAN 鏡像接收防火牆內側流量,專門看防火牆已經放行的流量裡發生了什麼:漏過 IPS 的利用請求、伺服器被入侵後的回連、Web Shell 上傳,以及往內網的橫向移動。旁路佈署不影響服務可用性。
本次事件的網路偵測規則(以 Trellix Network Security / NX 名義發布,Trellix ARC)
| 偵測規則名稱 | 看到什麼 |
|---|---|
| PHP PHPSESSID memory leak CVE-2026-109619/CVE-2026-109618 Attempt | 利用前的記憶體洩漏探測 |
| PHP session upload progress CVE-2026-109619/CVE-2026-109618 RCE | 經 session upload progress 路徑的 RCE |
| PHP CVE-2026-109618/CVE-2026-109619 Remote Code Execution | 遠端程式碼執行 |
為什麼放在防火牆後
- 只看放行的流量:防火牆已濾掉大量背景雜訊,NDR 的告警集中在真正進到內部的連線,誤報率較低。
- 抓入侵後行為:IPS 擋的是「進來」,NDR 看的是「進來之後」。伺服器主動對外連線、下載二進位檔、DNS 異常,都是入侵成功的跡象。
- 看得到東西向流量:被入侵的 Web 伺服器若嘗試連往內網資料庫、SSH 或 RDP,NDR 能及時發現。VirusTotal 統計約 39.4 萬台 PHP 主機同時暴露 SSH、23.3 萬台暴露 MySQL(Recorded Future),顯示 Web 伺服器常是進入其他系統的跳板。
- 補應用程式日誌的盲點:成功利用時 PHP 回傳正常 HTTP 200,主機日誌可能沒有異狀,網路流量是少數留得下痕跡的地方。
本次事件 NDR 可特別關注的網路跡象
- 對外 PHP 伺服器主動連往外部 IP 下載檔案(wget、curl 抓取 ELF 二進位檔)。
- 伺服器直接查詢外部公共 DNS 解析器:Mirai Potassium 內建自己的解析器,正常 Web 伺服器應使用內部 DNS。
- 連往已公開的 C2 位址,例如 Mirai Potassium C2 134[.]199[.]154[.]64。注意此樣本的 DNS 回應經過位元組輪換,應封鎖解碼後的真實位址,而非 DNS 原始回應(原始回應是無關的大學 IP)。
- 異常大的 PHPSESSID cookie、帶 PHP_SESSION_UPLOAD_PROGRESS 的 multipart POST,以及上傳端點的 HTTP 500 突增。
攻擊來源 IP 輪換很快,IP 封鎖只能短期有效;長期應以行為偵測為主。
攻擊鏈對照:每一階段由誰處理
兩道網路防線各管一段:IPS 主擋前兩個階段,NDR 主看後三個階段;端點與關聯分析是最後的保險。
| 攻擊階段 | 攻擊者行為(本次事件) | 防火牆前 IPS | 防火牆後 NDR | 端點/關聯分析 |
|---|---|---|---|---|
| 1. 偵察掃描 | 掃描工具大量探測,User-Agent 含 php2shell | 記錄並可依來源阻擋 | — | — |
| 2. 漏洞利用 | multipart POST 帶 PHP_SESSION_UPLOAD_PROGRESS,觸發記憶體錯誤 | 特徵碼命中即丟棄 | 偵測漏網的利用請求 | Helix 關聯「利用嘗試/成功」 |
| 3. 落地 | 寫入 PHP Web Shell、下載 Mirai 載入器到 /tmp | — | 偵測 Web Shell 上傳、外連下載 | ENS/HX 偵測網站根目錄新增檔案 |
| 4. 執行與回連 | Web 程序衍生 shell,Mirai 以自帶 DNS 解析 C2 並回連 | — | 偵測 C2 連線、異常 DNS | EDR 偵測 Web 程序衍生子程序、反向連線 |
| 5. 擴散 | DDoS 攻擊、Go 遠端控制程式、往內網橫向移動 | — | 偵測東西向異常連線 | Helix 串連網路與端點告警 |
攻擊行為依據 Trellix ARC 的事件分析整理;偵測對應 MITRE ATT&CK T1190(利用對外應用程式)與 T1505.003(Web Shell)。
延伸:與端點及關聯分析串連
IPS + NDR 構成網路層的「一外一內」;若要讓偵測直接變成處置,可再往主機與 SOC 延伸。以下偵測規則皆已發布(Trellix ARC):
| 產品 | 本次事件偵測重點 | 與網路層的關係 |
|---|---|---|
| Trellix ENS | Web 伺服器可疑程序執行、網站根目錄新增 Web Shell(另提供 Expert Rules,啟用前建議調校) | NDR 看到上傳,ENS 在主機上確認並阻擋 |
| Trellix HX | Web 伺服器執行可疑命令、httpd 寫入可疑檔案、PHP2Shell 入侵後子程序 | 確認 NDR 告警的主機是否真的被入侵 |
| Trellix EDR | Web 程序衍生直譯器、下載工具、探測命令,反向 shell 嘗試 | 補上 NDR 看不到的主機內部行為 |
| Trellix Helix | 「PHP Session Upload 嘗試/成功」關聯規則、PHP Web Shell 上傳、POST 編碼酬載執行 | 把 IPS、NDR、端點告警串成同一事件 |
Application Control:以白名單只允許核准程式執行,並對網站根目錄做寫入保護。即使攻擊穿過網路兩道防線,Mirai、Go 木馬等未核准程式也無法在受保護伺服器上執行,特別適合內容固定、又無法升級的 EOL 主機。
導入建議與盤點清單
建議依「先擋、再看、後補」的順序推進:先讓 IPS 規則生效爭取時間,再以 NDR 確認是否已有主機失守,同時排程修補。 如需協助盤點對外伺服器或規劃 IPS/NDR 佈署,歡迎聯繫紘瑒科技。
資料來源
常見問題
PHP2Shell 是什麼漏洞?
2026 年 10 月 21 日 PHP 緊急修補 CVE-2026-109618 與 CVE-2026-109619(合稱 PHP2Shell,CVSS v4.0 9.2),未經驗證即可遠端執行程式碼。漏洞位於 PHP 執行環境本身,而非任何應用程式或外掛,因此即使網站自己的程式碼寫得再安全,只要底層 PHP 版本受影響就會暴露。
哪些環境風險最高?
Apache + mod_php,在任何應用程式碼執行前就能達成程式碼執行;PHP-FPM、CGI、FrankenPHP、LiteSpeed 同樣受影響。WordPress、Drupal、Joomla、Magento、Nextcloud、phpMyAdmin 都已被證實可利用。
IPS 和 NDR 各負責什麼?
IPS 負責「擋」攻擊流量,NDR 負責「看」入侵後行為;兩者分工,不必等每台伺服器都修補完成才有防護。
為什麼 IPS 放在防火牆前、NDR 放在防火牆後?
IPS:最早攔截:攻擊在進入內部網路前就被丟棄,防火牆、負載平衡與 Web 伺服器都不必處理惡意請求。NDR:只看放行的流量:防火牆已濾掉大量背景雜訊,NDR 的告警集中在真正進到內部的連線,誤報率較低。看得到東西向流量:被入侵的 Web 伺服器若嘗試連往內網資料庫、SSH 或 RDP,NDR 能及時發現。
網站走 HTTPS,IPS 看得到攻擊嗎?
多數 PHP 網站走 HTTPS,IPS 必須能看到明文才能比對特徵碼。需規劃入站 SSL 解密(匯入伺服器憑證)或調整檢測點位置,否則加密流量中的攻擊將無法辨識。
應用程式日誌沒有異狀,是不是就沒被入侵?
成功利用可能非常安靜:CrowdStrike 指出 PHP worker 不會當掉、仍回傳正常 HTTP 200,應用程式日誌可能毫無異狀。這正是需要網路層偵測的原因。
暫時關閉 session.upload_progress.enabled 就夠了嗎?
官方暫時緩解措施(如關閉 session.upload_progress.enabled)只能降低風險,無法消除風險。
已經修補了,還需要 IPS 和 NDR 嗎?
攻擊在揭露前就開始:誘捕系統早在揭露前 4 天就記錄到利用嘗試,因此調查範圍要回推到 10 月 17 日,而非揭露日。建議依「先擋、再看、後補」的順序推進:先讓 IPS 規則生效爭取時間,再以 NDR 確認是否已有主機失守,同時排程修補。
無法升級的 EOL 主機怎麼辦?
IPS:一道防線保護多台後端:所有對外 PHP 主機共用同一組規則,包含無法修補的 EOL 系統與內嵌 PHP 的設備。Application Control:以白名單只允許核准程式執行,並對網站根目錄做寫入保護。即使攻擊穿過網路兩道防線,Mirai、Go 木馬等未核准程式也無法在受保護伺服器上執行,特別適合內容固定、又無法升級的 EOL 主機。
