Infordata Home Page
L'Azienda L'Offerta Clienti Eventi News dal web Contatti Area riservata Area clienti
     
Dal web...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Allarme su Internet

Recentemente è gravitata su Internet e sui giornali la notizia di una pericolosa falla del TCP\IP, il protocollo di trasmissione più diffuso nel web, che metterebbe a repentaglio la Rete. Il ricercatore americano Paul Watson che si occupa di sicurezza, ha presentato un articolo, "Slipping in the Window: TCP Reset Attacks", nella conferenza tenutasi a Vancouver: il CanSecWest Security Conference 2004 dal 21 al 23 Aprile scorso.

La scoperta riguarda un codice che permette di colpire una falla interna al TCP. Tale vulnerabilità del protocollo è già nota da tempo, ma fino ad oggi si è ritenuto che riuscire a sfruttarla equivalesse a indovinare un numero su una combinazione di 4,3 miliardi possibili, ovvero 124 anni di tentativi.
Studiando la struttura della tecnologia nucleo del Web, Watson ha identificato un metodo per forzare la chiusura della connessione tra due apparecchiature che siano in comunicazione tra loro tramite l'utilizzo del protocollo TCP. Ha scoperto in pratica, che qualsiasi numero compreso in una certa finestra di valori può permettere l'identificazione, all'interno di una sequenza, del prossimo pacchetto TCP. Questa tecnica renderebbe di fatto possibile indovinare la giusta sequenza di numeri in appena 15 secondi e con un semplice codice, fattibile da un programmatore in 5 minuti.

Inizialmente le preoccupazioni sono state vicine ad un generale stato di allarme, poichè secondo quanto comunicato dal National Infrastructure Security Co-ordination Centre (NISCC) , l'exploit, sarebbe in grado di agire sulle macchine connesse in Rete, ivi compresi i router, causando pericolosi Denial of Service (DoS), ponendo dunque le basi per un possibile blocco della navigazione. L'ente britannico ha affermato inoltre che il problema interessa "ogni servizio di rete o applicazione che si basa su di una connessione TCP".

Il TCP permette la connessione tra due host, che utilizzano lo stack TCP/IP. Per l'interoperabilità tra i vari protocolli dello stack, il TCP/IP è diventato lo standard di tutte le trasmissioni a commutazione di pacchetto. In sè, il TCP è un protocollo orientato alla connessione, ossia è quell'insieme di regole che permettono di "connetterci" ad un host e dialogare con lui utilizzando un protocollo di livello superiore, ad esempio HTTP, piuttosto che SNMP e così via. "Orientato alla connessione" riferito ai protocolli, significa che esiste una sorta di collegamento logico tra i due host di modo che il colloquio avvenga in maniera sicura con la conferma di cio' che si e' ricevuto, a differenza dei protocolli non orientati alla connessione che non garantiscono la corretta ricezione dei pacchetti, vedi UDP.

Per capire ciò, si può paragonare il colloquio tra due apparecchiature host ad una partita a scacchi, i cui giocatori si trovino in luoghi diversi e comunichino le proprie mosse per posta. A causa di possibili disguidi del servizio postale, le lettere con le rispettive mosse potrebbero non arrivare in sequenza, per ovviare a ciò, si decide di numerare le varie mosse in maniera tale che i giocatori possano rispondere alla mossa dell'avversario nella giusta sequenza; per cui banalmente, la lettera spedita con il numero 2 indica la seconda mossa eseguita in ordine cronologico. Se un giocatore si stanca, spedisce una lettera con scritto non gioco più. Chi la riceve, non trattandosi di una mossa del gioco, non controlla la sequenza ed interrompe la partita. A questo punto chiunque conoscesse l'indirizzo dei due giocatori potrebbe divertirsi a spedire una siffatta lettera per il gusto di interrompere il gioco.
Nel colloquio tramite TCP il meccanismo è simile: si numerano i messaggi in modo che possano poi essere riordinati, e si controlla che la sequenza nella quale vengono ricevuti sia corretta. Esiste quindi la possibilità di interrompere la connessione con quello che si chiama pacchetto di reset, che è previsto nel protocollo TCP per permettere di abbattere una determinata connessione quando qualcosa non va correttamente. Questo non rispetta il controllo della sequenza dei messaggi, per cui se "il numero" del pacchetto che contiene il messaggio di reset è compreso in una data sequenza, causa l'immediata chiusura della connessione.
Tornando ai nostri scacchisti può succedere che:
1-Esiste il telefono, per cui immediatamente si possono contattare e chiedere all'altro il motivo dell'interruzione del gioco.
2-Non esiste il telefono, si spedisce una lettera in cui si chiedono i motivi dell'interruzione.
Nel primo caso, una volta rilevate le cause (uno scherzo di un amico burlone), si riprende il gioco immediatamente, nel secondo caso passa molto più tempo.
Altrettanto succede nella rete, lo "scherzo" a seconda di chi colpisce può causare problemi più o meno gravi. Se un reset colpisce due PC che scambiano posta elettronica non si fa sentire, diverso è il discorso se colpisce un router che utilizza protocolli quali il BGP che in caso di reset possono impegnare l'apparecchio in un complesso ricalcolo di algoritmi di routing che a loro volta mettono in lista d'attesa coloro i quali utilizzano questi router per comunicazioni tra aree spesso molto distanti tra loro.

