TCPdump
TCPdump è la versione di UNIX di un decodificatore di pacchetti. Originalmente scritto da Van Jacobsen per analizzare problemi di performance di TCP, ed oggi giorno grazie a versioni più aggiornate viene ancora largamente utilizzato.TCPdump deve potere mettere l'interfaccia (tipicamente un Ethernet) in maniera promiscua per leggere tutto il traffico della rete.
Il più semplice modo per usare TCPdump è di eseguirlo ponendo un ` -i ' switch per specificare quale interfaccia della rete dovrebbe essere usata. Esso darà delle informazioni riassuntive per ogni pacchetto ricevuto o trasmesso sull'interfaccia.TCPdump prevede molte importanti opzioni, così come l'abilità di specificare un'espressione per restringere la serie di pacchetti che si desidera studiare.
Problemi riscontrabili
a)Nessun output
Controllare che sia stata specificata l'interfaccia della rete in modo corretto settando lo switch "-i". Se si hanno problemi di DNS, TCPdump potrebbe sospendere provando a migliorare la chiamata al DNS per indirizzi IP, provando le opzioni -f o -n per disabilitare questa caratteristica. Se il problema non è risolto si deve controllare l'interfaccia del KERNEL -poichè TCPdump potrebbe essere mal-configurato per il sistema usato.
b)Pacchetti lasciati cadere
Alla fine dell'esecuzione,TCPdump informerà, se qualche pacchetto sia stato lasciato nel KERNEL. Se questo diviene un problema, è probabile che l'HOST non può tenere alto il traffico della rete e decodificarlo allo stesso tempo. Si prova ad usare l'opzione -w di TCPdump per aggirare la decodifica e scrivere i pacchetti grezzi in un archivio,per poi decodificarli in un secondo momento attraverso l'opzione -r.
Esempi con tcpdump
Per catturare tutti i pacchetti
sull'interfaccia di loopback si può digitare:
tcpdump -i lo
L'interfaccia di loopback è un dispositivo di rete
virtuale che permette di riferirsi a se stesso.
L'output ottenuto è il seguente:
Considerando la prima riga (in grassetto):
15:46:49.086648 - E' il tempo in cui il pacchetto è stato
catturato.
localhost.1029 > localhost.ftp - Indica che il pacchetto è
stato spedito da un'applicazione su localhost associata alla porta 1029 ad
un'applicazione ancora su localhost (stiamo sniffando dal loopback) associata
alla porta riservata ai servizi ftp.
Ci sono altri dettagli di TCP come i numeri di
sequenza della connessione (3015740888) o il valore di
particolari bit. Con queste opzioni tcpdump non prende in considerazione la
parte dati. Se invece si esegue:
tcpdump -i lo -s 200 -x -q
l'output fornito sarà del tipo :
-s 200 specifica di catturare 200 byte di ogni pacchetto
-x specifica di stampare (in esadecimale) l'inizio di ogni
pacchetto
-q fornisce una stampa meno invadente dell'output
(mancano i numeri di sequenza e altri dettagli)
Per catturare solo i pacchetti tcp sull'interfaccia
di rete eth0 e destinati alla porta 23 (telnet) e salvare tutto l'output su un
file si può digitare:
tcpdump -i eth0 -w file tcp port 23
Si può successivamente digitare tcpdump
-r file per visualizzare l'output in maniera standard.
Uno sniffer vede i pacchetti grezzi, cioè senza
nessuna interpretazione dei vari strati del protocollo per cui il pacchetto è
stato costruito. Lo sniffer dovrà quindi interpretare una strana
sequenza di byte.
Consideriamo un pacchetto grezzo cosi come
restituito allo sniffer e vediamo come può essere interpretato. (Se abbiamo a
disposizione un file salvato da tcpdump possiamo visualizzare il pacchetto grezzo
digitando: od -x file )
Sequenza grezza |
Significato (di
alcuni byte) |
||||||||||||||||||||||||||||||
c3d4 a1b2 0002 0004 0000 0000
0000 0000 00c8 0000 0000 0000 6ecf 3936 6744 000a 0040
0000 0040 0000 0000 0008 0045 3c00 5201 0040 0640 683b 007f 0100 007f 0100 0904 1700 a01e
0301 0000 0000 02a0 6079 caa7 0000 0402 2c0f 0204 0a08 0a00 94fb 0000
0000 0301 0003 6ecf 3936 67c3 000a 0040 0000 0040 0000 0000 0008
00453c00 5301
0040 0640 673b 007f 0100 007f 0100 1700 0904 c51e 5034
a01e 0401 12a0 6079 0559 0000 0402 2c0f 0204 0a08 0a00 94fb 0a00
94fb 0301 0003 6ecf 3936 67f5 000a 0038 0000 0038 0000 0000 0008
0045 3400
5401 0040 0640 6e3b 007f 0100 007f
0100 0904 1700 a01e 0401 c51e 5134 1080 6079 4291 0000 0101 0a08 0a00 94fb 0a00 94fb 6ecf 3936 88cc 000a
0040 0000 0040 0000 0000 0008 .... ................. 0045 7200
6901 0040 0640 1b3b 007f 0100 007f 0100 1700 0904 c51e
8734 a01e 9701 1880 6079 8eea 0000 0101 0a08 0a00 9efb 0a00 9cfb
fbff 5701 6c65 6f63 656d 7420 206f 7553 4553 4c20 6e69 7875 3620 322e
2820 3369 3638 2029 202d 654b 6e72 6c65 3220 322e 312e 2030 7028 7374 302f
2e29 0a0d |
|
Anche se tcpdump è molto potente e versatile,
interpretare direttamente il suo output non è pratico. Se si è interessati a visualizzare
e raggruppare i dati sniffati si possono usare dei tool che facilitano queste
operazioni.
Vediamo un tipico esempio di cattura:
Lo scenario iniziale è il seguente:
LUtente A e lUtente B vogliono comunicare e lUtente R, che ha accesso di root, vuole sniffare il traffico. Per fare ciò avvia TCPDUMP:
A questo punto TCPDUMP è in attesa.
Lutente A si connette allutente B attraverso un
operazione di FTP:
Da questo momento in poi tutti i pacchetti sono catturati dallutente R. Poiché vi è un sistema di identificazione con UserID e password, esse saranno catturate:
Dalla figura si vede la cattura dei pacchetti contenenti la UserID e la password dell'Utente A.
Ora lUtente A trasferisce dei file conteneti e-mail dalla macchina dellUtente B:
Anche questi pacchetti vengono catturati dallutente R:
Quando l'Utente R interromperà l'esecuzione di TCPdump gli saranno fornite informazioni sui pacchetti catturati, ad esempio la quantità dei pacchetti catturati; a questo punto potrà analizzare quanto sniffato!