networking

ICMP: Cos’è, Come Funziona e Come Sfruttarlo in un Pentest

ICMP: Cos’è, Come Funziona e Come Sfruttarlo in un Pentest

Scopri cos’è ICMP, come funzionano ping e traceroute e perché è cruciale nel pentesting: host discovery, ICMP tunneling, redirect, fingerprinting, detection e difese.

  • Pubblicato il 2026-03-23
  • Tempo di lettura: 8 min

ICMP è il protocollo di diagnostica di IP. Capire cos’è ICMP e come funziona significa capire ping, traceroute, e una serie di tecniche offensive che vanno dall’host discovery all’evasion, fino ai tunnel nascosti dentro pacchetti apparentemente innocui. Spesso sottovalutato, ICMP è uno strumento potente sia per il difensore che per l’attaccante.


Cos’è ICMP #

ICMP (Internet Control Message Protocol) è un protocollo di supporto a IP, definito nell’RFC 792 del 1981. Opera al livello 3 del modello OSI, ma tecnicamente è trasportato dentro pacchetti IP (protocol number 1).

Il suo scopo principale è comunicare informazioni di errore e diagnostica tra host e router: notificare che un host non è raggiungibile, che un pacchetto ha esaurito il TTL, che un porto è chiuso, o semplicemente verificare la connettività.

ICMP non trasporta dati applicativi. Non è un protocollo di trasporto: non ha porte, non ha sessioni, non è basato su connessione. È uno strumento di segnalazione interno all’infrastruttura IP.

IPv6 usa ICMPv6 (RFC 4443), che estende ICMP con funzioni aggiuntive tra cui il Neighbor Discovery Protocol (NDP), sostituto di ARP in IPv6.


Come funziona ICMP #

Struttura del messaggio ICMP #

Ogni messaggio ICMP è composto da:

CampoDimensioneDescrizione
Type1 byteCategoria del messaggio
Code1 byteSottocategoria del tipo
Checksum2 byteChecksum del messaggio ICMP
Rest of Header4 byteDipende dal tipo/code
DatavariabilePayload (spesso i primi 8 byte dell’header IP originale)

I tipi ICMP più importanti #

TypeCodeNomeDescrizione
00Echo ReplyRisposta a ping
30-15Destination UnreachableHost/rete/porta irraggiungibile
50-3RedirectSuggerisce una route migliore
80Echo RequestPing
110-1Time ExceededTTL esaurito (base di traceroute)
120-1Parameter ProblemHeader IP malformato
13/140Timestamp Request/ReplySincronizzazione oraria

Come funziona il ping #

ping usa ICMP Echo Request (Type 8) e Echo Reply (Type 0):

  1. Il mittente invia un pacchetto ICMP Type 8 con un identificatore e un numero di sequenza
  2. Il destinatario risponde con ICMP Type 0, copiando i dati del payload
  3. Il mittente calcola RTT (Round Trip Time) dalla differenza temporale

Il campo data del ping può contenere payload arbitrario — sfruttato nei tunnel ICMP.

Come funziona traceroute #

Traceroute sfrutta ICMP Time Exceeded (Type 11):

  1. Invia un pacchetto con TTL=1: il primo router lo scarta e risponde con ICMP Time Exceeded, rivelando il suo IP
  2. Invia con TTL=2: il secondo router risponde
  3. Continua incrementando il TTL finché non raggiunge il target, che risponde con ICMP Echo Reply (o un ICMP Destination Unreachable se usa UDP)

ICMP Destination Unreachable #

Quando un pacchetto non può essere consegnato, il router o l’host coinvolto invia ICMP Type 3 al mittente. I codici principali:

  • Code 0: Network Unreachable — nessuna route per la rete
  • Code 1: Host Unreachable — host non risponde
  • Code 3: Port Unreachable — porta UDP non aperta (usato da Nmap per UDP scan)
  • Code 4: Fragmentation Needed — pacchetto troppo grande, DF bit attivo
  • Code 13: Communication Administratively Prohibited — filtrato da firewall

Questi codici sono informativi per un pentester: rivelano se un host esiste, se è filtrato o se è down.


Dove viene usato ICMP nelle reti #

