Come utilizzare Wireshark? Quale impostazioni configurare per catturare il traffico di rete?
Nelle ultime settimane, ho avuto modo di imparare ad utilizzare Wireshark per un progetto universitario ma in rete ci sono pochissime guide dettagliate su come impostare Wireshark per catturare il traffico di rete wireless. quindi ecco a voi il tutorial su Wireshark in Kali Linux.
Sommario
Cos’è Wireshark?
Wireshark è uno strumento software per catturare ed interpretare i dati
che transitano su una rete.
In una rete transitano dati sottoforma di frame, datagrammi, pacchetti o segmenti a seconda del loro contenuto, possiamo comunque genericamente riferirci al termine pacchetti di dati.
Wireshark, è un programma definito anche analizzatore di rete, scaricabile liberamente dal sito Wireshark, e disponibile per diverse piattaforme.
Wireshark cattura i dati dall’interfaccia di rete selezionata e poi suddivide quanto catturato in pacchetti, stabilendo dove iniziano e dove finiscono. Poi interpreta e presenta i dati secondo il protocollo utilizzato. I dati catturati
possono essere analizzati, subito o salvati per una successiva valutazione ed analisi ed i protocolli gestiti sono molteplici.
Ecco alcuni motivi per cui le persone usano Wireshark:
- Gli amministratori di rete lo utilizzano per risolvere i problemi di rete
- I tecnici della sicurezza di rete lo usano per esaminare i problemi di sicurezza
- I tecnici del QA lo usano per verificare le applicazioni di rete
- Gli sviluppatori lo utilizzano per eseguire il debug delle implementazioni del protocollo
- La gente lo usa per imparare l’interno del protocollo di rete
Wireshark può anche essere utile in molte altre situazioni.
Come utilizzare Wireshark: Interfaccia grafica
La G.U.I. (Graphical User Interface) di Wireshark all’avvio si presenta in questo modo:
Tramite i 3 campi evidenziati possiamo scegliere:
• su quale interfaccia di rete catturare i pacchetti dati, ad esempio sulla wifi o sulla scheda ethernet
• quale filtro di cattura utiizzare, cioè possiamo scegliere se catturare ad esempio solo i pacchetti dati che utilizzano un protocollo TCP diretti alla porta 22.
• quale filtro di visualizzazione utilizzare, cioè possiamo scegliere cosa visualizzare anche in questo caso in base al protocollo utilizzato o in base ad altre caratteristiche che vedremo più avanti.
Approfondiremo poi come impostare i filtri.
Senza impostare alcun filtro di cattura proviamo a cliccare sull’interfaccia di rete che attualmente stiamo utilizzando, ad esempio la connessione rete Wireless. In questo modo inizierà la cattura dei pacchetti che verranno visualizzati al centro dell pagina.
Cattura pacchetti di rete con Wireshark
I pacchetti catturati vengono visualizzati di diverso colore a seconda del tipo di protocollo.
La visualizzazione dei pacchetti è sequenziale ed in ordine, essi vengono disposti in 5 colonne.
Tempo | IP Sorgente | IP Destinazione | Protocollo | Lunghezza | Informazioni |
0.000000 | 192.168.1.64 | 230.0.0.1 | UDP | 92 | 52143 + 6666 Len=50 |
0.379524 | 192.168.1.109 | 8.8.8.8 | DNS | 74 | Standard Query 0x5028 a www.google.com |
Nelle 3 sezioni sopra evidenziate troviamo una sintesi di ogni pacchetto, cioè il suo contenuto con dettagli che contengono altre informazioni visualizzabili cliccando sopra ad ogni riga, ed in basso il contenuto in byte.
Con la visuale generale è difficile visualizzare ogni informazione, per questo cliccando su uno specifico pacchetto (ad esempio il secondo che è una richiesta DNS al server per conoscere l’indirizzo del sito ww.google.com) si apre una finestra con i dettagli del pacchetto.
Questo sistema può servire ad esempio per confrontare due pacchetti visualizzandoli contemporaneamente.
All’interno della visualizzazione dei dettagli del pacchetto, troviamo una struttura ad albero, ed ogni sezione viene definita “sottoalbero” (subtree) . Cliccando sulla freccia a sinistra il sottoalbero si espande o si chiude.
Cliccando su un sottoalbero, vengono inoltre evidenziati i bytes interessati da quella sezione.
Analisi termini Wireshark
Cominciamo a fare una distinzione con i termini che stiamo utilizzando, se parliamo di pacchetto, intendiamo l’insieme di dati in uscita dal livello 3 (livello Rete) del modello ISO-OSI, se invece utilizziamo il termine frame,
intendiamo l’insieme di dati in uscita dal livello 2 (livello Collegamento) dello stesso modello.
Non dobbiamo dimenticare infatti che nel modello ISO-OSI viene effettuato un imbustamento multiplo, cioè ai pacchetti in entrata ad ogni livello vengono aggiunti dei dati (intestazioni e code dette anche header e tail).
Chiusa questa parentesi torniamo ad analizzare i dettagli del pacchetto, analizziamo ad esempio il contenuto della prima riga.
Cattura pacchetti di rete: parte 2
Possiamo notare oltre al numero del pacchetto ed all’interfaccia di Acquisizione, la quantità di dati sulla linea e la quantità di dati catturati. In questo caso coincidono, ma mettendo dei filtri può accadere che non vengano memorizzati tutti i dati che passano sulla linea (questo se si vuole utilizzare meno spazio sul PC).
Nel pannello PACKET BYTES, in basso troviamo il contenuto in bytes del pacchetto catturato.
La prima colonna è un indice in esadecimale che rappresenta l’indirizzo di ogni byte. La prima riga inizia da 0000 e ci sono in tutto 16 bytes, pertanto la seconda riga iniziera in 10 (esadecimale).
Nella seconda colonna troviamo il contenuto in byte del pachetto dati.
Nella terza colonna troviamo lo stesso contenuto, visualizzato però in caratteri ASCII, se un valore esadecimale, non corrisponde ad alcun carattere ASCII, viene visualizzato un punto “.”
Un clic con il pulsante destro sul pannello, apre una finestra consente di visualizzare il contenuto in bytes o in bit, e la terza colonna in ASCII (American Standart Code for Information Interchange, codice standard americano per lo scambio di informazioni) o in EBCDIC (Extended Binary Coded Decimal Interchange Code, sistema di codifica ad 8 bit utilizzato dalla IBM).
Come detto prima, evidenziando una riga nel PACKET DETAILS, si evidenziano bytes corrispondenti nel PACKET BYTES.
Caratteristica quest’ultima molto utile per analizzare eventuali problemi nella dissezione.
Per dissezione si intende l’operazione che Wireshark effettua (mediante i dissettori, propri strumenti software) per effettuare l’analisi sintattica di un protocollo al fine di decodificarlo e presentarlo nell’interfaccia.
I dissettori sono la parte fondamentale di Wireshark.
Utilizzare Filtri Wireshark
Altra parte importante di Wireshark, sono i filtri. Mediante questo strumento riusciamo a ridurre la quantità di dati catturati, concentrando l’attenzione su ciò che è di nostro interesse.
Su Wireshark ci sono due tipi di filtri, i filtri di cattura (capture filters) e quelli di visualizzazione (display filters).
I primi agiscono sulla cattura dei pacchetti trascurando i pacchetti che non soddisfano i criteri stabiliti nel filtro.
I secondi agiscono solo sula visualizzazione, pertanto i pacchetti vengono catturati ma visualizzati secondo i criteri indicati.
Altra differenza tra i due, è la sintassi utilizzata, nel caso dei filtri di cattura si utilizza una sintassi di basso livello denominata Berkeley Packet Filter BPF, mentre invece i filtri di visualizzazione utilizzano una sintassi logica più comune ed utilizzata anche da altri programmi.
Filtri di cattura
Ricordiamo che l’utilizzo dei filtri di cattura riduce di molto la quantità di pacchetti catturati e memorizzati, e ciò influisce anche su ciò che possiamo visualizzare tramite i filtri di visualizzazione (se un pacchetto non è stato
catturato non può essere ovviamente visualizzato).
Lasciando vuoto il campo dei filtri di cattura Wireshark acquisirà tutto, opzione questa che a volte può creare problemi causati dalla quantità di dati (vedi ad esempio l’utilizzo di Wireshark in remoto).
Gli elementi che costituiscono un filtro di cattura sono; protocollo, direzione e tipo.
Ad esempio, tcp dst port 22, indica che si vogliono catturare i pacchetti trasmessi secondo il protocollo TCP, con destinazione la porta 22.
In questo caso il protocollo è il TCP, la direzione è dst (destinazione) ed il tipo è porta 22.
La direzione può essere di tipo src o dst, il primo src per catturare da uno specifico indirizzo di origne, il secondo dst per catturare un pacchetto indirizzato ad uno specifico indirizzo di destinazione.
Oltre a definire una destinazione, si possono usare dei modificatori come src or dst oppure src and dst.
I tipi possibili sono: host, port, net, portrange. Se il tipo viene omesso si considera il primo host.
Direzione e protocollo possono essere omessi, pe cercare un tipo nell’origine o nella destinazione in tutti i protocolli.
Per esempio dst host 192.168.0.100 mostrerebbe solo il traffico che va a questo indirizzo IP.
Se si omette l’elemento dst verrebbe mostrato il traffico in ingresso ed in uscita dall’indirizzo IP indicato.
Il programma ci impedisce di inserire dei filtri con la sintassi sbagliata, pertanto riusciamo ad accorgerci subito di eventuali errori.
Di seguito una serie di esempi, tratti dal manuale ufficiale di wireshark https://wiki.wireshark.org/
Filtro | Cattura |
host 172.18.5.4 | Cattura il traffico in entrata ed uscita dall’indirizzo 172.18.5.4 |
net 192.168.0.0/24 oppure net 192.168.0.0 mask 255.255.255.0 | Cattura tutto il traffico della rete indicata, cioè tutto il traffico da e per gli indirizzi compresi tra 192.168.0.1 a 192.168.0.255 |
src net 192.168.0.0/24 oppure src net 192.168.0.0 mask 255.255.255.0 | Cattura il traffico proveniente dalla rete indicata, cioè tutto il traffico proveniente dagli indirizzi compresi tra 192.168.0.1 a 192.168.0.255 |
Host www.example.com and not (port 80 or port 25) oppure host www.example.com and not port 80 and not port 25 | Cattura tutto il traffico diretto all’indirizzo www.example.com escluso quello SMTP (porta 25) e HTTP (porta 80) |
port not 53 and not arp | Cattura tutti i pacchetti indirizzati alla porta 53 escludendo quelli ARP |
Cliccando comunque sulla bandierina verde accanto alla barra dei filtri di catture, Wireshark ci mostra dei filtri già pronti e ci consente di gestire i filtri modificandoli o aggiungendone altri.
Filtri di visualizzazione
La sintassi del filtro di visualizzazione si basa su espressioni che restituiscono i valori TRUE o FALSE.
Queste espressioni utilizzano operatore di confronti che si possono combinare con operatori BOOLEANI, per esprimere criteri complessivi ed ottenere i risultati desiderati.
Wireshark ci offre un grande aiuto per comporre i filtri di visualizzazione, cliccando sulla scritta “espressione” in alto a destra vicino la riga di comando del filtro di visualizzazione, si apre una finestra con una miriade di filtri possibili e personalizzabili. Ogni tipo di filtro ha una struttura ad albero e cliccando sulla freccia si aprono altre sotto-tipologie.
Cattura di pacchetti dalla rete locale
Proviamo ora ad effettuare una semplice cattura di pacchetti dalla rete locale, per poi analizzare quanto acquisito.
Dopo aver lanciato Wireshark ed aver selezionato l’interfaccia di rete attiva, l’acquisizione ha inizio. Per avere più pacchetti da analizzare, digitiamo nel browser l’indirizzo di un sito ad esempio www.ebay.it , ed avviamo un breve navigazione tra le sue pagine.
Non essendoci filtri attivi, con questa semplice operazione verranno catturati diversi pacchetti dati.
Conviene pertanto bloccare la cattura dei pacchetti con l’apposito pulsante di STOP.
Una delle caratteristiche più interessanti di Wireshark, sta proprio nel funzionamento dei dissettori, e cioè quegli strumenti software in grado di decodificare un pacchetto dati e presentarlo nell’interfaccia.
Nel fare questa operazione infatti, i pacchetti verranno mostrati secondo l’ordine del modello TCP/IP.
Internet infatti si basa su questo protocollo
che è differente dallo standard ISO/OSI
per il numero di livelli e per la distribuzione
dei vari protocolli in ogni strato.
In questa immagine possiamo distinguere
i 4 livelli del modello TCP/IP,
con qualche esempio di protocollo
appartenente ad ogni livello
Ora per selezionare qualche pacchetto proviamo a scrivere nel campo dei filtri di visualizzazione “http” , in questo modo verranno visualizzati solo i pacchetti che utilizzano questo protocollo, con un po’ di fortuna potremmo aprire uno dei pacchetti indirizzati o provenienti dal sito selezionato prima.
Ma come dicevamo prima sulla finestra del dettaglio del pacchetto (cliccando su un pacchetto si apre questa finestra) abbiamo la visualizzazione dei dati secondo il modello TCP/IP della figura precedente.
Perciò oltre al primo livello rappresentato dal frame completo, avremo in ordine gli altri 4 livelli.
Nella figura seguente vediamo il dettaglio di un pacchetto http, si possono notare le seguenti righe:
• Frame 535 (il 535 esimo pacchetto catturato) come si legge nella riga, esso è composto da 449 bytes.
• Ethernet II, dove troviamo l’indirizzo MAC del sorgente (Src) e del destintario (Dst).
• Internet Protocol IP, dove invece troviamo gli indirizzi IP del sorgente (Src) e del destintario (Dst).
• Trasmission Control Protocol TCP, dove troviamo anche le porte del PC utilizzate.
• HyperText Transfer Protocol HTTP, che invece contiene i dati a livello applicazione
In pratica partendo dall’alto dopo il frame abbiamo:
Livello Accesso alla rete – Ethernet II,
Livello Network – Internet Protocol IP
Livello Trasporto – Trasmission Control Protocol TCP
Livello Applicazione – HyperText Transfer Protocol HTTP
Possiamo ovviamente scendere maggiormente nel dettaglio di ogni livello, andando ad aprire la struttura ad albero cliccando sopra alla riga scelta. In questo modo potremo vedere il contenuto ad esempio del livello Ethernet che verrà anche evidenziato nel pannello dei bytes in basso, dove possiamo vedere il contenuto in binario o in esadecimale.
Allo stesso modo possiamo aprire la parte relativa al TCP ed all’HTTP per analizzare tutti i singoli segmenti di dati che costituiscono il frame complessivo.
Nel Pannello dei bytes in basso, troviamo sempre evidenziati i dati corrispondenti a ciò che evidenziamo in alto.
Possiamo notare, cliccando su ogni strato, il modo di “imbustare” i dati classico del modello ISO/OSI e del TCP/IP.
Un altro pacchetto dati semplice da analizzare, è quello del protocollo ARP, digitiamo sul filtro di visualizzazione “arp”, e clicchiamo su uno dei pacchetti.
In questo caso abbiamo solo 2 livelli, Ethernet ( Livello di accesso alla rete) e ARP (Livello Network) ARP si occupa di associare ad ogni indirizzo MAC dei dispositivi, il corrispondente indirizzo IP.
Gli indirizzi sono evidenziati nella seguente immagine.
Un’altro pacchetto facilmente analizzabile è quello relativo al protocollo
DNS (Domain Name System ). In questo caso possiamo notare nel
contenuto del pacchetto DNS a livello applicazione, il nome del sito di
wikipedia e il relativo indirizzo.
Cliccando inoltre su un qualsiasi pacchetto dati con il tasto destro del mouse si può seguire il flusso dati tra client e server: Segui-> Flusso TCP
Seguendo un flusso dati automaticamente viene creato il relativo filtro di visualizzazione.
Conclusione
Quanto detto finora è solo una breve introduzione all’utilizzo di un software molto potente per analisi del flusso dati di una rete.
Ovviamente l’utilizzo di Wireshark non è utile solo per affrontare l’analisi dei pacchetti di rete da un punto di vista didattico, ma anche e soprattutto per studiare le tecniche di attacco e di difesa di una rete al fine di migliorarne la sicurezza.
Per quest’importante utilizzo dobbiamo però mettere in campo altre conoscenze ed altri strumenti che ci consentiranno di simulare ogni situazione e verificare tutte le criticità che si possono avere.
Per questo possiamo anticipare senza entrare nei dettagli, la necessità di installare un potente sistema operativo indispensabile per testare e mettere a dura prova la sicurezza di una rete e cioè Kali Linux.
Questo sistema operativo può essere installato su una macchina ma come primo approccio potrebbe essere utile installarlo in una macchina virtuale (VM) con Virtual Box.
In questo modo avremo il sistema operativo Kali Linux dentro al nostro PC, che potrà essere avviato insieme al sistema operativo già avviato, senza alcun rischio.
Nel prossimo post le istruzioni per l’installazione di Virtual Box e di Kali Linux.