|
Tutorial Sniffer by
Endsub
Innanzi tutto ringrazio La Zoa crew per
aver scritto alcuni paragrafi di questo tutoria. Ho deciso di occuparmi
degli sniffer dato che non trovavo nessun'altro che lo faceva in maniera
esaudiente ed anche perche conoscere il funzionamenteo di uno snuiffer è
sempre utile.
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.
* 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.
=========================================================================
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.
- 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 |
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) |
|
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',
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 ...
;-))
Copyright by endsub
{Umberto De Palma} |