Seminario di Sicurezza
Introduzione a DoS

Il Denial of Service (DoS) è un attacco che ha lo scopo di impedire ad un sistema di fornire in modo
regolare i servizi previsti, può mandare richieste al sistema-vittima prescelto fino al punto da
rendere il servizio inutilizzabile poichè non si hanno più risorse disponibili. Una delle tecniche
di attacco di tipo DOS è il SYN FLOODING che utilizza una debolezza nell’implementazione/configurazione
del protocollo di connessione TCP per cui prima di spiegare come viene effettuato l’attacco SYN Flooding
è necessario fare un breve ripasso delle nozioni base del protocollo TCP (Transmission Control Protocol).

Protocollo TCP
A livello TCP l’unità di trasferimento dei dati prende il nome di segmento, ognuno di questi ha dimensioni variabili ed è costituito da un’intestazione (header) e da un’area dati.
Il TCP è un protocollo “orientato alle connessioni” cioè sono garantiti sia la consegna che il
corretto ordine dei pacchetti mediante l’uso di numeri di sequenza e conferme.
Il TCP riceve dalle applicazioni di livello superiore un flusso di dati da trasmettere,
se le dimensioni lo consentono i dati sono inseriti in un segmento altrimenti sono divisi
su più segmenti ognuno dei quali ha un numero di sequenza che in pratica è un offset
in byte (c’è un puntatore che punta alla posizione del primo byte di dati), ciò permette all’host
destinatario di collocare subito i dati nella memoria temporanea (buffer) di ricezione,
anche quando questi non sono arrivati nella giusta sequenza.

Figura 1 Struttura di un segmento
Il protocollo TCP è costituito da diversi campi:

Figura 2 Struttura di un segmento
Porta origine e porta destinazione:
campi di 16 bit contenenti rispettivamente la porta TCP d'origine e di destinazione. Il meccanismo delle porte permette all’host mittente di distinguere le varie applicazioni di rete presenti sull’host del destinatario;
Numero di sequenza:
campo di 32 bit adoperato per numerare i segmenti inviati. Questo permette il loro corretto assemblaggio una volta giunti a destinazione. Durante il processo di connessione iniziale tra due host, il valore di questo campo è utilizzato per sincronizzare i rispettivi numeri di sequenza;
Numero di conferma:
campo di 32 bit contenente il successivo numero di sequenza che l’host destinatario si aspetta di ricevere nel traffico di ritorno.
Flags 1
campo composto di 6 elementi (denominati flag) da un bit ciascuno. Essi possono assumere il valore binario di zero o uno. Questi flag, se impostati, forniscono alcune informazioni di controllo e precisamente:
URG – Bit del controllo urgente:
indica che il campo Urgent Pointer contiene un valore valido e va quindi letto;
ACK – Bit del controllo delle conferme:
indica che il campo Acknowledgement number contiene un valore valido e va quindi letto;
PSH – Bit del controllo dell’inoltro
richiede la spedizione immediata dei dati, a prescindere se il buffer di trasmissione sia pieno;
RST – Bit del controllo del reset:
richiede di stabilire nuovamente la sessione. Nel caso sia presente una connessione, questa viene completamente riavviata;
SYN – Bit del controllo della sincronia:
durante il tentativo di instaurare una sessione TCP, indica la necessità di sincronizzare i Sequence Number dei due host;
FIN – Bit del controllo di fine invio:
segnala che l’host mittente non ha più alcun dato da trasmettere.
Quando due host decidono di comunicare tramite il protocollo TCP, scambiano tra loro alcune informazioni, questo processo è chiamato three-way handshake (stretta di mano a tre vie),.
Three-way handshake/SYN flooding
Questo processo ha un grande vantaggio poiché necessita di pochissima banda per ottenere l'effetto voluto. Il protocollo di connessione tra due PC normalmente funziona in tre fasi.

