Questa sezione tratta di alcuni attacchi informatici che colpiscono le reti TCP/IP, Questi attacchi verranno man mano aggiornati in base ai nuovi incidenti di ambito informatico che si verificano su segnalazione del CERT, e di altri organismi competenti nell'individuazione di questi problemi.Questa sezione inoltre tratterà alcuni meccanismi di difesa generali riguardanti l'ambito Linux e Unix più in generale, come possono essere per esempio i firewall.Inoltre dove è possibile forniremo il codice scritto da noi degli attacchi successivamente descritti.
Ogni computer connesso ad una rete TCP/IP durante una comunicazione allega al propio pacchetto l'indirizzo IP di comunicazione e un numero univoco chiamato numero di sequenza.L'hacker esegue l'attacco a previsione del numero di sequenza TCP/IP in due fasi.
Nella prima fase l'hacker cerca di determinare l'indirizzo IP del server, generalmente mettendosi in ascolto dei pacchetti Internet, provando a specificare in ordine vari numeri di host oppure connetendosi al sito mediante un browser Web e osservando l'indirizzo IP nella barra di stato (attraverso il comando nslookup si può avere la traduzione dagli indirizzi IP numerici a quelli a stringa e viceversa).Ad esempio, se un sistema ha l'indirizzo IP 192.0.0.15,l'hacker, sapendo che in una rete C vi possono essere fino a 256 computer, potrà cercare di indovinare i loro indirizzi modificando unicamente l'ultimo byte. Dopo che l'hacker avrà iniziato a trovare gli indirizzi della rete, inizierà anche a controllare i numeri di sequenza dei pacchetti che si trasmettono tali computer.Dopo aver monitorizzato le trasmissioni della rete, l'hacker cercherà di prevedere il prossimo numero di sequenza che verrà generato dal server e quindi fornirà un proprio pacchetto con tale numero di sequenza inserendosi fra il server e l'utente. Poichè l'hacker ha già l'indirizzo IP del server, può in realtà generare pacchetti con i numeri di sequenza corretti e indirizzi IP che gli consentono di intercettare le trasmissioni con l'utente. Dopo che l'hacker ha avuto accesso al sistema tramite questo attacco, può accedere alle informazioni che il sistema di comunicazione trasmette al server,inclusi file di password,nomi di login,dati riservati ed ogni altra informazione trasmessa in rete. In genere questo attacco viene usato come base per l'attacco di un altro server della rete.Uno degli esempi dell'attacco ai numeri di sequenza, e quello che vede protagonista Kevin Mitnick verso i computer di Tsutomu Shimomura. Nel natale del 1994 i computer di Tsutomu Shimomura furono attaccati secondo una nuova tecnica che si basava sui numeri di sequenza, non ancora inclusa nei documenti di Steven Bellovin ricercatore dei Bells Labs che precedentemente aveva stilato un documento che trattava delle debolezze del suite di protocolli TCP/IP. Shimomura contattò un esperto di sicurezza in modo che venissero spiegati i dettagli di questo attacco; sui computer attaccati si usava tcpdump per loggare le connessioni provenienti da internet, quotidianamente i log venivano mandati a una postazione dove venivano successivamente controllati.Per capire meglio cosa successe, partiamo descrivendo alcune caratteristiche del protocollo TCP/IP.Questo protocollo viene usato per stabilire connessioni bidirezionali via rete, e per trasferire quantità di dati elevati attraverso anche a protocolli di livello applicazioni come telnet, http, ftp. TCP a differenza degli altri protocolli della suite come ICMP o UDP, stabilisce una connessione reale fra le parti che devono comunicare; una volta stabilita la connessione, vengono trasmessi dati che verranno successivamente confermati attraverso numeri di sequenza costruiti nel seguente modo: Nella fase iniziale della connessione (handshake) il client contatta il server e gli propone un suo numero di sequenza, il server risponde con un ack sul numero di sequenza appena ricevuto e propone un suo numero di sequenza iniziale, che verrà successivamente confermato dal client:
Connessione TCP HANDSHAKE client server -- -- | | SYN (SEQ= x) | | | | -------------------------> | | | | | | | | SYN (SEQ= y, ACK= x+1) | | | | <------------------------ | | | | | | | | SYN (SEQ= x+1, ACK= y+1) | | | | -------------------------> | | | | | | | | | | -- --
i numeri di sequenza successivi a quelli della connessione vengono costruiti in base ai byte ricevuti, ovvero se ho ricevuto 13 byte, il prossimo numero di sequenza sarà la somma del numero di sequenza precedente più il numero di byte ricevuti + 1 ( seq= seq_prec + 13 + 1 ). Abbiamo visto che il numero di sequenza iniziale è contenuto nel primo pacchetto che ha attivo il flag SYN, che indica l'inizio di una connessione TCP; altri flag utilizzati nel protocollo TCP sono PUSH, che indica al protocollo TCP di inviare i dati immediatamente senza aspettare altri dati; abbiamo poi il flag RESET, che indica di resettare la connessione immdiatamente e infine il flag FIN che indica la fine della connessione.Inoltre bisogna tener conto che dopo un certo tempo che il messaggio viene spedito e non si ha riscontro, allora viene ritrasmesso, quindi ad ogni trasmissione viene associato un timer; inoltre quando una macchina riceve un pacchetto ritrasmette indietro un riscontro per l'avvenuta ricezione. Dopo questo breve scenario di background culturale sul TCP/IP, passiamo alla descrizione dell'attacco di Mitnick, allora innanzitutto
Lo spoofing si basa sulla supposizione da parte dei servizi offerti dal TCP e dall'UDP che un indirizzo IP sia valido. L'host di un hacker puo' tuttavia utilizzare un routing del codice IP di origine per presentarsi al server nelle vesti di un client valido. Un Hacker può impiegare il routing dell'IP di origine per specificare un percorso diretto verso una destinazione e un percorso di ritorno verso l'origine(source routing, attualmente il source routing viene disabilitato); Quando io mi presento con un IP diverso dal mio devo far in modo che la risposta alla richiesta che invio mi debba tornare indietro, con il source routing infatti io riesco a specificare un percorso di ritorno( settando alcune opzioni del pacchetto IP), che comprenderà la mia macchina. In questo modo l'hacker può intercettare o modificare le trasmissioni. Il seguente esempio mostra il modo in cui il sistema di un hacker può prendere le vesti di un client valido per un determinato server.
Gli attacchi a sniffer passivo rappresentano il primo passo prima che un hacker esegua un dirottamento attivo o un attacco IP spoofing. Per iniziare un attacco sniffing, un hacker ottiene user-ID e la password di un utente legittimo e utilizza le informazioni dell'utente per accedere a una rete distribuita.Dopo essere entrato nella rete, l'hacker osserva e copia le trasmissioni dei pacchetti e tenta di raccogliere quante piu informazioni possibili sulla rete l'esecuzione di un programma sniffer preclude che dopo che l'hacker abbia avuto accesso alla rete distribuita, debba anche diventare root infatti l'uso delle socket raw che permettono lo sniffing sono permesse solo all'amministratore di sistema. Un altro scenario di sniffing è l'attacco mascherato. In un attacco mascherato l'hacker inizia la sessione inviando al server un pacchetto di sincronizzazione SYN utilizzando come indirizzo di origine l'indirizzo IP del client. Il server riceverà il pacchetto SYN e risponderà con pacchetto SYN/ACK. L'hacker a sua volta esegue l'acknowledgement del pacchetto SYN/ACK del server. Il pacchetto dell'hacker contiene il numero di sequenza supposto dall'hacker. Per avere successo, l'hacker non ha bisogno di ascoltare i pacchetti del client, sempre che l'hacker possa prevedere il numero di sequenza che il server si aspetta ed eseguirne l'acknowledgement. L'attacco mascherato ha principalmente due difetti:
Questo attacco rompe la connessione dal lato server. Dopo aver rotto la connessione, l'hacker crea una nuova connessione con un numero di sequenza differente. L'attacco funziona nel seguente modo:
Gli hacker possono interferire con ogni tipo di comunicazione di rete. Ad esempio un hacker puo' intercettare una sessione telnet nel seguente modo:
Gli hacker possono usare questo metodo solo se la sessione può trasportare dati nulli. Anche se la sessione accetta dati nulli, un hacker avrà difficoltà pratiche(in quanto dovrà mantenere una certa sincronizzazione tra il client valido e il server) a determinare il momento esatto in cui inviare i dati nulli.Se i dati vengono inviati nel momento errato, l'attacco interromperà la sessione telnet o creerà un 'interferenza senza dare all'hacker la possibilità del controllo della sessione.
Questo attacco rappresenta la più grave minaccia per i server connessi a Internet.Anche se presenta analogie con l'attacco al numero di sequenza, questo attacco ottiene l'accesso alla rete costringendo la rete ad accettare il suo indirizzo IP come se fosse un indirizzo fidato e dunque l'hacker non è costretto a provare indirizzi IP per trovare quello giusto.L'idea dell'attacco è che l'hacker acquisisce il controllo di un computer che si collega con la rete che rappresenta il suo obbiettivo.Poi disconnette il computer dalla rete e inganna il server sostituendosi a tale computer. Dopo che l'hacker si è sostiuito al computer disconnesso, sostituisce l'indirizzo IP all'interno di ogni pacchetto con il propio indirizzo IP (della vittima)e altera i numeri di sequenza.Utilizzando l'IP sostituito, un hacker simula con il propio computer l'indirizzo IP di un sistema fidato, dopo che l'hacker ha ingannato il computer di destinazione, utilizza un apposito numero di sequenza per diventare la nuova destinazione del server. Questo attacco permette di aggirare i sistemi di password monouso e pertanto può compromettere un host dotato di elevati livelli di sicurezza, aggirando il sistema delle password l'hacker può penetrare in un sistema operativo diverso dal propio.