隨著網路攻擊的面向持續擴大,極風雲創作為Cloudflare的經銷商觀察到許多客戶利用Cloudflare 的 Web Application Firewall (WAF) 來減緩攻擊。這對客戶來說非常有幫助,但由於WAF 每天處理數百萬筆請求,產生誤判(false positive)幾乎是無可避免的。因此,我們會建議客戶的預設防護設定仍需要進一步微調。

我們會協助客戶取得必要數據,並針對其環境調整規則。本篇文章將介紹 Cloudflare 技術,幫助客戶理解 WAF 為何會觸發特定行動,以及我們如何透過優化來降低誤判、提高防護品質。

WAF 是什麼?僅靠 Log 行動還不夠嗎?

Cloudflare 的 WAF 可保護原始伺服器免受各種第七層(Layer 7)攻擊,這類攻擊專門針對應用層。WAF 提供的工具包括:

這些工具皆建立於 Rulesets Engine 上。當規則表達式匹配時,Engine 將執行對應的 Action

「Log」行動可以模擬規則行為,確認 Engine 是否觸發規則,並將事件記錄下來,這些日誌可透過 Security AnalyticsSecurity EventsLogpush Edge Log Delivery 取得。

然而,僅知道規則匹配了還不夠,尤其當一個規則表達式可能包含多條邏輯路徑時,例如:

對應的 Rules Language 語法如下:

這種表達式在除錯時會遇到幾個問題:究竟是表達式左側(LHS)還是表達式右側(RHS)匹配?如 Base64 解碼、URL 解碼或轉小寫等函數可能改變原始資料,增加判斷哪個欄位導致匹配的難度。

此外,許多 Rulesets 內的規則都可能匹配。像 Cloudflare OWASP 規則集會累計不同規則的分數,當分數超過設定門檻時才觸發動作。

由於 Cloudflare Managed 與 OWASP 規則的表達式是私密的,客戶只能從標題、標籤與描述推測規則功能,例如「SonicWall SMA – Remote Code Execution – CVE:CVE-2025-32819」。這就會產生疑問:究竟是哪些欄位導致匹配?這是誤判嗎?

這時候,Payload Logging 就派上用場,它可以幫助我們追蹤到底是哪個欄位及其值(經過轉換後)導致規則匹配。

Payload Logging 是什麼?

Payload Logging 功能會記錄與規則匹配的請求欄位及其值。這能降低模糊性,提供資訊給客戶檢查誤判、確保規則正確性,並協助微調規則以提升效能。

例如前述表達式中,Payload Log 會紀錄匹配的 LHS 或 RHS,而非兩者同時紀錄。

Payload Logging 的運作方式

Payload Logging 與 Rulesets Engine 都建立在 Wirefilter( Cloudflare 核心防火牆引擎)上,其核心是一套用 Rust 編寫的物件系統,實作了 Compiler trait 來編譯抽象語法樹(AST)。

當 Engine 執行表達式且結果為 true 時,表達式與 Execution Context 將送至 Payload Logging Compiler 重新評估。Execution Context 提供執行所需的參數值,重新評估後,符合條件的欄位將被紀錄。

Payload Log 的結構是一個欄位與值的對應表:

備註這些日誌可用客戶提供的公鑰加密,並可透過 Logpush 自動解密,或使用 CLI 工具、Worker 或 Cloudflare 控制台進行解密。

已推出的調整

在 Wirefilter 中,有些欄位為陣列型態,例如 http.request.headers.names 包含請求的所有 Header 名稱:

過去的 Payload Logging 會記錄整個陣列:

新版則僅部分評估陣列並紀錄符合條件的索引,例如只紀錄包含「c」的 header:

部分匹配與運算子

  • eq:精確匹配
  • in、contains、matches:部分匹配,支援正則

新版 Payload Logging Compiler 會只紀錄部分匹配結果,例如:

結果只紀錄符合條件的 header,而非全部。這樣不僅清楚,也減少日誌處理量。對於大量資料的欄位(如 http.request.body.raw)尤其有效,原本可能記錄數 KB,現在只記錄幾個 byte。

新版 Payload Log 也會紀錄部分匹配的前後內容(before/after,最多 15 bytes),例如:

優化措施

  • Managed Rules 常用正則來偵測惡意請求,編譯與解析正則消耗 CPU
  • 正則與中間狀態會快取於記憶體,減少重複編譯
  • 使用 smallvec 減少 heap 配置,優化效能

「TRUNCATED」情況

有時日誌會顯示 TRUNCATED,因每個防火牆事件都有大小限制。改進後,Payload Log 平均大小從 1.5 KB 降到 500 bytes,降低截斷率達 67%。

未來展望

  • 現行的 UTF-8 編碼可能無法完整呈現二進位資料(Binary Data),未來可能改為 byte array 或其他序列化格式
  • Payload Log 存儲格式目前為 JSON,也將測試 CBOR、Cap’n Proto、Protobuf 等二進位格式,以提升處理速度與維護向後相容性
  • Payload Logging 目前僅適用於 Managed Rules,未來將擴展至 Custom Rules、WAF Attack Score、Content Scanning、Firewall for AI

Payload Logging 的可視化提升,能讓客戶清楚了解 WAF 的防護行為是否如預期。透過日誌特異性改善,我們也在持續優化可靠性、延遲,並將擴展到更多 WAF 產品。

極風雲創為台灣Cloudflare首選經銷商,並且為台灣擁有最多Cludflare企業客戶的合作夥伴,若想開始啟用 Payload Logging,可與極風雲創的顧問團隊聯繫。