Awesome WAF 
Tutto sui web application firewall (WAF) da una prospettiva di sicurezza. 🔥
Prefazione: Questa era originariamente la mia collezione personale sui WAF. La sto rilasciando come open-source nella speranza che possa essere utile per pentester e ricercatori. Come si dice, "la comunità impara gli uni dagli altri."

Una Definizione Concisa: Un firewall è un punto di enforcement delle policy di sicurezza posizionato tra un'applicazione web e l'endpoint client. Questa funzionalità può essere implementata in software o hardware, eseguita in un appliance o in un server tipico che esegue un sistema operativo comune. Può essere un dispositivo standalone o integrato in altri componenti di rete. (Fonte: PCI DSS IS 6.6)
Un web-application firewall si trova tra un utente e un'app web e ha il compito di prevenire che attività maliziose raggiungano l'app web. Un WAF o filtra la parte maliziosa della richiesta o semplicemente la blocca.
Sentiti libero di contribuire.
Contenuti:
Introduzione:
Come Funzionano i WAF:
- Utilizzando un insieme di regole per distinguere tra richieste normali e richieste maliziose.
- A volte utilizzano una modalità di apprendimento per aggiungere regole automaticamente imparando il comportamento dell'utente.
Modalità Operative:
- Modello Negativo (Basato su Blacklist) - Un modello basato su blacklist utilizza firme preimpostate per bloccare richieste chiaramente dannose. Le firme dei WAF che operano in modalità negativa sono specificamente create per prevenire attacchi che sfruttano certe vulnerabilità delle applicazioni web. I WAF basati su modello negativo sono un'ottima scelta per applicazioni web esposte a internet pubblico e sono molto efficaci contro le vulnerabilità principali. Es: regola per bloccare tutti gli input
<script>*</script> prevengono attacchi base di cross-site scripting.
- Modello Positivo (Basato su Whitelist) - Un modello basato su whitelist consente solo il traffico web secondo criteri specificamente configurati. Per esempio, può essere configurato per permettere solo richieste HTTP GET da certi indirizzi IP. Questo modello può essere molto efficace per bloccare potenziali attacchi su larga scala, ma bloccherà anche molto traffico legittimo. I firewall basati su whitelist sono probabilmente più adatti per applicazioni web su una rete interna progettate per essere usate solo da un gruppo limitato di persone, come i dipendenti.
- Modello Misto/Ibrido (Modello Inclusivo) - Un modello di sicurezza ibrido combina sia whitelisting che blacklisting. A seconda di tutti i tipi di specifiche di configurazione, i firewall ibridi potrebbero essere la scelta migliore sia per applicazioni web su reti interne che per applicazioni web su internet pubblico. Un buon scenario può essere quando l'applicazione web è esposta a internet pubblico (usa blacklist) mentre il pannello di amministrazione deve essere esposto solo a un sottoinsieme di utenti (usa whitelist).
Metodologia di Test:
Dove Cercare:
- Tieni sempre d'occhio le porte comuni che espongono un WAF, ovvero le porte
80, 443, 8000, 8080 e 8888. Tuttavia, è importante notare che un WAF può essere facilmente distribuito su qualsiasi porta che esegue un servizio HTTP. È bene enumerare prima le porte dei servizi HTTP e poi cercare i WAF.
- Alcuni WAF impostano i propri cookie nelle richieste (es. Citrix Netscaler, Yunsuo WAF).
- Alcuni si associano a header separati (es. Anquanbao WAF, Amazon AWS WAF).
- Alcuni spesso alterano gli header e rimescolano i caratteri per confondere l'attaccante (es. Netscaler, Big-IP).
- Alcuni si espongono nell'header
Server (es. Approach, WTS WAF).
- Alcuni WAF si espongono nel contenuto della risposta (es. DotDefender, Armor, Sitelock).
- Altri WAF rispondono con codici di risposta insoliti a richieste maliziose (es. WebKnight, 360 WAF).
Tecniche di Rilevamento:
Per identificare i WAF, dobbiamo provocarli (in modo fittizio).
- Esegui una normale richiesta GET da un browser, intercetta e registra gli header della risposta (in particolare i cookie).
- Esegui una richiesta da riga di comando (es. cURL) e testa il contenuto della risposta e gli header (senza user-agent incluso).
- Esegui richieste GET su porte aperte casuali e cattura i banner che potrebbero esporre l'identità del WAF.
- Su pagine di login, inietta payload comuni (facilmente rilevabili) come
" or 1 = 1 --.
- Inietta payload rumorosi come
<script>alert()</script> in barre di ricerca, moduli di contatto e altri campi di input.
- Allega un fittizio
../../../etc/passwd a un parametro casuale alla fine dell'URL.
- Aggiungi alcune parole chiave accattivanti come
' OR SLEEP(5) OR ' alla fine degli URL su un parametro casuale.
- Esegui richieste GET con protocolli obsoleti come
HTTP/0.9 (HTTP/0.9 non supporta query di tipo POST).
- Spesso il WAF varia l'header
Server in base a diversi tipi di interazioni.
- Tecnica dell'Azione Drop - Invia un pacchetto FIN/RST grezzo e artefatto al server e identifica la risposta.
Suggerimento: Questo metodo può essere facilmente realizzato con strumenti come HPing3 o Scapy.
- Attacchi a Canale Laterale - Esamina il comportamento temporale della richiesta e del contenuto della risposta.
Suggerimento: Maggiori dettagli possono essere trovati in un post del blog qui.