KNOWLEDGE BASE

Knowledge Base
1Backup
Acronis
Antivirus
Email
Firewall
GFI Software
Mail
Monitoring
N-Able
Sicurezza
TSPlus
Diventa Autore per CoreTech | Scopri di più

Vai al Video

L’analisi del traffico di rete come strumento di difesa

L’analisi del traffico di rete è un’operazione che permette di trarre conclusioni, relativamente ad un certo contesto di rete, utili ai fini della risoluzione di problemi riscontrati (e non risolvibili con le canoniche attività di troubleshooting come il ping) o di rilevamento di eventuali attività malevole provenienti dall’esterno, di cui si sospetta l’esistenza, rilevabili perché gli attacchi comportano comunque lo scambio di pacchetti di dati. Possiamo quindi affermare che tale analisi si colloca all’interno di una strategia mirata che si pone come scopo la difesa di un’architettura di rete.

Questo tutorial esporrà la metodologia utilizzata nell’analisi e gli strumenti utilizzabili, con particolare riferimento a Wireshark, che è un tool capace di fornire risultati di livello professionale.

La metodologia

Partiamo dallo spiegare in cosa consiste esattamente tale analisi. A riguardo possiamo identificare tre fasi principali che ricorrono nella quasi totalità dei contesti presi in esame:

  1. collocazione/posizionamento dello strumento di analisi; quando si effettua l’analisi del traffico è determinante scegliere il punto della rete in base a cosa si sospetta o si cerca;
  2. acquisizione del traffico di rete; stabilito dove posizionare lo strumento si avvia l’ascolto dei pacchetti dati nella rete;
  3. interpretazione dei risultati.

Quindi una volta acquisita una mole significativa di dati occorre un’analisi critica da fare anche considerando da dove i dati sono stati acquisiti.

1. Fase di pozionamento

In questa prima fase è necessario conoscere e comprendere lo schema di rete del contesto da esaminare e identificare il punto di inserzione dello strumento.

Infatti l’analisi del traffico di rete produce risultati differenti in base a dove viene posizionato lo strumento che ci permette di effettuare tale analisi.

Ad esempio, collocare quest’ultimo all’interno di uno switch, di un router o di una workstation produce risultati totalmente differenti perché, ad esempio, applicando uno sniffer di rete su uno switch o un router si intercetta una quantità di dati molto più elevata.

2. Fase di acquisizione

Nella fase di acquisizione ci occupiamo di “catturare” tutto il traffico che ci interessa, in termini di pacchetti di rete e relativi protocolli.

Sarà quindi necessario conoscere il funzionamento dello strumento e soprattutto utilizzarne adeguatamente i sistemi di filtraggio dei dati e le opzioni di cattura che esso rende disponibili.

Va ricordato che più traffico viene catturato e più sarà complesso trarre delle conclusioni significative, quindi è meglio fare una selezione preventiva, almeno se si ha un’idea di cosa andare a “sniffare” o cercare; per esempio se ci interessa il protocollo UDP andremo ad acquisire il traffico realizzato con esso, se vogliamo analizzare il protocollo TCP scansioneremo quello e via di seguito. È anche possibile decidere di analizzare una porta specifica.

Con WireShark è anche possibile filtrare in un secondo momento il traffico acquisito, filtrandolo per protocolli, porte, dispositivi ecc.

Va comunque considerato che l’analisi di tutta la rete, oltre a richiedere grandi capacità di calcolo può anche arrivare a rallentare la rete e ciò, nelle applicazioni time-critical, può essere inaccettabile; una soluzione potrebbe essere compiere l’analisi, almeno per le attività produttive, fuori dagli orari di lavoro.

Banner

Fase di interpretazione

La fase di interpretazione ci permette di CONFERMARE o SMENTIRE le ipotesi fatte nella fase iniziale della metodologia scelta.

I risultati prodotti da tale fase avranno lo scopo di fornire delle “prove certe” che ci aiuteranno ad identificare e risolvere uno specifico problema o saranno significativi in termini di prevenzione di ipotetiche attività malevole.

Banner

Prerequisiti

Un prerequisito fondamentale dell’analisi è la conoscenza dei principali protocolli di rete.

Il motivo è duplice:

  • conoscere come funziona un certo protocollo in condizioni “standard” è la base per evidenziare eventuali alterazioni o modifiche del traffico, quindi anomalie sospette;
  • conoscere i principali protocolli di rete permette di focalizzare la propria attenzione solo sul traffico realmente differente da quello normale e perciò potenzialmente sospetto.