Figura 3 Syn Flooding
1. A vuole comunicare con B. Apre una sessione e manda a B un pacchetto "SYN" con l’intento di sincronizzare il numero di sequenza. A imposta un valore iniziale nel campo del numero di sequenza e aspetta una risposta da B.
2. B ricevuta una richiesta di connessione, se è disponibile a stabilire una sessione, cambia il suo stato da "LISTEN" in "SYN RECEIVED", cioè si rende conto che c'è una richiesta da parte di A e mette questa richiesta in una coda delle potenziali connessioni, ma non ancora stabilite. B spedisce ad A un pacchetto "SYN/ACK" Con ACK conferma la sua disponibilità ed invia tramite il campo ACK il valore del numero di sequenza ricevuto, incrementato di un’unità. Questo attiva la connessione in un senso. Tramite l’invio del SYN manifesta l’intenzione di attivare la connessione anche nell’altra direzione ed invia il suo numero iniziale di sequenza. B attende da A la conferma della connessione.
3. Quando A riceve il "SYN/ACK" di B spedisce a sua volta un altro ACK, in questo modo la connessione è stabilita. B riceve l'altro ACK di A e passa dallo stato "SYN RECEIVED" in "ESTABILISHED" e cancella A dalla coda delle richieste potenziali.
Durante un attacco la vittima è l’host B. L'attaccante A gli spedisce dei SYN il cui indirizzo sorgente è un "buco nero", cioè una macchina non raggiungibile in questo modo le risposte della vittima vengono tutte perse (l’aggressore può scegliere un singolo indirizzo spoofed, generare un piccolo elenco di indirizzi ed usarlo come indirizzi sorgente per generare i pacchetti di SYN oppure per ogni serie di pacchetti SYN inviati può usare un indirizzo sorgente differente e generato a caso). A spedisce continuamente richieste di connessione allo scopo di far riempire la coda delle connessioni “potenziali” fino ad esaurire tutte le risorse allocate allo scopo, che normalmente sono limitate.
A volte con l’attacco SYN FLOODING si blocca uno specifico servizio dell’host B, ad esempio, durante i cosiddetti “dirottamenti di sessione” (IP Hijacking) dove, profittando di una relazione di fiducia (Trusting Relation) esistente tra due host, l’aggressore ne mette fuori servizio uno, impersonandolo in seguito (IP Spoofing), per accedere con i suoi privilegi all’altro host.