ICMP è presente ovunque ci sia IP:

  • Diagnostica di rete: ping e traceroute sono gli strumenti di troubleshooting più usati al mondo
  • Path MTU Discovery: usa ICMP Type 3 Code 4 per trovare la MTU massima lungo un percorso
  • Redirect routing: i router usano ICMP Redirect per ottimizzare le route degli host
  • Monitoring: sistemi di monitoraggio come Nagios, Zabbix, e Prometheus usano ICMP per verificare la raggiungibilità degli host
  • Ambienti cloud: i load balancer e i health check usano ICMP per verificare la disponibilità dei backend

Perché ICMP è importante in cybersecurity #

ICMP è spesso sottovalutato in termini di rischio. In realtà è:

  • Un vettore di reconnaissance: il comportamento ICMP di un host rivela se è attivo, che OS usa, e informazioni sulla topologia della rete
  • Un canale covert: il payload di ICMP Echo può trasportare dati arbitrari, creando tunnel nascosti attraverso firewall che permettono ICMP
  • Un vettore DoS: attacchi come ICMP flood, Smurf attack e Ping of Death sfruttano ICMP
  • Una fonte di informazioni sui filtri: il tipo di risposta ICMP (o la sua assenza) rivela la politica di filtering di un firewall

Conoscere ICMP a fondo significa saper sfruttare queste caratteristiche sia in attacco che in difesa. Per il protocollo su cui ICMP viaggia, vedi IP Internet Protocol.


ICMP in un engagement di pentesting #

Host discovery con ICMP #

Il primo passo in un engagement è identificare gli host attivi. ICMP è uno dei metodi più rapidi:

bash
# Ping sweep con nmap
nmap -sn -PE 192.168.1.0/24

# Ping sweep con fping
fping -a -g 192.168.1.0/24 2>/dev/null

# Singolo ping con output minimale
ping -c 1 -W 1 192.168.1.1

Su molte reti enterprise, ICMP Echo è bloccato verso gli host ma i router rispondono ancora. Combinare ICMP con ARP scan per massimizzare la copertura.

OS fingerprinting tramite ICMP #

Il comportamento ICMP varia tra sistemi operativi diversi. Nmap usa queste differenze per il fingerprinting:

  • TTL iniziale: Linux usa 64, Windows 128, Cisco 255
  • DF bit nell’Echo Reply: comportamento diverso per OS
  • Dimensione e contenuto del payload Echo Reply
  • Risposta a Type 13 (Timestamp) e Type 17 (Address Mask Request): alcuni OS rispondono, altri no
bash
nmap -O <target>   # OS detection — usa anche ICMP

Traceroute per mappare la topologia #

Mappare i router tra te e il target rivela firewall intermedi, load balancer, e dispositivi di rete:

bash
traceroute -n <target>
traceroute -T -p 443 <target>    # TCP SYN su porta 443 (bypassa filtri ICMP/UDP)
traceroute -I <target>           # ICMP Echo invece di UDP (default su Windows)

Un hop che non risponde ma il successivo sì indica un dispositivo che filtra ICMP ma forwarda comunque il traffico — tipico di firewall.

Identificare i filtri tramite ICMP Unreachable #

Le risposte ICMP Destination Unreachable rivelano la politica di filtering:

  • No risposta: host down, filtrato silenziosamente, o ICMP bloccato
  • Code 1 (Host Unreachable): host non raggiungibile ma la rete esiste
  • Code 3 (Port Unreachable): porta UDP chiusa — conferma che l’host è attivo
  • Code 13 (Admin Prohibited): firewall che risponde esplicitamente — rivela la sua presenza

ICMP Tunnel: covert channel #

I tunnel ICMP usano il campo payload dell’Echo Request/Reply per trasportare dati arbitrari attraverso firewall che permettono ICMP ma bloccano TCP/UDP. Strumenti come ptunnel o icmptunnel permettono di stabilire connessioni TCP attraverso ICMP:

bash
# Server (sul target o su un server esterno)
ptunnel -x password

# Client (sull'attaccante)
ptunnel -p <server_ip> -lp 8000 -da <final_target> -dp 22 -x password
ssh -p 8000 user@localhost

Risultato: SSH tunnel attraverso ICMP, spesso non rilevato da firewall che analizzano solo porte TCP/UDP.


Attacchi e abusi possibili su ICMP #

ICMP Flood (DoS) #

Inviare una quantità massiva di Echo Request verso un target per saturare la banda o esaurire le risorse di elaborazione. Richiede banda significativa o IP spoofing per amplificare.

