Cosa è e come funziona un SYN Flood Attack




SYN Flood Attack

SYN Flood Attack

Oggi voglio parlarvi di un argomento che riguarda la sicurezza delle reti e nel particolare il protocollo TCP/IP. Questo argomento forse piacerà solo agli appassionati ma cercherò di renderlo il più comprensibile e facile possibile. Non darò nulla per scontato e vi dirò tutto ciò che c’è da sapere ( o almeno tutto ciò che so io 😀 ). Iniziamo 😉

TCP/IP – Aspetti basilari

Il protocollo TCP utilizza una connessione tra sorgente e destinazione che può essere vista come un collegamento virtuale ( quindi,non fisico ) che permette anche una facile implementazione di tale protocollo. TCP però utilizza il protocollo IP per poter trasferire i dati ( all’interno di datagram IP ). IP è un protocollo best-effort: questo significa che IP fa tutto il possibile per inviare i dati dalla sorgente alla destinazione ma non offre nessuna garanzia. Questa garanzia ci viene data da TCP che quindi aggiunge anche meccanismi di affidabilità alla connessione ( a differenza di UDP che non è orientato alla connessione e mira più all’efficienza,come applicazioni DNS ). Le fasi di TCP sono 3: instaurazione della connessione,trasferimento dei dati,chiusura della connessione.

Instaurazione della connessione

TCP permette di trasferire i dati in modo bidirezionale e simultaneo. Questo significa che un processo ( client ) deve inizializzare la comunicazione e ottenere un’approvazione ( riscontro ) dall’altro processo ( server ) prima di inviare i dati. La fase di instaurazione della connessione viene chiamata three-way handhasking ( 3WH ): il client apre una connessione verso il server il quale deve comunicare a TCP di essere pronto ad accettare una connessione TCP. Questa richiesta è detta apertura passiva.  Il client invece chiede a TCP di instaurare una connessione con un server già in modalità passiva: tale richiesta è chiamata apertura attiva.

A questo punto può iniziare il three-way handshaking:

  1. Il client spedisce il primo segmento,chiamato SYN ( richiesta di sincronizzazione appunto ) dove l’unico bit di controllo che vale 1 è proprio SYN. Come ho già detto,questo segmento serve per la sincronizzazione dei numeri di sequenza. Il numero di sequenza è scelto in modo casuale dal client e viene consumato per questo segmento;la numerazione dei dati quindi avverrà partendo numero di sequenza specificato in questo segmento incrementato di 1.
  2. Il server risponde con un segmento SYN+ACK che svolge una duplice funzione ( in questo caso i bit di controllo che valgono 1 sono il bit SYN e ACK ). La prima funzione che svolge è quella di sincronizzazione ( SYN ) nell’altra direzione della comunicazione ( da server a client ). Le caratteristiche del SYN sono simili a quelle del SYN client: viene scelto anche qui un numero di sequenza in modo casuale indipendentemente da quello spedito dal client che servirà a numerare i dati che partono dal server verso il client. In questo caso viene consumato un numero di sequenza. La funzione ACK è invece una conferma al client della ricezione del segmento SYN spedito dallo stesso client. Per i riscontri ( ACK ) non vengono consumati numeri di sequenza. Cosa importante da ricordare è che il numero di riscontro spedito in un segmento di ACK specifica il numero del prossimo byte che chi spedisce il riscontro si aspetta di ricevere.
  3. Il client spedice un terzo segmento ACK per confermare il SYN ricevuto dal server.

Attacco SYN flooding

Il processo di instaurazione della connessione è però soggetto ad un problema di sicurezza chiamato attacco SYN flooding. Questo attacco prevede la spedizione di una grande quantità di SYN al server pretendendo,grazie all’utilizzo di IP fasulli,che ognuno di essi arrivi da un client diverso. Il server quindi,per ogni richiesta di apertura attiva,dovrà allocare risorse necessarie per la gestione della connessione consumando sia memoria che tempo di CPU. Il server spedisce un segmento SYN + ACK per ogni SYN che però viene ignorato da chi esegue l’attacco. Il server a questo punto penserà che il segmento SYN + ACK sia stato perso e quindi può anche rispedirlo varie volte prima di abbandonare il tentativo di instaurazione della connessione. Dovete pensare che durante tutto questo tempo sono comunque state utilizzate risorse. Se il numero dei SYN è sufficientemente grande,il server può anche andare in crash. Questo tipo di attacco appartiente alla categoria degli attacchi DOS ( Denail OF Service ) nei quali chi attacca manda così tante richieste da far crashare il server ed impedisce quindi l’utilizzo dei servizi a disposizione sul server da parte degli utenti legittimi.

Alcune implementazioni di TCP utilizzano delle precauzioni contro questi tipi di attacco:

  • alcuni impongono un limite al numero di richieste di connessioni in determinato intervallo di tempo.
  • altri invece rimandano l’allocazione delle risorse fino a che la fase di instaurazione della connessione viene terminata,utilizzando i cookie. Un esempio di tale strategia è offerta dal protocollo SCTP.