Probabilmente hai sentito parlare di ICMP e se sei solo un discreto esperto di tecnologia, probabilmente saprai (almeno) che ha qualcosa a che fare con Internet.
ICMP è in realtà un protocollo, molto simile a IP, TCP e UDP (di cui abbiamo discusso e spiegato in precedenza), quindi svolge un ruolo piuttosto importante nel buon funzionamento delle nostre connessioni Internet.
ICMP ha più a che fare con il modo in cui vengono rilevati e gestiti i problemi di connettività, ma non roviniamo troppo la nostra lezione. Continua a leggere se vuoi sapere cos'è l'ICMP e come ci aiuta a mantenere le nostre connessioni operative a livelli ottimali.
Cos'è l'ICMP?
L'Internet Control Message Protocol, noto ai più con il suo acronimo più amichevole ICMP, è un protocollo fondamentale per la risoluzione di vari problemi relativi alla connettività.
Questo protocollo viene utilizzato da un'ampia varietà di dispositivi di rete, inclusi, a titolo esemplificativo, router, modem e server per informare gli altri partecipanti alla rete di potenziali problemi di connettività.
Abbiamo menzionato sopra che ICMP è un protocollo proprio come TCP e UDP, ma a differenza di questi due, ICMP non viene generalmente utilizzato per facilitare lo scambio di dati tra i sistemi. Inoltre, non viene utilizzato frequentemente nelle app di rete dell'utente finale, a meno che non siano strumenti di diagnostica.
La definizione originale di ICMP è stata abbozzata da Jon Postel , che ha contribuito in modo massiccio e molte volte allo sviluppo di Internet, e il primo standard di ICMP è stato pubblicato nell'aprile 1981 in RFC 777 .
Ovviamente, la definizione iniziale ha subito molte modifiche per raggiungere la forma che conosciamo oggi. La forma stabile di questo protocollo è stata pubblicata 5 mesi dopo la sua definizione iniziale, nel settembre 1981, in RFC 792, ed è stata anche scritta da Postel.
Come funziona l'ICMP?
Per dirla in breve, ICMP viene utilizzato per la segnalazione degli errori determinando se i dati raggiungono o meno la destinazione prevista in tempi relativamente brevi.
In uno scenario di base, due dispositivi sono connessi tramite Internet e si scambiano informazioni attraverso ciò che chiamiamo pacchetti di dati o datagrammi. Quello che fa l'ICMP è generare errori e condividerli con il dispositivo che ha inviato i dati originali nel caso in cui i pacchetti non arrivassero mai a destinazione.
Ad esempio, se invii un pacchetto di dati che è semplicemente troppo grande per essere gestito dal router, il router prima rilascerà il pacchetto, quindi genererà un messaggio di errore che consente al dispositivo mittente che il suo pacchetto non ha mai raggiunto la destinazione a cui era diretto.
Tuttavia, questo è ciò che chiameremmo un'abilità passiva poiché non c'è assolutamente nulla che devi fare per ricevere questi messaggi di errore (se necessario). Come scoprirai a breve, ICMP ha anche un'utilità più attiva, su cui puoi fare affidamento per eseguire varie operazioni di risoluzione dei problemi di rete.
A differenza di TCP e UDP, ICMP non ha bisogno di un dispositivo da collegare per inviare un messaggio. In una connessione TCP, ad esempio, i dispositivi collegati devono eseguire un handshake in più fasi, dopodiché i dati possono essere trasferiti.
Con ICMP non è necessario stabilire una connessione; un messaggio può essere semplicemente inviato al posto di una connessione. Inoltre, un messaggio ICMP non richiede una porta a cui indirizzare il messaggio, rispetto a TCP e UDP, che utilizzano entrambe porte specifiche per instradare le informazioni. Non solo ICMP non richiede una porta, ma in realtà non consente di mirare a porte specifiche.
I messaggi ICMP sono trasportati da pacchetti IP ma non sono contenuti da essi. Invece, si affidano a questi pacchetti, poiché vengono generati solo se il loro vettore (cioè i pacchetti IP) non raggiunge mai la loro destinazione. Il più delle volte, le circostanze che hanno consentito la generazione di un pacchetto ICMP derivano dai dati disponibili nell'intestazione IP del pacchetto fallito.
Poiché ICMP include i dati dell'intestazione IP del pacchetto non riuscito, è possibile utilizzare strumenti di analisi di rete per determinare esattamente quali pacchetti IP non sono stati consegnati. Tuttavia, l'intestazione IP non è l'unico tipo di informazione trasportata dal pacchetto ICMP.
Un pacchetto ICMP contiene l'intestazione IP, seguita da un'intestazione ICMP e dai primi otto byte del payload.
- Intestazione IP : contiene dettagli sulla versione IP, gli indirizzi IP di origine e di destinazione, il numero di pacchetti inviati, il protocollo utilizzato, la lunghezza del pacchetto, il tempo di permanenza (TTL), i dati di sincronizzazione, nonché i numeri ID per particolari pacchetti di dati
- Intestazione ICMP : contiene un codice che aiuta a classificare l'errore, un sottocodice che facilita l'identificazione dell'errore offrendo una descrizione e un checksum
- Intestazione Transport Layer - primi otto byte del payload (trasferito tramite TCP o UDP)
Messaggi di controllo ICMP
Come accennato in precedenza, quando si verifica un errore, i valori nel primo campo dell'intestazione ICMP possono essere utilizzati per identificarlo. Questi tipi di errore, insieme al loro identificatore, sono i seguenti:
- 0 – Echo Reply – utilizzato per scopi di ping
- 3 – Destinazione irraggiungibile
- 5 – Messaggio di reindirizzamento – utilizzato per indicare la scelta di un percorso diverso
- 8 – Echo Request – usato per scopi di ping
- 9 – Annuncio del router: utilizzato dai router per annunciare che i loro indirizzi IP sono disponibili per il routing
- 10 – Richiesta del router: scoperta, richiesta o selezione del router
- 11 – Time Exceeded – TTL scaduto o tempo di rimontaggio superato
- 12 – Problema del parametro: intestazione IP errata – lunghezza errata, opzione richiesta mancante o errore indicato dal puntatore
- 13 – Marca temporale
- 14 – Risposta data/ora
- 41 – utilizzato per protocolli sperimentali di mobilità
- 42 – Richiesta eco estesa: richiede l'eco estesa
- 43 – Extended Echo Reply – risponde a 42 Extended Echo request
- 253 e 254 – sperimentale
Il campo TTL (Time to Live)
Il campo TTL è uno dei campi dell'intestazione IP che può (e spesso lo fa) generare un errore ICMP. Contiene un valore, che è il numero massimo di router che un pacchetto inviato può attraversare prima di raggiungere la sua destinazione finale.
Dopo che il pacchetto è stato elaborato da un router, questo valore diminuisce di uno e il processo continua fino a quando non accade una delle due cose: o il pacchetto raggiunge la sua destinazione, o il valore raggiunge lo zero, che di solito è seguito dal fatto che il router pacchetto e l'invio di un messaggio ICMP al mittente originale.
Quindi è ovvio che se un pacchetto viene eliminato perché il suo TTL ha raggiunto lo zero, non è a causa di dati danneggiati nell'intestazione o di problemi specifici del router. TTL è stato effettivamente progettato per impedire ai pacchetti non autorizzati di ostacolare le connessioni e ha portato alla creazione di uno strumento fondamentale per la risoluzione dei problemi di rete: Traceroute.
Utilizzo di ICMP nella diagnostica di rete
Come accennato in precedenza, ICMP può essere utilizzato con strumenti diagnostici per determinare il buon funzionamento di una connessione di rete. Potresti non sapere cosa sia ICMP prima di leggere la nostra guida, ma siamo certi che almeno hai sentito parlare di ping, la famosa utility di rete che ti permette di sapere se un host è raggiungibile o meno.
Bene, il ping è in realtà uno strumento importante che utilizza ICMP come spina dorsale. Traceroute è un altro buon esempio di strumenti che ci aiutano a diagnosticare e risolvere i problemi di connettività sulle nostre reti. Pathping, che è una combinazione di ping e traceroute, è un altro ottimo strumento basato su ICMP.
ping
Ping è uno strumento Windows integrato a cui è possibile accedere tramite CMD ed è uno degli strumenti più importanti che utilizza ICMP per risolvere potenziali errori di rete. Ping utilizza due dei codici nell'elenco sopra, 8 (richiesta echo) e 0 (risposta echo), per essere più specifici.
Ecco come appaiono due esempi di comandi ping :
ping 168.10.26.7
ping TipsWebTech360.com
Quando lo esegui, ping invierà un pacchetto ICMP con un codice 8 nel campo del tipo e aspetterà pazientemente la risposta di tipo 0. Dopo l'arrivo della risposta, ping determinerà il tempo tra la richiesta (8) e la sua risposta (0) e restituirà il valore del round trip espresso in millisecondi.
Abbiamo già stabilito che i pacchetti ICMP vengono generalmente generati e inviati a seguito di un errore. Tuttavia, il pacchetto di richiesta (tipo 8) non ha bisogno di un errore per essere inviato, quindi ping può anche ricevere la risposta (0) indietro senza generare un errore.
Come probabilmente hai capito dai nostri esempi sopra, puoi eseguire il ping di un indirizzo IP o di un host. Inoltre, ping ha una miriade di opzioni aggiuntive che puoi utilizzare per una risoluzione dei problemi più avanzata semplicemente aggiungendo l'opzione al comando.
Ad esempio, l'utilizzo dell'opzione -4 forzerà il ping a utilizzare esclusivamente IPv4 , mentre -6 utilizzerà solo indirizzi IPv6 . Guarda lo screenshot qui sotto per un elenco completo di opzioni che puoi aggiungere al tuo comando ping .
Un malinteso comune sul ping è che è possibile utilizzarlo per testare la disponibilità di determinate porte su sistemi mirati. Per farla breve, non puoi farlo, poiché ICMP non esegue alcun vero scambio di messaggi tra host, a differenza di TCP o UDP, e non richiede l'utilizzo della porta.
Le app per lo scanner delle porte utilizzano pacchetti TCP o UDP per determinare se porte specifiche sono aperte e accessibili. Gli strumenti inviano pacchetti TCP o UDP a una porta specifica e generano un messaggio ICMP di tipo 3 (host non raggiungibile) sottotipo 3 (porta di destinazione non raggiungibile) se tale porta non è attiva.
Traceroute
Proprio come il ping, traceroute è un altro strumento di risoluzione dei problemi di rete che ogni amministratore di rete dovrebbe non solo avere nella sua cintura degli strumenti, ma anche padroneggiare. Ciò che fa traceroute è aiutarti a mappare un percorso di tutti i dispositivi che attraversa la tua connessione fino a raggiungere la destinazione specificata.
Quindi, se sei interessato a trovare l'intero percorso tra te e un'altra macchina, traceroute può darti esattamente queste informazioni. Questo strumento può essere utilizzato anche per determinare se c'è qualcosa che non va lungo il percorso seguito dalla tua connessione.
Se, ad esempio, c'è un dispositivo sul percorso di connessione che ha difficoltà a inoltrare i tuoi pacchetti verso la destinazione prevista, traceroute ti farà sapere quale router ti dà una risposta ritardata (o nessuna).
Il modo in cui funziona traceroute consiste nell'inviare un pacchetto con un valore TTL ( Time To Live ) pari a 0, che verrà automaticamente eliminato dal primo router che incontra, come spiegato sopra nella sezione TTL. Dopo aver eliminato il pacchetto, il router genera un pacchetto ICMP e lo invia a traceroute.
Il programma estrae l'indirizzo di origine del pacchetto e il tempo impiegato dal pacchetto per tornare indietro, quindi invia un altro pacchetto con un valore TTL di 1 . Dopo che il secondo pacchetto ha attraversato il gateway, il suo TTL diminuisce di 1 (diventa 0 ) e si dirige al secondo router, che, rilevando il valore TTL zero, elimina il pacchetto e invia un pacchetto ICMP a traceroute.
Ogni volta che traceroute riceve un pacchetto ICMP, aumenta il TTL di uno e lo rimanda sulla sua traccia, e questa operazione continua fino a quando non viene raggiunta la destinazione specificata, o traceroute esaurisce gli hop. Per impostazione predefinita, Windows alloca una quantità massima di 30 hop, ma è possibile aumentarla specificandola nella sintassi del comando.
Ecco un esempio di come eseguire traceroute in CMD:
tracert TipsWebTech360.com
Proprio come ping, traceroute ha una serie di opzioni che puoi aggiungere alla sintassi se vuoi essere più specifico. Puoi forzare IPv4 o IPv6, ma puoi anche saltare la risoluzione degli indirizzi nei nomi host e aumentare il numero massimo di hop per cercare il target. Dai un'occhiata al nostro screenshot qui sotto per un esempio di utilizzo di traceroute e un elenco di tutte le opzioni che puoi utilizzare con esso.
Vale la pena ricordare, tuttavia, che traceroute può fornirti solo informazioni in tempo reale. Pertanto, se hai riscontrato un rallentamento nella tua connessione e desideri utilizzare questo strumento per indagare su di esso, potresti ricevere risultati fuorvianti poiché il percorso potrebbe essere cambiato nel frattempo.
Sebbene sia possibile forzare traceroute a seguire un determinato percorso utilizzando l' opzione -j e aggiungendo manualmente gli indirizzi del router, ciò implica che si è già a conoscenza del percorso errato. Questo è in qualche modo paradossale, dal momento che la scoperta del percorso in primo luogo richiede l'utilizzo di traceroute senza l' opzione -j .
Se non sei esattamente un fan dell'utilizzo degli strumenti CLI (Command Line Interface) e preferisci di gran lunga un approccio GUI (Graphical User Interface), ci sono molte soluzioni software di terze parti per traceroute. Traceroute NG di SolarWinds è uno dei migliori esempi a cui potremmo pensare. Abbiamo detto che è completamente gratuito ?
percorso
Come accennato in precedenza, il pathping completa la triade di strumenti indispensabili per la risoluzione dei problemi di rete. Dal punto di vista della funzionalità, il patphing è una combinazione di ping e traceroute, poiché utilizza tutti e tre i tipi di messaggio sfruttati dal suddetto duo: richiesta echo (8), risposta echo (0) e time superato (11).
Nella maggior parte dei casi, il percorso viene utilizzato per identificare i nodi di connessione interessati da latenza elevata e perdita di pacchetti. Certo, potresti usare traceroute e quindi eseguire il ping per ottenere questi dettagli, ma avere le funzionalità di entrambi gli strumenti con un singolo comando è molto più conveniente per gli amministratori di rete.
Uno degli svantaggi dell'utilizzo del percorso è che può essere necessario un po' di tempo per completare la sua richiesta (25 secondi per hop per produrre statistiche di ping). Pathping ti mostrerà sia il percorso verso la destinazione specificata sia i tempi di andata e ritorno per raggiungerla.
Al contrario di ping e traceroute, il pathping eseguirà ripetutamente il ping di ogni router nel suo percorso, il che ne aumenta l'efficacia complessiva. Tuttavia, se incontra un router che ha disabilitato le sue funzioni ICMP, pathping interromperà la sua richiesta di informazioni, mentre ping può ancora raggiungere un router senza funzionalità ICMP e traceroute passerà al router successivo nel suo percorso e visualizzerà una stringa di asterischi per qualsiasi router non ICMP.
Pathping è uno strumento integrato di Windows ed è stato così da Windows NT, quindi puoi usarlo come faresti con il ping o il tracert: tramite una riga di comando.
Ecco un esempio di come è possibile utilizzare il percorso:
pathping TipsWebTech360.com -h 40 -w 2 -4
Il comando sopra ti mostrerà il percorso verso il nostro sito Web, nonché i tempi di andata e ritorno per ciascun router nel percorso di connessione. Inoltre, le opzioni che abbiamo usato nel nostro esempio aumenteranno il valore di hop massimo predefinito da 30 a 40, aggiungeranno un valore di timeout di 2 millisecondi per ogni risposta e forzeranno IPv4.
Dai un'occhiata al nostro screenshot qui sotto per una guida rapida all'utilizzo del percorso e un elenco di opzioni che puoi aggiungere alla sintassi del comando.
Applicabilità dell'ICMP negli attacchi informatici
Sebbene la gamma di ICMP faciliti molte operazioni di risoluzione dei problemi di connettività, questo protocollo può anche essere sfruttato per eseguire vari attacchi informatici. Se sei stato abbastanza a lungo su Internet, probabilmente hai sentito parlare di ping flood, DDoS, Ping of Death, Smurf Attacks o tunnel ICMP.
Mentre alcuni di questi attacchi al giorno d'oggi fungono da PoC (Proof of Concept), altri sono ancora utilizzati da agenti dannosi per danneggiare i sistemi abilitati a Internet o da esperti di sicurezza per testare le vulnerabilità.
Inizieremo con il più popolare, che è il ping flood (ancora ampiamente utilizzato, tra l'altro), e spiegheremo come utilizza l'ICMP per il male.
ping alluvione
L'uso di ping per inviare richieste echo e attendere risposte echo sembra abbastanza innocuo. Ma cosa succede se, invece di aspettare la risposta, ping inviasse solo un'enorme quantità di richieste echo ICMP? In questo classico scenario di attacco DoS (Denial of Service) , il dispositivo di destinazione subirà un grave ritardo e persino interruzioni della connessione se l'attacco ha successo.
Questo attacco è più efficace se l'attaccante ha più larghezza di banda della vittima e se la vittima invia risposte echo ICMP alla moltitudine di richieste che riceve, consumando così larghezza di banda in entrata e in uscita.
L'attaccante può specificare un'opzione "flood" per il comando ping, ma questa opzione è piuttosto rara e non è incorporata negli strumenti integrati dei sistemi operativi. Ad esempio, il ping di Windows non ha un'opzione "flood" , ma ci sono alcuni strumenti di terze parti che integrano questa funzione.
Un attacco ping flood può diventare davvero catastrofico se si trasforma in un attacco DDoS (Distributed Denial of Service) . Un attacco DDoS utilizza più sistemi per bersagliarne uno, travolgendolo così con pacchetti provenienti da più posizioni contemporaneamente.
Un modo infallibile per proteggersi da un ping flood è disabilitare le funzioni ICMP sul router. È inoltre possibile installare un firewall per app Web se è necessario proteggere un server Web da tali attacchi.
Ping di morte
Questo attacco comporta l'invio di un ping non valido a un computer di destinazione. In questo tipo di attacco, il pacchetto inviato conterrà una quantità di filler nel payload troppo grande per essere elaborata tutta in una volta.
Tuttavia, prima di essere inviato, questo ping dannoso verrà frammentato in parti più piccole, poiché trasmetterlo nella sua forma originale e assemblata sarebbe impossibile per il processore del protocollo Internet .
Il computer preso di mira dal Ping of Death riceverà i pezzi e tenterà di riassemblarli prima di inviare il pacchetto dannoso all'applicazione di destinazione. Ecco dove si verifica il danno: se il pacchetto assemblato è più lungo della memoria disponibile nel computer di destinazione, il riassemblaggio potrebbe causare un buffer overflow , arresti anomali del sistema e potrebbe persino consentire l'iniezione di codice dannoso nella macchina interessata.
Il lato positivo è che Ping of Death non è più una novità, poiché molti sistemi di sicurezza lo riconoscono senza intoppi e lo bloccano con successo.
Puffo attacco
A differenza dei precedenti due tipi di attacco, un attacco Smurf non attacca direttamente un dispositivo ma utilizza altri dispositivi sulla stessa rete per coordinare un attacco DoS distribuito (un DDoS ) verso una singola macchina.
L'attaccante ha bisogno dell'indirizzo IP del suo obiettivo e dell'indirizzo di trasmissione IP della rete di destinazione. L'aggressore aggiunge l'indirizzo IP della vittima ai pacchetti ICMP (lo falsifica) e quindi li trasmette alla rete del bersaglio utilizzando un indirizzo di trasmissione IP .
In risposta, la maggior parte dei dispositivi collegati alla stessa rete invierà una risposta all'indirizzo IP di origine (sostituito per riflettere la macchina di destinazione), che potrebbe essere sopraffatto dal traffico se la rete è abbastanza grande (ha un numero enorme di dispositivi connessi).
Di conseguenza, il computer del bersaglio può essere rallentato e persino reso inutilizzabile per un determinato periodo di tempo, se l'attacco è abbastanza grave.
Come prima, puoi evitare un attacco Smurf semplicemente disattivando le funzionalità ICMP del tuo router gateway. Un altro modo per ottenere protezione è inserire nella lista nera le richieste provenienti dall'indirizzo IP di trasmissione della rete.
Attacco di fitte
Un attacco Twinge è guidato da un programma che invia una marea di pacchetti ICMP contraffatti per danneggiare un sistema. I pacchetti ICMP sono falsi poiché utilizzano tutti indirizzi IP falsi casuali, ma in realtà i pacchetti provengono da un'unica fonte (la macchina dell'attaccante).
Secondo quanto riferito, i pacchetti ICMP contengono una firma che può rivelare il fatto che l'attacco non è venuto da più fonti, ma è stato invece coordinato con l'aiuto di Twinge.
Sebbene questo attacco possa essere disastroso se pianificato correttamente, disattivare ICMP sul router del gateway e installare un firewall o un sistema di rilevamento delle intrusioni può aiutarti a proteggerti.
Tunnel ICMP
Per impostazione predefinita, i router scansionano solo le intestazioni dei pacchetti ICMP, rendendo possibile che i pacchetti che contengono effettivamente molti dati aggiuntivi possano facilmente aggirare il rilevamento purché contengano una sezione ICMP. Questo tipo di attacco è chiamato ping o tunnel ICMP. Fortunatamente, le utility di ping standard non sono in grado di eseguire il tunneling attraverso firewall e gateway, poiché i tunnel ICMP devono essere adattati con attenzione alle reti a cui sono destinati.
Numerose sono invece le risorse online che gli aggressori possono utilizzare ed emulare tale tunnel, concedendosi il libero passaggio attraverso reti private e macchine ad esso collegate. Come in precedenza, disattivare le funzionalità ICMP sul router del gateway, utilizzare i firewall e applicare rigide regole di blacklist può essere fondamentale per evitare questo tipo di attacco.
ICMP – Conclusione
Tutto considerato, sebbene ICMP non sia utilizzato per scambiare informazioni tra dispositivi connessi su una determinata rete come fanno TCP e UDP, ha ancora un enorme campo di applicabilità. In effetti, ICMP è uno dei protocolli fondamentali più flessibili che aiutano a mantenere Internet come lo conosciamo.
A parte il suo scopo fondamentale di far sapere a un sistema quando c'è un'ostruzione nella sua connessione a un altro sistema, ICMP è la spina dorsale di numerosi strumenti di risoluzione dei problemi come ping, pathping e traceroute. Sfortunatamente, aiuta anche gli agenti dannosi a fornire un'ampia gamma di attacchi DoS e di infiltrazione a macchine vulnerabili.