網站應用程式防火牆 (WAF):功能與運作原理
為什麼您的網頁應用程式需要的不只是防火牆
您已經有傳統的網路防火牆,但您的網頁應用程式仍然遭受攻擊。為什麼?因為網路防火牆在第 3 層和第 4 層運作,檢查 IP 位址和連接埠。它們無法區分合法的登入請求和隱藏在表單欄位中的 SQL 注入攻擊載荷。這就是網站應用程式防火牆 (WAF) 發揮作用的地方。
WAF 位於使用者和網頁伺服器之間,在第 7 層分析 HTTP/HTTPS 流量。它檢查請求和回應中是否包含表示攻擊的模式——例如 SQL 注入、跨網站指令碼 (XSS) 或惡意檔案上傳——並在它們到達您的應用程式之前予以封鎖。
WAF 究竟做了什麼?
將 WAF 想像成您網頁流量的安全警衛。其核心功能包括:
- 過濾惡意請求:它檢查標頭、Cookie、查詢字串和 POST 主體,尋找已知的攻擊特徵。
- 強制執行安全策略:您定義規則——例如封鎖來自某些國家/地區的請求或限制請求大小。
- 防禦 OWASP Top 10:許多 WAF 附帶預先配置的規則集,以緩解常見漏洞,例如注入、身分驗證失效和敏感資料外洩。
- 速率限制和機器人緩解:它可以限制來自單一 IP 的過量請求,或封鎖已知的惡意機器人。
- 記錄和警示:它記錄被封鎖的請求以供分析,並可在可疑活動時觸發警示。
重要的是,WAF 並非萬靈丹。它補充了安全編碼實踐,但並不能取代它們。然而,配置良好的 WAF 可以提供關鍵的防禦層,特別是對於舊版應用程式或在零日漏洞利用期間。
WAF 如何運作:技術基礎
WAF 使用兩種主要方法分析流量:基於特徵的偵測和基於異常的偵測。
基於特徵的偵測
此方法依賴已知攻擊模式的資料庫。例如,規則可能會在查詢參數中尋找字串 ' OR '1'='1,這是經典的 SQL 注入嘗試。基於特徵的 WAF 速度快且對已知威脅有效,但可能遺漏新型攻擊。
基於異常的偵測
基於異常的 WAF 建立正常流量的基線並標記偏差。例如,如果使用者突然向登入端點提交 10MB 的 POST 請求,那就是異常的。這種方法可以捕捉未知攻擊,但可能產生誤報。
大多數現代 WAF 結合這兩種方法,通常使用機器學習來提高準確性。它們還將 HTTP 請求解析為元件(方法、URL、標頭、主體),並對每個部分套用規則。
部署選項:WAF 位於何處?
您可以透過多種方式部署 WAF,每種方式都有其取捨:
| 部署類型 | 說明 | 優點 | 缺點 |
|---|---|---|---|
| 雲端式(反向代理) | 流量透過雲端供應商的 WAF 路由(例如 Cloudflare、AWS WAF)。 | 易於設定、DDoS 防護、全球規模。 | 增加延遲、經常性成本、資料離開您的基礎設施。 |
| 主機式(外掛/模組) | 安裝在網頁伺服器本身(例如 ModSecurity 搭配 Nginx/Apache)。 | 低延遲、完全控制、無第三方依賴。 | 需要維護、隨伺服器資源擴展。 |
| 網路式(設備) | 放置在資料中心的專用硬體。 | 高效能、離線。 | 昂貴、配置複雜、靈活性較低。 |
對於大多數現代網頁應用程式,雲端 WAF 或像 ModSecurity 這樣的主機式解決方案是實用的選擇。雲端 WAF 對小型團隊特別有吸引力,因為它們處理基礎設施和規則更新。
關鍵 WAF 規則集和 OWASP 核心規則集
如果您使用 ModSecurity,您可能會將其與 OWASP 核心規則集 (CRS) 配對。CRS 是一組通用的攻擊偵測規則,提供對 OWASP Top 10 的防護。它包括以下規則:
- SQL 注入
- 跨網站指令碼
- 本機檔案包含
- 遠端程式碼執行
- PHP 注入
- 工作階段固定
然而,CRS 可能過於積極。您需要調整它以避免封鎖合法流量。從僅偵測模式開始,檢閱記錄,然後逐步啟用封鎖規則。
如何使用 ModSecurity 和 Nginx 設定基本 WAF
以下是在 Ubuntu 上使用 Nginx 部署 ModSecurity 的簡化範例。這為您提供主機式 WAF。
- 安裝 ModSecurity 和 Nginx 連接器:
sudo apt install libmodsecurity3 libnginx-mod-http-modsecurity - 在 Nginx 中啟用模組:將
load_module modules/ngx_http_modsecurity_module.so;加入/etc/nginx/nginx.conf的頂部。 - 下載 OWASP CRS:
git clone https://github.com/coreruleset/coreruleset.git /etc/nginx/modsec/coreruleset - 配置 ModSecurity:建立
/etc/nginx/modsec/main.conf,內容如下:Include /etc/nginx/modsec/modsecurity.conf Include /etc/nginx/modsec/coreruleset/crs-setup.conf Include /etc/nginx/modsec/coreruleset/rules/*.conf - 在您的伺服器區塊中啟用 ModSecurity:
server { modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf; ... } - 測試並重新載入 Nginx:
sudo nginx -t && sudo systemctl reload nginx
設定後,監控 /var/log/modsec_audit.log 以查看被封鎖的請求。透過為誤報新增排除項來調整規則。
WAF 限制和最佳實踐
WAF 並非萬無一失。攻擊者可以使用編碼技巧、混淆或利用特徵無法捕捉的邏輯缺陷來繞過 WAF。此外,WAF 無法防禦不經過 HTTP 的攻擊,例如直接資料庫存取。
要充分發揮 WAF 的效用:
- 保持規則更新:新漏洞定期出現;更新您的規則集。
- 監控和調整:定期檢閱記錄並調整規則以減少誤報。
- 將其作為縱深防禦策略的一部分:與安全編碼、定期修補和最小權限存取結合。
- 測試您的 WAF:使用 OWASP ZAP 或 Burp Suite 等工具查看您的 WAF 是否封鎖常見攻擊。
常見問題
WAF 可以取代安全編碼實踐嗎?
不能。WAF 是補充層。它可以封鎖許多攻擊,但如果 WAF 被繞過或配置錯誤,您程式碼中的漏洞仍然可能被利用。始終遵循安全編碼指南。
WAF 會減慢我的網站速度嗎?
它可能會增加輕微延遲,特別是如果它是雲端式或執行深度檢查。然而,現代 WAF 經過優化,安全效益通常超過輕微的效能影響。像 ModSecurity 這樣的主機式 WAF 可以針對效能進行調整。
如何在雲端 WAF 和自行託管 WAF 之間選擇?
考慮您的預算、團隊專業知識和合規需求。雲端 WAF 更易於設定和擴展,而自行託管 WAF 提供更多控制並將資料保留在您的基礎設施上。對於小型團隊,雲端 WAF 通常更實用。
準備好分析您的 Nginx 記錄並查看您的 WAF 封鎖了哪些攻擊了嗎?使用我們的免費 Nginx 記錄分析器 快速解析和視覺化您的記錄。