I passaggi di seguito illustrati, sono stati redatti a solo scopo dimostrativo e sfruttano vulnerabilità note. Bertoldi Cybersecurity e i suoi collaboratori non hanno alcuna responsabilità per gli utilizzi impropri di questa guida.
L’attacco di tipo HTTP Flood si basa su una vera e propria inondazione del web server target con richieste lecite: lo scopo dei criminal hacker è, ovviamente, quello di mantenerlo in una situazione di saturazione/crash per aver superato i limiti massimi di richieste consentiti.
Indice degli argomenti
Attacco HTTP Flood: ecco come funziona
Per capire come avviene un attacco HTTP verso un server Web, proviamo a fare un semplice esempio pratico.
Quando viene eseguita una richiesta da parte del nostro browser verso una pagina Web, il server che la ospita inizierà subito a processarla. Anche se l’utente fermerà o cancellerà la richiesta, il server continuerà ad elaborarla.
Se ricarichiamo la pagina, un’altra richiesta verrà processata, in parallelo con la prima richiesta.
Sfrutteremo quindi questa possibilità simulando la pressione del tasto F5 un numero di volte elevatissimo. Una volta raggiunto il limite di richieste sopportabili per un sito Web ed i suoi componenti, quest’ultimo andrà in crash.
Nel nostro esempio vedremo come effettuare l’attacco utilizzando il nostro PC, ma solitamente attacchi di tipo HTTP Flood vengono distribuiti fra più macchine per aumentarne la potenza e la portata.
Quando ricarichiamo una pagina dal browser, viene richiesta al server che la ospita una copia nuova della pagina e di tutti i suoi componenti (CSS, Javascript, immagini ecc.), a meno che questi ultimi non vengano salvati nella cache del browser.
Per evitare che i contenuti vengano caricati dalla cache del browser (poiché abbasserebbero il numero delle richieste al server) andremo anche a simulare le richieste mediante la pressione dei tasti Shift+F5, che su Google Chrome ricaricano la pagina richiedendola direttamente dal server ed evitando quindi i contenuti in cache.
Strumenti usati per l’attacco
Per simulare un attacco di tipo HTTP Flood ci serviremo di un semplice tool e di uno script creato ad hoc che permette di simulare la pressione dei tasti Shift+F5 per il caricamento automatico di una pagina Web:
- AutoIt è un linguaggio di scripting e di automazione freeware per Windows che useremo per l’esecuzione dello script;
- SciTE Lite è invece un editor di testo che useremo per la creazione dello script (incluso nel pacchetto Full di AutoIt).
Una volta installato AutoIT, avviamo l’editor SciTE Lite e scriviamo le seguenti semplici righe di codice:
- Sleep(5000)
- Send(“{F5 100000}”)
Quindi salviamo il file in formato .au3 che è quello dei file eseguibili con AutoIt.
Il comando Sleep(5000) serve a creare un lasso di tempo di 5 secondi dopo aver eseguito lo script che ci consentirà di posizionarci su una pagina del sito che vogliamo attaccare.
A quel punto, il comando Send(“{F5 100000}”) ricaricherà per 100mila volte la pagina scelta.
Se usiamo Google Chrome come browser per simulare l’attacco HTTP Flood, sostituendo il comando Send(“{F5 100000}”) con Send(“+{F5 100000}”) la pagina Web verrà ricaricata escludendo il contenuto presente nella cache del browser.
A questo punto, siamo pronti ad usare il nostro script per compiere un attacco di tipo HTTP Flood verso un sito Web target.
Innanzitutto, è consigliabile mascherare il proprio IP reale utilizzando una VPN che non trattenga i log di navigazione.
Fatto questo, posizioniamoci con il browser Chrome sulla pagina del sito da attaccare (se quest’ultima è dinamica le richieste saranno ancora maggiori).
Avviamo lo script appena salvato e torniamo velocemente alla pagina Web. Pochi secondi dopo cominceremo a vedere che la pagina viene ricaricata in continuazione. Per terminare lo script apriamo il task manager e chiudiamo il processo di AutoIT (sarà probabilmente quello con maggiore carico sulla CPU).
I consigli per proteggersi da un attacco HTTP Flood
Mettiamoci ora nei panni di un webmaster e analizziamo in dettaglio due tecniche di remediation utili a contrastare i tentativi di attacco HTTP Flood.
Implementazione di un sistema di cache sul CMS
La cache serve per salvare le pagine (articoli, pagine ecc.) di un CMS come file statici.
Queste pagine statiche vengono poi restituite agli utenti mentre navigano sul nostro sito web riducendo il carico del server.
Le pagine statiche generate dalla cache forniscono, inoltre, un’esperienza utente migliore poiché caricano e vengono reindirizzate molto velocemente da tutti i browser, consentendo una navigazione migliore dell’utente all’interno del nostro sito web.
La cache migliora, inoltre, il posizionamento del nostro sito sui motori di ricerca; questo, ovviamente, dipende anche da altre metriche di SEO, ma fra i fattori che Google tiene in considerazione, la velocità è fondamentale.
Se usiamo WordPress come CMS per il nostro sito Web e vogliamo implementare la cache, possiamo utilizzare il plugin W3 Total Cache
Implementazione CDN e applicazione Rate Limiting
La CDN (Content Delivery Network) serve a creare versioni multiple distribuite a livello globale del nostro sito internet.
Senza CDN, tutti i visitatori del nostro sito web dovrebbero richiedere tutte le pagine ad una sola origine, il nostro server. Ovunque essi si trovino, per accedere al sito faranno richieste sempre nello stesso posto.
Mediante l’implementazione di una CDN, i visitatori possono ottenere i contenuti direttamente dal server a loro più vicino, senza richiederli al nostro server, riducendo i tempi di caricamento e velocizzando le prestazioni generali del sito internet.
Usando la CDN come contromisura all’attacco HTTP Flood è inoltre possibile applicare il rate limiting sugli indirizzi IP che consente di bloccare le richieste provenienti da un determinato indirizzo IP se superano una certa soglia.