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,監看伺服器被入侵後的回連與往內網的橫向移動。

PHP2Shell 防護架構:網際網路、Trellix IPS、防火牆、核心交換器、對外 PHP 伺服器與內部系統,核心交換器鏡像流量給 Trellix NDR
PHP2Shell 防護架構 · 防火牆前 IPS、防火牆後 NDR 實線為服務流量,虛線為鏡像流量|資料來源:Trellix ARC

防火牆前: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 主機。