GLI SNIFFER:

- cos'e' uno sniffer
- cos'e' una rete locale
- protocollo 'Ethernet'
- cos'e' un pacchetto
- cosa significa 'promiscuous mode'
- MAC address: indirizzi IP e physical address
- differenze tra uno sniffer e un 'key logger'
- possibile collocazione di uno sniffer
- livelli di rischio
- su quali piattaforme puo' essere installato uno sniffer...
- ... e dove lo trovo

- come ti frego lo sniffer!
- come individuo uno sniffer
- conclusioni
- note
- credits & NO copyright


- cos'e' uno sniffer?

Uno sniffer e' un qualsiasi strumento, sia esso un software o un apparato hardware, che raccoglie le informazioni che viaggiano lungo una rete (network). Questa rete puo' utilizzare un protocollo di comunicazione qualunque: Ethernet, TCP/IP (Internet si basa principalmente su questo protocollo), IPX o altri.

Generalmente si utilizzano software sniffer e il termine in questione si riferisce a: 'The Sniffer Network Analyzer', il nome del primo programma di questo tipo, sviluppato dalla Network Associates, Inc. e protetto da trademark. Tuttavia la parola 'sniffer' e' ora di uso comune come 'PC' o 'kleenex' e con essa ci riferiamo a tutti i programmi che implementano quelle stesse funzioni.
Si possono dividere i vari tipi di sniffer in due grandi branche: i prodotti commerciali che sono rivolti agli amministratori di rete e alla manutenzione interna delle reti stesse e i prodotti sviluppati nell'underground informatico, spesso dotati di un'incredibile varieta' di funzioni ulteriori rispetto ai 'tool' commerciali;
entrambi possono essere utilizzati come mezzo per accedere ad una rete.
Se vogliamo fare una distinzione che non si basi solo sul prezzo del prodotto o sulla sua provenienza, possiamo considerare i software precedenti come un tutt'uno e rapportarli ad applicativi come gli 'analizzatori di rete' (network analyzer) che danno la possibilita' di fare qualche operazione in piu' rispetto al semplice ascolto e archiviazione dei dati di passaggio su una rete, come compilare statistiche sul traffico e sulla composizione dei pacchetti.

Le funzioni tipiche degli sniffer non differiscono di molto e possono essere riassunte sinteticamente in:

* conversione e filtraggio dei dati e dei pacchetti in una forma leggibile dall'utente
* analisi dei difetti di rete, ad es. perche' il computer 'a' non riesce a dialogare con 'b'
* analisi di qualita' e portata della rete (performance analisys), ad es.per scoprire 'colli di bottiglia' lungo la rete
* setacciamento automatizzato di password e nomi di utenti (in chiaro o, piu' spesso cifrati) per successiva analisi
* creazione di 'log', lunghi elenchi che contengono la traccia, in questo caso, del traffico sulla rete
* scoperta di intrusioni in rete attraverso l'analisi dei log del traffico

Pensate ad una rete come ad un paesaggio dinamico, ad esempio un fiume: in esso i pacchetti scorrono liberamente lungo il percorso che offre minor resistenza. Uno sniffer e' l'entita' che immerge le mani nel fiume e filtra i pacchetti tra le sue dita (facendone una copia senza alterare i pacchetti).

- cos'e' una rete locale?

Una rete locale (Local Area Network, LAN) e' un insieme di macchine, di computer, interallacciate entro uno spazio fortemente delimitato sia dal punto di vista fisico che comunicativo: il numero delle macchine e' (quasi sempre) conosciuto ed esse possono comunicare entro canali predefiniti, generalmente rappresentati da connessioni ad alta velocita'.
Ethernet e' probabilmente il protocollo piu' conosciuto e utilizzato per gestire una LAN.

- il protocollo ethernet:

Nel 1976 Bob Metcalfe e David Boggs, del Palo Alto Research Center (Xerox) presentarono alla comunita' informatica un documento intitolato: 'Ethernet: distributed packet switching for local computer networks'.
L'idea sviluppata dai due ricercatori era destinata a rivoluzionare l'infomatica commerciale; prima dell'introduzione di ethernet, le reti, soprattutto quelle piu' sviluppate erano tutte dipendenti dai mainframe di rete (computer specializzati che suddividevano e instradavano le connessioni) e prima ancora si utilizzava il metodo del time sharing in cui il mainframe addirittura svolgeva anche funzioni di calcolo per il sistema: piu' persone poteva accedere direttamente alle risorse attraverso dei limitati terminali.

Il protocollo ethernet, invece, e' stato sviluppato sul concetto di condivisione: tutte le macchine di una rete locale condividono la stessa connessione, lo stesso cavo, e l'harware che implementa il protocollo ethernet e' costruito in modo da filtrare e ignorare tutto il traffico che non appartiene alla LAN. Questo e' possibile perche' ogni hardware ethernet ignora tutti i frame il cui indirizzo MAC del destinatario non corrisponde al proprio (o ai propri), impedendo alla workstation di accervi.
Uno sniffer puo' eliminare questo filtro e portare cosi' l'harware ethernet in 'promiscuous mode', permettendo alla macchina 'A' di 'vedere' tutto il traffico che intercorre tra 'B' e 'C', sempre che condividano lo stesso cavo/segmento di rete.

Di seguito saranno esposti i concetti di 'pacchetto', 'promiscuous mode' e 'MAC address'.

- cos'e' un pacchetto?

Tutto cio' che viene trasferito e lasciato circolare in una rete e' suddiviso e 'incapsulato' in unita' ben definite chiamate 'pacchetti'; sara' necessaria qualche decina di pacchetti per trasferire questo documento al vostro computer, ad esempio. Ogni pacchetto viene etichettato con un indirizzo IP e/o un indirizzo MAC (di cui discuteremo piu' avanti), che specifica la sua destinazione, e ad esso sono associati altri parametri (header) che serviranno a instradare e 'riassemblare' i pacchetti, operazione compiuta dalla macchina del destinatario.

Poiche' tutto il traffico di una rete deve essere ridotto in pacchetti lo sniffer non deve far altro che raccogliere tale traffico e analizzarlo sia nella sua forma frammentaria che nella sua forma riassemblata, alla ricerca delle informazione cui si mira.

- cosa significa 'promiscuous mode'?

Il termine promiscuous mode si riferisce alla modalita' di configurazione dell''ethernet adapter' in cui e' permesso a tutte le macchine l'ascolto di tutto il traffico di rete, non solo quello proprio.
Un ethernet adapter, o ethernet card, e' l'hardware che permette l'accesso ad una rete tramite questo protocollo; in altre parole, per poter utilizzare un computer connesso ad una rete locale come base per uno sniffer, sara' necessario dotarsi di un software particolare (un promiscuous driver per ethernet card, ad esempio) che permetta la configurazione in promiscuous mode.

Uno sniffer, dunque, non e' altro che un software (o un hardware) che ascolta e non ignora i pacchetti che vengono inviati lungo le connessioni, archiviando poi le informazioni di passaggio su supporti come dischi rigidi o altro (sulla base del volume di traffico che si intende monitorare si potra' optare per la propria RAM, veloce ma poco capiente, oppure supporti che concedano piu' spazio, come l'HD appunto, purtroppo molto piu' lenti ma che permettono un'analisi dei dati da farsi a posteriori con la dovuta calma).

- MAC address e indirizzi IP:

Poiche' molte macchine possono condividere una singola connessione ethernet, ognuna di esse deve possedere un identificatore (ricordate che, in realta', e' la scheda di rete, l'hardware, a possedere un indirizzo, non la macchina in se'); questo non succede quando comunichiamo con una connessione dial-up utilizzando il nostro modem casalingo, perche' si presuppone che tutti i dati che inviamo siano destinati all'entita' che risiede all'altro capo della linea (in genere il nostro Internet Service Provider, che ci assegnera' un indirizzo IP dinamico). Tuttavia, se comunichiamo attraverso una rete ethernet dobbiamo specificare esattamente a quali macchina andranno consegnati i pacchetti inviati, anche se la rete fosse composta solamente da due computer: ricorderete che il protocollo ethernet fu sviluppato per permettere a migliaia di macchine di dialogare fra loro.