Quindi bisogna avere buone basi di teoria di funzionamento delle reti e dei protocolli con cui si scambiano i dati, magari anche solo per selezionare cosa analizzare.

Strumenti di analisi del traffico di rete

La categoria di strumenti che si utilizzano per effettuare l’analisi del traffico di rete (cioè dei pacchetti di dati che circolano nella rete) prende il nome di “Sniffer” o “Packet Sniffer”.

Uno sniffer ha il compito di “mettersi in ascolto” su una specifica interfaccia di rete, catturare il traffico interessato e fornire una rappresentazione grafica dei risultati.

Perciò uno strumento che assolve ai compiti di ascolto, cattura e interpretazione, può essere definito uno sniffer di rete.

Va precisato che in un contesto di rete è possibile avere più interfacce di rete fisiche e virtuali, il che riconduce al concetto della cfonoscenza dell’architettura della rete su cui si intende operare.

Esistono numerosi sniffer di rete, alcuni sono commerciali e altri open-source, alcuni utilizzabili solo tramite riga di comando (CLI), altri sono forniti di un’interfaccia grafica d’utente (GUI).

Sebbene tali strumenti si presentino sotto differenti forme, la base per un utilizzo profittevole è sempre la stessa: la conoscenza teorica dello scenario (e dei protocolli) da analizzare rende significativa la successiva analisi del traffico di rete.

