Indice
0) Prefazione 0.1) A chi rivolto questo DOC 0.2) Come leggere questo DOC 0.3) Licenza dUso 1) Fondamentali 1.1) Il Computer 1.2) Reti 1.2.1) Sistema Client Server 1.2.2) Servizi e Porte 1.2.3) Pacchetti 2) Denial of Service 2.1) La teoria del DoS 2.2) Negazione del Servizio 2.2.1) I pericoli del DoS 2.2.2) Sistemi vulnerabili ai DoS 2.2.3) Conseguenze di un attacco DoS 2.3) Tipologie di attacchi DoS 2.3.1) Categorie di DoS 2.3.2) Attacchi DoS Volumetrici/Protocollo 2.3.2) DDoS e DrDoS 2.3.2.1) Distributed Denial of Service 2.3.2.2) Distributed Reflected Denial of Service 2.4) UDP/ICMP Flood 2.4.1) Simulare un attacco UDP/ICMP Flood 2.4.2) Mitigare un attacco UDP/ICMP Flood 2.5) SYN Flood 2.5.1) Simulare un attacco SYN Flood 2.5.2) Mitigare un attacco SYN Flood 2.6) HTTP Flood 2.6.1) Simulare un attacco HTTP Flood 2.6.2) Mitigare un attacco HTTP Flood 2.7) Slowris 2.7.1) Simulare un attacco Slowris 2.7.2) Mitigare un attacco Slowris
Autore
Stefano > murdercode < Novelli, 24 anni, programmatore e ricercatore di sicurezza informatica. Fondatore della community www.inforge.net e ideatore dellebook.
Collaboratori
Marco > ecvz < Padovan, 29 anni, programmatore e sistemista informatico. Fondatore dellhosting www.hiperz.net
> Max Fridman <, 23 anni, membro Staff di www.inforge.net Francesco > Nhoya < Giordano, 19 anni, membro Staff di www.inforge.net Claudio > Sharu < Sciortino, 16 anni, membro Staff di www.inforge.net > B4ckdoor <, programmatore e creatore del B4ckself
INFORGE.NET
0) Prefazione
In questa primo capitolo parleremo delletica e dei motivi che ci hanno spinto a scrivere questo documento. Si consiglia la lettura cos da fruire nel migliore dei modi delle informazioni riportate in seguito.
Leggenda delle Icone Questa icona rappresenta un argomento di natura tecnica che potrebbe non essere comprensibile a chi non esperto del settore. Le parti tutte in corsivo saranno invece scaglioni di codice di programmazione. Verranno tutte commentate, ma si da per ipotesi che il lettore conosca un minimo di programmazione.
1) Fondamentali
In questo capitolo cercheremo di riportare tutte le informazioni fondamentali per apprendere al meglio gli argomenti pi avanzati della lettura.
1.1) Il Computer
Iniziamo ovviamente dal concetto pi essenziale: il Computer. Non limitiamoci per a vederlo come il computer fisso o il portatile che tutti noi abbiamo in casa (si spera!) ma pi come a un qualunque dispositivo in grado di eseguire calcoli matematici, restituendo un output grazie al risultato delle istruzioni che elaborano i dati proveniente da un input esterno.. Ok un attimo: cosa significa? Un input pu essere un valore o una serie di valori che vengono inviati al nostro computer. Possono essere valori numerici, parole, azioni compiute. Un esempio pu essere il movimento del mouse: nella sua versione analogica (quella con la palletta insomma) il mouse invia dati in input al computer; questi dati sono i due assi verticale e orizzontale, e sono valori numerici. Listruzione invece il software che elabora il dato: senza listruzione, i valori inviati dal nostro mouse sarebbero completamente inutili. Listruzione invece raccoglie i dati, li riconosce come valori del mouse e li prepara per mostrare il risultato. Loutput appunto il risultato dellunione input+istruzione: possiamo quindi dire che loutput il cursore che si muove allinterno del nostro schermo. Tutto chiaro? Bene, torniamo a noi. Dicevamo che non dobbiamo limitarci a vedere il computer come al PC Desktop o il Notebook ma a
qualunque dispositivo in grado di elaborare un input e mostrare un output. Quindi teniamo conto anche dei tablet, degli smartphone e dei router: insomma, allarghiamo i nostri orizzonti.
1.2) Reti
La rete informatica un insieme di computer collegati tra di loro, rendendoli in grado di trasmettersi informazioni e condividersi periferiche e risorse. La rete pu avere uno o pi seguenti di questi scopi: Condividere delle risorse (file, applicazioni o hardware, connessioni a internet etc...) Comunicare fra persone (email, chat etc...) Lavorare sullo stesso progetto Videogiocare e tanto altro.
Le reti possono poi essere classificate in base alla loro dimensione geografica: LAN: reti di superficie ridotta (una stanza o un edificio) caratterizzata da alte prestazioni e mezzi di trasmessione molto veloci. WAN: reti di superficie media MAN: reti di grandi dimensioni, ai livelli di unarea urbana (es. fibra ottica)
Le reti possono essere di due tipi di gerarchie: Client/Server e P2P (Peer to Peer).
Internet, la pi grande rete mai creata, attualmente fa affidamento ad entrambe le tipologie di gerarchia.Tuttavia nella navigazione nel World Wide Web (www, con protocollo di comunicazione http) si fa affidamento principalmente alla struttura Client/Server, che tratteremo in questo documento.
Questo concetto dovete tenerlo a mente, poich sar la base di tutto quello che diremo in questo documento. Sia i server che i client hanno inoltre un indirizzo identificativo nella rete chiamato IP. Tale indirizzo unico e rappresenta il computer nella rete (un p come un numero di cellulare che rappresenta la SIM).
10
Le porte sono spesso standard, eccone una lista delle pi comuni di un Server:
Porta Protocollo 21 FTP 22 SSH 23 TELNET 25 SMTP 53 DNS 80 HTTP 110 POP3 137 NetBIOS 443 HTTPS
Porta Protocollo 465 SMTP (SSL) 993 IMAP (SSL) 995 POP3 (SSL) 1080 SOCKS Proxy 1994 OpenVPN 3306 MySQL 5432 PostgreSQL 6667 IRC 8080 HTTP (web cache) Lista completa su Wikipedia
Come possibile vedere, ad ogni porta corrisponde un protocollo. I protocolli di comunicazione sono regole utilizzate da due computer per comunicare tra di loro: come un giapponese ed un italiano, due computer che non parlano la stessa lingua difficilmente riusciranno a capirsi. Tutti questi protocolli sono definiti dal modello di riferimento OSI (Open System Interconnection). Il modello OSI contiene le regole e gli standard che consentono a qualsiasi sistema di comunicare con altrettanti sistemi. Questi protocolli sono strutturati in sette livelli, e ognuno ha un compito ben preciso. I sette livelli OSI sono: 1. Livello Fisico: trasmissione di flussi di dati raw 2. Livello data-link: trasferimento di dati da due punti 3. Livello di rete: indirizzamento e trasferimento dati 4. Livello di trasporto: trasmissione affidabile dei dati 5. Livello di sessione: stabilimento e mantenimento della connessione
11
6. Livello di presentazione: presentazione dati, cifratura e compressione 7. Livello di applicazione: esecuzione delle applicazioni
1.2.3) Pacchetti
I pacchetti sono contenitori di dati che viaggiano allinterno di una rete, sfruttando il metodo di trasferimento a commutazione di pacchetto (approfondimento pacchetti di rete). Ve lo rispiego in linguaggio volgare: un pacchetto contiene le informazioni da passare a un altro computer. Meglio? :) Essi sono formati da tre parti: Header: contiene tutte le informazioni necessarie alla trasmissione (mittente, destinatario etc...). Data: contiene le informazioni da scambiare Checksum: un codice di controllo per la verifica dellintegrit del pacchetto
I pacchetti viaggiano continuamente da un computer ad un altro. Viaggiano quando siamo connessi in una LAN (magari tra uno switch e un notebook), viaggiano quando siamo connessi su Skype oppure quando stiamo navigando su Facebook. E possibile che il vostro router di casa invii pacchetti al vostro tablet per vedere se ancora connesso. Nello specifico, ogni pacchetto contiene implementazioni dei protocolli dei 7 livelli OSI. Ogni livello viene avvolto dal livello soprastante a m di cipolla, definendo cos degli strati livello; questo serve per permettere la lettura di alcune informazioni solo a chi ne ha necessit (es. il router avr bisogno di leggere solo le informazioni del Livello 3 aka Livello di Rete). Tale processo viene definito incapsulamento. Ogni pacchetto ha una lunghezza massima di dati (MTU) e una lunghezza minima. In caso di superamento della lunghezza massima, il pacchetto verr frammentato in pi segmenti. In caso di non raggiungimento di una lunghezza minima, il pacchetto verr riempito (padding).
12
2) Denial of Service
Negazione di servizio: dalle sue prime versioni a quelle attuali. Metodi di attacco e di difesa di uno delle tecniche di cyber-terrorismo pi in voga negli ultimi anni.
13
No, sono richieste e, come ben sappiamo, una richiesta si fa attraverso linvio e la ricezione di un pacchetto (vedi 1.2.3). La teoria dellattacco vuole quindi che generando milioni e milioni di richieste ad un server, questo cessa di erogare servizi.
14
server, o nei casi pi blandi, rallenta i tempi di risposta in modo significativo. Per adesso per ci siamo limitati a parlare di Server, ergo si suppone che solo questi siano vulnerabili agli attacchi di DoS. In realt possibile attaccare un computer specifico, una porta o un servizio, unintera rete o il componente del sistema; pu anche avere come obiettivi sistemi di comunicazione fra persone (telefoni, portatili, allarmi, fax, stampanti etc...)
15
Alcune di queste sono state gi risolte poich facevano affidamento a tecnologie superate, altre invece sono nate grazie allintroduzione di nuove tecnologie.
16
Insomma, quante varianti esistono? Infinite. Affinch il nostro documento (e il lettore) non vadano a finire in uno stato confusionale, approfondiremo solo alcune di queste tecniche, tralasciando quelle obsolete e oramai inefficaci.
17
La scelta delle tipologie di attacco verr basata sul seguente diagramma a torta, prodotto da Kaspersky Lab, che si riferisce al secondo quadrimestre degli attacchi DoS/DDoS dellanno 2011.
Diagramma di Securelist.com Come possibile notare, la fetta maggiore detenuta dagli attacchi HTTP (88.9%); le richieste effettuate al server sono per un breve periodo, il che non permette di filtrare le richieste cattive da quelle buone. In seconda posizione troviamo il SYN Flood (5,4%). Durante questo attacco vengono inviati molteplici pacchetti al web server al fine di effettuare una connessione TCP. Nellattacco, questo pacchetti vengono manipolati, in modo da lasciare semi-aperta la connessione. Poich un server pu manetere un numero limitato di connessioni nello stesso momento, e una botnet (vedremo poi cos) pu generarne moltissime in breve tempo, il server sar costretto a bloccare le connessioni dallesterno. In ultimo posto troviamo i DDoS su DNS (0,2%). Pochi, ma pericolosi. Il DNS ha il compito di convertire i domini in indirizzi IP, quindi se cade gi un server DNS, tutti i computer connessi al server DNS non potranno pi navigare. Gran figata eh?
18
19
Immaginate di fare un ordine di 100 pizze a nome di Guido la Vespa (nome a caso). Avete gi capito. Questo il DrDoS, n pi n meno. Ci sono vari servizi sfruttati per lanciare DrDoS che vengono scelti in base a due fattori essenziali: fattore di moltiplicazione (ad una domanda piccola i servizi possono rispondere con risposte pi o meno grandi) numero di host sfruttabili/vulnerabili. Ad oggi il DrDoS pi diffuso quello che sfrutta il servizio DNS grazie all'ampissima disponibilit di host vulnerabili e all'altissimo fattore di moltiplicazione offerto da tale servizio Altro servizio spesso usato chargen, tipico di macchine windows e alcune stampanti di rete. il vantaggio dei DrDoS rispetto ad un DDoS tradizionale che anche a fronte di una scarsa banda disponibile permette di generare un volume di traffico molto alto (addirittura fino al 100x).
20
La variante di questo attacco prevede lo spoofing dellIP. Ok, fermi tutti: lIP sappiamo gi cos ma... cos lo spoofing? E quella pratica che prevede la modifica della richesta con informazioni falsate. Volete un esempio? Detto fatto. Immaginate lUDP Flooding come linviare centinaia di cartoline tutte insieme allo stesso destinatario. Sapete gi che il DoS prevede il riempimento della casella postale fino a che nessuna lettera verr recepita. Una lettera per essere consegnata deve avere due campi: Mittente e Destinatario; lo stesso vale per un pacchetto UDP. Ma voi sareste cos ingenui da scrivere il vostro nome e cognome su tutte le cartoline? Ovviamente farete una firma falsa. Analogalmente, in informatica farete lo spoofing del mittente (dellindirizzo IP quindi) e lo nasconderete al destinatario; da qui lespressione IP Spoofing.
21
Lutilizzo tanto semplice quanto scontato: basta indicare target e porta (random o scelta), la grandezza dei pacchetti (gestibile anche qui in maniera random), il delay (il tempo tra un pacchetto e laltro) e il numero di socket inviati per thread. Come vedete, UDP Unicorn non prevede lo spoofing dellIP (pratica che inutile ai fini di un semplice testing) pertanto lutilizzo del software consigliato solo ed esclusivamente sulle macchine di vostra propriet (o dove ne avete il permesso). In caso contrario, sarete esposti a facili controlli dai tecnici del server. Dulcis in fundo, UDP Unicorn un software opensource: se avete le conoscenze di programmazione giuste potrete capirne il funzionamento dal codice sorgente. Inoltre ha una funzione di multithreading che permette di sfruttare pi thread del processore e quindi viaggiare pi velocemente.
22
sistemistico e si fa mitigazione direttamente prima che arrivi al servizio; se attacco troppo pesante o non si hanno le competenze per sviluppare in autonomia una struttura filtrante ci si appoggia ad appliance hardware pronte. In entrambi i casi filtrare UDP flood molto banale quando si erogano servizi TCP (http, games etc...) meno banale invece quando si erogano servizi UDP. Generalmente la tattica usata per filtrare flood UDP fingerprinting prima e, una volta individuato il pattern usato, effettuare ratelimiting. Non chiaro? Andiamo con ordine. Per fingerpriting intendiamo la pratica di riconoscere quali sono le fonti che stanno effettuando lattacco. Solitamente possibile analizzarli direttamente nei log di sistema; potremmo ritrovarci con una o pi fonti dattacco, in quel caso, bene stilare una lista degli ip attacker. Il pattern lo schema utilizzato dallattacker per effettuare lattacco. Un pattern pu essere composto da valori fissi o randomizzati: nel primo caso il riconoscimento dellattacco semplice, in quanto se abbiamo tot. pacchetti inviati di grandezza fissa riusciremo in un batter docchio a bloccarli. Diverso invece il discorso dei random in quanto si potrebbero avere delle difficolt nel riconoscere lattacker. Per ratelimiting intendiamo la pratica di filtraggio delle connessioni al nostro client/server che verranno applicate agli attacker riconosciuti durante la fase di fingerprinting. Gran parte degli UDP flood che vengono lanciati attualmente sono facilmente identificabili e filtrabili, oltre al sempreverde DNS reflected (variante dellattacco) anche quello facilmente bloccabile senza aver bisogno di fare ratelimiting.
23
Come si applica il SYN Flood? In questa tipologia di attacco, il client invia il SYN, il server risponde con SYN-ACK e il client non invier lACK, il quale chiuderebbe lhandshake e quindi darebbe inizio alla comunicazione. Che succede quando non viene inviato lACK? Il server mantiene attiva la connessione per un lasso di tempo e, solo dopo un tempo ragionevole, decider di chiudere lo scambio dei messaggi. Alcuni potrebbero pensare: scusa, ma se invio il pacchetto SYN il server mi rimanda il SYN-ACK e quindi io sono costretto a bloccare gli ACK in uscita dal mio pc? Vero, ma essendo una cosa altamente improbabile, perch non spoofare lindirizzo IP? (vedere variante di attacchi UDP con spoofing ip).
24
25
direttamente sulla macchina) ci si affida ad appliance hardware a parte che fanno da SYN proxy. Prima si diceva che i SYN COOKIES potessero essere unarma a doppio taglio, eppure sono stati concepiti per essere un deterrente per questo attacco. Perch? Come dice il nostro esperto Marco Padovan: I Syn Flood sono sempre spoofed e se tu usi i cookies mandi syn ad ognuno degli ip spoofed, quindi le vittime potrebbero segnalarti al tuo operatore e sospenderti il servizio. Claro?
26
Ovviamente, possibile fare attacchi di tipo HTTP senza dover specificare parametri o quantaltro, in quanto il Web Server gi di suo deve vagliare una richiesta interna di recupero di una pagina web, eseguirne il calcolo e i processi e rimandarli al mittente.
Sorvolando la parte sul Come si utilizza (che potete comunque trovare nella pagina di download) studiamone il funzionamento interno.
Il software prevede linserimento di un parametro arbitrario da parte nostra (un url) e il numero di
27
threads da inviare al sito vittima. Tale processo riassunto in questo codice: url = raw_input("Enter url to DoS (enter nothing to exit): ") if url == "": exit(1) try: urllib.urlopen(url) except IOError: print("Could not open url specified.")
Una volta ottenuti i parametri corretti andremo ad utilizzare la funzione che il cuore del B4ckdoor: def run(self): global COMMAND global CANCEL global LOCK LOCK.acquire() print("Starting thread #{0}".format(self.num)) LOCK.release() while COMMAND != CANCEL: try: urllib.urlopen(self.url) except Exception: pass LOCK.acquire() print("Exiting thread #{0}".format(self.num)) LOCK.release()
28
In Apache esistono alcuni moduli che fanno tutto questo in automatico e sono: mod_limitipconn mod_qos mod_evasive mod_security mod_noloris (dedicato a slowris) mod_antiloris (anche questo solo per slowris)
2.7) Slowris
Slowris uno di quei tipi di attacchi nati come PoC (proof of concept) e si evolve come un metodo dattacco denial of service. Lo Slowris unisce la potenza degli attacchi a protocollo con quelli a livelli applicazione, creando appunto una nuova variante di attacchi DoS. Come funziona: Slowris apre delle connessioni inviando richieste HTTP parziali e continua ad inviare le intestazioni successive a intervalli regolari per mantenere aperta la connessione col web server. Lattacco si potr dichiarare concluso quando il server non avr pi slot per permettere di far fuoriuscire tutte le richieste. Slowris inoltre introduce una caratteristica di stealthing che permette allattacker di inviare differenti host header contemporaneamente: stando a quanto si evince dalla descrizione del software in inglese, tale operazione non permette al virtual host di scrivere nei file log, cos da garantire il completo anonimato in fase di attacco. Quando per una delle richieste scadr, il server andr a scrivere nei log il risultato delloperazione con stato di errore 400 (e relative fonti della richiesta). Questo tipo di attacco non pu essere definito TCP DoS in quanto non esegue una completa connessione TCP ma esegue solo una connessione parziale tramite richiesta HTTP. E lequivalente di un attacco SYN Flood ma con il protocollo HTTP. Slowris non neanche un flooder HTTP in metodo GET in quanto fa solo richieste regolari HTTP per
29
lungo tempo. Slowris stato testato con successo sulle seguenti macchine: Apache 1.x Apache 2.x (la maggior parte dei web server nel mondo!) dhttpd GoAhead WebServer
mentre non sono affetti i seguenti web server: IIS 6.0 IIS 7.0 lighttpd Squid nginx Cherokee Netscaler Cisco CSS
Come specifica il sito del produttore, questa lista solo indicativa e comunque rispecchia solo test effettuati su webserver di prova. Slowris potrebbe per via ipotetica essere modificato in qualunque modo si voglia per amplificarne lattacco e mandare in tilt diversi tipi di webserver e infrastrutture.
* per una conoscenza approfondita sul tool possibile lanciare il comando perldoc slowloris.pl
30
*Slowris funziona solo se sono installati anche i moduli IO::Socket::INET, IO::Socket:SSL e GetOpt::Long. Inoltre, Slowris lavorer meglio se attivo il multithreading.
31
Il resto delle regole da adottare sono le stesse presentate nel capitolo Mitigare un attacco HTTP Flood.
3)Considerazioni
La pratica del Denial of Service una lotta che va avanti da decenni. Oggi il peso della bilancia a favore degli attacker e sono pochi i servizi che riescono a contrastare questo fenomeno ma forse domani qualcosa cambier. Noi siamo white hats e difendiamo il web libero da ogni crimine. Con questo libro speriamo che il fenomeno del Denial of Service venga a galla e che diventi un argomento di cui parlare in futuro e non limitarlo ai soli bulli del web, spesso ragazzini adolescenti che sfogano le proprie frustrazioni contro i pi deboli. Crediamo fermamente che la conoscenza sia un valore importante per la comunit e la condividiamo per il benessere collettivo, non per il piacere e il gioco di pochi. Lavoreremo sodo per contribuire ogni giorno a combattere per questi ideali, fuori da ogni pregiudizio, perch lhacking non un crimine. E conoscenza, ma soprattutto, divertimento. Stefano murdercode Novelli
32