Cio' e' possibile 'inserendo' un numero esadecimale (cioe' con notazione a 16 cifre; il MAC address e' composto, invece, da 12 digit) in ogni destinazione ethernet ;
questo numero, in apparenza astruso e' l'indirizzo MAC.
Eccone un esempio: 00-40-05-A5-4F-9D

Il MAC address e' composto da 48 bit (8bit = 1byte ; il bit e' l'unita' di misura fondamentale dell'informatica).
Questi 48 bit verranno divisi in due meta': 24 bit identificano il nome del produttore della ethernet card, i riamanenti 22 bit identificano il nemero di serie UNICO assegnato alla scheda dallo stesso produttore: in questo modo l'indirizzo MAC di due ethernet adapter non sara' mai uguale; questo serial number e' chiamato OUI (Organizationally Unique Identifier) - e gli ultimi 2 bit ? -

Il protocollo ethernet ci permette anche di comunicare con macchine che non risiedono sulla nostra stessa rete ma sono interallacciate alla nostra tramite il protocollo TCP/IP (Transport Control Protocol over Internet Protocol, in realta' e' un'intera famiglia di protocolli): tuttavia non e' possibile inviare e ricevere i dati nella loro forma originale allo stesso modo in cui non e' possibile inviare per posta (snail mail) una lettera senza averla imbustata e dotata di francobollo e indirizzo del destinatario.

L'invio dei dati e la loro gestione in rete e' gestita dai diversi protocolli, a partire dall'ethernet, cosi' dovremo trattare i nostri dati in modo che i protocolli possano 'capire' cosa farne.

Il compito dello sniffer non sara' solo quello di registrare e archiviare dati ma si potra' istruirlo a riconoscere e suddividere i vari header (intestazioni) dei pacchetti per tracciare e controllare solo i pacchetti che soddisfino le piu' svariate e complesse regole (pattern) che possano interessare chi controlla lo sniffer.

Vediamo cosa succede con una breve spiegazione:

'A' (alice) possiede un indirizzo IP: 10.0.0.23 (tutti i pacchetti inviati da 'A' saranno marcati con questo indirizzo)
'B' (barbara) possiede invece l'indirizzo IP: 192.168.100.54

Per comunicare con 'Barbara', che si trova in una rete diversa, 'Alice' deve creare un pacchetto IP che abbia piu' o meno questa forma: [IP packet=(10.0.0.23 ===> 192.168.100.54)]

Questo compito e' svolto dalle applicazioni (dai software) usate da alice per spedire i dati lungo la rete e consiste in una operazione d'incapsulazione successiva dei dati in un pacchetto che all''esterno' presenta i suoi dati TCP, poi quelli IP. Poiche', generalmente, i dati passano da reti ethernet, al pacchetto ora descritto saranno aggiunti altri tre strati: il primo e' l'identificativo dell'ethertype (comunica all'applicazione TCP/IP della destinazione di processare i dati), all'esterno di quest'ultimo sara' visibile il MAC address sorgente e infine quello del destinatario (se il destinatario e' inserito in una LAN)