I dispositivi maggiormente a rischio sono infatti i router che si servono del Border Gateway Protocol (BGP), un protocollo utilizzato sulle dorsali Internet per far comunicare fra loro i router appartenenti a differenti domini. Il protocollo BGP è particolarmente vulnerabile perché prevede che i vari peer (ponti), costituiti dai border router, comunichino fra loro attraverso connessioni TCP permanenti. Il problema riguarda in sintesi l'implementazione di quasi tutti gli stack TCP, in quanto questi non verificano che i pacchetti cadano tra ACK e ACK+CWND-1, ovvero la window di trasmissione TCP, questo implica che, se viene inviato un RST con il sequence number nella windows, esso viene accettato. Quindi tutte le questioni sulla randomizzazione dei sequence number saltano, perché il largo spazio dei numeri di sequenza viene diviso per la dimensione della finestra del TCP, rendendo fattibile un attacco esaustivo.

Per l'attacco servono dunque SRC_IP, DST_IP, DST_PORT, e SRC_PORT. Quest'ultimo dato non è così banalmente ottenibile, ma studiando il comportamento di vari sistemi operativi, da quelli di base come Windows e Linux a quelli specializzati come l'IOS di Cisco, si scopre che i parametri non sono generati casualmente, fatto salvo OpenBSD.
Sapendo il numero di neighbor del router che usa il BGP, si prevede che in media metà delle sessioni le inizia questo e metà i suoi peer, e sapendo, o indovinando l'uptime, si riducono a una cinquantina i tentativi per indovinare la porta. A questo punto, presa una, le successive sono deterministiche, quindi la connessione resta poi disattivata per un tempo indefinito. Lo stesso problema si può trasferire dal BGP ai database, ai DNS zone transfer e così via.

E' stata inoltre verificata l'esistenza di un altro problema, potenzialmente più grave. Sull'invio di un SYN su connessione già aperta viene rimbalzato un RST che non dovrebbe esserci. O meglio, che dovrebbe esserci solo se il SYN ricade nella finestra di trasmissione, come per l'altra vulnerabilità. Pare che l'unico modo per risolvere il problema sia mettere effettivamente mano all'RFC del TCP.

