Sulla rete con Linux a caccia di sniffer

Strumenti e metodi che permettono di rilevare la presenza di analizzatori indesiderati sulla LAN Pubblicato su NetsTime numero 14 del giugno 2001

Un packet sniffer, o più genericamente uno sniffer, è un software in grado di intercettare e monitorare il traffico tra due o più macchine sullo stesso segmento di rete della macchina su cui viene fatto girare, ciò in maniera totalmente trasparente, almeno in linea teorica.

Per ottenere tale risultato uno sniffer sfrutta bachi e/o debolezze intrinseche del protocollo utilizzato: nel caso oggi più comune di reti basate su tecnologia Ethernet, uno sniffer utilizza proprio il meccanismo di condivisione della connessione fisica che sta alla base di questo protocollo. Infatti, ogni macchina collegata con una scheda Ethernet sullo stesso segmento di rete, condividendo il collegamento fisico con le altre, riceve in realtà tutti i pacchetti trasmessi sulla linea, siano essi indirizzati a essa o ad altre macchine, filtrandoli in funzione del MAC-address del destinatario, l’indirizzo univoco che identifica ogni scheda di rete Ethernet, indicato nell’header di ogni pacchetto. Si suppone così che solo la macchina con il corretto MAC-address riceva i pacchetti a lei inviati, trascurando quelli indirizzati ad altre. Tale meccanismo di filtraggio può però esser aggirato, settando la scheda Ethernet della macchina in “promiscuous mode”, una modalità di funzionamento che non prevede il controllo del MAC-address indicato come destinatario dei pacchetti in transito sulla rete, ma che accetta così ogni pacchetto, anche quelli destinati ad altre macchine.



Adatto a diversi scopi:

leciti e illeciti



Naturalmente un software di questo genere può esser impiegato per i fini più diversi: può essere un aiuto per lo studio e la diagnostica di problemi di rete, per esempio per individuare eventuali colli di bottiglia o configurazioni erranti nel routing di un segmento di rete; come può invece essere utilizzato per scopi decisamente meno simpatici (e legali) come il rubare password o intercettare comunicazioni personali. Queste due diverse filosofie di utilizzo si possono notare nelle due forme principali di sniffer disponibili: software commerciali per l’analisi del traffico e delle performance di rete con tool per il network intrusion detection, da una parte, e software “underground” dall’altro, con speciali funzionalità per il capture di password per i più diversi servizi, per la conversione in un formato “umanamente” leggibile dei pacchetti intercettati e per l’intrusione di pacchetti estranei creati ad hoc nella connessione intercettata.

Da quanto detto fin ora si potrebbe pensare che uno sniffer sia fondamentalmente invisibile, non identificabile, e quindi un vero pericolo nel caso venga utilizzato con finalità illegali; dopotutto si tratta di un ente passivo: non trasmette nulla, semplicemente raccoglie tutti i pacchetti sulla rete. Ma c’è un particolare importante: una macchina su cui viene eseguito uno sniffer ha necessariamente l’interfaccia Ethernet in promiscuous mode, quindi una volta in grado di identificare un’interfaccia di rete così settata, si è in grado di identificare uno sniffer. Il caso più semplice in assoluto si verifica nel momento in cui ci si voglia accertare che una macchina, a cui si ha accesso, non stia eseguendo uno sniffer, magari all’interno di un trojan. Il comando da utilizzare in tal caso, solitamente come utente root, è ifconfig:



kronstadt:~> /sbin/ifconfig -a

lo

Link encap:Local Loopback

inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0

UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1

RX packets:404 errors:0 dropped:0 overruns:0 frame:0

TX packets:404 errors:0 dropped:0 overruns:0 carrier:0 coll:0


eth0

Link encap:Ethernet HWaddr 00:C0:DF:EA:5B:A7

inet addr:211.41.191.16 Bcast:211.41.191.255 Mask:255.255.255.0

UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1

RX packets:8837516 errors:0 dropped:0 overruns:0 frame:0

TX packets:120725 errors:1 dropped:0 overruns:0 carrier:1 coll:2659

Interrupt:9 Base address:0x6700



In questo caso si può vedere come l’interfaccia eth0 sia in promiscuous mode, se non è stata volutamente settata così, evidentemente uno sniffer, magari camuffato da innocuo processo, sta girando sulla macchina e intercettando tutto il traffico.



Ingannare lo sniffer

per rivelarlo



Nel caso non si abbia la possibilità di accedere alla macchina sospettata di ospitare uno sniffer, bisogna in qualche modo “ingannare” lo sniffer, così da rivelarsi, solitamente creando pacchetti anomali a cui una scheda di rete non in promiscuous mode, e la macchina su cui è installata, non risponderebbe.

I metodi per riconoscere una macchina la cui scheda di rete è in promiscuous mode sono diversi e si basano sia sui comportamenti dei diversi sistemi operativi di fronte a pacchetti di rete particolari e malformati, sia su ovvi comportamenti dovuti al fatto che il filtering dei pacchetti, che comunque avviene, sia eseguito dal kernel o a livello utente.

Sentinel è un tool per Linux, sviluppato in primis per OpenBSD, che supporta completamente tre delle tecniche di rilevamento di schede in promiscuous mode, reperibile all’URL: http://www.packetfactory.net/Projects/sentinel/.

Il primo dei tre metodi (DNS test) sfrutta un’ingenuità presente in molti sniffer che una volta intercettato un pacchetto cercano di effettuare un reverse lookup dell’indirizzo IP contenuto nell’header così da fornire al suo utilizzatore il maggior numero di informazioni possibili, diventando così da entità puramente passiva a un ente di rete attivo. Una macchina che controlla solo il traffico indirizzato al suo indirizzo IP, non leggendo il pacchetto inviato con il finto indirizzo IP, non cerca di effettuare una query, mentre è proprio il comportamento che ci si aspetta da una macchina in promiscuous mode, basta quindi intercettare tale query al DNS per riconoscere lo sniffer che l’ha generata.

Un altro metodo (Etherping test) si basa invece su un comportamento errato del kernel della macchina sospettata di ospitare uno sniffer che, intercettato un pacchetto echo ICMP indirizzato al giusto indirizzo IP ma a un errato MAC-address, risponde comunque con un corretto pacchetto ICMP, cosa che non avverrebbe se la scheda di rete accettasse solo pacchetti indirizzati al proprio MAC-address, svelando la presenza di una scheda in promiscuous mode.

Il terzo test (ARP test) è molto simile in quanto si crea e invia una richiesta ARP alla macchina sospetta, corretta in tutto e per tutto, ma con ancora una volta il MAC-address errato e quindi invisibile a una macchina non in promiscuous mode: una risposta indica la presenza di uno sniffer.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome