handouts

Transcript

handouts
Introduzione allo sniffing
Andrea Lanzi, Davide Marrone, Roberto Paleari
Università degli Studi di Milano
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Informatica
29 novembre 2006
Sommario
1
Introduzione alle chiamate socket
2
Sniffing
Concetto di Sniffing
Rilevamento di uno sniffer
3
TCPDUMP
Introduzione alle chiamate socket
Per poter comunicare inviare dati attraverso la rete i sistemi
operativi forniscono delle interfacce di comunicazione,
chiamate socket.
Le socket possono essere definite a qualsiasi livello dello stack
TCP/IP: transporto, rete o data link.
Le socket in Linux
In linux esiste la chiamata socket, i cui parametri stabiliscono i
protocolli di comunicazione e quindi il livello di posizionamento
all’interno dello stack TCP/IP:
int socket(int domain, int type, int protocol);
domain: Definisce il dominio di comunicazione (famiglie di
protocolli): e.g. PF UNIX, PF INET e PF PACKET.
type: Definisce il tipo di socket, (semantica di comunicazione)
SOCK STREAM, SOCK DGRAM, SOCK RAW, ...
protocol: Definisce il protocollo su cui agire e.g. icmp,
tcp,udp etc.
Esempi di chiamate socket
Nei seguenti tre esempi, si vede rispettivamente la creazione di una
socket TCP, di una socket a livello NETWORK e di una socket di
livello DATA LINK, maggior dettagli possono essere reperite nelle
pagine di manuale della chiamata socket (man 7 socket).
socket(PF INET, SOCK STREAM, TCP)
socket(PF INET, SOCK RAW, Protocol)
raw socket, accesso diretto a livello IP
socket(PF PACKET, SOCK RAW, Protocol)
raw socket, accesso diretto a livello data-link
Concetto di Sniffing
Per poter “sniffare” bisogna avere i permessi di
amministratore.
Funzionamento delle socket raw, viene passata una copia del
pacchetto.
L’attività di sniffing è utilizzata per monitorare e diagnosticare
delle problematiche di rete, oppure da un punto di vista
”maligno” per poter reperire informazioni sensibili senza
autorizzazione.
Tipologie di Sniffing
Esistono due tipi principali di attività di sniffing: sniffing
attivo e sniffing passivo, quello passivo limita a leggere le
informazioni (es. tcpdump), quello attivo invece mira anche
a modificare i dati all’interno dei pacchetti (es. ettercap).
Le informazioni che riceviamo dipendono dalla topologia della
rete in cui siamo immersi, (rete con switch o reti con hub) dai
possibili attacchi che si possono fare.
Per poter abilitare la lettura delle informazioni di rete non
relative al nostro indirizzo dobbiamo impostare la modalità
promiscua sulla scheda di rete (ifconfig eth0 promisc).
Rilevamento di uno sniffer (1)
Un host “sospetto” sta sniffando?
Difficile da capire, soprattutto nel caso di sniffing passivo...
...ma non impossibile!
Solo un esempio: cosa succede se mando un frame ethernet con
destinatario inesistente, incapsulandovi una richiesta ARP who-has
per l’IP dell’host “sospetto”?
Rilevamento di uno sniffer (2)
192.168.1.2 NON sta sniffando
gandalf:~# tcpdump -ne arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
19:14:26.264207 00:02:44:36:3a:06 > 11:22:33:44:55:66, ethertype ARP (0x0806),
length 42: arp who-has 192.168.1.2 tell 192.168.1.3
192.168.1.2 STA sniffando
gandalf:~# tcpdump -ne arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
19:14:43.349462 00:02:44:36:3a:06 > 11:22:33:44:55:66, ethertype ARP (0x0806),
length 42: arp who-has 192.168.1.2 tell 192.168.1.3
19:14:43.349598 00:40:f4:66:da:35 > 00:02:44:36:3a:06, ethertype ARP (0x0806),
length 60: arp reply 192.168.1.2 is-at 00:40:f4:66:da:35
TCPDUMP: introduzione
Uno degli sniffer più avanzati per la cattura e registrazione dei
pacchetti di rete; sito ufficiale http://www.tcpdump.org
Utilizza per poter leggere i dati dalla rete le librerie pcap che
trovate al sito:
http://sourceforge.net/projects/libpcap/
Esiste una versione anche per Windows sviluppata dal
Politecnico di Torino che si chiama Windump, notizie utili le
trovate: http://windump.polito.it/
TCPDUMP: introduzione
Permette sia di catturare le informazioni in tempo reale in
formato sintetico, visualizzando soltanto gli indirizzi i
protocolli etc., sia di catturare l’intero contenuto del
pacchetto in formato esadecimale.
La caratteristica piu potente è quella di fornire una completa
sintassi di espressioni per poter impostare filtri capaci di
discriminare ogni singolo campo del pacchetto catturato.
TCPDUMP: Sintassi
TCPDUMP Sintassi:
tcpdump [
[
[
[
[
-adeflnNOpqRStuvxX ] [ -c count ]
-C file_size ] [ -F file ]
-i interface ] [ -m module ] [ -r file ]
-s snaplen ] [ -T type ] [ -w file ]
-E algo:secret ] [ expression ]
TCPDUMP: Sintassi
# tcpdump -i eth0
Questo comando mostra sullo standard output tutto il traffico
passante dall’interfaccia eth0.
# tcpdump -n -i eth0
Come sopra ma non risolve gli indirizzi, lasciandoli nel formato
numerico.
# tcpdump -x -i eth0
Emette la prima parte dei dati del pacchetto (fino ai primi 68 byte),
per poter specificare più byte da considerare l’opzione -s n byte
TCPDUMP: Espressioni
Elementi delle espressioni:
Gli indirizzi di origine o di destinazione, riferiti alla suite
TCP/IP chiamati anche nodi.
Le porte di comunicazione a livello applicazione.
I protocolli ether, fddi, ip, arp, rarp, decnet, tcp, udp.
TCPDUMP: Primitive (1)
Primitive espressioni:
dst host nodo: nodo destinazione.
src host nodo: nodo sorgente.
host nodo: indifferenza su origine e destinazione.
ether dst nodo ethernet: nodo destinazione
ether src nodo ethernet: nodo sorgente
ether host nodo ethernet: indifferenza tra src. e dest.
dst net rete: rete destinazione
src net rete: rete sorgente
net rete: indifferenza tra rete src. e rete dest.
TCPDUMP: Primitive (2)
dst port porta: porta destinazione
src port porta: porta sorgente
port porta: indifferenza tra porta src. e porta dest.
ether proto protocollo: protocollo può essere ip, arp, rarp.
ip proto protocollo: protocollo può essere: icmp, udp, tcp,
icmp.
tutte le primitive possono essere legate fra loro attraverso gli
operatori logici AND OR e NOT.
TCPDUMP: Esempi di espressioni (1)
Ascoltare i pacchetti destinati a un certo host e.g. 192.168.200.2:
# tcpdump -ni eth0 host 192.168.200.2
Ascoltare i pacchetti destinati ad una certa rete e.g.
192.168.200.0/24:
# tcpdump -i eth0 net 192.168.200.0/24
Ascoltare i pacchetti destinati a un certo host su una certa porta
e.g. 192.168.200.2 port 80:
# tcpdump -ni eth0 host 192.168.200.2 and port 80
TCPDUMP: Esempi di espressioni (2)
Ascoltare i pacchetti mostrando il campo dati in esadecimale:
# tcpdump -x -ni lo host 192.168.200.2 and port 80
Ascoltare i pacchetti, troncando i dati a 1500 byte:
# tcpdump -s 1500 -x -ni lo host 192.168.200.2
and port 80
Ascoltare i pacchetti mostrando l’header data-link:
# tcpdump -e -s 1500 -x -ni lo host 192.168.200.2
and port 80