InfectedMachine logo by mainman

By InfectedMachine

Basi dell'ip spoofing e del Hijacking ( by InfectedMachine )

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.