Figura 4 Dirottamento di sessione
Un altro importante risultato, che questo tipo d’attacco permette di conseguire, è quello di rendere effettive alcune modifiche ad esempio l'aggressore con altri metodi è riuscito ad acquisire i diritti di superuser, e ha bisogno di renderli effettivi, effettuando un attacco DOS sul sistema costringendo la vittima ad eseguire un riavvio dell’host.
Esistono modi differenti per ridurre la probabilità e gli effetti di un attacco che causano cambiamenti nella configurazione di sistemi e di routers.
Miglioramenti della creazione del collegamento
Il TCP durante ogni processo di creazione del collegamento, impone all'host mittente e a quello destinatario requisiti asimmetrici di calcolo e di memoria. L'host destinatario deve allocare grandi strutture di dati ogni volta che riceve un pacchetto SYN e senza avere la garanzia che il pacchetto provenga dall'host mittente. Col metodo three-way handshake il numero di sequenza y del pacchetto viene confrontato con il secondo e terzo messaggio, questo per proteggersi dall'eventuale riapertura di collegamenti o da un accesso non autorizzato. L'host destinatario ha due possibilità: o memorizza il numero y di sequenza mandato mentre trasmette il secondo messaggio e riceve il terzo messaggio oppure rigenera y nel momento in cui riceve il terzo messaggio del three-way handshake. Se non ci fosse un meccanismo per rigenerare y ed il destinatario non memorizzasse y, qualunque host potrebbe stabilire un collegamento trasmettendo soltanto il terzo messaggio. Una possibile soluzione è calcolare y usando un hash con una chiave: l'indirizzo IP dell'host sorgente e destinatario, le porte, il numero iniziale di sequenza x dell'host sorgente e una chiave segreta utilizzata dal destinatario. Quando l'host destinatario riceve il terzo messaggio del three-way handshake ricalcola y' usando una chiave segreta, il numero di sequenza, gli indirizzi del mittente destinatario e le porte trovate nel messaggio. Se y' è uguale a y nell'ACK y+1 la connessione è considerata legittima. Questa soluzione permette di proteggersi da un attacco SYN FLOODING ma ha un inconveniente infatti richiede la modifica dello standard TCP.
Miglioramenti alla configurazione del sistema
Esistono diversi miglioramenti che si possono effettuare alla configurazione del sistema anche se questi gravano sulle risorse di sistema e sulle prestazioni generali della macchina e riducono solo le conseguenze dell’attacco che,se opportunamente raffinato, può tranquillamente scavalcare questa protezione. Un metodo è aumentare la dimensione dell’area di memoria destinata a contenere la coda di connessione, questo permette al sistema di fare fronte in modo simultaneo a più collegamenti ma l'aumento del backlog porta ad un potenziale aumento nell'uso delle risorse ne consegue che bisogna aggiornare i sistemi ad un minimo di 128mb per la RAM per permettere di fare fronte agli attacchi oppure si possono ridurre i timeouts per esempio a 10 secondi, questo è utile per eliminare le connessioni half-open dalla coda TCP ma la diminuzione dei timeouts può negare l'accesso alle macchina i quali round trip times eccedono il periodo di timeout inoltre l’aggressore può aumentare la frequenza d'invio dei pacchetti per scavalcare questa protezione inoltre si possono disabilitare i servizi non indispensabili, così si riduce il numero di porte che possono essere attaccate.
Miglioramenti nella configurazione dei router
Le misure proposte alle prime reazioni di recenti attacchi, tentano di rendere difficile per i pacchetti con indirizzi spoofed di attraversare i routers. Le soluzioni proposte sono:
1. Configurare le interfacce esterne dei routers per bloccare i pacchetti che hanno indirizzi sorgente provenienti dalla rete interna.
2. Configurare le interfacce interne del router per bloccare i pacchetti diretti all’esterno che hanno indirizzi sorgente esterni alla rete interna. Ciò limita la capacità di lanciare un attacco SYN flooding da quella rete, perché l’attaccante potrebbe soltanto generare i pacchetti con gli indirizzi interni.
Le configurazioni del router possono essere migliorate se gli indirizzi raggiungibili dalle loro varie interfacce sono disgiunti e ben definite. Questo è il caso dei routers utilizzati da un'organizzazione o un ISP locale in una rete backbone. La parte iniziale dell'indirizzo permette di capire se gli indirizzi provengono dalla rete interna o da quella esterna. Esistono però dei problemi di tipo pratico affinchè questo metodo funzioni: nelle reti con topologia complessa i router non riescono a distinguere fra traffico in entrata ed in uscita poiché i pacchetti sono instradati in base alla disponibilità del collegamento, quindi pacchetti provenienti dallo stesso indirizzo sorgente effettuano percorsi diversi sulla rete. Finchè un numero significativo di siti può trasmettere i pacchetti nelle reti backbone senza alcun controllo dell'indirizzo sorgente, gli host sono ancora oggetto di attacchi che non si possono tracciare. Le misure possono essere efficaci, ma soltanto se considerate in grande scala tuttavia se gli Internet Service Provider (ISPs) configurano in modo appropriato i loro routers, la possibilità di ridurre il lancio degli attacchi SYN flooding può essere ridotta.
Uso del Firewall
L’approccio di proteggere i computer con firewall è basato sull'idea che ogni pacchetto destinato ad un host protetto da un firewall deve essere prima esaminato da quest’ultimo, in questo modo così le decisioni sono prese sulla relativa autenticità e possono essere intraprese azioni per proteggere gli host interni. Ciò può essere efficace se, a parte il normale blocco fatto dal firewall, vengono utilizzati altri meccanismi specializzati per occuparsi del SYN flooding. Gli svantaggi di questo metodo sono ritardi su ogni pacchetto per l'elaborazione supplementare. Non tutti i firewall sono in grado di aggiungere funzionalità, come per esempio un modulo per proteggersi dal SYN flooding.
Impiegare software specializzato
E’ possibile utilizzare degli appositi software in grado di controllare costantemente l’attività della rete. Nel momento che questi rivelano un attacco inviano, in modo automatico e mirato, degli adeguati pacchetti TCP, che terminano le connessioni incomplete generate dal SYN Flooding e, di conseguenza, liberano la coda di connessione dell’host
Tecniche recenti
Le tecniche utilizzate per un attacco DOS sono in continua evoluzione; di seguito vengono illustrate quelle più recenti.
Attacco stream
E' una variante del SYN flooding che consiste nello spedire pacchetti TCP con ACK o SYN-ACK contemporaneamente presenti. Siccome questi pacchetti anomali non fanno parte di alcuna connessione, prendono un certo tempo per essere gestiti dalla vittima. Se il numero di pacchetti di questo tipo ricevuti è elevato, l'host che li deve gestire può sovraccaricarsi ed andare in crash.
Confondere IDS (Intrusion Detection System)
La tecnica consiste nell'inserire nel traffico diretto alla vittima particolari stringhe che possono essere scorrettamente interpretate dall'IDS come tentativi di intrusione, generando falsi allarmi. Se la quantità e il tipo di tali pacchetti sono appropriati l’IDS si sovraccarica e va in crash. Il vantaggio di un attacco di questo tipo è che si elimina una difesa della vittima
Conclusioni
Sebbene in passato gli attacchi basati sul SYN Flooding abbiano causato non pochi danni, abbiamo visto che attualmente sono disponibili diverse soluzioni per contrastarli: la quasi totalità degli odierni sistemi di protezione perimetrali, come ad esempio i firewall, implementa adeguati meccanismi di difesa e quasi tutti i sistemi operativi, o in modo nativo, nel caso delle ultime versioni o tramite l’applicazione d'apposite correzioni (patch), in quelli meno recenti, dispongono d’adeguate protezioni. Nonostante questo gli attacchi DOS sono in continua evoluzione questo perché si vuole mostrare non solo che la rete è intrinsecamente insicura ma che gli amministratori di sistema non prendono tutte le necessarie precauzioni per garantire la sicurezza dei loro siti e il terrorismo informatico (Cyberterrorismo: le vittime sono enti e organizzazioni che possono avere in qualche modo attirato propositi di vendetta di singoli o gruppi organizzati) è sempre in “agguato”.
GLOSSARIO
Backbone: dorsale: porzione di rete che a sua volta collega piccole reti locali fra loro e che sopporta grandi quantità di traffico ad alta velocità per un lungo tratto. Internet scorre fra vari backbone spesso intercontinentali.
Buffer: Parte della memoria del computer riservata temporaneamente ai dati in trasmissione da un punto (o dispositivo) all’altro.
DNS: Domain Name Server, servizio che consente di ottenere l’indirizzo IP di un computer dal
suo nome di dominio.
Handshake: Trasmissione che ha luogo all’inizio di una sessione tra due computer che comunicano. Questo tipo di trasmissione consente ai due computer di stabilire un accordo sulle modalità di trasmissione.
Pacchetto: la più piccola unità inviata attraverso una rete. E’ un termine generico descrivere blocchi di dati ad ogni livello, ma soprattutto a livello programma.
Packet Filtering: Il packet filtering è uno dei metodi più comuni per creare un firewall TCP/IP. Questa tecnica permette di controllare il movimento dei pacchetti IP in funzione dei loro contenuti. Il packet filtering filtra i pacchetti IP sulla base di un insieme di regole che viene definito in corrispondenza di un router o di un altro dispositivo per l'inoltro dei pacchetti, si possono implementare delle regole di packet filtering per una combinazione tra indirizzo host, protocollo, applicazione, direzione della connessione e tipo di messaggio. Gli aspetti specifici dell'implementazione delle regole del packet filtering dipendono dal particolare tipo di dispositivi che viene utilizzato e da loro produttore.
Protocollo: una descrizione formale del formato dei messaggi e delle regole che devono seguire
due computer affinchè lo scambio possa avvenire. I protocolli possono essere di basso livello, es
come spedire bit o byte attraverso la rete, o di alto livello, es come scambiarsi documenti. TCP/IP
è di basso livello, HTTP è di alto livello.
Server: un computer o un programma che fornisce un determinato tipo di servizio ad un
programma client in esecuzione su un computer remoto.
Traceback: Il Traceback consiste nel seguire a ritroso gli attacchi fino alla fonte che li ha generati, permettendo ad una vittima di identificare il path(s) della rete attraversato da un attacher, senza richiedere il supporto operativo di un ISPs (Internet Server Provider).
BIBLIOGRAFIA
Analysis of a Denial of Service Attack on TCP
Christoph L. Schuba, Ivan V. Krsul, Markus G. Kuhn, Eugene H. Spafford, Aurobindo Sundaram, Diego Zamboni COAST Laboratory Department of Computer Sciences Purdue University 1398 Department of Computer Sciences West Lafayette, IN 47907-1398
{ schuba,krsul,kuhn,spaf,sundaram,zamboni} @cs.purdue.edu
Materiale reperito su internet































