L'attività di monitorare i pacchetti di rete che arrivano al proprio computer si chiama sniffing.
Ogni sistema su una rete IP scambia informazioni con altri sistemi tramite singoli pacchetti che hanno un IP sorgente e un IP destinazione. Tipicamente un computer analizza e processa solo i pacchetti che arrivano al suo dispositivo di rete (una scheda ethernet, un modem ecc.) che hanno come IP di destinazione il proprio o che sono pacchetti di broadcast, indirizzati cioè ad ogni indirizzo IP attivo nello stesso network IP.
L'attività di sniffing il più delle volte è necessaria per monitorare e diagnosticare problematiche di rete ma può essere impropriamente utilizzata per intercettare informazioni sensibili di terzi, come login e password di accesso ad un determinato servizio.
Si possono sniffare pacchetti su ogni interfaccia di rete, ma tipicamente viene fatto su una scheda ethernet, per la quale possono esistere due tipi di ambienti tipici:
- Rete shareata, dove tutte le schede di rete dei computer nella rete locale ricevono TUTTI i pacchetti, anche quelli destinati ad altri indirizzi IP. In questo caso (rete ad anello con cavo coassiale oppure rete a stella con un hub centrale) le schede di rete dei PC normalmente selezionano solo i pacchetti destinati a loro e scartano tutti gli altri che attraversano il mezzo trasmissivo a cui sono collegati.
- Rete switchata, dove ogni PC riceve solo i pacchetti di broadcast o quelli destinati al proprio IP. Questa è tipicamente una rete a stella con uno switch al centro, che provvede autonomamente a forwardare ad ogni sua singola porta solo i pacchetti destinati all'IP del dispositivo collegato a quella porta, oltre ai broadcast, che vengono sempre propagati su tutte le porte.
Nel primo caso l'attività di sniffing permette di analizzare anche pacchetti destinati e originati da indirizzi terzi, ampliando notevolmente le possibilità di intercettare informazioni sensibili.
In una rete switchata, invece, quando si prova a sniffare i pacchetti che passano per l'interfaccia di rete, si possono solo incontrare pacchetti originati dal o destinati al computer locale, oltre ai soliti broadcast.
Esiste tuttavia una tecnica piuttosto evoluta (arp spoofing) tramite la quale è possibile sniffare pacchetti di terzi anche in una rete switchata.
Quando si vogliono sniffare pacchetti destinati a terzi, si deve impostare il "PROMISCUOUS MODE" sull'interfaccia di rete, in modo da farle processare tutti i pacchetti indifferentemente.
Esistono diversi strumenti di sniffing, alcuni sono esplicitamente realizzati per attività di hacking (Sniffit, Ettercap, Dsniff...) e evidenziano le login e le password che sono state intercettate, altri sono più orientati alla risoluzione di problematiche di rete (Ethereal, simile al Windows Network Monitor) e permettono l'analisi di tutti i pacchetti intercettati, altri hanno funzioni di monitoring e analisi a volte limitandosi a considerare solo le intestazioni dei pacchetti (tcpdump, snoop, iptraf, ntop).
Il motivo principale per cui si preferisce cercare di criptare ogni passaggio di login e password in rete (https, ssh, pop3s, sftp ecc.) è proprio per evitare che qualcuno, tramite sniffing, li possa intercettare e facilmente scoprire.
Tcpdump è uno strumento di sniffing particolarmente flessibile e diffuso nel mondo Linux. E' simile a snoop, più diffuso su Solaris, e permette di analizzare il tipo di pacchetti che passano per l'interfaccia di rete specificata.
Va sottolineato che tcpdump NON visualizza il contenuto dei pacchetti ma solo le loro intestazioni (protocollo, IP sorgente, destinazione, porte ecc.) per cui si presta bene alla diagnostica di problemi di networking ma non ad una attività di cracking.
INSTALLAZIONE
Per funzionare tcpdump richiede le librerie libpcap che possono essere scaricate dal sito ufficiale di tcpdump.
La procedura di installazione, sia per libpcap che tcpdump è quella standard (./configure ; make ; make install
). Per il corretto funzionamento su diversi Unix flavour sono necessari alcuni specifici adattamenti. Su Linux, per esempio, il kernel deve essere compilato con la funzione packet socket (CONFIG_PACKET=y
) e tcpdump deve essere lanciato da root.
USO
Tcpdump prevede numerose e flessibili opzioni per definire quali pacchetti sniffare e come farlo.
Il suo output dipende dal protocollo e viene visualizzata una riga per ogni datalink frame intercettato.
Il man ufficiale è dettagliato e ben documentato, riportiamo qui alcune opzioni interessanti.
tcpdump
- Senza opzioni tcpdump visualizza a schermo tutti i pacchetti che passano sull'interfaccia predefinita (di solito eth0)
tcpdump -i ppp0 -c 50
- Visualizza 50 pacchetti (-c 50) sull'interfaccia ppp0 (-i ppp0) e poi esce.
tcpdump -l | tee sniff.log
- Mentre visualizza i pacchetti li mette in un buffer (-l) che viene scritto sul file sniff.log.
tcpdump -e -n
- Visualizza gli indirizzi del data link (-e) e non prova a fare un DNS reverse lookup (-n) velocizzando l'output.
Le regole per identificare il tipo di pacchetto da visualizzare sono molto flessibili e adattabili a diverse necessità. Vediamo alcuni esempi
tcpdump port 80
- Visualizza solo i pacchetti che hanno come sorgente o destinazione la porta 80 (port 80).
tcpdump host 192.168.0.150
- Visualizza solo i pacchetti che hanno come IP sorgente o destinazione 192.168.0.150.
tcpdump host 10.0.0.150 and not port 22
- Visualizza solo i pacchetti relativi all'host 10.0.0.150 che non usino la porta ssh (and not port 22).
tcpdump net 10.0.0.0/24 and port 22
- Visualizza tutti i pacchetti per la rete 10.0.0.0/24 relativi al protocollo ssh (and port 22)
Tcpdump è un ottimo sniffer che permette di monitorare il traffico di rete con filtri flessibili per limitare l'output a video secondo varie regole di matching di pacchetti.
tcpdump [ options ] [ expression ]
-a
Tenta di risolvere network e broadcast address
-c [count]
Esegue l'exit dopo aver raccolto tot pacc
-F [file]
Specifica di utilizzare un file in input per le expression
-i
Specifica l'interfaccia da cui sniffare
-n
Non risolve gli indirizzi ip
-nn
Non risolve ne gli ip ne il numero delle porte
-p
Non abilita il promiscuous mode sull'interfacce da cui tcpdump e' in ascolto
-v,-vv,-vvv
Abilita il verbose mode
-x
Printa ogni paccheto sniffato
Le expression servono per limitare il matching dei pacchetti
proto
Specifica il protocollo [tcp,udp,ether etc...]
dst host [host]
Specifica l'host di destinazione dei pacchetti
dst net
Specifica la network di destinazione dei pacchetti
dst port
Specifica la porta di destinazione dei pacchetti
src host [host]
Specifica l'host sorgente dei pacchetti
src net
Specifica la network sorgente dei pacchetti
src port
Specifica la porta sorgente dei pacchetti
`!' o `not'
Simbolo di negazione, ovvero inverte il matching
`&&' or `and'
Simbolo di concatenazione, visualizza il pacchetto che fa il match di tutte le regole concatenate
`||' or `or
Simbolo di alternanza, visualizza il paccheto o con questa opzione o con quest'altra
Quando lanciate il comando tcpdump, su una macchina remota con una sola interfaccia oppure dovete sniffare il traffico dalla stessa interfaccia da cui avete aperto la connessione, dovrete utilizzare dei filtri per evitare di sniffare il vostro stesso traffico telnet o ssh e ricadere in vorticosi loop che rendono l'opera di analisi dei pacchetti improba.
Se mi collego ad un host remoto con SSH, dovro' sniffare tutto tranne i pacchetti con src e dst port 22
[root@morpheus pub]# tcpdump -i eth0 ! port 22
Kernel filter, protocol ALL, datagram packet socket
tcpdump: listening on eth0
[ Traffico sniffato ]
Per Interrompere Ctrl-c
Se devo sniffare ANCHE pacchetti SSH, ma non quelli generati dalla mia connessione posso scrivere (ipotizzando che il mio IP sorgente sia 10.0.0.10):
tcpdump -n -i eth0 ! host 10.0.0.10
(Notare il -n per evitare che venga fatto un DNS reverse lookup dell'IP 10.0.0.10, rendendo inefficace il filtro)
L'impossibilità di analizzare traffico con sorgente e destinazione diversi da quelli locali è una tipica limitazione degli sniffer normali quando vengono utilizzati in ambienti switchati, dove, cioè, lo switch di rete provvede ad inoltrare su ogni singola porta solo i pacchetti per gli host direttamente connessi alla porta stessa, oltre ai broadcast che vengono propagati a tutte le porte (o quantomeno a tutte le porte della stessa VLAN).
Ettercap, sviluppato da due programmatori italiani, è uno sniffer evoluto che permette di sniffare tutto il traffico anche in reti in cui è presente uno switch, con una attività di arp cache poisoning (vengono mandate arp reply finte, che associano il mac address della macchina su cui gira ettercap agli IP sorgente e destinatario, rispettivamente al destinatario e al sorgente), tramite la quale si frappone fra macchine ignare e la macchina bersaglio (che può essere un server o il default gateway di una rete).
Ettercap inoltre offre una serie di feature che fanno la gioia di ogni hacker:
- SSH 1 e HTTPS password sniffing;
- Password collection per una moltidutide di protocolli;
- OS fingerprinting per il riconoscimento dei sistemi operativi sugli Host trovati in rete;
- Possibilità di killare una connessione o inserire caratteri estranei;
- Supporto di plugin vari che a loro volta presentano features quali DNS spoofing, PPTP sniffing,
INSTALLAZIONE
./configure
make
make install
make plug-ins
make plug-ins_install
Il binario ettercap
è copiato di default in /usr/local/sbin
USO
All'avvio di ettercap esegue un rapido scan degli host presenti nella rete locale (viene fatto un aarp request per ogni IP della rete e non un semplice ping a tutti gli IP o al broadcast) e ne presenta una lista a video.
Su questa lista è possibile selezionare gli IP sorgenti e destinatari da monitorare e si possono visualizzare le molteplici potenti opzioni con il tasto h.
Esistono diverse modalità di sniffing: IP based (s), MAC based (m) e ARP poisoning based (a), quella più devastante, in grado di sniffare in ambienti switchati.
Sempre dalla finestra principale, in cui si visualizzano tutti gli IP in rete è possibile identificare i sistemi operativi utilizzati ((f)), fare puro Arp poisoning senza sniffare (j), creare pacchetti custom (x), eseguire uno dei tanti (potentissimi) plugin distribuiti con il tarball ufficiale (p), fare uno scanning passivo, basandosi solamente sugli host per cui c'è traffico (o) controllare se ci sono in rete altri arp cache poisoners (c, notare che sulle macchine bersaglio è possibile accorgersi che qualcosa non va con il semplice comando arp
e cercando se esistono diversi IP in rete con lo stesso MAC address).
Tutte queste opzioni a loro volta aprono una successiva finestra che può presentare dei comandi specifici. Utilizzare sempre h per un HELP e q per tornare alla finestra precedente.
Arpwatch è un ottimo strumento per monitorare il traffico arp in una rete locale.
L'installazione tramite rpm è estremamente semplice e subito funzionale, basta lanciare il demone arpwatch (viene creato lo script di gestione /etc/rc.d/init.d/arpwatch
) per tenere sotto controllo le modifiche dei pacchetti arp nel segmento di rete a cui si è collegati.
L'ideale è installare Arpwatch su un server di monitoring, che rimane sempre acceso, e che intercetta tutti i broadcast arp che arrivano all'interfaccia di rete principale.
Ogni aggiunta di nuovo host o modifica del mac address di un host già aggiunto (sintomo o del cambio della scheda di rete di un computer o del cambio dell'host associato ad un IP o, e questo è l'aspetto più importante, di attività di arp poisoning, tipiche di sniffer per ambienti switchati come ettercap) viene notificato via mail (di default a root) e su syslog.
Alla prima esecuzione è normale ricevere varie mail per tutti gli host in rete, successivamente verranno notificate solo le variazioni e su queste, se non sono previste, è sempre bene indagare.
Nelle notifiche vengono segnalati l'indirizzo IP coinvolto e il vecchio e il nuovo MAC address. Se si ricevono mail che contengono nel titolo le parole FLIP FLOP o Chenge ethernet address è sicuramente il caso di indagare: segnalano una alternanza fra il precedente MAC address associato ad un indirizzo e l'ultimo noto o la modifica del Mac address associato ad un dato IP e possono essere la prova di attività di arp poisoning in rete (o di diversi PC che si alternano in rete con lo stesso IP).
Nella directory /var/arpwatch
l'rpm di arpwatch scrive vari file e script tra cui il file dove si registrano le coppie mac:ip (arp.dat
) e un database con l'elenco dei vendor a cui sono stati associati i principali prefissi arp (ethercodes.dat
, utile anche per altri scopi, ogniqualvolta si cerca di individuare di quale produttore è un dispositivo con un dato mac address).