Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Filtrare dump pcap con Wireshark

Utilizziamo Wireshark per analizzare e filtrare un dump salvato nel formato pcap.
Utilizziamo Wireshark per analizzare e filtrare un dump salvato nel formato pcap.
Link copiato negli appunti

Abbiamo visto in passato cos'è cos'è Wireshark e come funziona. Questo nuovo articolo ha come scopo quello di imparare ad usare i filtri che ci mette a disposizione il programma per focalizzare l'attenzione sul dato che stiamo cercando.

I file PCAP

Il PCAP (Packet CAPture) è un insieme di API (Application Programming Interface) che si occupano di catturare il traffico di rete. Sui sistemi Unix-Like la libreria che ha l'incarico di gestire i pcap si chiama libpcap, mentre sui sistemi Windows è conosciuta con il nome di WinPcap. Queste API sono scritte nel linguaggio di programmazione C ed offrono la possibilità di:

  • Catturare i pacchetti che circolano sulla nostra rete;
  • Filtrare i pacchetti catturati a seconda di vari parametri che vedremo successivamente;
  • Salvare i pacchetti su un file;

Un file in formato PCAP può essere salvato con varie estensioni, come ad esempio .pcap, .cap o .dmp (che sta per dump). Il MIME type di un PCAP è: “application/vnd.tcpdump.pcap” e può essere letto dai più comuni software di analisi traffico come: tcpdump, CA NetMaster, Snort, MS Network Monitor, nmap ed ovviamente Wireshark.

Dove reperire esempi di file PCAP?

Esistono molti siti che raccolgono file pcap divisi per tipologia, protocollo e servizio. Quello più completo è Wireshark.org/SampleCaptures ma se stiamo cercando qualcosa di specifico è meglio far riferimento alla lista completa consultabile dal sito: Netresec.com/?page=PcapFiles

La schermata dei filtri di Wireshark

È possibile inserire le regole per filtrare nella barra “Filter:” (in alto a sinistra del programma). Wireshark ci offre anche una comoda finestra con tutti i possibili filtri da applicare al dump. Questa funzione si chiama “Filter Expression” ed è richiamabile cliccando su “Expression...” nella barra dei menu:

filter windows

Sulla sinistra sono categorizzati servizi, protocolli ed applicativi. Nella colonna centrale possiamo decidere il tipo di relazione che stiamo cercando (se contiene, se è esattamente uguale, ecc). Nella colonna di destra inseriamo il dato che stiamo cercando.

Filtri su mittenti e destinatari:

Cominciamo a capire come filtrare solo specifici indirizzi IP:

ip.src == 192.168.2.1

Filtra tutte le richieste partite dall'ip 192.168.2.1 (sorgente)

[CODE]ip.dst == 192.168.2.102

Filtra tutte le richieste dirette all'ip 192.168.2.102 (destinazione)

La sintassi risulta molto semplice per chi è famigliare ai linguaggi di programmazione. E' esattamente come richiamare classi e metodi (nell'esempio la classe che si chiama “ip” ed il metodo “src” o “dst”). Il doppio uguale “==” specifica che deve essere esattamente uguale a quello che c'è scritto dopo.

Operatori logici

Nelle regole di filtraggio possiamo anche inserire gli operatori logici:

Operatore

Simbolo

Esempio

and

&&

ip.src == 192.168.2.1 and ip.dst == 192.168.2.102
(tutte le richieste che partono dal 2.1 ed arrivano al 2.102)

or

||

ip.src == 192.168.2.1 or ip.src == 192.168.2.102
(tutte le richieste che partono dal .2.1 o dal 2.102)

not

!

ip.src != 192.168.2.1
(mostrami tutto, a parte le richieste provenienti dal 2.1)

È possibile usare sia la forma letterale, sia quella simbolica. Esistono poi altri operatori logici come ad esempio lo XOR, ma non lo prenderemo in considerazione per questo articolo.

Filtri su porte e protocolli

In dump molto grandi ci sarà la necessità di filtrare, oltre che per indirizzo ip, anche per il tipo di porta o di protocollo.

tcp.port == 80

Filtra tutte le richieste che sono passate sulla porta 80 (Web). Se vogliamo filtrare solo le richieste UDP o TCP, basterà scivere udp o tcp nella barra dei filtri.

tcp.dstport == 80

Anche sui filtri delle porte possiamo specificare se il pacchetto sta entrando o uscendo da una determinata porta. In una navigazione web il dstport (destination port) raggruppa le richieste che il nostro computer invia al server. In srcport (source port) verranno raggruppate le risposte del server.

tcp portrange 79-444

Filtra solo i pacchetti TCP che sono passati fra la porta 79 e 444 (funziona solo con la versione di libpcap 0.9.1 o superiore).
Per tutti gli altri servizi e protocolli basterà richiamare il nome associati come ad esempio: telnet, ucp, sstp, ldap, rpc ecc.

Ricerca di password in differenti protocolli

Questa sezione comprende vari filtri utili a recuperare password (ovviamente passate in chiaro) di diversi protocolli.