bash
hping3 -1 --flood <target>

Smurf Attack (storico) #

Classico attacco DDoS amplificato: invia Echo Request con indirizzo sorgente spoofato (quello della vittima) all’indirizzo broadcast di una rete. Tutti gli host della rete rispondono all’Echo Request, sommergendo la vittima con le risposte. Mitigato in reti moderne (broadcast non vengono instradati), ma ancora rilevante in reti mal configurate.

Ping of Death (storico) #

Frammentare un pacchetto ICMP di dimensioni superiori a 65535 byte causava overflow e crash del kernel su sistemi vecchi. Completamente patchato, ma interessante come esempio di attacco su frammentazione IP.

ICMP Redirect Attack #

Inviare messaggi ICMP Redirect falsi agli host per modificare le loro tabelle di routing, reindirizzando il traffico verso un gateway controllato dall’attaccante. Tecnica di man-in-the-middle che non richiede ARP spoofing.

python
from scapy.all import *
# ICMP Redirect: dici all'host che la route migliore per X passa per il tuo IP
send(IP(src=gateway_ip, dst=victim_ip) /
     ICMP(type=5, code=1, gw=attacker_ip) /
     IP(src=victim_ip, dst=target_ip) /
     UDP())

ICMP Covert Channel #

Come descritto nella sezione pentesting: usare il payload ICMP per estrarre dati da reti con firewall restrittivi, comunicare con implant C2, o bypassare controlli di rete.


Esempi pratici con ICMP in laboratorio #

Analisi ICMP completa con tcpdump #

bash
tcpdump -i eth0 -nn icmp -v

Mostra type, code, TTL, e payload di ogni messaggio ICMP.

Costruire messaggi ICMP personalizzati con Scapy #

python
from scapy.all import *

# Echo Request standard
send(IP(dst="192.168.1.1") / ICMP())

# Echo Request con payload custom
send(IP(dst="192.168.1.1") / ICMP() / "HackITA payload test")

# ICMP con TTL modificato
send(IP(dst="192.168.1.1", ttl=5) / ICMP())

# Visualizzare la risposta
ans = sr1(IP(dst="192.168.1.1") / ICMP(), timeout=2)
ans.show()

Analisi in Wireshark #

Filtri utili:

text
icmp                              # Tutto il traffico ICMP
icmp.type == 3                    # Destination Unreachable
icmp.type == 11                   # Time Exceeded (traceroute)
icmp.type == 8 || icmp.type == 0  # Echo Request e Reply (ping)
icmp.code == 13                   # Admin Prohibited (firewall)

hping3 per ICMP personalizzato #

bash
# Ping con payload custom
hping3 -1 -d 100 192.168.1.1

# Flood
hping3 -1 --flood 192.168.1.1

# Traceroute ICMP
hping3 -1 --traceroute 192.168.1.1

Detection e difesa ICMP #

Un difensore che monitora il traffico ICMP può rilevare:

  • ICMP flood: volume anomalo di Echo Request da uno o più sorgenti
  • ICMP Echo con payload insolito: dimensioni o contenuto non standard possono indicare un tunnel
  • ICMP Redirect non attesi: nessun router dovrebbe inviare Redirect verso host normali in una rete ben configurata
  • Echo Request verso broadcast: potenziale Smurf attack in preparazione
  • Traceroute aggressivi: sequenze di Time Exceeded con TTL incrementale da un singolo IP
  • ICMP Timestamp/Address Mask Request: probe di fingerprinting OS

Hardening e mitigazioni ICMP #

Filtrare ICMP selettivamente (non bloccare tutto) #

Bloccare tutto ICMP rompe Path MTU Discovery e degrada il troubleshooting. La policy corretta è selettiva:

Permettere:

  • Echo Reply in entrata (risposte al tuo ping)
  • Destination Unreachable (necessario per PMTUD)
  • Time Exceeded (necessario per traceroute)

Bloccare o limitare:

  • Echo Request in entrata da Internet (se non necessario)
  • ICMP Redirect (quasi mai legittimo dagli host)
  • Timestamp Request/Reply (fingerprinting)
  • Address Mask Request/Reply (obsoleto)

Rate limiting su ICMP #

text
# Cisco — rate limit ICMP unreachable
ip icmp rate-limit unreachable 1000

