Si sente parlare abbastanza spesso di attacchi DoS (Denial of Service, negazione del servizio, in italiano), in contesti anche eterogenei tra loro, ma di cosa si tratta esattamente?
Per quanto la mia giovane memoria possa essermi d’aiuto, la prima volta che si è iniziato a parlare di attacchi DoS anche tra il pubblico non tecnico è stato nel Febbraio 2000, quando l’allora quindicenne Michael Calce (alias MafiaBoy, non chiamatelo hacker, per favore) riuscì a rendere inservibili importanti siti web come Yahoo!, Amazon, eBay e CNN.
Qui sta il punto chiave di un qualsiasi attacco DoS: rendere inservibile un servizio. Confidenzialità, integrità e disponibilità (Confidentiality, Integrity e Availability (CIA)) sono i tre principi cardine di cui si occupa la sicurezza informatica. Nel caso degli attacchi DoS, è appunto il principio di disponibilità ad essere messo in pericolo.
Negli corso degli anni siamo entrati in contatto con attacchi DoS di tutti i generi.
Verso la fine dello scorso decennio e l’inizio del corrente, i malintenzionati erano soliti realizzare attacchi DoS sfruttando soprattutto vulnerabilità del sistema operativo (Windows in primis) nell’implementazione dello stack di rete.
In questo senso agiva il cosiddetto “ping of death”: l’invio di un pacchetto ICMP Echo Request (ping) più grande di 65.535 byte in grado di far crashare vari OS come Windows 95, Windows NT4, kernel Linux fino al 2.0.24 e vari apparati di rete. Da riga di comando bastava scrivere:
ping -l 65510 [indirizzo_IP_vittima]
Molti di voi ricorderanno poi le IRC wars, il cui obiettivo era far disconnettere dalla Rete un utente della chat sgradito. Un’arma micidiale di quelle “guerre” era il nuker, un tool che non faceva altro se non inviare un pacchetto TCP con il flag URG attivo, se la vittima usava Windows 95 il Blue Screen of Death era garantito.
Mi limito a citare anche gli attacchi Smurf per la fama che avevano raggiunto negli anni passati, benché ormai desueti. Una versione più moderna sono gli attacchi di DNS amplification.
Un attacco sempre verde è invece il SYN flood. Quando un host riceve su una determinata porta un pacchetto TCP con il flag SYN attivo, lo interpreta come una richiesta di inizio di connessione (three-way handshake) e risponde al mittente con un altro pacchetto TCP coi flag SYN e ACK attivi. A questo punto l’host aspetta la risposta definitiva del mittente per sapere se iniziare o meno la connessione.
Se l’attaccante imposta nel campo mittente un indirizzo IP non attivo, la risposta non arriverà mai all’host attaccato, che intanto avrà inserito la connessione in una coda di accettazione fino allo scadere di un timer che può durare dai 75 secondi ai 23 minuti. Siccome dimensione della coda è ovviamente limitata, un attaccante può inviare numerose richieste illegittime fino a saturarla, così da mettere l’host vittima in uno stato di indisponibilità ad accettare ulteriori richieste di connessione sulla quella porta, legittime o meno. Nel caso di un server web, esso non sarà più raggiungibile da nessun utente.
Tutt’altro che scomparso è anche il mail bombing, ovvero l’invio massiccio di mail ad un determinato mail server fino a intasarlo, tanto più che i miei colleghi poche settimane fa si sono trovati a doverne gestire uno per un cliente.
Una certa fama la mantiene anche la cosiddetta fork bomb, il cui nome nasce dalla chiamata di sistema fork()
che, nei sistemi Unix-based, ha il compito di creare processi figli. Siccome ovviamente i processi che possono girare contemporaneamente su un sistema operativo sono limitati, se un malintenzionato crea uno script che genera centinaia di processi in pochissimi tempo e lo lancia su un sistema (in questo caso siamo quindi di fronte ad un DoS locale, e non remoto come quelli visti sin ora), il sistema diventerà praticamente inservibile. Un esempio piuttosto artistico è la seguente fork bomb funzionante da riga di comando bash:
:(){ :|:& };:
Sconsiglio di provarla. Rimando a questo articolo per la sua decifrazione.
Veniamo ora all’attacco utilizzato da MafiaBoy: il DoS distribuito (DDoS, Distributed Denial of Service). Si sente spesso parlare di botnet e di computer zombie, e io stesso li ho citati in diversi articoli passati, ma non a tutti è chiaro quale sia il loro scopo. Una botnet è una rete di computer sotto il controllo di un attaccante che può gestirla come meglio crede: dall’invio di spam, alla distribuzione di malware alla realizzazione di attacchi DoS, appunto.
L’attacco DoS più dumb (sciocco) che ci sia è probabilmente quello flood, in cui l’attacacnte non fa altro che inviare la maggior quantità di dati possibili alla vittima in modo da saturare la sua capacità di gestire ulteriori connessioni. Gli attacchi flood possono usare pacchetti di diverso tipo, come quelli TCP SYN, già citati, UDP o ICMP.
Per massimizzare la riuscita dell’attacco, un malintenzionato non si limita certo ad usare il suo computer di casa, ma utilizza appunto migliaia di computer sotto il suo controllo (raggruppati sfruttando le vulnerabilità e gli attacchi più disparati) per generare enormi quantità di traffico.
Oltre il già citato caso di MafiaBoy, primo nella sua specie, negli anni si sono susseguiti numerosi attacchi su larga scala, l’ultimo dei quali si è verificato la scorsa estate durante il conflitto tra Russia e Georgia, e che ha visto coinvolti, come vittime, numerosi siti istituzionali Georgiani.
Gli attacchi DDoS sono usati anche spesso dai criminali informatici per mettere sotto scacco siti commerciali (è successo soprattutto a siti erotici e a casino online) per chiedere un riscatto in cambio della cessazione dell’attacco.
Tutt’oggi moltissimi bollettini di sicurezza (decine al mese) dei sistemi operativi o di software di rete e non, riguardano vulnerabilità di Denial of Service. In questa categoria vengono inserite quelle vulnerabilità che si ritiene non siano in grado di portare ad una compromissione della confidenzialità e dell’integrità di un sistema (diciamo, genericamente, all’esecuzione di codice arbitrario), ma “solo” alla sua disponibilità.
Si va dal media player che crasha con un file multimediale con un header malformato, al server VoIP che viene buttato giù da un pacchetto SIP con campi più lunghi del dovuto.
Un punto cruciale è però la capacità, tutt’altro che scontata, di saper distinguere tra una bug che porta ad un semplice crash e un bug che porta all’esecuzione di codice arbitrario da parte di un attaccante.
In questo senso si inserisce la recente vulnerabilità remota nel kernel Linux prima della versione 2.6.28-git8 nella gestione del protocollo SCTP. La vulnerabilità, inizialmente definità come un semplice DoS dai bollettini di sicurezza di molte distrubuzioni Linux, consente invece ad un attaccante di prendere il pieno controllo del sistema vittima, nel caso esso utilizzi il protocollo SCTP. Vi indirizzo all’ottimo lavoro di Massimiliano Oldani (alias sgrakkyu) per avere dettagli sulla vulnerabilità e sull’exploit.
Gli sviluppatori Windows, dal canto loro, hanno da poco rilasciato un interessantissimo plugin per WinDbg in grado di classificcare la probabile exploitabilità (sfruttabilità) di una vulnerabilità: !exploitable Crash Analyzer.
Caso estremo di attacchi DoS è ovviamente la manomissione fisica di dispositivi di rete o simili. Spesso, infatti, all’interno delle aziende, la sicurezza fisica delle appliance è presa piuttosto sotto gamba.
Mi è capitato giusto poche settimane fa di camminare tra gli uffici dell’Agenzia delle Entrate di una grossa città del nord d’Italia e di vedere decine di switch e router piazzati bellamente nel corridoio in un armadietto neanche chiuso a chiave. Lì un malintenzionato farebbe altro che un DoS.