Esemplificando: A invia a B un pacchetto con il flag SYN settato ad 1, e nel campo SN (serial number) un valore scelto a caso, che sarà l'origine da cui numerare i successivi pacchetti. Questo permette di rendere univoco ogni pacchetto della connessione. B, ricevuto il pacchetto SYN, risponderà con un SYN/ACK (flags SYN e ACK settati ad 1) che contiene nei campi SN e AN, rispettivamente, il suo SEQ_NUM (sequence number, generato anche in questo caso randomly) e in AN, che indica il prossimo pacchetto che l'host si aspetta di ricevere, il SEQ_NUM ricevuto da A, incrementato di 1. Quando A riceve il SYN/ACK, risponderà con un ACK finale (con flag ACK settato ad 1 per i pacchetti FIN e RST), con il campo SN = SEQ_NUM[A]+1 (che poi è l'AN ricevuto da B, in questo caso), AN = SEQ_NUM[B]+1 (A si aspetta di ricevere il pacchetto con quel numero di serie) e nel PDA (package data unit) cominceranno ad esserci i dati della connessione (segmenti).

Una volta terminato lo scambio di informazioni, quando si desidera chiudere la connessione, ci sono due modi: il "tear down" che è la prassi e che funziona nel seguente modo: quando A vuole chiudere la connessione manda a B un pacchetto FIN (flag FIN=1), B invia un ACK, e la connessione da A a B si chiude. Quando anche B ha finito di trasmettere, invia il suo FIN al quale A risponderà con un ACK finale. Allo scadere di un timeout, a questo punto, la connessione sarà chiusa.
Il secondo metodo, che avviene quando insorge un errore, è dato dal flag RST. Questo pacchetto chiude immediatamente la connessione, ed è superfluo persino l'invio del solito ACK da parte dell'altro end-point della connessione.

Se dunque, un eventuale attaccante riesce a sostituirsi ad A durante la connessione, inviando un pacchetto di RST con i dati di A (ip address, port number e SN), questo chiuderà la connessione tra A e B. Ora, il SN è un valore di 32 bit, deciso casualmente durante la fase di SET-UP della connessione, e, variando velocemente, è molto difficile da scoprire e da duplicare, anche perchè TCP è congegnato per scartare i pacchetti doppi che gli giungono (doppio è il pacchetto con stesso SN). Si è quindi pensato, per molto tempo, che il problema fosse solo teorico, fino a quando Paul A. Watson non ha scoperto che i pacchetti di RST (e piu in generale gli altri pacchetti) non devono necessariamente avere il numero di SN esatto, ma devono ricadere in un certa "vicinanza" (la Window, o Finestra di trasmissione) rispetto al numero di serie. La window serve a permettere il controllo dell'errore e del flusso da parte di TCP, facendo fronte ad eventi di congestione e/o perdita di pacchetti. Purtroppo, questo aumentare delle probabilità che un certo pacchetto venga accettato e quindi processato dallo stack ricevente, rende attuabile l'attacco di cui sopra, causando la disconnessione di una comunicazione in corso.
Inoltre i router usano scambiarsi messaggi di controllo, sfruttando il protocollo BGP, che si appoggia a connessioni TCP permanenti, o comunque di lunghissima durata, e quindi particolarmente esposte ad un attacco di questo tipo. Se l'attacco viene perpetrato ai backbone, o dorsali oceaniche, che sono reti in fibra ottica che collegano, ad esempio, Europa ed America, e che scaricano un'enorme parte del net-load tra i vari continenti e una di queste connessioni viene a mancare, il carico di traffico sulle altre backbone salirebbe enormemente, portandole al crash. A questo punto, si avrebbe una reazione a catena e il traffico, poco a poco nel giro di qualche minuto, porterebbe al crash la maggior parte dei router, paralizzando completamente la rete.

Tutto ciò se non fossero stati implementati, ormai da parecchio tempo, degli algoritmi di cifratura e firma dei pacchetti TCP per proteggere le backbone, e cioè l'hash md5 che impedisce il banale ip spoofing tra quegli host che usano il protocollo BGP. L'advisory di NISCC, propone inoltre l'utilizzo di IPsec, per patchare questa falla.

Un attacco di ampia scala che sfruttasse la vulnerabilità descritta e paventata dal NISCC potrebbe portare al black-out di ampie porzioni della Rete. Di fatto è solo il protocollo BGP ad essere vulnerabile per cui si potrebbero avere attacchi isolati e contro piccole reti.

Inoltre le dimensioni dei possibili effetti di questi attacchi non sono poi così devastanti considerando che al momento della conferenza Watson aveva reso noto in precedenza alle autorità di sicurezza questo rischio, e diversi fra i maggiori produttori di apparati di rete come Symantec e Cisco erano già corse ai ripari aggiornando i propri dispositivi per rafforzare la "falla".

La falla può essere risolta in vari modi, tra i quali c'è l'adozione del protocollo IP Security per la cifratura del traffico di rete e la riduzione della finestra TCP e tutti i maggiori provider di Internet avrebbero collaborato fra loro per adottare, fra i propri border router, connessioni sicure.

Newsletter Infordata
 
Attività Infordata
 
Eventi Infordata