# Linux — iptables
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 5 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Disabilitare ICMP Redirect sugli host #

bash
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0

Monitorare il payload ICMP #

IDS/IPS come Suricata possono analizzare il payload dei pacchetti ICMP per rilevare tunnel e pattern anomali. Regole Suricata per tunnel ICMP sono disponibili nel ruleset ET (Emerging Threats).


Errori comuni su ICMP #

“Bloccare tutto ICMP migliora la sicurezza” Falso. Bloccare ICMP Destination Unreachable rompe Path MTU Discovery, causando problemi di performance o connettività. Bloccare Time Exceeded impedisce traceroute. La policy corretta è filtrare selettivamente, non bloccare tutto.

“ICMP non può trasportare dati” Tecnicamente può. Il campo payload di Echo Request/Reply non è né verificato né limitato per dimensione (fino all’MTU). I tunnel ICMP lo sfruttano da decenni.

“Un host che non risponde al ping non esiste” Falso. Molti firewall bloccano ICMP Echo ma lasciano passare TCP. Un host può essere attivo e non rispondere al ping. Usare scan combinati (Nmap con -Pn se necessario).

“ICMP è solo per il ping” No. ICMP include tipi per Redirect, Time Exceeded, Destination Unreachable, Timestamp, e altri. Traceroute stesso è basato interamente su ICMP.


FAQ su ICMP #

Cos’è ICMP e a cosa serve? ICMP (Internet Control Message Protocol) è un protocollo di supporto a IP che gestisce messaggi di errore e diagnostica nella rete. Permette agli host e ai router di comunicare problemi di consegna, TTL esaurito, porte irraggiungibili, e di verificare la connettività tramite ping.

Come funziona il ping? Ping invia un messaggio ICMP Echo Request (Type 8) al target. Se il target è raggiungibile e non filtra ICMP, risponde con un Echo Reply (Type 0). Il mittente misura il tempo tra invio e risposta per calcolare la latenza (RTT).

Come funziona traceroute con ICMP? Traceroute invia pacchetti con TTL incrementale. Il primo router decrementa il TTL a 0 e risponde con ICMP Time Exceeded, rivelando il suo IP. Il processo si ripete con TTL crescente finché si raggiunge il target, mappando ogni hop lungo il percorso.

Cos’è un tunnel ICMP? Un tunnel ICMP usa il payload dei messaggi Echo Request/Reply per trasportare dati arbitrari. Permette di comunicare attraverso firewall che bloccano TCP e UDP ma permettono ICMP. Tool come ptunnel implementano questo meccanismo.

È sicuro bloccare tutto il traffico ICMP sul firewall? No. Bloccare selettivamente è la policy corretta. Alcuni tipi ICMP (Destination Unreachable, Time Exceeded) sono necessari per il corretto funzionamento della rete e per il Path MTU Discovery. Bloccarli causa problemi di connettività.


Conclusione su ICMP #

ICMP è molto più di ping e traceroute. È un protocollo che rivela informazioni sulla topologia di rete, sul comportamento dei firewall, e sull’OS degli host — tutto tramite osservazione passiva o probe minimali.

In un engagement, ICMP è il primo strumento di reconnaissance: host discovery, fingerprinting, mappatura della topologia, identificazione dei filtri. E quando le porte TCP/UDP sono chiuse o filtrate, un tunnel ICMP può essere l’unica via di comunicazione disponibile.

Conoscerlo a fondo significa sapere quando usarlo, come interpretarne le risposte, e come difendersi dagli usi offensivi che sfruttano la sua apparente innocuità.

Approfondisci i protocolli correlati:

Riferimento ufficiale: RFC 792 — Internet Control Message Protocol


Le vulnerabilità basate su ICMP sono spesso presenti in reti che sembrano sicure. Se vuoi un assessment che vada oltre la superficie, scopri i servizi su hackita.it/servizi.

HackITA è un progetto indipendente tenuto in vita dalla community: hackita.it/supporto

#icmp #ping

DIVENTA PARTE DELL’ÉLITE DELL’HACKING ETICO.

Accedi a risorse avanzate, lab esclusivi e strategie usate dai veri professionisti della cybersecurity.

Non sono un robot

Iscrivendoti accetti di ricevere la newsletter di HACKITA. Ti puoi disiscrivere in qualsiasi momento.