Il 28 Febbraio uno dei sistemi piu noti dagli sviluppatori informatici chiamato GitHub, uno dei siti più popolari al mondo che funziona da contenitore aperto di progetti software open source, ha subito il piu devastante attacco di tipologia Ddos di “banda” mai registrato. L’attacco ha impiegato ben 1.35 Tbps (terabit per secondo) attraverso 126.9 milioni di pacchetti al secondo, confinando GitHub offline per circa 10 minuti. È stato un attacco che ha avuto un impatto senza precedenti. Nemmeno il piu famoso attacco Ddos di banda realizzato da Mirai (nota botnet di dispositivi IoT) era riuscito ad impiegare tali “forze”.
Cos'è un attacco Dos
Per intenderci, un attacco di tipologia Denial of Service (DoS) è una tecnica che permette a chi vuole attaccare di rendere inutilizzabile un servizio, un sito, o un server. Ci sono diversi tipi di attacchi Dos, ma due sono quelli più usati:
- uno denominato di “banda”
- ed uno denominato di “risorsa”.
Un attacco DoS di “risorsa” è un attacco che sfrutta le risorse informatiche (come il processore) del sistema che ospita il servizio attaccato. Con questo attacco si riesce a “consumare totalmente” le risorse disponibili nel sistema vittima (come la memoria) bloccando il sistema stesso e rendendo il servizio ospitato inutilizzabile. La tipologia DoS di “banda” sfrutta la capacita dell’attaccante di saturare la banda (larghezza di banda del provider) in ingresso al sistema che ospita il servizio vittima, impedendo l’ingresso ad altre connessioni (utilizzatori comuni).
Proprio come l'attacco DoS di “risorsa” è gestito e mitigato da appositi moduli software che ne generano quella che viene chiamata "tolleranza ai guasti" riducendo notevolmente l’impatto, e da software sempre piu in grado aggirarli, l'attacco DoS di “banda” è facilmente individuabile e mitigabile bloccando la sorgente (unica in questo caso) da dove provengono le numerose richieste.
Cos'è un attacco DDos
Queste azioni di protezione hanno indotto gli attaccanti a studiare metodi alternativi piu complessi o addirittura impossibili da contrastare. E qui arriviamo al fenomeno degli attacchi DDoS (Distributed Denial of Service), dove le tipologie utilizzate per effettuare attacchi sono le stesse, ma invece di essere un sistema unico di attacco (unico attaccante) molteplici sistemi si sincronizzano per effettuare l’attacco in parallelo, aumentando cosi la forza di attacco generale e rendendo difficile l’individuazione della sorgente essendo essa distribuita. Oggi tali attacchi sono principalmente implementati o da organizzazioni vere e proprie come per esempio Anonymous oppure da sistemi piu complessi come le Botnet (non argomento di questo articolo).
Ora dobbiamo chiederci: come è possibile raggiungere una tale portata? Come è stato possibile sferrare un attacco senza precedenti a GitHub?
La risposta questa volta è arrivata direttamente da CloudFlare, azienda che protegge dagli attacchi Ddos e fornitrice di GitHub, individuando un nota tecnica di “amplificazione” basata su un nuovo vettore. Tale tecnica si basa sul fatto che l’attaccante non abbia a disposizione una botnet di grandi dimensioni, la quale, da sola, non potrebbe mai permettersi di raggiungere tali risorse di banda.
Per questo motivo l’attaccante è costretto ad utilizzare dispositivi mal configurati e/o vulnerabili pubblicamente raggiungibili online e sfruttarli come “specchio” per amplificare la propria “banda di attacco”. Nel caso specifico il ci sono riusciti con memcached, un sofware disponibile opensource proprio su GitHub (l’ironia della sorte). Memcached è utilizzato per velocizzare sistemi che offrono contenuti in rete. Sfortunatamente memcached se non opportunamente configurato risponde su 0.0.0.0 (ovvero su tutti gli indirizzi del server) ed ha abilitato il protocollo UDP (si tratta dello User Datagram Protocol, uno dei principali protocolli di trasporto dei protocolli in Internet) di default anche se non è utilizzato hai fini del contenuto.
Un altra sua peculiarità (evincibile direttamente dal protocollo) è nella grandezza del payload del sistema di risposta su UDP. La dimensione della risposta ad una particolare “domanda” risulta essere molto piu grande della domanda stessa. Nel caso specifico una richiesta a memcached UDP di 15Bytes causa una risposta di 134KB, quindi ben 10000 volte piu grande! Se uniamo il fatto che il protocollo UDP non ha particolari controlli nè di sessioni nè di sequenza, risulta evidente il metodo di attacco utilizzato.
L’attaccate inonda di richieste UDP di 15Bytes server memcached pubblicamente disponibili online e mal configurati (di default, memcached resta in ascolto su tutti gli indirizzi del server ospitante) inserendo come indirizzo sorgente (attraverso una nota tecnica denominata IP spoofing) l’indirizzo della vittima (in questo caso di GitHub). Ogni memcached risponde all’indirizzo di origine (spoofato ed appartenente alla vittima) con un pacchetto di dimensione 134KB innondando l’indirizzo vittima con un moltiplicatore di 10000! Ecco l’effetto amplificazione della tecnica utilizzata.
Ora proviamo ad immaginare questo scenario realizzato da una piccola botnet composta da qualche migliaio di bot ognuno dei quali effettua qualche migliaio di richieste UDP da 15Bytes a server multipli memcached mal configurati “sostituendo” l’indirizzo sorgente con l’indirizzo della vittima (attraverso spooning). Le risposte dei server memcached verso GitHub risulterà essere senza precedenti.
La seguente immagine (realizzata da cloudflare) esemplifica l’azione dell’attaccante.
Digitando il seguente comando è possibile verificare se il server TARGET-SERVER è vulnerabile all’attacco (in termine di configurazione) e se potrebbe essere utilizzato come amplificatore di Ddos. Se la risposta ottenuta è “vuota” allora il server non è vulnerabile, contrariamente se la risposta ottenuta non è “vuota” (come nel caso seguente) il server TARGET risulta essere vulnerabile ed è necessario configuralo adeguatamente.