Web Application Firewall e protezione da attacchi
Breve riepilogo
WAF/WAAP filtra e controlla HTTP (S )/WebSocket a livello di applicazione: blocca le vulnerabilità (OWASP Top 10), cerca di eludere l'autenticazione, scansione, bot automatizzato e L7. Lo stack moderno è completato da un motore anti-bot, protezione API, rate limiting, patch virtuali, e una stretta integrazione con il CI/CD, in modo che le regole vengano visualizzate in modo sicuro come il codice.
Ruoli e posizione nell'architettura
Edge/CDN WAF (cloud): bassa latitanza, reputazione globale/Managed Rule, L7 DDoS.
Self-hosted WAF (on-prem/K8s) - Integrazione profonda con reti interne, configurazione sottile.
Approccio WAAP: WAF + API-Gateway funzioni (schema-validation, ), anti-bot, L7, .
Diagrammi di attivazione: Reverse-proxy prima dell'applicazione; Controller Ingress in K8s; Filtri servizio Mesh; sidecar.
Modello di protezione
Negative security (firme/CRS) - Copertura rapida di tecnologie conosciute (SQLI/XSS/SSRF/RCE).
Positive security (allow-list) - Consente solo le query «validi» (metodi/percorsi/diagrammi/tipi di contenuto).
Virtual Patching - Blocca online l'esportazione fino al fisso del codice.
Contestualità: regole diverse per contenuti statici, API, ammiraglio, download, webhoop.
Minacce e misure tipiche
OWASP Top 10: SQLI, XSS, IDOR/PALLA, SSRF, iniezioni in modelli, deserializzazione, misconfigi.
L7 : query/titoli lenti, burst per endpoint hot, protezione: rate-limits, challenge, unità auto.
Bot/screen - Comportamento, frequenza, pattern «non umani», device-fingerprinting, token dinamici.
Credential Stuffing/ATO: intercettazione/sovraccarico di logine, anomalia per IP/ASN, velocity rule, fattori aggiuntivi.
Download: tipo/dimensione/animato da antivirus, «immagine-only» nei media.
API/GraphQL: schema-validation, «maxDepth »/« maxCost», divieto di wildcard, controllo dei metodi e dei titoli.
Criteri e regole di progettazione
Scheletro di base per qualsiasi applicazione:1. Trasporti: TLS 1. 2+/1. 3, HSTS, mTLS su backend sensibili.
2. I metodi allow-list ('GET, POST, PUT, DELETE, PATCH, OPTIONS') sono univoci per la risorsa.
3. Percorsi: maschere rigide/regexpi rigorose; adminca/billing è un prefisso/dominio separato.
4. I titoli sono elenchi bianchi, non è necessario impedire i pericolosi ('X-Originale-URL', non standard).
5. Corpi: JSON-only/Multipart-only lungo il percorso; limiti di Content-Length, unità di binari per login/ricerca.
6. Rate limits: per-IP/ASN/chiave/organizzazione; Limiti separati per le richieste «costose».
7. Anti-Bot: scorciatoie comportamentali, challenge «non rivelatori», pendenza di identità (cookie-token, JA3/TLS FP).
8. CRS/Managed Rule: abilitati, sintonizzati con FP.
9. Virt patch - Blocca rapidamente i parametri o i modelli di attacco conosciuti.
10. Fogli/metriche: formato unico, correlazione con «trace _ id», report FP/TP.
Pratica di sintonizzazione come ridurre i falsi funzionamenti
Avvia nuove regole in Detect-only/Count-mode (shadow) con un campione di traffico.
Crea eccezioni per contesto ('path =/search', 'param = q'consenti speciali).
Dividi area: pagine pubbliche vs «operazioni sensibili» (la soglia di aggressività è diversa).
Catena di montaggio: regola di stage del canarino (1-5%) del ; rollback per metriche FP.
Cataloga i «falsi» payload per i test di regressione.
Integrazione nella DevSecOps
CI: regole statiche in Git; test: repliche di richieste reali + sintetico dal catalogo degli attacchi.
CD: cartelle canarie, bandiere di fiocchi; Monitoraggio «politico» (modifica delle regole = change).
RASP e SAST/DAST: WAF completa ma non sostituisce la correzione del codice.
Osservabilità e SLO
Metriche:- p95/99 di latitanza tramite WAF; Percentuale di bloccati/saltati share Managed Rules vs custom; «attack rate».
- Anti-bot: FP/TP
- L7 DDoS: burst-rate, auto-mitigation events.
- «Non più». 5% FP per operazioni autorizzate/24 ore ".
- «p95 overhead WAF ≤ 10 мс».
- «TTR è una patch virtuale di 30 minuti».
- Alarma: picco 4xx/5xx dopo il rilascio delle regole; crescita FP; Caduta del passaggio dei capch; degrado della validazione JWKS/mTLS.
Esempi di configurazione
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 + blocco di paesi)
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 ")
Regola NGINX semplice su metodi/corpi
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: limitatori
«maxDepth=6», «maxCost=1000», «__ schema», «allow-list», «Content-Type: application/json».
Controlli anti-bot e collaterali
Invisibile challenge (JS challenge senza capchi), proof-of-work su percorsi «costosi», analitica comportamentale (movimento/timing).
TLS/JA3-fingerprinting, reputazione IP/ASN, elenco proxy/VPN (entro limiti ragionevoli).
Trappole (campi honeypot) sui moduli, token dinamici modulo/sessione.
Protezione della privacy: riduzione del tracking, regole trasparenti, opzioni opt-out.
Attivazione API
Schema-first: OpenAPI/JSON Schema per la convalida; Vietare i campi superflui.
Auth: è obbligatorio Bearer JWT o mTLS; reject без `Authorization`.
Rate/Quota: per-key/per-org; se superata, «soft block «/slowing.
Webhooks firma HMAC, 'timestamp + nonce', una breve finestra di ricezione.
GraphQL: vedi i vincoli sopra; logica il nome o l'etichetta dell'operazione.
Download e media
Limite di dimensioni, whitelists MIME/estensioni, rinominazione dei file;
AC-scan (multi-motori), ImageMagick policy (senza decoder pericolosi);
Servizio Thumb su un dominio separato, serve-only-image.
Protezione di ammiragli e zone critiche
Dominio/percorso separato, mTLS/divieto con ASN/paesi comuni, rate limits rigidi, JIT, IP allow-list.
I segnali aggiuntivi (device posture, risk score) possono richiedere una seconda verifica.
Operazioni, incidenti e patch virtuali
Runbook - Rilascia rapidamente regole block, vincolo TTL, notifica comandi.
Criteri di rientro: 4xx/5xx> soglia, FP> soglia, p95 latency↑.
Post-mortem - Aggiunge un test a un set di regole di regressione, fissa il SIGMA-ALERT in SIEM.
Complaence e privacy
Logica minimo: percorso/metodo/codice/causa del blocco/ID; non conservare PII/segreti del corpo.
Data di conservazione dei fogli di criteri Accesso - per ruolo crittografia su disco.
Caratteristiche per iGaming/Fintech
Pagamenti/pagamenti/portafogli: per-org quote, mTLS a PSP, rigidi allow-list percorsi, HMAC per webhoop PSP.
ATF/bonus-abuse: regole velocity per login/registrazione/bagni, limiti comportamentali e anti-bot.
Fornitori di contenuti/studi: singoli domini/regole, IP/ASN allow-list, monitoraggio Time-to-Wallet/Conversioni sull'impatto WAF.
Requisiti regionali: geo-politiche (paesi/regioni), trasparenza dei guadagni per il GDPR.
Road map di implementazione
1. Inventario delle aree (pubbliche, API, adminca, download).
2. Profilo base: TLS, metodi/percorsi allow-list, Managed Rule/CRS.
3. Rate limits + anti-bot su percorsi sensibili.
4. Patch virtuali e regole di emergenza (SLA 30 min).
5. CI/CD per le regole, stage/canarino/shadow-mode.
6. Telemetria, SLO, test di regressione delle regole.
7. Revisione periodica delle eccezioni e pulizia dei giri.
Errori tipici
«Accendete tutti i CRS al massimo».
Regole senza canarini e modalità shadow.
Nessuna segmentazione: un solo criterio per tutto.
Ignora le specifiche (schema/limits).
Fogli senza correlazione ('trace _ id') e senza metriche di qualità.
FAQ
WAF sostituisce il codice sicuro?
No, no. È uno strato di allentamento e una patch virtuale, ma è necessario eliminare il codice.
Come si fa a capire che è ora di attivare i blocchi rigidi?
Quando il report shadow-modalità mostra un FP basso e ci sono test di regressione delle regole.
È necessario un WAF separato per l'API?
È meglio WAAP/integrazione con il gateway API: schema, limiti, autenticazione, firme web.
Totale
WAF/WAAP efficiente è una combinazione di CRS/Managed Rule di base, modello positivo, anti-bot, limiti e patch virtuali, supportata da processi di DevSecOps, telemetria e SLO nitidi. Questo approccio consente di rispondere rapidamente alle vulnerabilità, alla resistenza agli attacchi automatizzati e all'impatto prevedibile su UX e prestazioni.