title: SYN flood
text: # SYN flood
  
  Il SYN flood è un attacco di tipo denial of service nel quale un utente malevolo invia una serie di richieste SYN-TCP verso il sistema oggetto dell'attacco.
  
  Quando un client cerca di iniziare una connessione TCP verso un server, il client e il server scambiano una serie di messaggi che di norma è così articolata:
  
  * Il client richiede una connessione inviando un messaggio SYN (synchronize) al server e così facendo richiedere di sincronizzare la Sequence Number (segmento di 32-bit del TCP che serve per riconoscere il pacchetto inviato).
  * Il server acknowledges, cioè risponde a tale richiesta inviando un messaggio SYN-ACK al client e inviando la Sequence Number ricevuta incrementata di una unità. Il server inoltre alloca dello spazio in memoria salvando la request fatta dal client.
  * Il client risponde con un ACK e il server dealloca la request fatta al punto 1 dal client consentendo di fatto la riuscita della connessione in maniera corretta.
  
  Tale processo è chiamato TCP three-way handshake (handshake a tre vie) e costituisce il fondamento per ogni connessione stabilita utilizzando i protocolli TCP/IP.
  
  Nel SYN flood la connessione segue il principio del three-way-handshake modificato in modo da mettere fuori uso i servizi internet destinati agli utenti. Nello specifico l'attaccante può ricorrere a due tecniche distinte per mettere a segno il proprio attacco che vengono analizzate qui di seguito:
  
  Tecnica 1
  
  * L'attaccante richiede una connessione al server utilizzando lo spoofing, ossia camuffa il proprio indirizzo IP con un indirizzo IP diverso.
  * Il server risponde alla richiesta inviata dal client malevolo con un SYN-ACK all'indirizzo IP non corretto.
  
  A questo punto la connessione rimarrà aperta (ovvero si troverà nello stato half-open) perché non riceverà mai il messaggio di ACK da parte del client.
  
  Tecnica 2
  
  * L'attaccante richiede una connessione al server inviando una richiesta SYN.
  * Il server risponde alla richiesta inviata dal client con un SYN-ACK.
  
  In questo caso il client decide intenzionalmente di non rispondere, e dunque di instaurare una connessione con il server, lasciando di fatto aperta la connessione.
  
  Non avendo chiuso le connessioni, il server si trova in tutte e due i casi in uno stato vulnerabile ad ogni possibile attacco malevolo.
  
  Molte volte il SYN flood viene utilizzato solo come fase iniziale di altri attacchi molto più sofisticati.
  
  ## Tipi di attacchi
  
  I principali modi in cui avvengono gli attacchi di tipo SYN flood sono vari, e vengono descritti di seguito:
  
  * Attacco diretto
  
  In questo tipo di attacco, l'attaccante invia richieste SYN multiple e in rapida successione, senza neanche nascondere il suo indirizzo IP. Per risultare più efficace l'attaccante può modificare il suo sistema in modo da non rispondere al SYN-ACK.
  
  * Attacco distribuito
  
  L'attacco distribuito (Distributed direct attacks) è un tipo di attacco che permette all'attaccante di utilizzare non più una singola macchina, ma fare affidamento su N macchine. Questo permette ad ogni singola macchina di sferrare un attacco diretto ricorrendo anche alla tecnica dello spoofing, con conseguente difficoltà da parte della vittima di difendersi da vari attacchi SYN flood. Al giorno d'oggi questi attacchi sono possibili poiché esistono reti di molte macchine, le cosiddette Botnet, che permettono ai vari cyber criminali di sferrare attacchi senza esser riconosciuti.
  
  * Spoofing attack
  
  In questo tipo di attacco, l'attaccante ricorrendo all'utilizzo dello spoofing, riesce a creare una connessione (SYN request) con il server vittima, il quale risponde con un SYN-ACK. Il server tuttavia non riceverà mai una risposta da parte dell'attaccante, lasciando di conseguenza la connessione aperta e provocando la congestione del traffico sul server.
  
  ## Tecniche di difesa da eventuali attacchi
  
  Negli anni, in seguito a diversi attacchi sferrati da vari utenti malevoli, sono stati implementati diversi metodi di prevenzione volti a evitare o, almeno, a limitare i danni causati da questo tipo di attacco. I diversi metodi sono i seguenti:
  
  * Riduzione del tempo di connessione
  
  Attraverso la riduzione dell'intervallo di connessione si riesce a evitare in parte il SYN flooding, tuttavia l'attaccante potrebbe aumentare notevolmente la frequenza di invio dei pacchetti.
  
  * Utilizzo IDS (Intrusion Detect System)
  
  Strumento software che è in grado di identificare accessi non autorizzati e, di conseguenza, attacchi malevoli.
  
  * Aumentare la coda di connessione
  
  L'aumento della coda di connessione comporta che il servizio rimanga disponibile anche a fronte di una notevole quantità di richieste SYN flood inviate, tuttavia questa soluzione è da evitare poiché si rischia di sovraccaricare il sistema.
  
  * Cookies
  
  Di recente sono stati sviluppati molti cookies sofisticati in grado di distinguere le connessioni 'sicure' da quelle potenzialmente malevoli grazie a diversi protocolli.
  
  * Installazione di software e antivirus aggiornati
  
  Installare software in grado di individuare e controllare anomalie e/o possibili minacce provenienti dalla rete. Tra gli ultimi software molto efficienti contro il SYN flood ci sono Junos OS e Cisco Routers.
  
  * Attack Threshold
  
  Opzione che permette di attivare automaticamente meccanismi di difesa a fronte del superamento di un numero di richieste SYN. Per utilizzare correttamente questo meccanismo bisogna conoscere bene il normale traffico dati della propria rete. Ad esempio se un sito web ha una media di 10000 richieste SYN/sec, si può settare la soglia a un valore di 15000. Una volta superato questo limite viene lanciato automaticamente un programma per prevenire ulteriori richieste.
  
  * Alarm Threshold
  
  Meccanismo che permette di mandare un pre-allarme se viene superata la soglia, impostata dall'utente, di connessioni half-complete. Se ad esempio si decide di impostare a un valore di 10000 la soglia di attacchi SYN/sec e a 1000 la soglia di allarme, una volta superato questo valore viene lanciato un allarme che viene riattivato ogni tot secondi fino a quando non si ritorna sotto la soglia prestabilita.
  
  