Spoofing di indirizzo IP

L'«IP spoofing» è una tecnica che consiste nel sostituire l'indirizzo IP del mittente di un pacchetto IP con l'indirizzo IP di un altro terminale.

Questa tecnica permette così ad un pirata di inviare dei pacchetti in anonimo. Non si tratta però di un cambiamento di indirizzo IP, ma di un travestimento dell'indirizzo IP a livello dei pacchetti emessi. Alcuni tendono ad assimilare l'utilizzazione di un proxy (che permette di mascherare in un certo modo l'indirizzo IP) con lo spoofing IP. Tuttavia, il proxy non fa che trasmettere i pacchetti. Ma anche se l'indirizzo è apparentemente mascherato, un pirata può facilmente essere trovato grazie ai log del proxy.

Attacco spoofing

La tecnica dello spoofing di indirizzo IP può permettere ad un pirata di farsi passare dei pacchetti su una rete senza questi siano intercettati dal sistema di filtraggio dei pacchetti (firewall). In effetti, un sistema firewall funziona soprattutto in base a regole di filtraggio che indicano gli indirizzi IP autorizzati a comunicare con i terminali interni alla rete:

trapassare un firewall usando lo spoofing IP
Un pacchetto spoofato con l'indirizzo IP di un terminale interno sembrerà provenire dalla rete interna e sarà trasferito al terminale bersagli dell'attacco, mentre un pacchetto contenente un indirizzo IP esterno sarebbe automaticamente rifiutato dal firewall. Ciononostante, il protocollo TCP (protocollo che assicura principalmente il trasporto sicuro dei dati su internet) riposa su link di autenticazione e di approvazione fra i terminali di una rete, il che significa che per accettare il pacchetto, il destinatario deve innanzitutto dare ricevuta di ritorno presso il mittente, che a sua volta dovrà fare la stessa la cosa una volta ricevuta la ricevuta di ritorno.

Modifica del header TCP

Su internet, le informazioni circolano grazie al protocollo IP, che assicura l'incapsulamento dei dati in strutture chiamate pacchetti ( o più esattamente datagrammi IP). Di seguito la struttura di un datagramma:

Versione Lunghezza del titolo Tipo di servizio Lunghezza totale
Identificazione Bandiera Spostamento frammentato
Durata di vita Protocollo Somma del controllo intestazione
Indirizzo IP sorgente
Indirizzo IP destinazione
Dati

Usurpare un indirizzo IP significa modificare il campo sorgente per simulare un datagramma proveniente da un altro indirizzo IP. Tuttavia, su internet, i pacchetti sono generalmente trasportati dal protocollo TCP, che assicura una trasmissione detta «affidabile». Prima di accettare un pacchetto, un terminale deve innanzitutto inviare una ricevuta di ritorno al terminale mittente, e aspettare che quest'ultimo confermi la buona ricezione della ricevuta di ritorno.

Relazione di fiducia

Il protocollo TCP è uno dei principali protocolli del livello trasporto del modello TCP/IP. Questo protocollo consente, a livello delle applicazioni, di gestire i dati provenienti (o destinati) dal livello inferiore del modello (cioè il protocollo IP). Il protocollo TCP permette di assicurare il trasferimento dei dati in modo sicuro, anche se utilizza il protocollo IP (che non ha nessun controllo integrato di consegna del datagramma) grazie ad un sistema di ricevute di ritorno (ACK) che permette al client e al server di assicurare la buona ricezione reciproca dei dati.

I datagrammi IP incapsulano dei pacchetti TCP (detti segmenti) la cui struttura è:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Porta sorgente
Numero d'ordine
Numero di ricevuta di ritorno
Spostamento
données
riservato URG ACK PSH RST SYN FIN
Somma di controllo
Opzioni
Dati
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Porta destinazione
Numero d'ordine
Numero di ricevuto di ritorno
finestra
Pointer di emergenza
opzioni riempimento
Dati

Al momento dell'emissione di un segmento, viene associato un numero d'ordine (detto anche numero di sequenza), e uno scambio di segmenti contenenti dei campi particolari (detti flag, in italiano bandiere) che permettono di sincronizzare il client ed il server. Questo dialogo (detto stretta di mano in tre tempi), permette di iniziare la comunicazione, svolgendosi in tre tempi, come indicato dal suo nome:

In un primo tempo, viene tramsesso dal terminale emittente (il client) un segmento il cui flag SYN è a 1 (per segnalare che si tratta di un segmento di sincronizzazione), con un numero d'ordine N, che viene chiamato numero d'ordine iniziale del client.

In un secondo tempo il terminale emittente (il server) riceve il segmento iniziale proveniente dal client, poi gli invia una ricevuta di ritorno, cioè un segmento il cui flag ACK è non nullo (ricevuta di ritorno) ed il flag SYN è a 1 (dato che si tratta di una sincronizzazione). Questo segmento contiene un numero di sequenza uguale al numero d'ordine iniziale del client. Il campo più importante di questo segmento è il campo ricevuta di ritorno (ACK) che contiene il numero d'ordine iniziale del client, aumentato di 1.

In ultimo, il client trasmette al server la ricevuta di ritorno, cioè un segmento il cui flag ACK è non nullo, e il cui flag SYN è a zero (non si tratta più di un segmento di sincronizzazione). Il suo numero d'ordine è aumentato e il numero della ricevuta di ritorno rappresenta il numero di sequenza iniziale del server aumentato di 1. Il terminale spoofato risponderà con un pacchetto TCP il cui flag RST (reset) è non nulla, cosa che metterà fine alla connessione.

Annichilire il terminale spoofato

Nel quadro di un attacco spoofing di indirizzo IP, l'attaccante non ha nessun ritorno di informazioni dato che le risposte del terminale bersaglio dell'attacco vanno verso un altro terminale di rete (si parla allora di attacco alla cieca, in inglese blind attack):

Il terminale spoofato risponde al ACK con un RST

Inoltre, il terminale «spoofato» priva l'hacker di qualsiasi tentativo di connessione, dato che questo invia sistematicamente una bandiera RST al terminale bersaglio dell'attacco. Il lavoro del pirata consiste quindi nell'invalidare il terminale spoofato rendendolo irraggiungibile durante tutta la durata dell'attacco.

Predire il numero della sequenza

Quando il terminale spoofato è invalido, il terminale bersaglio dell'attacco aspetta un pacchetto con la ricevuta di ritorno e l'esatto numero di sequenza. Tutto il lavoro del pirata consiste allora nell'«indovinare» il numero di sequenza da rinviare al server per stabilire una relazione di fiducia.

Per questo, i pirati usano generalmente il source routing, cioè utilizzano il campo opzione del header IP per indicare una via di ritorno specifica al pacchetto. Così, grazie allo sniffing, il pirata potrà anche leggere il contenuto dei pacchetti di ritorno:

Ricerca di numeri di sequenza

Inoltre, conoscendo l'ultimo numero di sequenza emesso, il pirata stabilisce delle statistiche riguardo il suo incremento e invia delle ricevute di ritorno fino ad ottenere l'esatto numero di sequenza.

Ulteriori informazioni

CERT® Advisory CA-1995-01 IP Spoofing Attacks and Hijacked Terminal Connections;

RFC 793 - Transmission Control Protocol - Protocol Specification;

RFC 1948 - Defending Against Sequence Number Attacks.

Foto: © Pixabay.

I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Il documento intitolato « Spoofing di indirizzo IP » dal sito CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.