Cos'è un attacco di tipo DoS/DDoS?
DoS e DDoS sono rispettivamente l'acronimo di Denial-of-Service e Distributed Denial-of-Service, ovvero "Negazione di un servizio". Questi termini si riferiscono ad un tipo di attacco (DoS/DDoS attack, appunto) il cui obiettivo è quello di esaurire le risorse rese disponibili da una rete, un applicazione o un servizio in genere, in modo tale che gli utenti "legittimi" di quel servizio non siano in grado di usufruirne. Pensiamo ad esempio ad un sito di e-commerce, il cui "fermo-macchina" per qualche ora può generare perdite per milioni di euro.
Generalmente, un attacco DDoS viene condotto da un nutrito gruppo di client sparsi per il mondo che, ad un istante preciso, iniziano a "bombardare" di traffico un sito web, una rete o un servizio in genere. I client che partecipano all'attacco possono essere utilizzati deliberatamente (e consapevolmente) dai rispettivi proprietari, come ad esempio nel caso di azioni condotte da gruppi di attivisti, oppure possono essere stati precedentemente compromessi da trojan come Zeus e SpyEye ed essere di conseguenza associati alle relative botnet. Tra l'altro non si abbassa il livello di pericolosità di questi trojan, tanto che l'ENISA ha dovuto rilasciare recentemente un advisory.
Metodi per il DDoS
Esistono diversi metodi per condurre un attacco di tipo DDoS. Questi metodi possono includere attacchi di tipo "flood" in cui vengono generate grandi quantità di traffico e di sessioni verso il target oppure metodi più sofisticati, che sfruttano vettori di attacco a livello di applicazione, come KillApache, Slowloris e così via. Attualmente gli attacchi DDoS possono essere classificati in tre grandi categorie: attacchi "volumetrici", attacchi di tipo "TCP State-Exhaustion" e attacchi "Application-layer".
Attacchi Volumetrici
Questo tipo di attacchi sono essenzialmente finalizzati ad esaurire la banda disponibile di un'infrastruttura di rete con azioni di "flooding", ovvero inondando il target con enormi quantità di traffico e causando, di conseguenza, l'indisponibilità del servizio. Esempi di attacchi volumetrici includono TCP SYN, ICMP, Fragment e UDP floods.
Attacchi di tipo "TCP State-Exhaustion"
Condividono con il precedente metodo solo l'attività di flooding, ma sfruttano un altro principio: in sostanza il metodo consiste nell'inondare di traffico un target causando la saturazione delle tabelle di stato utilizzate da firewall e IDS/IPS per l'inspection dei pacchetti provenienti dalle varie connessioni. A questi apparati vanno aggiunti anche i load balancers, vulnerabili allo stesso tipo di attacco. Un esempio classico appartenente a questa categoria è l'attacco di tipo Sockstress, che consiste nel riempire la connection state table di un firewall aprendo un elevato numero di sockets TCP ed eseguendo specifici TCP stress test, come Zero window, Small window e altri.
Attacchi "Application-layer"
Utilizzano meccanismi più sofisticati dei precedenti, conducendo degli attacchi mirati a specifici servizi ed esaurendo lentamente le risorse. Grazie a questa caratteristica risultano più difficili da intercettare e, nel contempo, molto efficaci contro connessioni low-rate. Esempi appartenenti a questa categoria sono i già citati KillApache e Slowloris, a cui possiamo certamente aggiungere Slowhttptest.
Dal punto di vista statistico, la tendenza degli utlimi anni è quella di utilizzare attacchi DDoS "ibridi" che sfruttano una combinazione dei metodi volumetrici ed application-layer, poichè ciò aumenta drammaticamente le probabilità di successo. Come si evince inoltre dal report periodico di Kaspersky, relativo alla seconda metà del 2011, il metodo più usato è quello dell'HTTP Flood (vedi Fig. 1).
Si assiste inoltre ad una crescita costante degli attacchi di tipo volumetrico, sia a causa del gran numero di client infettati da malware (e quindi "posseduti" dalle varie botnet) sia a causa del crescente fenomeno dell'hacktivism, i cui aderenti partecipano volontariamente e consapevolmente ad azioni di attacco per motivazioni generalmente di carattere sociale, politico o religioso.
Tre strumenti per il DDoS
Esistono vari tool per condurre DoS e DDoS, noi ne citeremo quattro per tutti: Slowloris, Slowhttptest, THC-SSL-DOS e LOIC (anche nella sua variante HOIC). Slowloris e Slowhttptest, disponibili solo per Linux, risultano abbastanza simili tra loro, in quanto hanno in comune principi e tecniche finalizzati a realizzare il Denial-of-Service a livello applicativo (Application-Layer Denial-of-Service). Essi sfruttano le proprietà del protocollo HTTP, il quale richiede che ogni richiesta (http-request) venga completamente ricevuta dal server prima di essere elaborata. Se la http-request non è completa (o la connessione è molto lenta), il server mantiene molte risorse occupate, generando il denial of service. Questi tool quindi inviano richieste http parziali, come attraverso il seguente comando:
./slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u https://myseceureserver/resources/index.html -x 24 -p 3
con questo comando si stanno inviando 1000 connessioni (-c 1000) lente negli headers (-H) ogni 10 secondi (-i 10) alla velocità di 200 connessioni al secondo (-r 200) usando il metodo GET e considerando il server non accessibile dopo un timeout di 3 secondi (-p 3). Il risultato del test è schematizzato in Fig. 2:
THC-SSL-DOS, invece, disponibile sia per Windows che per piattaforma *nix, nasce come strumento per testare il protocollo SSL (Secure Socket Layer), comunemente impiegato per crittografare il traffico a livello applicativo. THC-SSL-DOS è uno stress tool basato sul comportamento "asimmetrico" del protocollo SSL, a causa del quale stabilire una connessione SSL richiede al server una potenza elaborativa 15 volte maggiore rispetto al client.
THC-SSL-DOS obbliga il processore del server ad un intenso lavoro di encrypting derivante dalle continue chiamate alla funzione RSA_encrypt(). Ciò causa, in associazione all'asimmetria appena citata, un overload del server che provoca una condizione di denial of service, in quanto il server non riesce più a sostenere il carico elaborativo. L'attacco è reso molto più efficace dal fatto che i server sono preparati a gestire efficacemente la fase di SSL-handshake solo all'inizio di una sessione e non continuamente. THC-SSL-DOS sfrutta inoltre un'altra peculiarità del protocollo SSL, ovvero la rinegoziazione (SSL-Renegotiation) delle chiavi durante una sessione SSL. Se tale feature è abilitata sul server, si ottiene un moltiplicatore del carico elaborativo a cui il server è sottoposto. In Fig. 3 è mostrato un semplice comando di THC-SSL-DOS.
Infine, diamo un'occhiata a LOIC (Low-Orbit Ion Cannon), di cui esiste anche una versione simile chiamata HOIC (High-Orbit Ion Cannon). LOIC è in realtà uno degli strumenti più utilizzati per il DoS e soprattutto per il DDoS. È un tool (per Windows) che implementa il metodo del TCP o UDP flooding, per cui può essere classificato come volumetrico. Si tratta di uno strumento molto efficace, tanto da venire utilizzato da organizzazioni come Anonymous per compiere le proprie azioni. A tale scopo esiste addirittura una pagina Web apposita, che spiega la configurazione e l'utilizzo di LOIC, con tanto di FAQ e canali IRC da contattare.
In Fig. 5 è mostrata invece l'interfaccia iniziale di LOIC, che è abbastanza "self-explanatory": basta inserire il target nell'URL (o il suo IP) e le opzioni, come il protocollo da utilizzare (TCP, UDP o HTTP) per il flooding, il timeout e la porta da attaccare, dopodichè si lancia l'attacco cliccando sul pulsante nella sezione 2 in alto a destra e il gioco è fatto.
Contromisure
Come è noto, non esistono vere e proprie contromisure per neutralizzare un attacco DDoS, soprattutto se a lanciarlo è una botnet composta da 30.000 client sparsi in giro per il mondo. In ogni caso si possono attuare dei workaround per mitigare l'attacco, ma vanno implementati a livello di firewall e IDS/IPS direttamente presso l'ISP che ci fornisce connettività.
Delle firewall rules ben scritte possono essere molto utili almeno per individuare l'attacco, ad esempio filtrando tutto il traffico UDP e ICMP. Il problema fondamentale è che, soprattutto per attacchi condotti contro la porta 80, i firewall non riescono a determinare se si tratta di traffico "malevolo" o legittimo e ciò è aggravato soprattutto in presenza di attacchi "slow". Per reagire ad attacchi di tipo flooding esistono dei software "anti-flood", che bloccano anche attacchi di tipo brute force e scansioni massive. Uno di questi è IOSec, scaricabile da Sourceforge e di cui si può verificare il funzionamento utilizzando una demo online disponibile al seguente link.