Google云平臺WAF中的8KB繞過
Google Cloud Armor 提供了一個基于規則的策略框架,可供 Google Cloud Platform 的客戶用來緩解各種類型的常見 Web 應用程序攻擊。Cloud Armor 服務有 8 KB 的記錄限制,即它將檢查的 Web 請求的最大大小。 這種默認行為下,攻擊者可以使得惡意請求繞過Cloud Armor 并直接到達底層應用程序。
介紹
Web 應用程序防火墻套件為現代 Web 應用程序提供了關鍵的安全層,即使底層應用程序易受攻擊,也可以保護它們免受各種攻擊,例如:代碼執行、SQL 注入、跨站點腳本等。GCP 客戶可以使用 Cloud Armor 來保護使用 Google Cloud Load Balancing 提供服務的應用程序。
Cloud Armor 支持規則自定義表達式,同時還提供一組預配置的 Web 應用程序防火墻規則,這些規則來自 OWASP ModSecurity 核心規則集。

8KB限制
Cloud Armor 的 Web 應用程序防火墻組件檢查傳入的 HTTP 請求,并將它們與用戶定義的基于規則的策略進行比較。Cloud Armor 服務可以配置為:根據給定請求觸發的規則允許或拒絕對底層應用程序的請求。

Cloud Armor 的 Web 應用程序防火墻組件具有 8 KB 的不可配置的 HTTP 請求正文大小限制。這意味著 Cloud Armor 將僅檢查 HTTP POST 請求正文的前 8192 個字節或字符。
這類似于 AWS Web 應用程序防火墻的8 KB 限制,但是在 Cloud Armor 中,該限制鮮有人知,也沒有像 AWS 中的限制那樣突出地呈現給客戶。
在撰寫文本時,客戶在從 Web UI 中配置 Cloud Armor 規則時不會看到提示或通知,并且只能在文檔文章中包含的非描述性通知中找到對 8 KB 限制的引用。
可以通過制作正文大小超過 Cloud Armor 的 8 KB 大小限制的 HTTP POST 請求來利用此問題,下圖payload中位于請求正文的第 8192 個字節/字符之后。


但是,攻擊者成功進行 WAF 繞過的情況是有條件的:被攻擊的目標能以可能觸發潛在漏洞的方式接收和處理HTTP POST 請求。如果給定的底層端點不接受 HTTP POST 請求,則繞過后不會進行觸發,實則是無意義的。
HTTP PUT 和 PATCH 的請求正文限制
Cloud Armor 的另一個限制是:僅對于 HTTP POST 請求的請求正文進行檢查。因此,攻擊者可以利用HTTP PUT 或 PATCH 方式發送帶有惡意payload的請求包以此來繞過WAF,此時無需在正文中填充8192 字節!
WAF繞過的影響
了解此限制的攻擊者將更好地利用底層應用程序中可能存在的任何漏洞。例如,攻擊可可以嘗試 Log4j RCE 漏洞 (CVE-2021-45046) 來對web應用程序進行探測。
防御
Cloud Armor 是一種有價值的安全工具,但重要的是客戶了解 8 KB 的大小限制,以便他們可以采取措施進一步保護他們的應用程序。
客戶可以配置自定義 Cloud Armor 規則來阻止請求正文大于 8192 字節的 HTTP 請求。
int(request.headers["content-length"]) >= 8192
上述規則將在 Content-Length 標頭的值等于或大于 8192 的傳入請求上觸發。
正如我們之前關于 Amazon Web Services WAF 的 8 KB 大小限制的文章中所述,某些資源的合法請求的大小可能會達到 8 KB 或更大。在這些情況下,可以使用 Cloud Armor 的自定義規則語言微調規則,以便 WAF 預期并適當地處理合法請求。
結論
Cloud Armor 是一項用于保護 Google Cloud Platform 上的資源和數據的有用服務,但是,客戶必須了解其請求過濾功能的局限性,并應采取措施降低 8 KB WAF 限制可能帶來的潛在風險。