In questo tutorial faremo riferimento a Wireshark (si trova in Internet su https://www.wireshark.org/). Wireshark è uno sniffer di rete completamente open source, oltre ad essere uno dei più diffusi e completi appartenenti a questa categoria; peraltro è ben documentato sul web.

Wireshark: come funziona

Semplificando, il funzionamento di Wireshark è il seguente:

  • seleziona la corretta interfaccia di rete, ossia quella su cui eseguire lo sniffing;
  • cattura i pacchetti di rete in base ai FILTRI specificati;
  • visualizza i pacchetti in base ai FILTRI applicati; possiamo già, a livello dell’interfaccia di rete, filtrare i protocolli d’interesse, ovvero catturare tutto il traffico e filtrarlo dopo;
  • interpreta e rappresenta graficamente l’analisi grazie alla funzionalità di “comprensione” dei vari protocolli di rete.

Per la fase di cattura dei pacchetti, Wireshark si appoggia ad una specifica API, che è pcap.

I sistemi Linux/Unix implementano pcap tramite la libreria “libpcap” e i sistemi Windows utilizzano, invece, WinPcap/Npcap. Quindi Wireshark non incorpora il codice che serve a interfacciarsi con la scheda di rete per la cattura, quindi quando si installa occorre installare le librerie suddette.

Utilizzando la modalità promiscua dell’adattatore di rete, Wireshark permette di esaminare tutto il traffico presente sul segmento di rete (LAN) in oggetto, pur tenendo conto delle limitazioni e delle impostazioni di sicurezza applicate alla rete.

Sul web sono presenti molteplici risorse (ad esempio, https://cdn.comparitech.com/wp-content/uploads/2019/06/Wireshark-Cheat-Sheet-1.jpg ) che mostrano il sistema di filtraggio dei pacchetti presenti in wireshark (l’immagine seguente ne mostra una parte).

È molto importante conoscere l’utilizzo dei filtri di Wireshark, quindi quelli per un certo procotollo o indirizzo di rete, una certa scheda di rete ecc.

Molto utile, inoltre, è la possibilità di trovare sul web dei “sample” di traffico relativo a svariati protocolli che ci permette di poter comprendere il funzionamento di quest’ultimi senza la necessità di dover creare un laboratorio ad-hoc.

Tutti i file in formato “pcap” possono essere visualizzati graficamente da Wireshark.

Di seguito un link dove è possibile trovare questi “sample”:

https://wiki.wireshark.org/SampleCaptures

Per chi fosse interessato ad approfondire l’argomento (non ci è possibile esaurirlo in questo tutorial...) suggeriamo di visitare il sito di Laura Chappell (https://www.chappell-university.com) che è una ricercatrice in ambito di sicurezza informatica che si è specializzata sull’analisi del traffico di rete.

Quest’ultima ha pubblicato diversi manuali relativi a Wireshark, che trovate proprio sul suo sito.

Esempio applicativo

Fatta questa presentazione, vediamo un esempio di applicazione di Wireshark nel monitoraggio del traffico di rete, dando per scontato di aver già installato sulla nostra macchina Wireshark con le relative librerie per l’interfacciamento con gli adattatori di rete. Di seguito è proposta l’interfaccia utente di Whireshark.

Notate che Wireshark dispone di un menu abbastanza nutrito dal quale effettuare molte impostazioni. Una volta aperta l’interfaccia utente, la prima cosa da fare è selezionare la scheda di rete del computer che si andrà a utilizzare per l’analisi del traffico, ossia quella tramite cui il software si metterà in ascolto del traffico di rete; allo scopo si clicca sul pulsante a forma d’ingranaggio e si accede alla finestra di dialogo visibile nell’immagine seguente. 

Nella schermata vedete due schede di rete: una fisica (quella in alto nella lista) e una virtuale, creata, nello specifico, da Virtual Box. Selezionato l’adattatore, per iniziare la cattura (l’acquisizione del traffico) basta cliccare sul pulsante Start.

Invece cliccando su Manage Interfaces si può accedere alla relativa finestra di dialogo dalla quale si possono definire opzioni, che però sono legate alle opzioni di cattura.

Quando Wireshark inizia l’acquisizione, l’interfaccia si presenta come nell’immagine seguente, con alcune icone (quelle attive) della barra dei menu sono verdi.

 

Notate che nella barra di ricerca, visualizzata in verde, potete specificare quali protocolli integrare nella scansione, ovvero scriverli beneficiando di un’utile funzione di completamento automatico; la barra appare verde quando il parametro scritto è corretto, mentre rimane rossa fin quando non viene digitato correttamente.

I protocolli sono, ad esempio, ARP, TCP/IP e via di seguito. Il protocollo ARP (Address Resolution Protocol) agisce in un contesto locale e si compone di due elementi: l’ARP Request e l’ARP Reply (immagine seguente).

Riferendoci a questa vediamo come funziona, supponendo che il computer di sinistra voglia comunicare con quello in mezzo ma non ne conosca il MAC address: invia quindi una richiesta in broadcast (ossia a tutti i computer della rete) chiedendo chi risponde all’indirizzo 192.168.52.2 che è quello IP del computer desiderato. Risponderà solo quest’ultimo, comunicando chi è attraverso un pacchetto ARP Reply in cui si identifica con l’IP richiesto e contenente l’indirizzo fisico (il MAC) e da quel momento sarà possibile avviare la comunicazione mediante TCP/IP.

Wireshark va ad analizzare proprio lo scambio Request/Reply e ciò che ne segue. Notate che Windows tiene nella propria cache tutte le unità con le quali si è comunicato attraverso il protocollo ARP e si può verificare ciò andando su CMD e impartendo il comando:

arp -a

Per fare un test è sufficiente specificare il protocollo ARP come filtro e poi fare un ping da una macchina a un’altra di cui si conosce l’IP address e verificare che, parallelamente all’esito nella finestra CMD di Windows appaia il relativo traffico sull’interfaccia utente di Wireshark (immagine seguente).

Se clicchiamo su una delle righe accediamo alla finestra di dialogo mostrata nell’immagine seguente, dove, come si può osservare, abbiamo il frame ethernet e tutto ciò che è legato al protocollo ARP, mentre non risulta alcuna indicazione sul protocollo IP né su TCP e UDP, perché il protocollo ARP si colloca a livello 2 del modello ISO OSI, mentre il protocollo IP è livello 3 e il TCP UDP a livello 4, quindi siamo al livello più basso ed è giusto non visualizzare informazioni legate ai protocolli IP, TCP ecc.

Nel primo riquadro della finestra si può osservare anche una Address Resolution Protocol Request; se clicchiamo sul simbolo di “maggiore” alla sua sinistra (appare in verde) si può osservare ogni dettaglio della richiesta, ossia abbiamo il Sender Mac Address, che è noto, il Sender IP Address, anche questo noto, poi l’indirizzo IP del computer con cui si vuole entrare in comunicazione (questo lo sappiamo) e ci manca relativo MAC Address di quest’ultimo, che non a caso appare con tutti i campi a zero.

A questo punto la macchina chiamata risponde e fornisce il pacchetto di ARP Reply, che viene sniffato da Wireshark e fornisce il risultato mostrato nell’immagine seguente. Qui troviamo il Sender MAC Address della macchina di cui volevamo conoscerlo partendo dal sender IP address; vediamo anche gli address MAC e IP del target, che conosciamo perché sono quelli da cui abbiamo inviato, tramite ping, la richiesta ARP.

Avete quindi compreso il funzionamento standard in condizioni normali di questo protocollo, quindi potete, volendo, sperimentare con altri protocolli, come ad esempio l’ICMP (Internet Control Message Protocol): allo scopo, dalla solita barra di ricerca troviamo ICMP, applichiamo il filtro, resettiamo quindi l’interfaccia della cattura e avviamo dopo aver lanciato il ping sulla macchina Host. Questa volta nel’interfaccia visualizzeremo la richiesta di ping ICMP Request e la relativa risposta ICMP Reply, perché la macchina interpellata sta rispondendo alle nostre richieste (immagine seguente).

È possibile anche cambiare il numero di colonne, visualizzare altre informazioni ecc. Possiamo fare doppio clic su un pacchetto e aprirlo.

Ora va notato che il protocollo ICMP, per funzionare, ha bisogno del protocollo IP (non utilizza, tuttavia, il protocollo TCP) ovvero ha necessità dell' indirizzamento logico delle macchine; quindi se apriamo il pacchetto troviamo il solito Frame a livello Ethernet e l’internet protocol (IP) e sotto a questo troviamo il protocollo ICMP.

Questo ordine di visualizzazione riguarda il concetto di incapsulamento dei vari livelli del modello ISO/OSI, ovvero il protocollo che sta sotto un altro ne ha bisogno, quindi il protocollo ICMP ha bisogno del protocollo IP e via di seguito.

Clicchiamo sul simbolo di maggiore accanto a Internet Control Message Protocol apriamo la ICMP Request e possiamo osservare tutti Flag e Type: 8 che identifica la richiesta ICMP e poi abbiamo il payload di questa di questa richiesta. Se passiamo a vedere la risposta, ossia la ICMP Reply, troveremo che contiene il Type:0 che è quello che identifica la risposta stessa.

Se andiamo a cliccare sul protocollo IP, quindi ingrandiamo il pacchetto, vediamo che il protocollo si occupa dell’indirizzamento logico; non parliamo di porte servizi perché le porte servizi sono legate al protocollo TCP e UDP che sono al livello 4 del modello ISO OSI e non entrano in gioco nel modello 3.

Quando si parla di protocollo ICMP siamo focalizzati sul livello 3 e infatti qui praticamente vediamo che abbiamo le informazioni sull'indirizzo IP delle macchine, ma non abbiamo indicazioni sulla porta.

Notate che nella finestra di Wireshark vengono riportati tutti i campi che compongono la struttura del pacchetto IP, ossia Header, lunghezza, Flag ecc.

Posizionamento di Wireshark nella rete

Nell’utilizzo del tool Wireshark, il posizionamento della cattura ha un’importanza determinante, in quanto in base al protocollo “sniffato” si può intercettare traffico solo in determinate zone; un esempio può essere fatto simulando una rete con un tool software chiamato GNS3 (www.gns3.com) che è un simulatore di reti, dove possiamo costruire un’architettura e simularne il funzionamento. In pratica sull’area centrale della finestra di lavoro si collocano i vari elementi componenti la rete (PC, hub, switch e router) e li si può configurare e collegare a piacimento (immagine seguente).

Costruita la rete si può cliccare col pulsante destro del mouse su un collegamento nella finestra di lavoro e si lancia, dal menu di Wireshark, il comando Start per avviare la cattura; questo apre la relativa finestra di Wireshark. Possiamo andare a fare lo stesso su altri punti. Per fare un esempio significativo ai fini della comprensione del concetto di posizionamento, riferendoci all’immagine precedente possiamo aprire due finestre di cattura su due rami che sono uno quello che collega il PC-2 sotto l’Ethernetswitch-2 e l’altro quello che connette Ethernetswitch-3 a PC-3. Si va poi ad aprire in GNS3 i rispettivi terminali dei PC selezionati e da uno si esegue il ping all’altro. A questo punto si vedrà l’esito del ping sul ramo del computer virtuale che l’ha inviato e il corrispondente traffico sul computer virtuale che è stato “pingato”.

Notate che se si va “sniffare” il traffico sulla connessione dell’altro PC sotto Ethermetswitch-3, vale a dire PC-4, trattandosi di una macchina sotto a uno switch si vedrà nulla, perché lo switch è un dispositivo intelligente e quindi non inoltra semplicemente i pacchetti, ma, avendo una tabella di inoltro interna degli indirizzi associati ai computer connessi, di conseguenza manda i dati del ping solo alla macchina destinataria.

Wireshark: analisi scansione di rete

Ritornando all’analisi del traffico, proviamo a vedere quello che succede quando si effettua una scansione di rete, ad esempio tipo SYN Scan (quella tipica di strumenti come NMAP), quindi una scansione relativamente più silenziosa di quella completa in cui viene completato il Three Way Handshake; quest’ultimo è l’iter di richiesta di comunicazione con un computer di rete tipico del protocollo TCP e si compone di tre fasi: il richiedente invia il SYN, il computer risponde con un SYN/ACK e il richiedenze ritorna l’ACK, a conferma che la comunicazione è stata instaurata.

Nel caso di un attaccante esterno alla rete che punta a una porta specifica del router, supponiamo la 22, il client invia il SYN + 22 (richiesta fatta sulla porta 22) e ci sono due differenti possibilità:

  • che effettivamente la porta 22 sia aperta e che quindi la macchina risponda ACK, perché quello che vuol fare la macchina in condizioni normali è risolvere il Three Way Handshake; l’attaccante risponde con un reset (RST) indicando alla macchina target di dimenticare la richiesta, per evitare che la scansione venga tracciata sulla rete (oggi esistono strumenti che comunque registrano anche questa transizione e identificano l’attacco),
  • che la porta 22 sia chiusa e in questo caso la macchina scansionata (target) risponde essa stessa con un RST, ovvero azzera il ciclo SYN SYN/ACK, ACK già descritto.

Notare che nel protocollo UDP non c'è questo scambio, quindi, a differenza del TCP, non offre garanzia sulla riuscita delle comunicazioni, tuttavia è molto più veloce.

Per testare la capacità di Wireshark di captare una scansione di rete tipo SYN Scan possiamo utilizzare un tool come NMAP (https://nmap.org/) e in esso andiamo a impostare, nell’interfaccia grafica del programma (Zenmap) l’indirizzo IP della macchina target e il comando relativo alla richiesta di scansione sulla porta da cui intendiamo passare. Nell’immagine seguente vediamo Zenmap con le impostazioni dell’IP address 192.168.56.101 (casella Target) e il comando (casella Command) nmap -sS -p7500 192.168.56.101.

Tale comando indica di eseguire l’attacco con Nmap passando dalla porta 7500, all’indirizzo IP specificato; la porta 7500 nel nostro caso è aperta e la scansione è passata, come confermato dall’immagine, dove vediamo scritto in verde:

7500/tcp open silhouette

in cui silhouette è il nom e del servizio correlato nel caso preso a riferimento, ma potrebbe essere qualsiasi altro servizio trovato sulla macchina scansionata.

Se la porta fosse stata chiusa e la scansione fallita, la scritta sarebbe apparsa in rosso, avrebbe riportato il nome della porta seguito da /tcp e da closed.

La situazione corrispondente trovata aprendo l’interfaccia utente di Wireshark, filtrata con il protocollo TCP, sarà quella mostrata nell’immagine seguente, dove vedete che è stata completata la sequenza Three Way Handshake.

Infatti abbiamo una riga blu con SYN, una grigia relativa a SYN, ACK e una rossa corrispondente a RST; quest’ultima è evidenziata in rosso perché è una condizione non ricercata (non è riuscita la comunicazione), in quanto solitamente chi inizia una richiesta di comunicazione risponde con ACK, che è il riconoscimento della procedura e dà il via alla comunicazione.

Se invece nell’interfaccia Zenscan fosse stato impartito un comando contenente una porta non aperta, tipo quello scritto qui di seguito:

nmap -sS -p7502 192.168.56.101

che riguarda la porta 7502 che supponiamo chiusa, Wireshark risponderebbe qualcosa come quello che vedete nell’immagine seguente.

Qui abbiamo solo due condizioni, ossia la solita SYN evidenziata in blu e la RST, ACK, questa volta evidenziata in rosso perché la porta è chiusa e la risposta al SYN è un reset (RST) che azzera la comunicazione, in quanto la stessa non è possibile.

Quelli descritti sono solo alcuni esempi delle funzionalità di Wireshark e delle possibilità che offre nel campo dell’analisi del traffico di rete; come vedete nell’ultimo esempio, il tool aiuta a riconoscere le anomalie evidenziandole in rosso, facilitando così il compito.