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