pop.request.command == "PASS" || pop.request.command == "USER"

Stiamo forzando la visualizzazione sul protocollo POP. Il parametro “request.command” cerca solamente i comandi che l'utente ha inviato al server che contengano la dicitura “PASS” oppure “USER”. Per chi conosce il protocollo POP sa che i suddetti servono ad effettuare il login, per cui potremo ricavare username e password senza problemi.

Stessa cosa sul protocollo IMAP, SMTP e FTP:

imap.request contains "login"

smtp.req.command == "AUTH"

ftp.request.command == “USER”

Se avete necessità di estrapolare altre informazioni sui protocolli citati, vi rimando agli RFC (Request For Comments):

  • IMAP
  • SMTP
  • FTP

Con altri protocolli come IMAPs e POP3s non avremmo avuto molta fortuna in quanto utilizzano la cifratura delle informazioni sotto TLS o SSL. I pacchetti di questo tipo, agli occhi di uno sniffer, risultano illeggibili e senza senso. Non avremo potuto mai trovare la stringa “AUTH” o “USER”.

Ricerca di testo

Passiamo ora alla ricerca di password all'interno di richieste HTTP. Filtrare una stringa di testo risulta utile quando sappiamo già cosa cercare (come ad esempio uno specifico parametro in POST o in GET). Teniamo presente che genericamente i dati sensibili vengono inviati tramite l'uso della POST, per cui:

http.request.method == POST

con questo filtro siamo in grado di visualizzare tutte le richieste POST che sono partite da un host nella rete. Ma forse non è abbastanza ed abbiamo bisogno di aggiungere ulteriori filtri:

http.request.method == POST && http.request.uri contains login

Così facendo striamo forzando la ricerca della parola “login” all'interno di tutte le richieste di tipo POST. Invece di login possiamo anche usare “password” / “passwd” / ecc.

Se ancora non fosse abbastanza dobbiamo passare ad analizzare il sito web su cui la nostra vittima ha effettuato il login. Prendiamo come esempio la form di un sito WordPress. La path per visualizzare la pagina di accesso si trova in /wp-admin/:

wp-login.php

Posizioniamoci nella casella “Password” e tramite il click destro apriamo “Ispeziona elemento” (su Chrome e Firefox). Questo ci rivelerà il nome della input box che in questo caso è “user_pass”:

wp-login.php

Basterà ora filtrare per il parametro appena trovato e cioè:

http.request.method == POST && http.request.uri contains “user_pass”

Seguire il flusso

Un altro buon metodo per seguire meglio i passaggi su una navigazione HTTP è l'uso della funzione “Follow TCP Stream” (Segui l'attività TCP).

ws follow tcp

Ci consente di visionare le richieste (e le risposte del server) complete di Headers, Cookies e parametri.

ws_follow_tcp2

Nell'immagine vediamo una richiesta in POST adibita al login utente su un sistema DokuWiki.
Fra i parametri in POST (in basso) troviamo anche:

[CODE]u=USER&p=PASS

quelli sono i dati che stavamo cercando!

Messaggi in broadcast

Vediamo in questa ultima sezione com'è possibile visualizzare solo i messaggi in broadcast. Questo genere di pacchetti vengono utilizzati per richiamare l'attenzione di altri apparati presenti sulla rete LAN. Sono caratterizzati dal fatto che l'indirizzo di destinazione è generalmente il 255.255.255.255 oppure 192.168.1.255 (nel caso di una LAN con indirizzamento 192.168.1.1/24).

ip.dst!=192.168.2.102 and ip.src!=192.168.2.102[/CODE]

Intuitivamente possiamo applicare un filtro che esclude le richieste partite o provenienti direttamente dal nostro indirizzo IP. Questo ci mostrerà tutti gli apparati che mandano messaggi in broadcast.

eth.dst==ff:ff:ff:ff:ff:ff

O più semplicemente utilizzare l'indirizzo ethernet “ff:ff:ff:ff:ff:ff” di destinazione che corrisponde sempre alle richieste in broadcast:

broadcast

Nell'immagine di esempio vediamo 3 apparati differenti:

* 192.168.2.111 e 192.168.2.110 sono due apparati UniFi della Ubiquiti che utilizzano broadcast per dialogare fra di loro

* 192.168.2.100 è un computer con un client Dropbox che utilizza broadcast per cercare altri PC in rete e sincronizzarsi direttamente senza passare tramite internet. (questo genere di “discovery” è comune anche sui client Skype)

Conclusioni

Abbiamo grattato solo la superficie delle immense potenzialità che i filtri PCAP ci mettono disposizione, vedendo come mettere in evidenza solo i dati essenziali sui protocolli più utilizzati. L'analisi dei file PCAP (quando disponibili) è anche utile per ricostruire i passaggi di un attacco informatico, per capire com'è stato condotto e per individuare la vulnerabilità che è stata sfruttata. Oppure per individuare un malware/spyware all'interno di una rete informatica. Qualunque sia la sua applicazione di utilizzo ora, sappiamo come fare!

 

Ti consigliamo anche