TTL et ICMP : identifier l'OS source et compter les sauts réseau
Le TTL (Time To Live) est un champ de 8 bits dans l’en-tête IP. Il sert à éviter qu’un paquet tourne indéfiniment sur le réseau en cas de boucle de routage. Chaque routeur traversé décrémente sa valeur de 1. Quand il atteint 0, le paquet est abandonné et le routeur retourne un message ICMP Time Exceeded à l’expéditeur.
Ce mécanisme, conçu pour la robustesse réseau, révèle aussi des informations exploitables en audit.
Fonctionnement du TTL
Section titled “Fonctionnement du TTL”Source (TTL=64) │ ▼ [Routeur 1] → TTL devient 63 │ ▼ [Routeur 2] → TTL devient 62 │ ▼ [Routeur 3] → TTL devient 61 │ ▼Destination reçoit le paquet avec TTL=61Si le TTL atteint 0 avant d’arriver à destination :
[Routeur N] → TTL = 0 → paquet abandonné → ICMP Time Exceeded envoyé à la sourceC’est sur ce principe que fonctionne traceroute : il envoie des paquets avec TTL=1, puis TTL=2, etc., et collecte les ICMP Time Exceeded de chaque routeur pour cartographier le chemin.
Valeurs TTL de départ par système d’exploitation
Section titled “Valeurs TTL de départ par système d’exploitation”Chaque OS initialise le TTL à une valeur par défaut connue :
| Système d’exploitation | TTL de départ |
|---|---|
| Linux / Android | 64 |
| Windows | 128 |
| macOS / iOS | 64 |
| Cisco IOS (équipements réseau) | 255 |
| Solaris / AIX | 255 |
| FreeBSD | 64 |
Ces valeurs sont des constantes documentées — elles n’ont pas changé depuis des décennies.
Déduire le nombre de sauts et l’OS source
Section titled “Déduire le nombre de sauts et l’OS source”En observant le TTL d’un paquet reçu, on peut remonter à la valeur d’origine et calculer le nombre de sauts traversés.
Exemple : un paquet arrive avec TTL=54.
Les candidats possibles :
- Départ à 64 (Linux/macOS) → 64 − 54 = 10 sauts
- Départ à 128 (Windows) → 128 − 54 = 74 sauts (peu probable sur un LAN)
- Départ à 255 (Cisco) → 255 − 54 = 201 sauts (impossible sur Internet)
Le TTL=54 avec une valeur d’origine de 64 indique une machine Linux ou macOS à 10 sauts.
Autre exemple : TTL=118 dans une réponse.
- Départ à 128 (Windows) → 128 − 118 = 10 sauts
- Départ à 64 → TTL reçu supérieur au TTL de départ : impossible
La source est Windows à 10 sauts.
Lire le TTL dans Wireshark
Section titled “Lire le TTL dans Wireshark”Ajouter une colonne TTL permanente
Section titled “Ajouter une colonne TTL permanente”Pour afficher le TTL sur chaque ligne de la liste de paquets :
- Clic droit sur un paquet dans la liste
- IPv4 → Time to Live
- Apply as Column
La colonne TTL apparaît dans la liste et persiste entre les sessions.
Filtrer par valeur de TTL
Section titled “Filtrer par valeur de TTL”# Afficher uniquement les paquets avec un TTL inférieur à 10 (proches de l'expiration)ip.ttl < 10
# Afficher les paquets ICMP Time Exceeded (TTL expiré en transit)icmp.type == 11
# Afficher les ping (ICMP Echo Request / Echo Reply)icmp.type == 8 || icmp.type == 0
# Filtrer les paquets d'une source avec un TTL précisip.src == 192.168.1.1 && ip.ttl == 64Lire le TTL dans le détail d’un paquet
Section titled “Lire le TTL dans le détail d’un paquet”En déroulant Internet Protocol Version 4 dans le panneau de détail :
Internet Protocol Version 4 Version: 4 Header Length: 20 bytes ... Time to Live: 54 ← valeur observée à la réception Protocol: ICMP (1) Source Address: 203.0.113.45 Destination Address: 192.168.1.10Utiliser le TTL pour qualifier une cible
Section titled “Utiliser le TTL pour qualifier une cible”Sans aucun outil de fingerprinting dédié, un simple ping suffit à orienter l’identification de l’OS :
ping 192.168.1.100PING 192.168.1.100: 64 bytes of data64 bytes from 192.168.1.100: icmp_seq=0 ttl=128 time=1.2 msTTL=128 reçu, et la cible est sur le LAN local (0 ou 1 saut) → Windows.
ping 10.0.0.564 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=0.8 msTTL=64 sur le LAN → Linux, macOS, Android ou FreeBSD.
Traceroute et TTL
Section titled “Traceroute et TTL”traceroute exploite directement le TTL pour cartographier le chemin réseau :
# Linux / macOStraceroute 8.8.8.8
# Windowstracert 8.8.8.8traceroute to 8.8.8.8, 30 hops max 1 192.168.1.1 1.2 ms ← routeur local (TTL=1 expiré ici) 2 10.0.0.1 5.4 ms ← FAI 3 172.16.10.1 8.1 ms 4 ...10 8.8.8.8 22.3 ms ← destination atteinte (10 sauts)Chaque ligne correspond à un routeur ayant reçu un paquet avec TTL=0 et renvoyé un ICMP Time Exceeded. Le dernier saut est la destination elle-même, qui répond normalement.
À retenir
Section titled “À retenir”Le TTL est visible dans chaque paquet IP sans aucun outil spécifique. En le croisant avec les valeurs de départ par OS, on peut estimer le nombre de sauts entre soi et une cible et orienter l’identification du système sans scan actif. Dans Wireshark, appliquer le TTL comme colonne permet de repérer immédiatement les anomalies — paquets proches de l’expiration, TTL incohérents avec la topologie attendue.