L'ip spoofing
e' una tecnica mediante la quale si riesce ad ottenere un accesso con pieni
privilegi ( SuperUser level o root ) ad un terminale modificando la serie
di pacchetti di informazioni ip che partono ed arrivano da un computer
al momento della connessione.L'ip spoofing e' possibile quando i pacchetti
di informazioni viaggiano sullo stesso network e non escono mai all'esterno
( anche se vi sono alcune eccezioni ). Un collegamento base ( telnet, web,
ftp, ecc. ) tra due computer collegati ad internet funziona tramite lo
scambio di pacchetti di informazioni IP che confermano la provenienza e
la destinazione di un terminale. Un ipotetico computer A manda un messaggio
SYN ( SYnchronize sequence Number ) e una serie iniziale di numeri, chiamata
ISNa, al server B richiedendo il collegamento alla rsh ( remote shell )
o a qualche altro servizio remoto ( tanto per citarne uno, rlogin porta
TCP 513 ). Il server B risponde ad A con un pacchetto di informazioni SYN,
ISNb ( l'Initial Sequence Number di B ) e un ACK ( ACKnowledge ) che contiene
l'ISNa aumentato di 1 per poter cosi' capire che i dati stanno andando
nella giusta direzione. Il computer A conclude inviando l'ACK contenente
l'ISNb.
Schematizzando:
A...B: SYN, ISNa
B...A: SYN, ISNb, ACK(ISNa+1)
A...B: ACK(ISNb)
Questo
tipo di connessione e' chiamata in inglese 3-way handshake. Gli Initial
Sequence Number sono dei numeri a caso che incrementano il loro valore
di 128 ogni secondo e di 64 ogni nuova connessione. Quindi se si apre un
collegamento ad una macchina si puo' anche sapere quale sara' la sequenza
successiva. Il SYN ha il solo scopo di chiedere la connessione al sistema
B in modo che questo possa controllare i numeri iniziali mandati da A e
far partire la sua sequenza di login.
Torniamo
a noi:
L'hacker
C prima di tutto deve aprire una connessione con il bersaglio ( in questo
caso B ) alla porta per la posta elettronica ( porta 25 ) o alla TCP echo
port ( porta 7 ); questo da' l'ISNb.
Poi C impersona
A e manda una serie di richieste di connessione:
(C)A...B: SYN
(C)A...B: SYN
(C)A...B: SYN
(C)A...B: SYN
(C)A...B: SYN
(C)A...B: SYN
(C)A...B: SYN
(C)A...B: SYN
B risponde
ai vari SYN di C credendo di mandare i messaggi ad A:
B...(C)A: SYN, ISNb
B...(C)A: SYN, ISNb
B...(C)A: SYN, ISNb
ecc...
Cosi' facendo
si concede ad "A" di entrare. Da questo momento tutte le future connessioni
con quella porta TCP verranno ignorate a causa dell'afflusso delle connessioni
mandate da C.
(C)A...B:
ACK(ISNb) usando l'ISN aumentato come abbiamo visto prima. C non vede nessuna
risposta da parte di B poiche' quest'ultimo le spedisce ad A.
Se tutto
e' andato bene lo rsh server di B pensando di connettere A, da' libero
accesso a C. Per fare credere a B di essere A bisogna che quest'ultimo
non sia collegato per poi, cosi', prenderne il posto. I messaggi ip, inoltre,
devono essere modificati in maniera tale che la risposta di B non arrivi
ad alcun host poiche' quest'ultimo potrebbe mandare
indietro
un messaggio RST ( reset ) che annullerebbe la connessione.
Ricordate:
Nessun
pacchetto di informazioni deve tornare indietro a voi in alcun modo! I
servizi vulnerabili all'ip spoofing sono i seguenti:
SunRPC
& NFS
I comandi
remoti del BSD Unix ( rlogin o rsh ad esempio )
X Windows
Firewalls
basati sul filtraggio dei routers se il router non e' configurato per bloccare
i pacchetti provenienti dal un dominio locale.
Alla fine,
le cose che vi servono per poter sfruttare questa tecnica sono:
1) L'host
bersaglio;
2) L'host
a cui "devono arrivare" i messaggi mandati dal bersaglio ( quello,
cioe', che dovete impersonare );
3) L'host
dal quale attaccate ( dovete essere root qua! );
4) Un software
per l'ip spoofing ( vedi alla fine di questo articolo ).
Sotto riporto
lo schema di un pacchetto di informazioni ip:
________________________________________________________
4-bit |
4-bit | 8-bit
| 16-bit |
| Lunghezza | Tipo di |
Lunghezza |
Versione | Intestazione |
Servizio | Totale |
-------------------------------------------------------|
16-bit
| 3-bit | 13-bit
|
| | Variabili di
|
Identificazione
| Flags | Frammento
|
-------------------------------------------------------|
8-bit
| 8-bit | 16-bit
|
Tempo da |
|
|
"Vivere" | Protocollo
| Controllo Intestazione |
-------------------------------------------------------|
32-bit
|
|
Indirizzo di provenienza
|
-------------------------------------------------------|
32-bit
|
|
Indirizzo di destinazione
|
-------------------------------------------------------|
Opzioni ( se ci sono )
|
|
-------------------------------------------------------|
|
Dati ( di lunghezza variabile )
|
_______________________________________________________|
I numeri
a 32bit indicati come Indirizzo di provenienza e di destinazione
sono i
due piu' importanti dati nel pacchetto IP e sono alla sua testa.
Piccola
nota: Il tempo da "vivere" ( detto anche TTL= Time To Live ) indica
il numero
di salti di router che un pacchetto IP puo' fare prima di essere
scaricato
definitivamente dalla rete.
Una volta
che si e' ottenuto il controllo del terminale B, e' possibile
accedere
ai collegamenti remoti che sono connessi a quel terminale.
Riporto
in seguito anche lo schema per un segmento di informazioni TCP:
________________________________________________________
16-bit
| 16-bit
|
| Porta di
|
Porta di provenienza
| Destinazione
|
--------------------------------------------------------|
32-bit
|
|
Sequenza di numeri
|
--------------------------------------------------------|
32-bit
|
|
Numeri di indentificazione
|
--------------------------------------------------------|
4-bit
| 6-bit | 6-bit | 16-bit
|
Lunghezza | Riservato|
Flags | Grandezza
|
Intestazione |
| | Finestra
|
--------------------------------------------------------|
16-bit
| 16-bit
|
Controllo del TCP
| Indice
|
| Urgente
|
--------------------------------------------------------|
Opzioni ( se ci sono )
|
--------------------------------------------------------|
|
Dati ( di lunghezza variabile ) se ci
sono
|
________________________________________________________|
Per poter
effettuare questo tipo di attacco dovete conoscere bene i computer connessi
a quello che volete attaccare per poterne prendere il posto e "fregare"
il vostro bersaglio. Quindi prima di attaccare un computer ( e questo vale
come regola generale ) scoprite tutte le informazioni possibili legate
a lui, alla rete e a quelli che ne fanno parte con comandi come:
finger
who
rwho
rpcinfo
showmount
Una volta
connessi al sistema potete ( ma dovete intendervi parecchio di unix ) utilizzare
un'altra tecnica chiamata Hijacking che permetterebbe, modificando il kernel
del computer sul quale siete entrati, di chiudere tutte i possibili tentativi
di connessione al sistema.
Per quanto
riguarda l'hijacking del sistema ci sono da dire alcune cose:
Per effettuare
questo tipo di attacco bisogna possedere un tool ( attrezzo ), programma,
chiamato "tap" in grado di prendere il controllo delle connessioni esistenti
su di un sistema. Questo programma ( che va' a modificare il kernel del
computer bersaglio ) permette agli intrusi, con privilegi di root, di guadagnare
il possesso di qualsiasi connessione esistente sul sistema bersaglio permettendo
all'intruso di utilizzare comandi come se fosse lui il proprietario di
quella connessione. Se uno user ha effettuaro un rlogin o un telnet ad
un altro sistema, l'hacker puo' guadagnare accesso a quel sistema evitando
le solite procedure di identificazione.
Attualmente
il solo "tap" program conosciuto colpisce il sistema SunOS 4.1.x
Piccola spiegazione dei termini:
ACK=ACKNOWLEDGE=Riconoscimento
SYN=Synchronize
sequence Number=Numeri di sequenza sincronizzati.
ISN ( o
ISS )=Initial Sequence Number ( Initial Send Sequence )=Sequenza di
trasmissione
iniziale.
Queste
sono le basi iniziali dell'ip spoofing che, comunque, non servono a nulla
senza un po' di studio personale.
Per poter
specializzarvi in questo argomento vi consiglio di leggere prima di tutto
un buon libro sul protocollo tcp/ip e sul funzionamento delle reti poi,
dopo aver appreso i vari procedimenti attuati nelle connessioni fra i computer,
approfonfite l'argomento con i testi sull'ip spoofing reperibili un po'
ovunque sulla rete con poche e semplici ricerche. Se volete comunque passare
dalle parole ai fatti, vi conviene provare ad entrare nel computer di qualcuno
che conoscete ( magari un sysop vostro amico ) per poter fare un po' di
esperienza e correre pochi rischi...almeno
all'inizio...
Nota sull'ip
spoofing:
Girovagando
per la rete sono venuto in possesso di un programma chiamato neptune.c
( scaricabile dal file di Phrack Volume 7, Issue 48, File 13 di 18 ) che
servirebbe a svolgere l'ip spoofing al posto nostro richiedendoci solamente
alcune info prima di partire. Non ho ancora verificato l'effettiva utilita'
di questo programma ma ritengo che Phrack sia piu' che affidabile come
fonte di informazioni.