Come scoprire uno Sniffer attivo nel proprio sistema.



Far ciò è spesso impossibile, in quanto i programmi di sniffing sono passivi, per il semplice motivo che essi collezionano solo pacchetti e non trasmettono niente. Comunque, nella pratica, qualcosa di possibile esiste per scovare i programmi di sniffing. Tutto ciò è simile a come in teoria è impossibile scovare i ricevitori radio/tv, ma nelle nazioni europee questo si fa tutte le volte in cui si vuole scovare la gente che non paga le tasse radio/tv. Un pacchetto sniffer stand-alone non trasmette alcun pacchetto, ma quando viene installato in modo non stand-alone su un normale computer il programma di sniffing spesso genererà traffico. I pacchetti di sniffer non stand-alone sono ciò che vogliamo scovare. Quando i cracker/hacker invadono le macchine spesso installano un programma di sniffing. Bene, ciò che noi vogliamo è capire ciò che sta succedendo. Andiamo ad analizzare alcuni metodi che permettono ciò.







Visione generale dei metodi.



Metodo Ping, soluzione 1.


Il primo metodo è quello del ping. Molti pacchetti di sniffer girano sulle normali macchine con un normale stack TCP/IP. Ciò significa che se spediamo una richiesta a queste macchine, esse certamente risponderanno. Il trucco è spedire una richesta all'indirizzo IP della macchina e non a quello del suo adattatore ethernet. Esempio. Ammettiamo che la macchina su cui sospettimo ci sia uno sniffer attivo abbia l'indirizzo 10.0.0.1 e un indirizzo Ethernet 00-40-05-a4-79-32. Noi ci troviamo sullo stesso segmento ethernet così come il sospetto (l'Ethernet è utilizzata unicamente per comunicare localmente su un segmento e non in modo remoto attraverso Internet!) Adesso cambiamo leggermente l'indirizzo MAC in 00-40-05-A4-79-33. Trasmettiamo un ICMP echo request (ping) con l'indirizzo IP e questo nuovo indirizzo MAC. Notiamo che nessuno potrebbe vedere questo pacchetto, perchè così come il frame viaggia attraverso il cavo di rete, così l'adattatore ethernet fa corrispondere l'indirizzo MAC specificato sul pacchetto con il proprio. Se non corrispondono allora ignora il frame. Se notiamo di aver ricevuto una risposta, allora vuol dire che il sospetto non stava facendo girare il MAC address filter sulla carta, ma stava sniffando sulla rete! Ci sono ancora altri modi per difendersi. Ora che questa tecnica è ormai pubblicizzata, i nuovi hacker abilitano un MAC address filter virtuale nel loro codice. Molte macchine (specialmente con Windows), hanno il filtering di MAC nei drivers. Questa tecnica viene spesso usata su switched/bridged Ethernet. Quando gli switch vedono un indirizzo MAC per la prima volta, essi fanno il flood del frame a tutti i segmenti.


Metodo Ping, soluzione 2.


Il metodo ping può essere visto in diversi modi:

Per esempio valori di IP header potrebbero essere usati per generare un errore ICMP. Qualche volta un indirizzo broadcast necessita di essere usato allo scopo di bypassare l'indirizzo IP del software filtering. Questo causa un altro problema per il quale non riescono a rispondere a richieste di broadcast (risposte ai broadcast causano problemi di rete, così come il famoso smurf degli hacker).









Metodo ARP.


Il metodo ARP è simile a quello del ping, solo che viene usato un pacchetto ARP. Una spiegazione (in spagnolo) viene fornita sul sito http://www.apostols.org/projectz/neped/ che include un programma che esegue anche il detect. Il più semplice metodo ARP trasmette un ARP ad un indirizzo non broadcast. Se una macchina risponde a qualche ARP del suo indirizzo IP, allora dovrebbe trovarsi in una situazione promiscua. Una variazione di questa tecnica prende vantaggio dal fatto che le macchine fanno il cache degli ARPs. Ogni ARP contiene l'informazione completa di entrambe le informazioni del mittente e destinatario. In altre parole quando spediamo un singolo ARP ad un indirizzo broadcast includiamo la nostra mappatura dell'indirizzo IP-to-Ethernet. Qualcun altro sulla rete può ricordare questa informazione per alcuni minuti. Per questo motivo possiamo far qualcosa come per esempio spedire un ARP non broadcast, seguito da un ping broadcast. Chiunque risponde senza fare l'ARP, potrebbe aver preso l'indirizzo MAC da un frame ARP sniffato. Per essere doppiamente sicuri, bisognerebbe usare un differente indirizzo MAC sorgente nel ping.







Metodo DNS.


Molti programmi di sniffing fanno automaticamente il reverse-DNS lookup sugli indirizzi IP che vedono. Perciò un modo promiscuo può essere scovato guardando il traffico DNS che esso genera. Questo metodo può scoprire macchine dual-homed (macchine che hanno due schede di rete collegate su due differenti reti) e può lavorare in remoto. Praticamente c'è bisogno di monitorare il reverse-DNS lookups in arrivo sul server DNS. Bisogna fare semplicemente un ping circolare da tutte le macchine della compagnia verso un indirizzo che non esiste. A questo punto bisogna vedere quale macchina fa il reverse-DNS lookup su questo indirizzo. Possiamo accorgerci di questo vedendo sul server DNS quale macchina abbia fatto la richiesta della risoluzione dell'indirizzo inesistente, caratteristica che solo una macchina con uno sniffer attivo possiede. Questa stessa tecnica lavora localmente. Si configura il detector in modo promiscuo, e successivamente si mandano datagrammi IP ad indirizzi sbagliati. A questo punto si osserva il lookup del DNS. Una questione importante con questa tecnica è che i programmi di sniffing tendono a risolvere indirizzi IP più velocemente rispetto alla loro ricerca, dal momento che i programmi commerciali tendono a ritardare la risoluzione fino al punto in cui l'utente del packet filter vede decodificare il protocollo.

Prendiamo come riferimento la figura di sotto per fornire un chiaro esempio. Abbiamo una rete con alcune macchine, una delle quali ha lo sniffer attivo. Vediamo quali passi si eseguono per scoprire la macchina che sniffa i pacchetti.

Metodo DNS - Un esempio







Metodo source-route.


Questa tecnica comprende la configurazione di informazioni source-route all'interno del header dell' IP. Ciò può essere usato per scovare sniffers su altri segmenti adiacenti. Si crea un pacchetto ping, ma si mette una rotta loose-source per forzarlo attraverso un'altra macchina sullo stesso segmento. Questa macchina potrebbe avere il routing disabilitato, cosicchè non farà il forward di esso alla destinazione. Se si riceve una risposta, allora è probabile che sia stato il target a sniffare il pacchetto sulla rete. Si può controllare nella risposta il campo TTL per capire se il pacchetto è tornato indietro a causa dello sniffing. Se il valore del campo TTL è identico a quello in partenza, allora il pacchetto è stato sniffato. Nel source-routing libero è aggiunta una opzione al header dell'IP. I router ignoreranno la destinazione dell'indirizzo IP e faranno il forward al prossimo indirizzo IP nell'opzione source-route. Questo significa che, quando si manda il pacchetto si sa che, se per esempio deve arrivare a Bob, deve passare prima attraverso la rotta di Alice! In questo scenario entrambi Bob e Alice si trovano sullo stesso segmento. Se Alice non instrada, il pacchetto sarà lasciato quando varrà ricevuto. Perciò Bob risponderà solo se egli ha sniffato il pacchetto dalla rete. Nel caso in cui invece Alice effettua l'instradamento, (quindi Bob risponderà) allora il campo TTL può essere usato per verificare che Bob ha risposto dal routing attraverso Alice, oppure direttamente.

Prendiamo come riferimento la figura di sotto per fornire un chiaro esempio. Abbiamo tre macchine, una delle quali sta sniffando i pacchetti di rete, ovvero quella con l'indirizzo 10.0.0.3. Noi ci troviamo sulla macchina 10.0.0.1 e utilizziamo come rotta forzata la macchina 10.0.0.2, ovvero facciamo una richiesta di ping alla macchina 10.0.0.3 con l'opzione loose-source.

Metodo source-route - Un esempio

Vediamo i passi.

La nostra macchina riceve la risposta e confronta i campi TTL del pacchetto che aveva precedentemente spedito e quello appena arrivato come risposta. Se i campi TTL non corrispondono allora vuol dire che la macchina 10.0.0.3 non ha sniffato il pacchetto dalla rete ma lo ha ricevuto direttamente dalla macchina 10.0.0.2. Se invece i campi TTL corrispondono, ciò vuol dire che il pacchetto è stato sniffato direttamente dalla rete in quanto il campo TTL del pacchetto ricevuto non è stato decrementato per l'avvenuta operazione di forward e quindi si può concludere che 10.0.0.3 sta sniffando sulla rete!




Metodo Decoy.


A differenza dei metodi di ping e ARP, questo metodo lavora ovunque e non solo in locale. Siccome molti protocolli permettono il plaint-text delle passwords, e gli hackers usano gli sniffer per setacciare queste passwords, il metodo decoy soddisfa semplicemente quel bisogno. Esso consiste nel metter su un client ed un server su ciascun lato della rete, cosicchè il client lancia un script per loggarsi al server usando telnet, POP, IMAP o altri protocolli plaint-text. Il server è configurato con speciali accounts che hanno privilegi reali, oppure è completamente virtuale (in questo caso gli accounts non esistono realmente). Una volta che l'hacker ha catturato username e password dalla rete, aspetterà allora di loggarsi usando queste informazioni. A questo punto, bisogna solo attendere che l'hacker effettui il login sul server utilizzando le informazioni appena sniffate per scoprire da dove proviene la richiesta.










Metodo Host.


Considerando un sistema Unix, possiamo dire che un attacker che si è guadagnato l'accesso a root, può lanciare uno sniffer per permettersi di accedere più volte alla rete (per esempio catturare password di altri hosts che girano sulla rete). Scovare il processo che fa da sniffing è difficile, perché il nome dello stesso viene camuffato dando l'impressione di essere innocente! Può sempre essere un cavallo di troia nel formato di un qualche altro binario conosciuto. In questo caso l'utente non necessita di accessi con privilegi di root alla macchina, ma deve solo attendere che l'amministratore del sistema lo esegua. L'unico modo per scovare lo sniffer in questo caso è capire se l'interfaccia di rete si trova in una situazione promiscua (promiscuous mode). Se si scopre ciò allora vuole dire che il processo di sniffing è attivo ed è in ascolto per tutti i pacchetti che girano sulla rete e non solo quelli destinati alla propria macchina. E' possibile capire se l'interfaccia di rete è in modo promiscuo attraverso un tool denominato CPM (Check Promiscuous Mode) oppure eseguendo il comando ifconfig -a. Ma come verrà illustrato in seguito, questo comando potrebbe non funzionare. Andiamo a vedere come gli intrusers si organizzano per attivare gli sniffers in un sistema Unix. Per nascondere la propria presenza e garantire un continuo accesso al sistema, gli intrusi fanno uso di un set di Cracking tools assemblati in un pacchetto conosciuto come Rootkit. Questi pacchetto contiene versioni modificate delle seguenti utilities di Sun Unix:

Le versioni modificate di ls e du possono essere configurate affinché ignorino alcuni files e directory. Ps e netstat possono essere invece configurati per nascondere alcuni processi e connessioni di rete. Per quanto riguarda ifconfig, esso viene modificato affinché non faccia risultare l'interfaccia di rete in modo promiscuo ovvero nel caso in cui sia attivo uno sniffer! Le loro versioni di /bin/login contengono delle trap door che consentono di loggarsi come qualche utente. Il toolkit che questi individui usano contiene un programma, chiamato fix, che può mascherare time stamps, permessi, grandezza e standard checksum di utilities modificate affinchè uguaglino l'originale. Fin quando essi riescono a modificare il codice, possiamo rilevare i programmi modificati ls, du, ps e netstat ricercandoli attraverso le stringhe /dev/ptypp, /dev/ptyqq, /dev/ptyrr. Nessuna di queste dovrebbe essere presente nelle versioni originali. Comunque sia l'unico modo sicuro per rilevare questi programmi modificati è sia attraverso il confronto con l'originale usando il diff, sia con il confronto delle checksums generate da un algoritmo crittograficamente sicuro come md5. Il programma tripware è consigliato per generare e confrontare checksum. I cosidetti intrusori sono ben conosciuti anche per il fatto di installare un programma chiamato z2 o zap2 che rimuove una user's entry dai files utmp, wtmp, lastlog. Questo programma insieme con il fix e uno dei due sniffer chiamato es, vengono spesso installati in una directory chiamata /usr/include/sys/. In aggiunta essi hanno anche il loro fingerd modificato che può essere usato per cancellare o aggiungere un utente al file /etc/passwd e a creare un setuid root shell. Di seguito a questo gli intrusori alterano il file inetd.conf facendo in modo che fingerd giri con i privilegi di root invece che con quelli di nobody. I due tipi di sniffer provenienti dai tools degli intrusori sono conosciuti con il nome di es e sunsniffer. Se il programma ps è stato modificato non possiamo verificare che questi siano attivi. Comunque sia con il programma top si può avere qualche speranza di vederli!













Cosa fare se si scopre di aver uno sniffer attivo...