La nobile arte dello Sniffing
Tutorial Multipiattaforma – Lo strato più basso dell’infrastruttura di rete è spesso ignorato dagli utenti che non interagiscono con esso. Senza considerare deliberatamente questo livello è impossibile costruire un sistema sicuro per le applicazioni che agiscono a livelli più elevati.
Sniffing, tradotto alla lettera, significa “annusare, odorare”. Ed è proprio il termine più adatto per indicare l’azione di rilevare dati che non sono destinati alla propria macchina, ma semplicemente in transito.
“Sniffando” ci si limita ad elaborare i pacchetti che raggiungono il proprio nodo che normalmente verrebbero scartati, senza alterarne il contenuto. Qualora quest’ultimo venga alterato si tratterebbe di “spoofing”, del quale parleremo prossimamente.
I programmi per fare sniffing sono molti e non abbiamo lo spazio di analizzarli nel dettaglio ma i migliori sono reperibili all’indirizzo http://sectools.org/sniffers.html, corredati anche di un’esaustiva descrizione delle funzionalità di ciascuno.
Io sniffo, tu sniffi, egli sniffa
Sniffare è un’azione passiva ossia vengono elaborati solo i dati che raggiungono autonomamente lo “sniffer”. Vuol dire che i dati devono viaggiare autonomamente perché non viene fatta alcuna azione per andarseli a prendere.
Il concetto è fondamentale perché generalmente le reti sono segmentate da innumerevoli apparati, come ad esempio gli switch, che creano circuiti virtuali tra i nodi, oppure da router che smistano i pacchetti soltanto sul nodo di competenza.
Se volessimo analizzare il traffico generato da un server collegato direttamente ad uno switch layer 2 o layer 3, che oggigiorno è la regola, occorrerebbe replicare in mirroring la porta del collegamento del server su di una seconda porta dello switch dove collocare lo sniffer.
In tal modo tutti i dati che transitano sui circuiti virtuali tra i diversi nodi gestiti dallo switch, che altrimenti sarebbero invisibili, possono essere rilevati.
Per questa ragione, se pensiamo di utilizzare uno sniffer da casa, a valle di una linea ADSL, per scoprire chissà quale segreto, probabilmente resteremmo delusi.
Di contro, utilizzare uno strumento simile al lavoro o all’Università potrebbe essere visto come un attacco all’integrità del sistema e se le policy aziendali prevedono il licenziamento, attenzione a non farvi beccare!
Ciò non toglie che uno sniffer può rivelarsi uno strumento insostituibile per capire in che modo comunicano in rete le applicazioni che normalmente utilizziamo, ma andiamo con ordine.
Livelli ed indirizzi
Secondo il modello ISO/OSI di riferimento, tutte le interfacce che insistono sulla medesima rete ethernet hanno un indirizzo fisico al livello più basso che normalmente è differente dall’indirizzo utilizzato dal protocollo, che si chiama MAC address. Oltre a questo, tutti i nodi dispongono di un indirizzo di broadcast univoco per tutto il segmento di rete. Nel normale funzionamento della scheda di rete, viene elaborato solamente il pacchetto che contiene il proprio indirizzo fisico o quello di broadcast, ignorando tutti gli altri.
Lo sniffer, invece, raccoglie tutto. Essenzialmente presenta all’utente una sequenza ordinata di pacchetti che contengono principalmente l’ora in cui sono stati ricevuti, l’indirizzo sorgente, l’indirizzo di destinazione ed il contenuto.
Avendo a disposizione una sequenza di questo tipo è possibile ricostruire il traffico tra i diversi nodi ma occorre disporre di un discreto spazio sul disco perché in alcune realtà possono transitare migliaia di pacchetti al secondo che, se consideriamo che ciascuno occupa almeno 64 byte, si capisce come si possa rapidamente generare una quantità esagerata di informazioni.
Normalmente proprio per questa ragione è meglio utilizzare dei filtri con i quali limitarsi a catturare esclusivamente quei pacchetti che realmente reputiamo degni di interesse.
Ma cosa sniffo?
L’attività più difficoltosa nell’uso di uno sniffer è decidere che cosa catturare. Occorre avere una profonda conoscenza dei meccanismi dei diversi protocolli di rete e non solo del TCP/IP.
Per prima cosa decidiamo che cosa catturare e stabiliamo a che livello della pila ISO/OSI vogliamo lavorare.
Al primo livello possiamo raccogliere i segnali Bluetooth, DSL, RS-232 ed altri, mentre nel secondo livello possiamo raccogliere i segnali Ethernet, PPP, Frame Relay, Token Ring, Wi-Fi, ATM ed altri. In entrambi i livelli dobbiamo avere a disposizione una sonda particolare in grado di interpretare tali segnali. Nel nostro caso consideriamo unicamente la rete ethernet perché possiamo utilizzare come sonda la scheda ethernet del nostro computer.
Sulla rete ethernet, al terzo livello, esistono vari protocolli alternativi all’IP (Internet Protocol) che conosciamo così bene. Ad esempio possiamo citare i protocolli IPX, X.25 e DHCP solo per indicare i principali.
Non si tratta di teoria. In pratica una stampante con interfaccia di rete configurata male, collegata sullo switch di casa, potrebbe generare traffico IPX assolutamente inutile. Se collegate uno sniffer e rilevate traffico IPX o Appletalk senza avere un MacIntosh, qualcosa non quadra.
Salendo al quarto livello possiamo rilevare pacchetti TCP o UDP, usati su IP, ma anche SPX se è presente l’IPX oppure il vecchio e glorioso NetBIOS, ormai in progressivo abbandono.
Al livello più alto, applicativo, rileviamo i protocolli DNS, NPT, SNMP, POP, IMAP, FTP, IRC, HTTP, fino ad arrivare ai protocolli più oscuri utilizzati da applicazioni di nicchia.
Abbiamo le idee chiare?
E’ proprio al livello applicativo che c’è il succo di quello che vogliamo scoprire. Arrivati a questo punto, possiamo citare tantissima letteratura che ci suggerisce come fare a rilevare le password, i numeri di carta di credito oppure dati privati che dovrebbero restare nascosti.
Se consideriamo ad esempio il Telnet, impostando i filtri su host server ed host client possiamo limitarci a catturare il traffico in transito sulla porta 23 del TCP. All’inizio della sessione tra server e client avremo così modo di catturare la sequenza di caratteri che contiene l’utente e password praticamente senza fare alcuno sforzo.
In effetti, sono tutte cose tecnicamente molto semplici da realizzare attraverso l’uso di uno sniffer, ma non dimentichiamo che i dati ci devono passare davanti. Infatti sapere che il Telnet trasmette le password di autenticazione in chiaro un carattere alla volta, ci serve a poco se quei caratteri non passano davanti alla scheda ethernet sulla quale insiste lo sniffer.
Non dimentichiamo, inoltre, che i vecchi sistemi di comunicazione come Telnet e POP3, sono in progressivo abbandono a favore di sistemi molto più avanzati come SSL, HTTPS, Kerberos e simili, per i quali il discorso delle password in chiaro non vale più.
Nonostante tutto, lo sniffer è uno strumento impareggiabile quando si vuole risolvere un problema di comunicazione. Sapere nel dettaglio che cosa si dicono due applicazioni attraverso la rete può essere molto utile soprattutto per coloro che sviluppano le applicazioni e vogliono implementare meccanismi di traffico sempre più performanti.