-----------------------
* MAC add. destinatario
** MAC add. sorgente
*** ethertype
==================
# IP info
## TCP info
................................
# DATI
................................
==================
* CRC
-----------------------

Solo allora alice inviera' il pacchetto a barbara ed esso attraversera' il primo router sulla via per la sua destinazione finale; ogni router che il pacchetto incontrera', leggendo la destinazione IP decidera' il corretto cammino dei dati verso barbara.

Dobbiamo pero' tener conto di alcuni fattori:
alice conosce solamente l'indirizzo IP di barbara e il percorso che fara' il pacchetto fino al suo primo router (locale);
alice non sa nulla della struttura di internet ne' del percorso che il pacchetto compira' dopo essere stato processato dal suo router.

Tutti i router, tranne quello che gestisce l'indirizzo destinatario, possono leggere gli indirizzi
ethernet ma li ignorano e instradano nuovamente il pacchetto.
Lo sniffer forza questa regola e copia il pacchetto per archiviarlo sul suo supporto di preferenza.

Ricordiamo che, parlando di sniffer, non ci riferiamo a strumenti che registrano l'attivita' che compiamo sulla tastiera del computer o cio' che avviene sul nostro schermo. Quest'attivita', compiuta da programmi definiti key logger, equivale a leggere cio' che viene battuto sulla tastiera sopra le spalle di chi scrive. Essa potra' rivelare ugualmente, forse con minor dispendio di risorse, password o altri dati sensibili ma non sara' mai in grado di osservare il traffico che intercorre tra due terminali o su un intera rete di macchine. Quest'operazione, e la susseguente analisi dei dati raccolti, viene fatta, per l'appunto, attraverso gli sniffer.

Vediamo, dunque, dove e' piu' probabile trovare uno sniffer all'interno di una LAN e quali gradi di rischio corre la rete stessa:

- possibile collocazione di uno sniffer:

In realta' uno sniffer potrebbe essere installato ovunque sulla rete, tuttavia esistono dei punti strategici che, permettendo la raccolta di determinate informazioni, sono favoriti rispetto ad altri. Uno di questi e' un qualsiasi punto adiacente ad una macchina in cui si puo' presumere passino notevoli quantita' di password; ad esempio un gateway di rete oppure un nodo che ospiti traffico in entrata e in uscita verso l'esterno della rete stessa.
Se la LAN e' connessa con l'esterno si puo presumere che lo sniffer cerchera' di controllare e copiare le procedure d'utenticazione con le altre reti, cosa che permetterebbe di aumentare in via esponenziale le possibilita' invasive di chi gestisce lo sniffer.

Come regola generale, terremo conto del fatto che lo sniffer sara' installato, sia esso hardware o software, all'interno dello stesso blocco di rete (net of trust) del network che si e' inteso controllare.
Ovviamente esistono numerose eccezioni che rendono spesso difficile individuare i punti esatti in cui cercare uno sniffer all'interno della rete. Questo e' ancor piu' vero per alcuni tool, decisamente costosi e non alla portata di tutti (chi ha orecchie per intendere, intenda), sviluppati per operare analisi di traffico al livello dello stesso cavo di rete (cable sniffer); possono cosi' essere impiantati direttamente sulla connessione fisica del network.

Gli sniffer (software) sono molto meno subdoli di quel che si pensi, per fortuna, e la loro locazione piu' probabile, in una LAN, e', come abbiamo visto, sui server che la gestiscono per intero o nei nodi intermedi ma quel che piu' ci interessa e' porre l'accento sulla possibilita' che questi prodotti offrono, se usati con costanza e cognizione, di ottenere risultati che vanno dall'aquisizione di password alla raccolta di dati sensibili, solo per citare alcuni degli obiettivi piu' nefasti.
Sicuramente rappresentano un pericolo per la nostra privacy, intesa nel suo senso piu' lato, o possono portare, ad esempio, agli stessi risultati di intercettazioni telefoniche e ambientali, a causa, spesso, dell'eccessiva sicurezza con cui si pensa di poter disporre del mezzo informatico.
Torneremo piu' avanti su questi punti; limitiamoci, per ora, ad analizzare i rischi dal punto di vista della sicurezza della rete e della sua connessione.

- livelli di rischio:

gli sniffer rappresentano un rischio elevato per una rete o per il pc dell'utente medio. La semplice esistenza di uno sniffer in rete rappresenta una falla e una minaccia alla sicurezza e alla riservatezza delle comunicazioni all'interno della rete stessa.
Se la LAN che utilizzate e' sottoposta al 'controllo' di uno sniffer ci sono due possibilita': un intruso, dall'esterno, e' riuscito ad entrare all'interno della rete e installare lo sniffer, oppure un utente o il gestore della rete stessa sta' combinando qualcosa che potrebbe andare ben oltre la manutenzione e il monitoraggio delle connessioni. In ogni caso la vostra privacy, o peggio la sicurezza stessa di tutte le comunicazioni, e' compromessa.

Prendiamo come esempio la situazione che potrebbe interessare l'utente medio durante l'utilizzo delle reti universitarie:
se le connessioni utilizzate per accedere a internet o le connessioni, poniamo, dal pc al server dell'aula informatica, abitualmente usata dagli studenti, e' monitorata da uno sniffer, qualsiasi dato sensibile in passaggio sulla LAN controllata e' a rischio d'intercettazione e successiva archiviazione (e magari utilizzo).

