Capitolo 1 – Sicurezza informatica nelle reti di calcolatori ed attacchi denial of service
• la riservatezza (secrecy o confidentiality) delle informazioni, o più in generale delle risorse di
sistema, intesa come la possibilità di accesso alle stesse esclusivamente consentita agli utenti
autorizzati, mira a precludere l’accesso ad utenti “estranei”, garantendo la segretezza delle
informazioni scambiate all’interno dell’infrastruttura di rete; in tale ambito esistono attacchi
informatici il cui scopo è l’intercettazione dei dati riservati.
• l’integrità (integrity) dei dati scambiati tra i nodi della rete è un requisito essenziale per quei
servizi di rete in cui è di vitale importanza la ricezione di una copia autentica delle informazioni
in precedenza trasmesse, motivo per cui è indispensabile consentire la modifica del contenuto
informativo di dati e risorse di sistema soltanto ad utenti autorizzati; ad inficiare il rispetto di
tale requisito provvedono attacchi informatici che mirano intenzionalmente alla compromissione
dell’autenticità dei dati.
• la disponibilità (availability) di un servizio offerto dalla rete è indispensabile in tutte quelle
situazioni in cui bisogna offrire agli utenti autorizzati garanzie nell’accesso a tutte le risorse di
sistema, affinché sia possibile assicurare loro la persistenza nel tempo dell’erogazione dello
stesso, senza che l’utente percepisca una diminuzione della qualità del servizio; in tale ottica, è
necessario che la rete sia in grado di contrastare attacchi mirati all’interruzione della
disponibilità del servizio.
Si noti che l’intercettazione di dati riservati è una forma d’attacco passiva, in quanto
l’interazione tra client e server non risulta modificata da tale tipo di attacco, il quale si limita a
ricevere (ed eventualmente elaborare) i dati trasmessi, senza alterare lo scambio di informazioni
tra le parti; le altre due tipologie di attacco sono invece definibili come attive, in quanto
comportano l’inevitabile modifica del flusso di dati diretto da sorgente a destinatario.
Per quanto riguarda le contromisure adottate per debellare gli attacchi che minacciano il rispetto
dei requisiti di riservatezza ed integrità del traffico dati in una rete di calcolatori, lo stato
dell’arte della tecnologia ha visto l’insorgere di numerosi algoritmi e protocolli che consentono
di ridurre la probabilità di successo di tali attacchi, prescindendo dalla disponibilità dei servizi
di rete. Algoritmi di crittografia per garantire la riservatezza dei dati da una parte, protocolli di
autenticazione e meccanismi di firma digitale per evitare la compromissione indesiderata del
contenuto informativo dei dati in transito sulle reti da parte di utenti non autorizzati dall’altra
2
,
rappresentano un’utile e necessaria prevenzione contro attacchi a tali requisiti. Grazie
all’utilizzo di questi strumenti, la probabilità di successo dell’attacco è sempre più tendente a
zero all’aumentare della complessità degli algoritmi in questione; infatti, gli odierni algoritmi di
2
per approfondimenti su entrambi gli aspetti cfr. [TNMB]
9
Capitolo 1 – Sicurezza informatica nelle reti di calcolatori ed attacchi denial of service
crittografia non garantiscono una probabilità nulla che le informazioni possano essere rivelate,
quanto il fatto che, volendo ricavarle senza i permessi necessari, il tempo impiegato alla
decifrazione tramite elaborazione al computer sarebbe sufficientemente lungo da renderne
comunque vani i tentativi.
Nonostante ciò, esistono casi in cui utenti ingenui o amministratori di rete inesperti si rendono
inconsapevolmente complici di un attacco ai suddetti requisiti, lasciandosi carpire informazioni
riservate e utili ad un malintenzionato per sferrare attacchi informatici.
Inoltre, gran parte delle responsabilità per le quali alcuni attacchi informatici hanno esito
positivo sono da ricercarsi nei cosiddetti bug del software, che sono causa di malfunzionamenti
non previsti in fase di progettazione e che mettono in condizione un eventuale assalitore di
manipolare fraudolentemente un sistema informatico. È questo il caso dei famigerati buffer
overflow e, più in generale, degli exploit, espedienti utilizzati dagli hacker per sferrare attacchi
informatici. Di questi problemi ancora oggi soffrono molti software commerciali diffusi in tutto
il mondo. Le aziende che creano e aggiornano questi software devono preoccuparsi, di tanto in
tanto, di pubblicare un aggiornamento del codice, noto con il nome di patch (letteralmente una
“pezza”), attraverso la quale è possibile aggiornare l’applicazione ed evitare così il rischio di
intrusioni.
In questo ambito non saranno esaminate le soluzioni che hanno come obiettivo la salvaguardia
dei requisiti di riservatezza ed integrità, bensì ci si concentrerà sulle problematiche che
insorgono quando si ha intenzione di garantire la disponibilità dei servizi di rete.
Nella nostra trattazione saranno analizzati gli aspetti principali inerenti alla classe di attacchi
informatici noti come Denial of Service - DoS, i quali si prefiggono l’obiettivo di causare
l’indisponibilità di un servizio in una rete di calcolatori. In generale essi tentano di invalidare
applicazioni, server, finanche intere reti, causando un’interruzione immotivata delle
comunicazioni di utenti legittimi. Come vedremo meglio nel seguito, questi attacchi sono
relativamente facili da organizzare, ma molto difficili da maneggiare e contrastare.
Si osservi che soltanto nell’ultimo decennio sono state effettuati studi di ricerca specifici a
riguardo. Le motivazioni di ciò vanno ricercate, da un lato, nella relativa novità con cui questa
tipologia di attacchi si è presentata in uno scenario come Internet (i primi attacchi DoS risalgono
al 1996); d’altra parte, Internet nasce come rete basata su un servizio best effort, per cui la
disponibilità dei servizi è un requisito di sicurezza importante ma allo stesso tempo difficile da
assicurare, soprattutto a causa dell’impossibilità di poter controllare una così elevata mole di
traffico derivante da un bacino di utenza in crescita pressoché esponenziale. Non dobbiamo però
dimenticare che ormai Internet è la virtual location dove attività commerciali hanno preso
sempre più piede, e rappresentano di gran lunga la fetta predominante del traffico web. Per
10
Capitolo 1 – Sicurezza informatica nelle reti di calcolatori ed attacchi denial of service
questo motivo esistono singole persone o grosse aziende le cui attività in Internet sono legate ad
interessi economici non trascurabili; di conseguenza, è possibile annoverare moltissime
situazioni critiche in cui non si può prescindere dal requisito di disponibilità del servizio.
Questo, ad esempio, accade nel caso degli Internet Service Provider – ISP, i quali offrono
servizi quali traffico web, posta elettronica, file transfer, web hosting, etc. I server di un ISP
devono poter funzionare senza interruzioni, per cui non è ammissibile che un attacco di tipo
DoS vada a precludere agli utenti l’accesso alla rete, in quanto ciò significherebbe far avvertire
agli utenti stessi una scarsa qualità del servizio. Si pensi inoltre ad un sito web di una compagnia
che lavora nell’e-business per la vendita di prodotti on-line, il quale, sotto un attacco DoS, si
trovi a ricevere una quantità di richieste di una pagina web pari a 50 volte il suo regolare carico,
con il risultato spiacevole che nessun cliente interessato ad accedere al sito riesca a farlo
nell’imminente e quindi gli affari ne risultano chiaramente danneggiati.
A parte gli esempi sopra citati, esiste una casistica molto ampia di situazioni in cui il rischio di
rimanere vittima di un attacco DoS è assolutamente da scongiurare. Inoltre, ci sono molte forme
di attacchi informatici (cyber-attacks) che ricevono molta pubblicità per la loro pericolosità, ma
in realtà non si verificano così spesso. Purtroppo gli attacchi DoS non rientrano in questa
categoria. Un numero di studi recenti ha dimostrato che gli attacchi di tipo denial of service (ed
in particolare i cosiddetti DDoS, [cfr. §1.5]) sono estremamente comuni e, tra tutti i crimini
informatici, risultano essere la principale causa di danni economici riportati da soggetti che
esercitano l’e-business in Internet. Considerando che essi sono solitamente piuttosto efficaci e
che i loro perpetratori sono raramente individuati, ci sono buone ragioni per credere che tali
attacchi diverranno ancora più popolari in futuro.
Nel seguito del capitolo sarà effettuata una classificazione degli attacchi DoS, cercando di
esaminarne gli aspetti salienti e le differenti tecniche utilizzate dagli hacker per attuare un
attacco rientrante in tale tipologia.
1.2 Attacchi DoS : definizione e classificazione
In generale, per Denial of Service si intende un attacco informatico progettato con l’intento di
impedire ad un sistema (rete o singolo host) l’espletamento delle funzioni per le quali è preposto
o, quanto meno, per causarne un sensibile degrado delle prestazioni. Una definizione più
rigorosa di questa classe di attacchi è stata proposta dal CERT / CC – Computer Emergency
Response Team / Coordination Center
3
, secondo il quale
4
per Denial of Service si intende un
qualsiasi assalto, intenzionale o non, alla disponibilità del sistema. Si osservi che questa
3
http://www.cert.org/
4
cfr. [Hwd97]
11
Capitolo 1 – Sicurezza informatica nelle reti di calcolatori ed attacchi denial of service
definizione è piuttosto generica, ed inoltre non fa alcun riferimento alle possibili cause che
potrebbero indurre all’indisponibilità di un servizio, né tantomeno alle problematiche
riguardanti la corretta individuazione di un attacco ed alle possibili contromisure da adottare.
D’altra parte le cause possono essere svariate, data l’esistenza di un notevole numero di
tipologie di attacco DoS. Per tale motivo è necessario effettuarne una classificazione dei fattori
caratteristici, tra cui si individuano:
• il tipo di target
• gli obiettivi dell’attacco e le conseguenti tipologie
• il numero di sorgenti coinvolte nell’attacco
I possibili bersagli di un attacco possono essere sia un singolo host o router, sia un’intera rete di
computer. Nel primo caso l’attacco mira, nella quasi totalità dei casi, a negare agli utenti
l’accesso ad un particolare server, attaccando l’host preposto allo scopo, oppure un router posto
lungo il path d’attacco che permette alle richieste d’accesso di essere consegnate al server.
L’host può essere reso incapace di erogare servizi sia nel caso in cui vengono esaurite le risorse
che ha a disposizione, sia facendo in modo che le richieste di servizio ad esso indirizzate non
siano inoltrate a destinazione: in entrambi i casi il risultato ottenuto è un denial of service da
parte dell’host interessato. Questo tipo di attacchi colpisce uno specifico host della rete (al
limite alcuni host, se l’attacco è diretto ad un router che gestisce il traffico diretto verso più end
system), per cui gli altri host della rete non coinvolti restano indifferenti all’aggressione; inoltre,
un attacco di questo tipo è indubbiamente di più semplice attuazione rispetto ad un attacco
mirato a compromettere un’intera rete di calcolatori.
Un attacco il cui scopo è interrompere il regolare funzionamento di un’intera rete presenta
molteplici modalità di attuazione: inondazione di una rete con traffico dati inutile e pernicioso,
compromissione del funzionamento di uno o più router in modo da non permettere il normale
instradamento dei dati, etc. Questo tipo di attacchi ha un impatto molto più grave, ma è
certamente più difficile da attuare in quanto richiede la sincronizzazione di un notevole numero
di risorse impegnate nella riuscita dell’attacco stesso
5
.
Una volta individuato il target dell’attacco, l’attacker deve rivolgere la sua attenzione alla
conoscenza delle caratteristiche della vittima, in termini di risorse disponibili e vulnerabilità del
sistema. Allo scopo l’aggressore si serve di un certo numero di tool (gli “attrezzi” del mestiere)
con cui poter accedere a determinate risorse di sistema della vittima che rappresentano gli
5
per maggiori dettagli cfr. [Hwd97]
12
Capitolo 1 – Sicurezza informatica nelle reti di calcolatori ed attacchi denial of service
obiettivi dell’attacco stesso. La tipologia di DoS può essere vista come derivante dal tipo di
obiettivo che l’attacco si prefigge.
I DoS ad esaurimento di banda cercano di saturare la banda del bersaglio, intesa come massima
capacità di traffico in bps supportabile dall’host o dall’intera rete a cui appartiene; in tali casi
l’aggressore, disponendo di una capacità di trasmissione maggiore della capacità di ricezione
della vittima, va ad inondare di traffico il target dell’attacco (intera rete o singolo host),
costringendolo a non poter accettare altro traffico utile o addirittura causando un crash del
sistema attaccato. Nel caso in cui non si disponga di un singolo attacker host con banda
sufficientemente elevata, l’attacco può coinvolgere un numero maggiore di host sorgenti che,
nel loro insieme, disporranno di una capacità di trasmissione opportuna a causare un overload di
traffico diretto alla vittima.
I DoS ad esaurimento delle risorse mirano alla saturazione di alcune risorse di sistema
(memoria volatile o di massa, cicli di CPU, dischi), grazie al fatto che l’aggressore riesce ad
ottenere in maniera illecita un accesso autorizzato a queste risorse, ed utilizzandole in modo
inappropriato fino ad esaurimento, al fine di negarle ai processi che ne facciano legittimamente
richiesta per offrire un servizio. È possibile avere DoS basati su una tecnica che tenta di saturare
lo swap space del sistema, ossia un’area di memoria (solitamente di capacità pari a due volte
quella della RAM di sistema), allocata su disco rigido ed utilizzata nei sistemi Linux per supplire
all’esaurimento della RAM in alcune situazioni particolari; ad esempio, in un server Linux che
deve soddisfare richieste da parte di più client, lo swap space è utilizzato per creare processi
server figli aventi una durata di vita limitata. Altri DoS di questa tipologia possono avere come
obiettivo la saturazione dello spazio di memoria allocabile dal kernel, che ha un limite superiore
superato il quale è necessario eseguire un reboot del sistema, altri tentano di saturare
completamente lo spazio di memoria disponibile nei dischi rigidi o di causare un blocco di
sistema dovuto ad un’eccessiva richiesta di operazioni da effettuare alla CPU, costringendola a
servire un numero troppo elevato di richieste di interrupt, laddove tali risorse sono state di solito
dimensionate in quantità sufficiente per soddisfare le normali richieste di servizio.
I DoS basati su bug o errori di progetto dei sistemi sfruttano vulnerabilità del codice non
valutate in fase di implementazione di alcuni protocolli di rete o applicativi, oppure forzano un
funzionamento non previsto in fase di progetto, portando inevitabilmente a situazioni che
causano un crash del sistema, costringono ad effettuare il reboot, o semplicemente fanno fare
lavoro inutile alla macchina. Un esempio di bug exploit è costituito dagli attacchi DoS che
sfruttano il cosiddetto “fragmentation bug”, ossia alcuni errori implementativi nella stesura del
modulo del protocollo IP che si occupa di riassemblare i frammenti di un pacchetto
precedentemente segmentato in fase di trasmissione perché di dimensioni maggiori della MTU -
13
Capitolo 1 – Sicurezza informatica nelle reti di calcolatori ed attacchi denial of service
Maximum Transmission Unit, causando il crash del sistema vittima dell’attacco; non a caso, è
risaputo che in ambito IP il ricorso alla frammentazione dei pacchetti è fortemente sconsigliato
per motivi di inefficienza del codice. Per quanto riguarda gli errori di progetto sfruttati dai DoS,
possiamo citare l’attacco denominato Land
6
, che invia al server segmenti TCP di tipo SYN, nel
cui header IP si ha l’indirizzo sorgente uguale all’indirizzo destinazione, mentre nell’header
TCP vi è un porto sorgente uguale al porto destinazione; questa situazione, non essendo prevista
in fase di progetto, è per questo non correttamente gestita nelle prime versioni di alcuni sistemi.
Altri assalti invece sfruttano errori di programmazione presenti in alcune versioni di noti web-
server. Alcuni attacchi di questo tipo (Land, Teardrop, Apache beck exploit) saranno
brevemente descritti nel seguito.
Un’ulteriore importante classificazione degli attacchi di tipo denial of service può essere fatta in
base al numero di sorgenti coinvolte nell’attacco, ovvero in base alla quantità di host assalitori.
In tal caso bisogna distinguere i Dos ad unica sorgente dai Dos distribuiti.
Nel primo caso abbiamo a che fare con i tradizionali DoS, in cui vi è un unico host
precedentemente compromesso, con molta banda di connessione disponibile in uscita ed un
processore sufficientemente veloce, a partire dal quale viene sferrato l’attacco. Un tipico
esempio è costituito da attacchi eseguiti sfruttando host appartenenti a reti universitarie,
caratterizzate da una buona connettività e dalla presenza di numerosi sistemi Unix-like
multiutente gestiti in modo irrispettoso delle più elementari misure di sicurezza. Nel seguito
della trattazione, se non diversamente specificato, con l’acronimo DoS si intenderà fare
riferimento ad attacchi a singola sorgente.
Nel secondo caso, gli attacchi in esame sono meglio noti come Distributed DoS – DDOS, i quali
sono generati da una moltitudine di sorgenti di aggressione, a volte costituita da un numero
molto elevato di macchine (si va da una decina ad oltre 100.000 host compromessi) che
agiscono in contemporanea ed aggrediscono uno o più bersagli in maniera coordinata. Questi
attacchi sono ben più temibili dei normali DoS, in quanto un simile approccio consente di
ottenere effetti di entità di gran lunga maggiore rispetto ai precedenti, quindi causa più danni,
oltre ad avere una maggiore rapidità e continuità di attuazione. Inoltre i DDoS sono attacchi in
cui, come vedremo nel seguito della trattazione, gli host partecipanti sono organizzati in
maniera “gerarchica”, ossia ci sono macchine che ne controllano altre con più livelli di
gerarchia, per cui diventa praticamente impossibile prendere delle contromisure che permettano
di risalire all’host (nonché al soggetto) che ha dato origine all’attacco.
Nel seguito del capitolo saranno descritti i principali attacchi DoS e DDoS noti in letteratura.
6
cfr. [Hwd97]
14
Capitolo 1 – Sicurezza informatica nelle reti di calcolatori ed attacchi denial of service
1. 3 I preliminari di un attacco DoS
Come già affermato in precedenza, all’attuazione vera e propria dell’attacco è anteposta una
fase di studio della vittima, il cui scopo è conoscere le risorse del sistema da attaccare e le sue
vulnerabilità; a quel punto l’hacker
7
ha la possibilità di compromettere il sistema attaccato,
alterandone il funzionamento fino a produrre gli effetti desiderati. Per stabilire di quali e quante
risorse un sistema informatico dispone, un attacco DoS è generalmente preceduto da un apposito
attacco di tipo probe, attraverso il quale è possibile ricavare un gran numero di informazioni
sull’obiettivo da aggredire. I probing sono attualmente considerati dei veri e propri attacchi,
sebbene il loro unico scopo sia quello di raccogliere quante più notizie possibili sulla vittima.
Mediante l’uso di appositi tool, quali ad esempio NMAP
8
, si riescono ad ottenere informazioni
dettagliate sul tipo e versione del sistema operativo in esecuzione sulla macchina vittima, in
modo da calibrare sapientemente l’attacco da sferrare. Dunque, è possibile affermare che la
rilevazione di un attacco di tipo probing sia sintomo di un imminente attacco di altro tipo.
Inoltre, a quanto detto si aggiunge il fatto che le autorità competenti e le leggi in vigore non
vedono certo di buon occhio gli attacchi informatici, per cui una questione di primaria
importanza per un aggressore è rendersi non rintracciabile prima, durante e dopo un attacco
informatico. Per questo, una delle prime incombenze di cui ci si occupa in fase di preparazione
di un attacco è quella di individuare uno o più calcolatori estranei che siano controllabili a
distanza, al fine di lanciare l’aggressione attraverso questi piuttosto che attraverso macchine da
cui sarebbe facile risalire all’utente malintenzionato.
La ricerca si focalizza in modo particolare su calcolatori sui quali siano in funzione dei
programmi server con vulnerabilità note di tipo buffer overflow. L’uso di un exploit
9
su una
macchina del genere garantisce con buona probabilità la disponibilità di una root shell
controllabile da remoto, ovvero, la possibilità di gestire tutte le funzionalità di quel calcolatore
tramite la stessa connessione ad Internet, standosene comodamente seduti davanti ad un altro
elaboratore, magari lontano migliaia di chilometri. In effetti, quindi, le macchine individuate
7
termine con cui si è soliti indicare il cosiddetto “pirata informatico”, anche se nella comunità
informatica esso è semplicemente utilizzato per identificare programmatori esperti.
8
Network MAPper (www.insecure.org/nmap/) è uno strumento che, utilizzato dagli amministratori di
rete, serve ad individuare eventuali punti deboli del sistema informatico, mentre nelle mani di un
eventuale assalitore assumerebbe compiti molto meno pacifici. Network Mapper è un utility open source,
con licenza GNU - GPL, funzionante su diversi tipi di sistemi per l’esplorazione di reti o per l’auditing
della sicurezza. E’ stato realizzato per effettuare una rapida scansione su grandi reti, anche se lavora bene
su singoli host. Esegue il monitoring dei pacchetti IP in transito sulla rete, al fine di determinare quali
host sono disponibili sulla rete, che tipo di servizi offrono, quale tipo di sistema operativo usano, che tipo
di firewall e meccanismi di packet filtering adottano, etc.
9
un exploit è un espediente a cui un hacker ricorre per sfruttare a proprio vantaggio una vulnerabilità di
un programma applicativo o di un sistema operativo, allo scopo di eseguire attacchi informatici su un
sistema quale un host o un router (dall’inglese to exploit = sfruttare).
15
Capitolo 1 – Sicurezza informatica nelle reti di calcolatori ed attacchi denial of service
come base di partenza per l’azione d’attacco sono esse stesse vittime di un assalto preliminare.
Compiuto questo primo passo, è possibile far svolgere ai calcolatori compromessi le più svariate
operazioni di cui si compone l’attacco vero e proprio. In via del tutto generale, le azioni
preliminari compiute dall’attacker in preparazione dell’attacco sono quelle analizzate nel
seguito.
E’ previsto l’utilizzo di un account su una qualunque macchina multiutente (quale può essere un
sistema Unix-like), per poter depositare diversi tool utili a compiere azioni preliminari
all’attacco stesso.
• Uno scanner è un software che consente di effettuare una scansione del sistema vittima
(azione di probing), al fine di conoscerne il tipo e la versione di sistema operativo funzionante
sulla macchina target, le applicazioni ed i servizi in esecuzione mediante interrogazione dei
porti well-known utilizzati dai protocolli TCP ed UDP, ed altre informazioni utili.
• Uno sniffer è un altro tipo di software che, come il precedente, nasce in origine come
strumento per effettuare operazioni di diagnostica del sistema. E’ uno strumento capace di
raccogliere le informazioni che viaggiano sulla rete, in cui si utilizza un protocollo di
comunicazione qualunque (Ethernet, TCP/IP, IPX o altri). Le funzioni tipiche degli sniffer
possono essere riassunte sinteticamente in:
1. conversione e filtraggio dei dati e dei pacchetti in un formato leggibile dall’utente;
2. analisi dei difetti di rete;
3. analisi di qualità e portata della rete (performance analysis);
4. setacciamento automatizzato di password e username per successiva analisi;
5. creazione dei log, ossia di lunghi elenchi che tengono traccia, in questo caso, del
traffico sulla rete;
6. scoperta di intrusioni in rete attraverso l’analisi dei log del traffico.
Purtroppo, in ambito di attacchi informatici, uno sniffer è sempre utilizzato a scopi malefici.
Infatti, una tale applicazione permette di ascoltare indifferenziatamente il traffico di rete che
transita sulla propria interfaccia ed analizzare il contenuto dei pacchetti di una connessione
attiva, allo scopo di catturare nel traffico spiato informazioni interessanti, quali le password di
altri utenti e tantissimi altri dati utili all’attacker.
• Esistono strumenti in grado di eseguire un exploit di buffer overflow sul sistema vittima;
si tratta di uno dei più comuni attacchi in Internet, che sfrutta uno dei tanti bug presenti nel
codice di alcune applicazioni, tipicamente un errore consistente nel non effettuare un doppio
controllo nell’immissione di dati di input richiesti da applicativi in esecuzione sulla macchina;
in tal modo esiste la possibilità di immettere degli input di lunghezza maggiore della massima
consentita dall’applicazione (tipo un login name di un centinaio di caratteri), causando un
16