1.
SNIFFER
1.1-
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 ad esempio 'PC', 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
1.2-
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.
1.3-
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.
1.4-
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.
1.5-
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(Vedi figura precedente).
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 Che permetta la configurazione in promiscuous mode.
Se invece si riesce ad ottenere accesso alla macchina con permessi di superuser
è molto semplice compiere questa operazione senza l'ausilio di software
aggiuntivi.
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).
1.6-
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.
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 (Media Access Control è la struttura logica che
informa il protocollo ethernet ed è composta da molti sottostrati (sublayer):
PHY, MAC, LCC; l'indirizzo ethernet e' considerato parte del MAC sublayer) address e' composto da 48 bit,
questi 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)
Gli ultimi due bit del MAC address
hanno un sigmificato particolare:
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.
Per conoscere qual'e' l'indirizzo MAC della propria scheda di rete con:
win 9x eseguite il programma <winipcfg.exe>
win NT eseguite il programma <ipconfig /all>
Linux eseguite il programma <ifconfig>
Per conoscere qual'e' l'indirizzo MAC delle macchine (delle schede di rete) con cui
si è in comunicazione, con:
win NT e Linux eseguite il comando <arp -a>
oppure eseguite il comando <netstat -na>
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 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' (Bob) possiede invece l'indirizzo IP: 192.168.100.54
Per comunicare con 'Bob', 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'incapsulamento
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 Bob 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 Bob.
Dobbiamo pero' tener conto di alcuni fattori:
Alice conosce solamente l'indirizzo IP di Bob 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.
1.7-
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
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 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.
1.8-
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 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.
1.9-
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 ... )
* The Gobbler and Beholder
* tcpdump (in origine per Unix)
* 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
* Intellimax LanExplorer
* Tritocom LANdecoder32
* 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)
* 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.
1.10-
Come impedire che qualcuno monitori i propri 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 ; 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)
1.11-
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 qualche tipo di risposta. Il trucco, in questo
caso, e' quello di inviare una richiesta all' indirizzo 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 diverso 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.
* metodo 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 generare 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.
* 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.
* metodo 'decoy':
questo medoto 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 con il comando ifconfig -a.
Ovviamente sara' anche il primo comando 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.
NOTE:
- 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.
-
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 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
contraddistingua 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
contenenti dati utente (ad esempio: relativi a servizi internet come il web)
avviene esclusivamente attraverso l'indirizzo IP del destinatario.
Ciascun IP e' costituito 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 |
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.
- 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'>
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