Web應用程式防火牆(WAF)是現代Web安全中的關鍵層,為網站提供了抵禦漏洞的第一道防線。 WAF可用於防禦攻擊企圖並通知攻擊者,從而使緩解措施的速度比組織修補易受攻擊的軟體的速度更快。 此功能的實作方式必須對全球CDN的效能敏感,以毫秒為單位提供回應時間。 三年前,我們在Verizon Digital Media Services (現在是Edgio,堆棧)中引入了WAF引擎,我們選擇了ModSecurity Rules Engine (ModSecurity規則引擎),發現它在單個WAF使用案例中是一流的。 此外,ModSecurity對OWASP核心規則集(CRS)的支持,強大的規則語言以及對HTTP通信流的API實時訪問提供了極大的靈活性。
輸入waflz
但是,隨著使用WAF的客戶數量的增加,我們遇到了性能和資源瓶頸。 ModSecurity在每個客戶實例中傳播的密集規則集提高了整個網路的記憶體和CPU利用率,從而增加了營運成本。 測試和部署新規則也很困難,因為規則語言通常難以使用,難以編寫和分析。 這些問題以及現有ModSecurity庫的開發復雜性導致開發了waflz,這是一種根據Apache 2.0許可證發布的開源WAF引擎。
對於Edgio來說,waflz是ModSecurity的一個重大改進,因為:
- 它消耗的記憶體更少。
- 提供更好的性能。
- 是API驅動的。
Waflz支援ModSecurity功能的子集,即OWASP核心規則集 2 x和 3 x和多個第三方規則集。
設計waflz
Waflz從一開始就是為了提供高性能和多租戶而設計的。 必要時,設計會以性能取代靈活性。 最終,waflz支援ModSecurity功能的受限子集。 例如,出於安全和性能原因,SecRemoteRules和InspectFile等ModSecurity指令被認為不適合在邊緣上執行。
可以使用ModSecurity格式或JSON的規則配置引擎。 整個WAF產品設計為“API優先”。 爲此,waflz提供一流的JSON支持作爲輸入和輸出。 Waflz在內部使用Google協議緩衝區來表示配置(包括規則)和警報格式。 選擇協議緩衝區可實現與JSON輸入和輸出的互操作性,並為兩者添加嚴格類型的架構。
CDN面臨的一些主要工程挑戰是應對服務成千上萬客戶帶來的高並發性和多租戶:我們的每一臺全球邊緣伺服器都必須能夠儘快處理任何客戶的請求。 此外,邊緣伺服器應用程式必須為任何客戶配置提供實時修補和處理。
將許多WAF規則集載入到所有客戶的邊緣上正在執行的HTTP應用伺服器進程的記憶體中,這就帶來了可擴展性挑戰。 Waflz通過在記憶體中僅創建一次WAF規則集並在客戶配置和規則自定義之間共享只讀引用來解決此問題。 此外,還發現了幾種潛在的性能優化,這些優化可以縮短請求處理時間,包括為一些關鍵的內部數據結構節省空間和時間。
Waflz還具有內置功能,使驗證發動機行為和測試一次性ModSecurity規則變得更容易,從而無需使用復雜的獨立測試工具。
結論
Waflz是我們CDN技術堆棧的一部分,可以大規模執行,同時實現高效的細粒度規則測試和自定義。 儘管CDN應用程式面臨挑戰,但ModSecurity和新的libmodsecurity是非常出色,靈活的庫,非常適合許多使用案例。 事實上,在開發waflz時,我們已經對ModSecurity的開發做出了貢獻。 新的WAF引擎已在全球生產中執行了一年多,同時支援和保護數千種不同的客戶端配置,而不會造成任何性能損失。
訪問GitHub以查看更多waflz功能示例。