In base alla quantita' di traffico prodotto e alla quantita' di traffico raccolta dallo sniffer (abbiamo visto come cio' dipenda dalle scelte di chi installa lo sniffer e in base alla 'memoria' disponibile) possiamo stabilire che i dati maggiormente a rischio sono proprio le password personali utilizzate per accedere ai piu' svariati servizi di rete (login utente, accesso al proprio spazio su disco) o servizi internet (la vostra mail-box!), poiche' la richiesta d'accesso e, quindi, di invio della password rientra nei primi pacchetti che vengono inviati per ogni tentativo di connessione al servizio prescelto dall'utente ed e' il primo dato che viene filtrato dallo sniffer.
Generalmente, poi, i servizi in rete o web utilizzano protocolli d'utenticazione del tutto in chiaro (non cifrati).

Dal punto di vista dell'analista di sicurezza lo sniffing e' un attacco di secondo livello. L'intruso si e' gia' introdotto nella rete e ora cerca di compromettere maggiormente la sicurezza del sistema.

Comunque, cio' che puo' essere raccolto dallo sniffer, non e' rappresentato solamente dagli elenchi degli utenti o le password d'accesso ai servizi ma puo' contenere dati che spaziano dal numero della (onnipresente) carta di credito ad altri dati finanziari, fino al testo del messaggio spedito via e-mail.

Come si diceva prima,pero', e' improbabile che uno sniffer sia dotato di supporti che gli permettano di catturare tutto il traffico in passaggio su un dato network; in piu' all'aumentare del traffico in una rete aumentano anche i pacchetti che saranno persi: dai rapporti tecnici relativi agli sniffer e' emerso che, in network dotati di connessioni ad alta velocita' e con volumi di traffico elevati, una parte considerevole dei dati sfugge alla cattura dello sniffer.
D'altro canto cio' non significa che una rete piu' grande fornisca, di per se', una maggiore sicurezza ai suoi utenti.

- sistemi operativi e sniffer:

Oramai gli sniffer possono essere installati ed eseguiti su qualsiasi piattaforma, ma, anche se non fosse cosi', sarebbero comunque una minaccia: ricordate che gli sniffer agiscono e catturano pacchetti di dati, non interagiscono direttamente con la macchina e possono prescindere dal sistema operativo.

Potrete trovare vari tipi di sniffer per ogni piattaforma; ecco alcuni di questi programmi e i relativi link:

- per windows (aka Findus ... )

* Netwok Associates Sniffer per DOS

* The Gobbler and Beholder

* Klos PacketView

* tcpdump (in origine per Unix)

* win NT server - questa distribuzione di NT e' fornita di un programma chiamato 'Network Monitor', lo trovate nel folder 'Administrative Tools'

* BlackICE Pro (nasce come tool anti-intrusione ma puo' essere usato come sniffer -non promiscuo- dei pacchetti in entrata e uscita dalla macchina in cui e' installato

* CiAll

* EtherPeek

* Intellimax LanExplorer

* Tritocom LANdecoder32

* SpyNet/PeepNet

* Analyzer


- per Macintosh

* EtherPeek
anche per findus

- per Unix/Linux
generalmente vengono utilizzate le libpcap e/o le BPF (Berkeley Packet Filters)

* tcpdump

* sniffit

* snort (sniffer e logger con estese capacita' di filtraggio)

* karpski

* SuperSniffer v.1.3

* esniff per Sun OS

* exdump

* trinux (una distribuzione Linux 'floppy bootable' che contiene numerosi tool di sicurezza tra cui vari sniffer)

Eventualmente visitate anche il sito di packet.storm dove troverete sicuramente altri sniffer e tool simili.

- Come posso impedire che qualcuno monitori i miei dati con uno sniffer?

Non ci sono molte soluzioni efficaci a questo problema, soprattutto se la maggior parte del vostro traffico e' in passaggio su Internet. Mentre potete configurare la LAN in modo che l'attivita' di sniffing sia menomata (ad esempio sostituendo gli hub con degli switch, tanto per cominciare), potrete adottare, in via generale, delle precauzioni estremamenti efficaci che comportano l'uso della crittografia nelle vostre comunicazioni.

E' sempre buona regola non dimenticare mai, prima di utilizzare tali strumenti crittografici, che l'utilizzo semplicistico della crittografia porta sempre ad una maggiore vulnerabilita' delle comunicazioni poiche' una non corretta installazione o configurazione dello specifico tool potrebbe non riportare errori visibili nella fase di invio dei dati ma la comunicazione rimarrebbe in chiaro anche per l'eventuale sniffer.
Inoltre si dimentica spesso che i dati non nascono cifrati ma da vengono trasformati da dati in chiaro in dati cifrati: sarebbe stupido lasciare i dati 'sorgente' alla merce' di tutti...

E' anche il caso di ricordare che la crittografia non incide sul potere dello sniffer di intercettare i dati in transito ma impedisce a colui che analizzera' i dati archiviati di poterli leggere come accade con dati inviati in chiaro.

Da ultimo, e' necessario fare riferimento alla distinzione tra 'header' del pacchetto e dati contenuti nel pacchetto stesso: se lo strumento crittografico da noi utilizzato (ad es. PGP) cifra solamente i dati che con il pacchetto vengono trasportati, il gestore dello sniffer potra' comunque conoscere il contenuto degli header e ricavare da essi informazioni come provenienza e destinazione del pacchetto, e quant'altro gli header possano rivelare.
Esistono ovviamente prodotti che cifrano tutto il pacchetto, header compresi.

Ecco alcuni esempi di strumenti che usano la crittografia:

* SSL (Secure Sockets Layer) , utilizzato da numerosi browser come IExplorer e Netscape Navigator;
non fornisce una sicurezza di alto livello, soprattutto se vengono utilizzati algoritmi con 'chiavi' troppo corte
Il miglior prodotto in assoluto e': Apache SSL

* PGP e S/MIME, sono prodotti che permettono la cifrazione delle e-mail: il primo, se utilizzato e configurato nel modo corretto, e' di gran lunga il miglior prodotto che possiate utilizzare per proteggere la privacy della vostra posta [pgpi.org]; il secondo e' un built-in di numerosi client di posta elettronica di Netscape e Microsoft

* ssh (Secure Shell), e' il 'de facto' standard per il login a macchine Unix (quindi anche Linux) da internet (in remoto). Sostituite immediatamente telnet con ssh

* VPNs (Virtual Private Networks), forniscono comunicazioni cifrate attraverso Internet; sono facilmente vulnerabili ai RAT (Remote Access Trojan) con sniffing plug-in; sono tool che vengono installati a monte della connessione VPN e permettono il monitoraggio delle comunicazione prima che vengano cifrate.

alcuni strumenti che utilizzano la crittografia forniscono anche forme di autenticazione (invio delle password) sicure ed esistono anche numerose altre soluzioni che impediscono la lettura della password in chiaro:

* SMB/CIFS, in ambiente windows/samba (samba v2 o posteriore, winNT con service pack 3 o posteriore)

* Kerberos v5, sia per win2000 che per Unix

* Stanford SRP (Secure Remote Password), rafforza la sicurezza (quasi nulla) di telnet e ftp (per windows e per unix)

- come individuare uno sniffer:

Si distingue tra sniffer detti 'stand-alone' e tutti gli altri sniffer; il primo tipo si sniffer non trasmette nulla, non genera traffico, e' passivo ed e' teoricamente impossibile da individuare; il secondo tipo, invece, non ha solo comportamenti passivi ma genera del traffico ben identificabile e sulla base di dei dati e delle richieste (ad es DNS reverse lookup) inviate e' possibile localizzarlo.

In effetti, cio' che si vuole localizzare e' proprio lo sniffer non-standalone.
Diamo uno sguardo generali ai metodi di individuazione:

* metodo 'ping': molti sniffer vengono eseguiti su macchine che operano in rete secondo la gerarchia TCP/IP; in breve, se inviamo una richiesta a queste macchine esse ci forniranno un qulche tipo di risposta. Il trucco, in questo caso, e' quello di inviare una richiesta alindirizzo IP della macchina sospetta ma non al suo ethernet adapter.

1. poniamo che la macchina sospetta abbia indirizzo IP: 10.0.0.1 e MAC address: 00-40-05-A4-79-31
2. ci poniamo sullo stesso segmento di rete della macchina sospetta e inviamo un 'ICMP echo request' (ping) all'indirizzo IP della macchina e a un indirizzo MAC iverso e non assegnato,
ad es.: 00-40-05-A4-79-32
3. poiche' quest'indirizzo ethernet non e' assegnato a nessuna delle interfacce sulla LAN, nessuno dovrebbe rispondere: l'indirizzo MAC viene confrontato con il proprio e se non corrispondente viene scartato
4. se la macchina sospetta possiede un ethernet adapter in promiscuos mode non avra' questo filtro e rispondera' al ping, permettendoci di sapere che su di essa e' probabile sia stato installato uno sniffer.

Questo e' un metodo cosi' ben conosciuto che gli sniffer adottano un filtro MAC virtuale soprattutto sulle macchine (in genere windows) che possieno driver (software) di filtro: esistono degli exploit per windows che permettono di generare falsi positivi che vanificano la ricerca.

* metodi ping, parte seconda: per ovviare all'inconveniente di cui sopra usate il metodo ping su ogni servizio attivo in rete che generi risposte conosciute, ad es: TCP connection request, protocollo UDP sulla porta 7 (echo); oppure utilizzate ogni protocollo che possa ingenerare un errore sulla macchina bersaglio, ad esempio corrompendo gli header IP in modo da generare un ICMP error.

Ancora, l'indirizzo broadcast (sia locale, 255.255.255.255, che diretto, es.:10.0.0.255) puo' essere utilizzato per superare le barriere/filtri ai ping su indirizzo IP ma proprio perche' il braodcast address genera risposte da tutte le interfacce potrebbe essere disabilitato (a causa di attacchi smurf).

* metodo ARP: simile al metodo ping ma si usa il protocollo ARP (Address Resolution Protocol); il metodo piu' semplice e' inviare un ARP request a un indirizzo non broadcast sospetto: se risponde e' in promiscuos mode...

una variante si avvantaggia della cache ARP di ogni macchina, ossia l'archivio in cui vengono immagazzinati, per alcuni minuti o per un tempo piu' lungo, le informazioni relative sia al mittente che al destinatario del traffico generato da una determinata interfaccia.
In altre parole, quando si invia un ARP in broadcast, si include il prorpio 'IP to Ethernet address mapping' che verra' archiviato da tutte le macchine; inviando un ARP non broadcast esso verra' scartato da tutte le interfacce meno quelle in promiscuos mode, percio' al successivo invio di un ping sull'indirizzo di broadcast riceveremo risposte con ARP request e non. Ovviamente le risposte prive di ARP request provengono da interfacce che avevano sniffato l'ARP frame in precedenza.

[documentazione in spagnolo (!!!!) che fornisce anche un programma per utilizzare questo metodo]

* metodo DNS: come si suggeriva in precedenza, molti sniffer operano un reverse DNS lookup automatico sugli indirizzi IP che vedono. In questo modo, dall'osservazione del traffico DNS (Domain Name Service), individueremo le interfacce in promiscuous mode.

Per aumentare tale tipo di traffico si operi un ping sweep su una lunga serie di indirizzi IP non assegnati attraverso tutti i segmenti di rete. Qualsiasi interfaccia che generi traffico di reverse DNS lookup su tali indirizzi IP ha sicuramente sniffato l'ARP frame

* metodo 'source route': si crei un pacchetto ping introducendo il parametro loose source in modo da instradare il pacchetto attraverso una macchina ulteriore su un un segmento diverso da quello dell'interfaccia sorgente;
la macchina scelta per l'instradamento deve essere priva della possibilita' di instradare tale pacchetto ping, laciandolo cosi' cadere;
se la macchina bersaglio risponde comunque al ping e' probabile che l'abbia sniffato;
se si vuole essere sicuri della mancanza di instradamento verso l'interfaccia bersaglio si controlli il TTL (Time To Live) della risposta per capire se proviene direttamente, quindi a seguito di sniffing, o a seguito di corretto instradamento [dettagli].

* metodo 'decoy': questo medono funziona anche all'esterno delle reti locali.
Poiche' quello che molti sniffer cercano sono password e nomi utente, il metodo decoy fornisce password ad account inesistenti che serviranno unicamente a tracciare la presenza di un eventuale sniffer.
Consiste semplicemente di un client e di un server posti ognuno ad un capo della rete locale; il client fara' girare uno script che connetta, via telnet, pop o imap, comunque in chiaro, il client al server attraverso account privi di privilegi reali (gli account possono essere, anzi, del tutto virtuali).
Quando verra' tentato l'accesso a questi account utilizzando tali informazioni, potranno essere utilizzati sistemi standard per la prevenzione delle intrusioni in modo da registrare tutte le attivita' compiute.

* metodo 'host': la traccia di numerosi programmi eseguiti in background su una macchina, siano essi trojan o sniffer (o entrambi), e' difficile da rilevare ma nel caso degli sniffer e' evidente che essi debbano riconfigurare l'interfaccia di rete in modo promiscuo. Il metodo piu' semplice per scoprire la presenza di uno sniffer e' dunque quello di chiedere alla propria interfaccia, direttamente, se sta' girando in promicuouos mode:
# ifconfig -a
e' il programma che ci permettera' di ottenere la risposta.
Ovviamente sara' anche il primo programma ad essere sostituito in modo da restituire una risposta pilotata.

Una possibile soluzione e' la reinstallazione dell''ifconfig' o la sua esecuzione direttamente da una distribuzione
cd-rom.
In internet sono inoltre disponibili utility in grado di interrogare direttamente l'interfaccia come ifconfig.

* metodo 'latency': questo metodo puo' degradare sensibilmente le performance della rete locale e genera molti 'false positive' ma riesce ad accecare un eventuale sniffer.
In poche parole, e' necessario inondare la rete di traffico, generandolo come meglio si creda, e, durante l'operazione inviare dei ping all'interfaccia sospetta per verificarne un eventuale sovraccarico (che sara' determinato dal tempo di risposta all'ICMP echo request).

Come funziona il latency method? Le interfacce non promiscue non raccoglieranno tutto il traffico in passaggio, saranno solo rallentate nelle loro prestazioni dal sovraccarico generale, ma l'interfaccia che girasse in promiscuous mode verrebbe sommersa da tutti i pacchetti in passaggio, determinando un latenza rilevante nell'invio della risposta ad un ping.

Un possibile problema e' rappresentato dalla possibilita' che lo sniffer faccia in modo di rispondere al ping in 'kernel mode', restando cosi' indipendente dal carico sulla CPU determinato dalla raccolta di tutto il traffico.
Questa funzione genera falsi negativi.


- conclusioni:

Le conclusioni traetele voi.
Dopo aver capito cos'e' uno sniffer, come funziona e su cosa si basa, la domanda da porsi e': chi usa gli sniffer?
Difficilmente troverete uno sniffer installato sul vostro pc a casa, non serve che stia li' per monitorare le vostre connessioni.

Soprattutto, anche se trovaste lo sniffer, difficilmente riuscireste a scorpire chi lo ha installato.

====================================================================================

- back to index -

NOTE:

- MAC: Media Access Control; la struttura logica che informa il protocollo ethernet e' composta da molti sottostrati (sublayer): PHY, MAC, LCC; l'indirizzo ethernet e' considerato parte del MAC sublayer

- qual'e' l'indirizzo MAC della mia scheda di rete?
win 9x: eseguite il programma <winipcfg.exe>
win NT:eseguite il programma <ipconfig /all>
Linux: eseguite il programma <ifconfig>

- qual'e' l'indirizzo MAC delle macchine (delle schede di rete) con cui sono in comunicazione?
win NT e Linux: eseguite il comando <arp -a>
oppure eseguite il comando: <netstat -na>

- gli ultimi due bit del MAC address:
un bit indica se l'indirizzo e' multicast/broadcast,
l'altro indica se l'indirizzo e' stato riassegnato come 'indirizzo gestito localmente (locally administered address)':
il MAC address assumerebbe la forma 02-xx-xx-xx-xx-xx (primo byte:00000010) se l'indirizzo fosse anche gestito localmente oppure 01-xx-xx-xx-xx-xx (primo byte:00000001) se l'indirizzo MAC fosse multicast/broadcast oppure 03-xx-xx-xx-xx-xx (primo byte:00000011) se l'indirizzo MAC corrispondesse ad entrambe le caratteristiche.

- pattern:
in generale va individuata una classe di traffico. (es. il traffico da A verso B e viceversa di una certa applicazione, supponiamo 'talk') poi bisogna ricondurre il traffico a dei pattern ad es. un pattern plausibile
P={ IP_SRC=A|B, IP_DST=B|A, TCP_DST=talk} [dove SRC indica l'indirizzo sorgente, DST l'indirizzo del destinatario, TCP_DST indica che l'applicazione e' 'talk' su protocollo TCP] e infine istruire lo sniffer a raccogliere solo il traffico che soddisfa P.
E' da notare che i pattern possono essere molto piu' sofisticati e dettagliati, ma ancora piu' importante e' notare che tutta la traffic analisys e' possibile solo se gli header sono in chiaro, ovvero se non sono stati cifrati.

- back to index -

- indirizzi IP:
Il protocollo IP e' responsabile di mascherare le differenze esistenti tra le varie componenti che costituiscono internet (reti, router, il nostro web-server personale, etc). Per ottenere questo risultato si e' dovuto introdurre un sistema di indirizzamento universale basato su identificativi di prefissata lunghezza, denominati indirizzi IP.
Gli ideatori del protocollo stabilirono di assegnare un indirizzo IP ad ogni interfaccia, ad ogni hardware, connesso alla rete internet, sia esso appartenente ad una workstation, ad un server o ad un nodo intermedio (gateway). Queste entita' potranno essere fisicamente connesse a internet per mezzo di tipologie diverse di collegamento: alcune stazioni utilizzeranno connessioni telefoniche commutate, altre utilizzeranno connessioni LAN. Indipendentemente dalla soluzione adottata, ad ogni interfaccia dovranno' essere associati uno o piu' indirizzi IP.

I nodi intermedi della rete internet altro non sono che dispositivi d'interconnesione in grado di processare datagrammi (o pacchetti) IP e per questo vengono chiamati router o IP gateway. La loro funzione fondamentale e' quella di regolare il flusso del traffico IP da una rete all'altra. Questo implica, pero', che il gateway possieda egli stesso piu' interfacce; cosi' ad ogni interfaccia del router saranno associati uno o piu' indirizzi IP.
Non esiste una regola che stabilisca quando assegnare piu' indirizzi IP ad ogni interfaccia; l'unica regola sempre valida e' l'impossibilita' di destinare lo stesso indirizzo IP a due interfacce distinte contemporaneamente presenti in internet, pena l'impossibilita' di distinguerle.
Sul fronte opposto, se ad una interfaccia non sia stato preliminarmente assegnato alcun indirizzo, nessun datagramma IP potra' raggiungerla.
E' possibile affermare che, ad ogni entita' che vuol far parte di internet, dev'essere preliminarmente associato un indirizzo IP univoco e universale, che la conttraddistingua da tutte le altre interfacce distribuite sulla rete.

La rete internet e' disseminata di apparati in possesso di indirizzi IP univoci e, conseguentemente, di entita' raggiungibili dal traffico della rete. I nodi intermedi, anch'essi raggiungibili dal traffico si occupano addirittura di smistarlo verso le stazioni a cui e' associato l'indirizzo IP del destinatario. Tuttavia, non facciamoci trarre in inganno, l'instradamento del pacchetto conteneti dati utente (ad esempio: relativi a servizi internet come il web) avviene esclusivamente attraverso l'indirizzo IP del destinatario.
Ciascun IP e' cotituito da 32 bit: essi vengono resi facilmente comprensibili e memorizzabili all'uomo attraverso una notazione a 4 serie di cifre decimali separate da punti. Secondo tale notazione, ogni cifra (compresa tra 0 e 255) rappresenta un byte dell'indirizzo IP. L'indirizzo 00001010000000000000000000000001 (32 bit) puo' essere cosi' comodamente espresso in 10.0.0.1 .

Appurata la necessita' di associare un indirizzo IP ad ogni nodo, gli ideatori del protocollo stesso stabilirono di assegnare a stazioni appartenenti ad una stessa rete locale indirizzi di una stesso tipo (uno stesso 'pool' di indirizzi IP). Lo scopo fondamentale era quello di semplificare l'instradamento dei datagrammi.
Pensiamo dunque ad un indirizzo IP come se fosse diviso in due parti distinte:

- i bit piu' 'significativi' stabiliscono il gruppo di appartenenza (la rete locale di appartenenza)
- i bit meno significativi stabiliscono l'identita' della stazione all'interno del gruppo

Secondo l'idea originaria l'indirizzamento prevedeva una semplice gerarchia a due livelli; i primi bit rappresentano il network address, comune ad un gruppo di stazioni; i rimanenti bit rappresentano un identificativo univoco all'interno della rete locale (host address):

network address
host address
1 1 0 0 0 0 0 0. 1 0 1 0 1 0 0 0 . 0 0 0 0 0 1 1 1 . 1 0 0 0 0 1 1 0

192.168.7.134

Gli indirizzi di rete vengono assegnati da un'autorita' nazionale (o regionale) competente, sulla base delle necessita' di ciascuna organizzazione che ne fa richiesta. Per ottenere un pool d'indirizzi IP sara' necessario sottoporre all'attenzione dell'autorita' competente la topologia della propria rete, indicando, tra l'altro:

- il numero delle stazioni client attive
- il numero dei server e dei servizi internet attivi
- un dettagliato piano di sviluppo dell'infrastruttura di rete per il prossimo futuro

L'insieme di network address e di host address compone il vero e proprio indirizzo IP dell'interfaccia della stazione o del gateway.

Quando fu progettato il protocollo IP, si penso' che 32 bit potessero fornire un numero di combinazioni di indirizzi piu' che sufficente per far fronte a tutte le richieste ma il problema dell'esaurimento degli indirizzi IP si pose fin dai primi anni del protocollo, poco dopo il passaggio della maggior parte delle reti (arpanet compresa) al protocollo IP.
Problema che si e' complicato con la difficolta', d'altro canto, dell'utilizzo esaustivo di tutti gli indirizzi assegnati ad un'organizzazione. Il numero di stazioni ospitate in una rete locale varia considerevolmente da organizzazione a organizzazione, rendendo innanzitutto indispensabile stabilire pool di indirizzi di dimensioni differenti per poter accomodare le diverse necessita' dell'utenza, senza sprecare indirizzi IP.
Per questo motivo sono state definite tre diverse classi di indirizzi IP, in grado di ospitare un diverso numero di interfacce; le classi originariamente definite furono: A, B e C.

Il numero di interfacce che possono essere ospitate da una rete locale e' di fatto dipendente dal numero di bit riservati all'host address. Le diverse classi si differenziano fondamentalmente per la diversa lunghezza in bit del network address e dell'host address.
Indipendentemente dalla classe di indirizzo, poi, due particolari indirizzi non potranno essere assegnati ad alcuna interfaccia: l'indirizzo con i bit dell'host address tutti a zero (xxx.xxx.xxx.000) e quello con tutti i bit dell'host address a uno (xxx.xxx.xxx.255): il primo identifica la rete nel suo complesso, mentre il secondo individua un indirizzo di broadcast locale.
Un significato speciale hanno anche gli indirizzi IP: 0.0.0.0 e 255.255.255.255; al primo e' stato assegnato il significato di 'questa stazione', al secondo e' stato assegnato il significato di 'tutte le stazioni'.
Le classi di indirizzi IP:


A 0 (network) +7 bit host (24 bit)

B 10 (network) +14 bit (16 bit)

C 110 (network) +21 bit host (8 bit)

D 1110 multicast

E 1111 riservati a sperimentazione



Le reti di classe A comprendono gli indirizzi che presentano il bit piu' vicino a zero: questa proprieta', tradotta in notazione decimale, significa che ogni rete di classe A ha il primo byte compreso tra 0 e 126, con 8 bit riservati al network address e 24 riservati all'host address; il numero di reti e' fissato a 126 il numero di interfacce possibili con una rete di classe A e': 16'777'214 (2^24 -2).
La rete 127.x.x.x, sempre di classe A e' riservata e viene definita rete di loopback mentre l'indirizzo IP 127.0.0.1, il local host address e' adibito a funzionalita' diagnostiche della rete o, ad esempio, per la comunicazione tra server e client residenti sulla stessa macchina senza interfacce fisiche.

Le reti di classe B comprendono indirizzi IP che presentano il bit piu' significativo a uno e il seguente a zero (cioe' il primo byte compreso tra 128 e 191); la classe B riserva 16 bit al network address e altrettanti all'host address.
Il numero complessivo di reti e' fissato a 16128, mentre il numero di stazioni che possono trovare posto in una rete di classe B e': 65'534 (2^16-2).

Le reti di classe C sono sensibilmente piu' numerose delle altre e rappresentano la soluzione ideale per numerose organizzazioni di limitate dimensioni.
Gli indirizzi delle reti di classe C sono individuati dal valore dei primi tre bit (1 1 0) per ottenere un primo byte compreso tra 192 e 223. 24 bit sono riservati al network address, i rimanenti 8 sono lasciati all'host address.
Il numero complessivo di reti di classe C e' fissato a 2'097'152 mentre il numero di interfacce possiili e' stato limitato a 254 (2^8 -2)

Le classi speciali D ed E hanno funzioni particolari: la prima (primo byte tra 224 e 239) e' riservata alla trasmissione di datagrammi IP in modalita' multicast, la seconda (primo byte compreso tra 240 e 254) e' utilizzata a fini sperimentali.

- back to index -

- CRC:
ciclical redundancy check: risultato di una funzione (hash o 'checksum') che ci permette di sapere se i dati non siano stati corrotti nel trasferimento per problemi, ad esempio, di connessione - lunghezza 4 bit.

- router:
dispositivo che inoltra e instrada il traffico tra reti. Le decisioni sull'instradamento sono fatte sulla base dei network layer e su tabelle d'instradamento (routing tables), spesso predefinite dai protocolli d'instradamento.

- loose source routing:
viene aggiunto il parametro loose source all'header IP del pacchetto ping. con questo metodo il router principale instradera' il pacchetto non piu' direttamente all'indirizzo di destinazione ma attraverso una ulteriore macchina indicata nell'opzione source route.
Questo significa inviare un pacchetto dicendo: <invia il pacchetto alla macchina sospetta 'A' ma instradalo prima attraverso l'interfaccia 'B', grazie>

In questo scenario 'A' e 'B' sono sullo stesso segmento e 'B' non deve essere in grado instradare il pacchetto ad 'A'.
Se 'A' riceve comunque il pacchetto e' in promiscuous mode.

Il TTL e' un campo che indica la 'vita' del pacchetto, ovvero quanti salti (hop), quanti instradamenti puo' subire prima di essere scartato; e' un valore 'k' che viene degradato di una unita' ad ogni salto fino a k=0. Se la risposta al nostro ping ha TTL=k-1 il ping e' stato sniffato (ci e' arrivato senza l'instradamento richiesto, cioe' con un solo salto), se TTL=k-(n. di hop richiesti dal parametro loose source) allora il ping era stato instradato correttamente (e si dovra' riprovare ... ;-))

=============
NO (c) copyright:
=============
questo documento e' liberamente distribuibile in qualsiasi forma

si ringraziano:
thomas,
odo,
vecna,
terminal.c,
trz
e tutto il LOA

Per ulteriori informazioni leggete la FAQ di Robert Graham:http://www.robertgraham.com/pubs/sniffing-faq.html
e i capitoli su ethernet, TCP/IP di maximum security.

- back to top -