Web Application Firewall和攻擊保護
簡短摘要
WAF/WAAP在應用程序級別過濾和監視HTTP(S )/WebSocket流量:阻止漏洞利用(OWASP Top 10),遍歷身份驗證嘗試,掃描,自動機器人流量和L7 DDoS。現代堆棧由反機器人引擎,API保護,限制等級,虛擬補丁程序以及與CI/CD的緊密集成來補充,以使規則像代碼一樣安全地推出。
體系結構中的角色和位置
Edge/CDN WAF(雲):低潛伏度,全球聲譽/管理規則,L7 DDoS。
自主主機WAF (on-prem/K8s):深入集成內部網絡,微調。
WAAP方法:WAF+API-網關功能(計劃驗證,authZ),反機器人,L7 DoS,mTLS。
啟用方案: 在應用程序之前反向擴展;K8s中的Ingress控制器;Service Mesh過濾器;sidecar.
保護模型
Negative security (簽名/CRS):快速覆蓋已知技術(SQLi/XSS/SSRF/RCE)。
正面安全(allow-list):我們只允許「有效」請求(方法/路徑/模式/內容類型)。
Virtual Patching:在線鎖定代碼虛擬化。
上下文:靜態內容、API、adminok、下載、webhook的不同策略。
典型威脅和措施
OWASP Top 10:SQLi,XSS,IDOR/BOLA,SSRF,模板化劑註射,脫序列化,misconphigs。
L7 DDoS:緩慢的查詢/標題,熱點終端爆發→保護:限制限制,挑戰,自動單元。
機器人/scrapers:行為,頻率,「非人類」模式,設備fingerprinting,動態令牌。
Credential Stuffing/ATO:攔截/過度登錄→ IP/ASN異常,velocity規則,附加因素。
下載:防病毒類型/大小/多掃描,媒體領域中的「僅圖像」。
API/GraphQL:計劃驗證,「maxDepth」/「maxCost」,禁止不可轉換的通配符,控制方法和標題。
策略和規則構造函數
任何應用程序的基本的「骨架」:1.運輸:TLS 1.2+/1.3、HSTS、mTLS在敏感後端。
2.方法:allow-list(「GET、POST、PUT、DELETE、PATCH、OPTIONS」)是唯一的資源。
3.路徑:嚴格的口罩/口罩;adminka/billing-單獨的前綴/域。
4.標題:白名單,禁止危險(「X-Original-URL」,非標準),無需。
5.屍體:沿途僅為JSON-only/Multipart;"Content-Length"限制,"登錄"/搜索"上的二進制塊。
6.費率限制:per-IP/ASN/密鑰/組織;單獨限制「昂貴」查詢。
7.反機器人:行為得分,「不刺激」挑戰賽,身份滑落(cookie令牌,JA3/TLS FP)。
8.CRS/托管規則:啟用,調制為FP。
9.靜止補丁:快速鎖定已知攻擊參數/模式。
10.邏輯/度量標準:單一格式,與「trace_id」相關,FP/TP報告。
調整實踐: 如何降低誤報
在僅偵測/計數模式(陰影)中運行具有流量樣本的新規則。
根據上下文創建例外(「path =/search」,「param=q」允許特殊字符)。
劃分區域:「公共頁面」與「敏感操作」(攻擊性閾值不同)。
流水線:規則→站立→金絲雀(1-5%)→散布;根據FP度量進行回滾。
維護回歸測試的「虛假」付費目錄。
集成到DevSecOps中
CI:Git中的靜態規則;測試:從攻擊目錄中提取真實查詢+合成。
CD:金絲雀布局,仙女旗;「政治」監視(更改規則=更改)。
RASP和SAST/DAST:WAF補充但不替代代碼修復。
可觀察性和SLO
度量標準:- p95/99通過WAF潛伏期;被阻止/遺漏的比例;share Managed Rules vs custom;«attack rate».
- 反機器人:挑戰/投降份額,FP/TP。
- L7 DDoS: burst-rate, auto-mitigation events.
- "不超過0。5%的FP用於授權操作/日。"
- «p95 overhead WAF ≤ 10 мс».
- 「虛擬補丁的TTR ≤ 30分鐘。」
- 警報:規則發布後的4xx/5xx激增;FP的增長;通過帽子的下降;JWKS/mTLS驗證的降解。
配置示例
ModSecurity + OWASP CRS (Nginx)
nginx
Enabling ModSecurity modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main. conf;
`/etc/nginx/modsec/main.conf`:
apache
SecRuleEngine On
Include /usr/local/owasp-modsecurity-crs/crs-setup. conf
Include /usr/local/owasp-modsecurity-crs/rules/.conf
Example of an exception for a search parameter
SecRule REQUEST_URI "@beginsWith /search" "id:900100,phase:1,pass,nolog,ctl:ruleRemoveByTag=attack-xss"
SecRule REQUEST_URI "@beginsWith /search" "id:900101,phase:2,pass,ctl:ruleRemoveTargetById=942100; ARGS:q"
AWS WAF (JSON, rate limit+國家列表塊)
json
{
"Name": "prod-web-acl",
"Scope": "CLOUDFRONT",
"DefaultAction": { "Allow": {} },
"Rules": [
{
"Name": "BurstLogin",
"Priority": 1,
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP",
"ScopeDownStatement": { "ByteMatchStatement": {
"SearchString": "/login",
"FieldToMatch": { "UriPath": {} },
"TextTransformations": [{ "Priority": 0, "Type": "NONE" }],
"PositionalConstraint": "CONTAINS"
}}
}
},
"Action": { "Block": {} },
"VisibilityConfig": { "MetricName": "BurstLogin", "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true }
}
]
}
Cloudflare (Expression Rules)
(http. request. uri. path contains "/admin" and ip. geoip. country ne "UA")
or (http. request. uri. path eq "/login" and cf. threat_score > 10)
or (http. request. uri. path contains "/api" and not http. request. headers["authorization"][0] contains "Bearer ")
NGINX: 方法/物體的簡單規則
nginx location /api/withdraw {
limit_except POST { deny all; }
if ($request_method = POST) {
set $cl $http_content_length;
if ($ cl = "") {return 411;} # length is required if ($ cl> 1048576) {return 413;} # ≤ 1MB add_header X-Idempotency-Required "true";
}
}
GraphQL: 限制器
'maxDepth=6','maxCost=1000',禁止銷售'__ schema',allow-list操作,標題驗證('Content-Type:application/json')。
反機器人與人友檢查
隱形挑戰賽(JS挑戰賽沒有kapchi),「昂貴」途徑上的工作證明,行為分析(運動/計時)。
TLS/JA3-fingerprinting, IP/ASN聲譽,代理列表/VPN(合理範圍內)。
形狀上的陷阱(honeypot字段),動態形狀/會話令牌。
隱私保護:盡量減少跟蹤、透明策略、選擇退出。
API焦點
Schema-first:用於驗證的OpenAPI/JSON Schema;禁止多余的領域。
Auth: 必然Bearer JWT或mTLS;reject без `Authorization`.
Rate/Quota: per-key/per-org;超出-「軟塊「/慢速。
Webhooks:HMAC簽名,「timestamp+nonce」,短接收窗口。
GraphQL:請參閱上面的限制器;編寫操作名稱/標簽。
下載和媒體
大小限制,whitelists MIME/擴展名,文件重命名;
AV掃描(多引擎),ImageMagick策略(無危險解碼器);
一個單獨的域上的Thumb服務,僅服務-圖像。
海軍上將和關鍵地區的安全
單獨的域/路徑,mTLS/禁止共享的 ASN/國家/地區,嚴格的限制,JIT訪問,IP allow-list。
其他信號(device posture, risk score) →需要第二次檢查。
操作、事件和虛擬補丁
運行手冊:快速發布塊規則,TTL限制,命令通知。
回滾標準:身高4 x/5x>閾值,FP>閾值,p95 latency↑。
後遺癥:將測試添加到回歸規則集中,將SIGMA同位素固定在SIEM中。
合規性和隱私
編譯最小值:路徑/方法/代碼/塊原因/標識符;不要保存PII/身體的秘密。
保留策略日誌的時間表;按角色訪問;磁盤加密。
iGaming/fintech的功能
付款/付款/錢包:per org配額,mTLS到PSP,嚴格的路徑allow單,HMAC到PSP webhooks。
ATO/獎金缺口:對登錄規則/註冊/促銷代碼,行為限制和反機器人。
內容提供商/工作室:單獨的域/策略,IP/ASN allow-list,時間到錢包/轉換監視對WAF的影響。
區域要求:地理政策(國家/地區),GDPR處理的透明度。
實施路線圖
1.區域清單(公共,API,管理,下載)。
2.基本配置文件:TLS,allow-list方法/路徑,管理規則/CRS。
3.Rate limits+在敏感路徑上的反機器人。
4.虛擬補丁和緊急規則過程(SLA ≤ 30分鐘)。
5.CI/CD用於規則,站立/金絲雀/影子模式。
6.遙測,SLO,回歸規則測試。
7.定期審查異常和「清除」旁路。
典型的錯誤
「將所有CRS納入最大值」→ FP雪崩和團隊倦怠。
沒有金絲雀和陰影模式的規則。
缺乏細分:一個政策適合一切。
忽略API/GraphQL特征(schema/limits)。
沒有相關性(「trace_id」)且沒有質量指標的邏輯。
FAQ
WAF是否取代安全代碼?
沒有。這是緩解層和「虛擬補丁」,但是代碼中的技術債務必須消除。
如何理解是時候打開硬塊了?
當陰影模式報告顯示低FP並且存在回歸規則測試時。
API需要單獨的WAF嗎?
更好的WAAP/與 API網關的集成:電路,限制,身份驗證,webhook簽名。
底線
有效的WAF/WAAP是基礎CRS/托管規則,正模型,反機器人,限制和虛擬補丁的組合,並得到DevSecOps過程,遙測和清晰SLO的支持。這種方法可以快速應對漏洞、抵禦自動攻擊以及可預測的UX和性能影響。