Vous avez probablement entendu parler d'ICMP et si vous n'êtes qu'un petit connaisseur en technologie, vous saurez probablement (au moins) qu'il a quelque chose à voir avec Internet.
ICMP est en fait un protocole, un peu comme IP, TCP et UDP (dont nous avons discuté et expliqué précédemment), il joue donc un rôle assez important dans le bon fonctionnement de nos connexions Internet.
ICMP a plus à voir avec la façon dont les problèmes de connectivité sont détectés et traités, mais ne gâchons pas trop notre cours. Continuez à lire si vous voulez savoir ce qu'est ICMP et comment il nous aide à maintenir nos connexions à des niveaux optimaux.
Qu'est-ce que l'ICMP ?
L'Internet Control Message Protocol, que la plupart connaissent sous son acronyme plus convivial ICMP, est un protocole fondamental pour résoudre divers problèmes liés à la connectivité.
Ce protocole est utilisé par une grande variété de périphériques réseau, y compris, mais sans s'y limiter, les routeurs, les modems et les serveurs pour informer les autres participants du réseau des problèmes de connectivité potentiels.
Nous avons mentionné ci-dessus qu'ICMP est un protocole tout comme TCP et UDP, mais contrairement à ces deux-là, ICMP n'est généralement pas utilisé pour faciliter l'échange de données entre les systèmes. De plus, il n'est pas fréquemment utilisé dans les applications réseau des utilisateurs finaux, à moins qu'il ne s'agisse d'outils de diagnostic.
La définition originale d'ICMP a été esquissée par Jon Postel , qui a contribué massivement et à plusieurs reprises au développement d'Internet, et la première norme d'ICMP a été publiée en avril 1981 dans la RFC 777 .
Évidemment, la définition initiale a subi de nombreux changements pour atteindre la forme que nous connaissons aujourd'hui. La forme stable de ce protocole a été publiée 5 mois plus tard que sa définition initiale, en septembre 1981, dans la RFC 792, et a également été écrite par Postel.
Comment fonctionne l'ICMP ?
Pour faire court, ICMP est utilisé pour le rapport d'erreurs en déterminant si les données atteignent ou non leur destination prévue relativement rapidement.
Dans un scénario de base, deux appareils sont connectés via Internet et échangent des informations via ce que nous appelons des paquets de données ou des datagrammes. ICMP génère des erreurs et les partage avec l'appareil qui a envoyé les données d'origine au cas où les paquets n'atteindraient jamais leur destination.
Par exemple, si vous envoyez un paquet de données qui est tout simplement trop volumineux pour que le routeur puisse le gérer, le routeur supprimera d'abord le paquet, puis il générera un message d'erreur indiquant à l'appareil expéditeur que son paquet n'a jamais atteint la destination vers laquelle il se dirigeait.
Cependant, c'est ce que nous appellerions une compétence passive puisqu'il n'y a absolument rien à faire pour recevoir ces messages d'erreur (si le besoin s'en fait sentir). Comme vous le découvrirez sous peu, ICMP dispose également d'un utilitaire plus actif, sur lequel vous pouvez compter pour effectuer diverses opérations de dépannage du réseau.
Contrairement à TCP et UDP, ICMP n'a pas besoin qu'un périphérique soit connecté pour envoyer un message. Dans une connexion TCP, par exemple, les appareils connectés doivent effectuer une poignée de main en plusieurs étapes, après quoi les données peuvent être transférées.
Avec ICMP, il n'est pas nécessaire d'établir une connexion ; un message peut être simplement envoyé à la place d'une connexion. De plus, un message ICMP ne nécessite pas de port vers lequel diriger le message, contrairement à TCP et UDP, qui utilisent tous deux des ports spécifiques pour acheminer les informations. Non seulement ICMP ne nécessite pas de port, mais il ne permet en fait pas de cibler des ports spécifiques.
Les messages ICMP sont transportés par des paquets IP mais ne sont pas contenus par eux. Au lieu de cela, ils se superposent à ces paquets, car ils ne sont générés que si leur transporteur (c'est-à-dire les paquets IP) n'atteint jamais leur destination. Le plus souvent, les circonstances qui ont permis à un paquet ICMP de se reproduire résultent des données disponibles dans l'en-tête IP du paquet ayant échoué.
Comme ICMP inclut les données de l'en-tête IP du paquet ayant échoué, des outils d'analyse de réseau peuvent être utilisés pour déterminer exactement quels paquets IP n'ont pas été livrés. Cependant, l'en-tête IP n'est pas le seul type d'informations transporté par le paquet ICMP.
Un paquet ICMP contient l'en-tête IP, suivi d'un en-tête ICMP et des huit premiers octets de la charge utile.
- En-tête IP - contient des détails sur la version IP, les adresses IP source et de destination, le nombre de paquets envoyés, le protocole utilisé, la longueur des paquets, la durée de vie (TTL), les données de synchronisation, ainsi que les numéros d'identification pour des paquets de données particuliers
- En-tête ICMP - contient un code qui aide à catégoriser l'erreur, un sous-code qui facilite l'identification de l'erreur en offrant une description et une somme de contrôle
- En-tête de couche de transport - huit premiers octets de la charge utile (transférés via TCP ou UDP)
Messages de contrôle ICMP
Comme nous l'avons mentionné ci-dessus, lorsqu'une erreur se produit, les valeurs du premier champ de l'en-tête ICMP peuvent être utilisées pour l'identifier. Ces types d'erreurs, ainsi que leur identifiant sont les suivants :
- 0 - Echo Reply - utilisé à des fins de ping
- 3 – Destination inaccessible
- 5 - Message de redirection - utilisé pour indiquer le choix d'un itinéraire différent
- 8 - Echo Request - utilisé à des fins de ping
- 9 - Annonce de routeur - utilisé par les routeurs pour annoncer que leurs adresses IP sont disponibles pour le routage
- 10 – Sollicitation de routeur – découverte, sollicitation ou sélection de routeur
- 11 - Temps dépassé - TTL expiré ou temps de remontage dépassé
- 12 - Problème de paramètre : mauvais en-tête IP - mauvaise longueur, option requise manquante ou erreur indiquée par le pointeur
- 13 – Horodatage
- 14 – Réponse d'horodatage
- 41 – utilisé pour les protocoles expérimentaux de mobilité
- 42 - Demande d'écho étendu - demande un écho étendu
- 43 - Extended Echo Reply - réponses à 42 demande d'écho étendu
- 253 et 254 – expérimental
Le champ TTL (Time to Live)
Le champ TTL est l'un des champs d'en-tête IP qui peut (et génère souvent) une erreur ICMP. Il contient une valeur, qui est le nombre maximum de routeurs qu'un paquet envoyé peut traverser avant d'atteindre sa destination finale.
Une fois le paquet traité par un routeur, cette valeur diminue de un et le processus continue jusqu'à ce que l'une des deux choses suivantes se produise : soit le paquet atteint sa destination, soit la valeur atteint zéro, ce qui est généralement suivi par le routeur abandonnant le paquet et envoyer un message ICMP à l'expéditeur d'origine.
Il va donc sans dire que si un paquet est abandonné parce que son TTL a atteint zéro, ce n'est pas à cause de données corrompues dans l'en-tête ou de problèmes spécifiques au routeur. TTL a en fait été conçu pour empêcher les paquets malveillants d'obstruer les connexions et a abouti à la création d'un outil primordial pour le dépannage du réseau : Traceroute.
Utilisation d'ICMP dans les diagnostics de réseau
Comme mentionné ci-dessus, ICMP peut être utilisé avec des outils de diagnostic pour déterminer le bon fonctionnement d'une connexion réseau. Vous ne saviez peut-être pas ce qu'est ICMP avant de lire notre guide, mais nous sommes certains que vous avez au moins entendu parler de ping, le célèbre utilitaire réseau qui permet de savoir si un hôte est accessible ou non.
Eh bien, le ping est en fait un outil important qui utilise ICMP comme épine dorsale. Traceroute est un autre bon exemple d'outils qui nous aident à diagnostiquer et à résoudre les problèmes de connectivité sur nos réseaux. Pathping, qui est une combinaison de ping et de traceroute, est un autre excellent outil basé sur ICMP.
Ping
Ping est un outil Windows intégré accessible via CMD et l'un des outils les plus importants qui utilise ICMP pour résoudre les erreurs de réseau potentielles. Ping utilise deux des codes de la liste ci-dessus, 8 (demande d'écho) et 0 (réponse d'écho), pour être plus précis.
Voici à quoi ressemblent deux exemples de commandes ping :
ping 168.10.26.7
ping TipsWebTech360.com
Lorsque vous l'exécutez, ping enverra un paquet ICMP avec un code 8 dans son champ de type et attendra patiemment la réponse de type 0. Après l'arrivée de la réponse, ping déterminera le temps entre la requête (8) et sa réponse (0) et renverra la valeur de l'aller-retour exprimée en millisecondes.
Nous avons déjà établi que les paquets ICMP sont généralement générés et envoyés à la suite d'une erreur. Cependant, le paquet de requête (type 8) n'a pas besoin d'erreur pour être envoyé, donc ping peut également recevoir la réponse (0) en retour sans déclencher d'erreur.
Comme vous l'avez probablement compris dans nos exemples ci-dessus, vous pouvez envoyer un ping à une adresse IP ou à un hôte. De plus, ping propose une pléthore d'options supplémentaires que vous pouvez utiliser pour un dépannage plus avancé en ajoutant simplement l'option à la commande.
Par exemple, l'utilisation de l' option -4 forcera le ping à utiliser exclusivement IPv4 , tandis que -6 n'utilisera que les adresses IPv6 . Consultez la capture d'écran ci-dessous pour une liste complète des options que vous pouvez ajouter à votre commande ping .
Une idée fausse courante à propos du ping est que vous pouvez l'utiliser pour tester la disponibilité de certains ports sur des systèmes ciblés. Pour faire court, vous ne pouvez pas faire cela, car ICMP n'effectue aucun véritable échange de messages entre les hôtes, contrairement à TCP ou UDP, et ne nécessite pas l'utilisation de port.
Les applications de scanner de ports utilisent des paquets TCP ou UDP pour déterminer si des ports spécifiques sont ouverts et accessibles. Les outils envoient des paquets TCP ou UDP à un port spécifique et génèrent un message ICMP de type 3 (hôte inaccessible) de sous-type 3 (port de destination inaccessible) si ce port n'est pas actif.
Traceroute
Tout comme le ping, traceroute est un autre outil de dépannage réseau que chaque administrateur réseau devrait non seulement avoir dans sa boîte à outils, mais aussi maîtriser. Qu'est - ce que traceroute fait est de vous aider à trouver la voie de tous les dispositifs vos bosses de connexion à travers jusqu'à ce qu'il atteigne sa destination spécifiée.
Donc, si vous souhaitez trouver l'intégralité de l'itinéraire entre vous et une autre machine, traceroute peut vous donner exactement cette information. Cet outil peut également être utilisé pour déterminer s'il y a ou non quelque chose qui ne va pas le long de l'itinéraire suivi par votre connexion.
Si, par exemple, il y a un périphérique sur le chemin de connexion qui a du mal à transférer vos paquets vers leur destination prévue, traceroute vous indiquera quel routeur vous donne une réponse différée (ou pas du tout).
Le fonctionnement de traceroute consiste à envoyer un paquet avec une valeur TTL ( Time To Live ) de 0, qui sera automatiquement supprimé par le premier routeur qu'il rencontrera, comme nous l'avons expliqué ci-dessus dans la section TTL. Après avoir abandonné le paquet, le routeur génère un paquet ICMP et le renvoie à traceroute.
Le programme extrait l'adresse source du paquet, ainsi que le temps qu'il a fallu au paquet pour revenir, puis envoie un autre paquet avec une valeur TTL de 1 . Une fois que le deuxième paquet a traversé la passerelle, son TTL diminue de 1 (devenant 0 ) et se dirige vers le deuxième routeur, qui, lors de la détection de la valeur TTL de zéro, supprime le paquet et renvoie un paquet ICMP à traceroute.
Chaque fois que traceroute reçoit un paquet ICMP, il augmente le TTL de un et le renvoie sur sa piste, et cette opération se poursuit indéfiniment jusqu'à ce que la destination spécifiée soit atteinte ou que traceroute manque de sauts. Par défaut, Windows alloue un nombre maximum de 30 sauts, mais vous pouvez l'augmenter en le spécifiant dans la syntaxe de la commande.
Voici un exemple de la façon dont vous pouvez exécuter traceroute dans CMD :
tracert TipsWebTech360.com
Tout comme ping, traceroute a une série d'options que vous pouvez ajouter à la syntaxe si vous voulez être plus précis. Vous pouvez forcer IPv4 ou IPv6, mais vous pouvez également ignorer la résolution des adresses en noms d'hôtes et augmenter le nombre maximal de sauts pour rechercher la cible. Consultez notre capture d'écran ci-dessous pour un exemple d'utilisation de traceroute et une liste de toutes les options que vous pouvez utiliser avec.
Il convient toutefois de mentionner que traceroute ne peut vous fournir que des informations en temps réel. Par conséquent, si vous avez rencontré un ralentissement de votre connexion et que vous souhaitez utiliser cet outil pour l'étudier, vous pouvez recevoir des résultats trompeurs car l'itinéraire peut avoir changé entre-temps.
Bien qu'il soit possible de forcer traceroute à suivre un certain chemin en utilisant l' option -j et en ajoutant manuellement des adresses de routeur, cela implique que vous êtes déjà au courant du chemin défectueux. C'est quelque peu paradoxal, car pour découvrir le chemin en premier lieu, vous devez utiliser traceroute sans l' option -j .
Si vous n'êtes pas vraiment fan des outils CLI (interface de ligne de commande) et préférez de loin une approche GUI (interface utilisateur graphique), il existe de nombreuses solutions logicielles tierces pour traceroute. Traceroute NG de SolarWinds est l'un des meilleurs exemples auxquels nous puissions penser. Avons-nous mentionné que c'est totalement gratuit ?
Cheminement
Comme nous l'avons brièvement mentionné ci-dessus, le cheminement complète le trio d'outils de dépannage réseau indispensables. Du point de vue des fonctionnalités, le patphing est une combinaison de ping et de traceroute, car il utilise les trois types de messages exploités par le duo susmentionné : requête d'écho (8), réponse d'écho (0), ainsi que le temps dépassé (11).
Le plus souvent, le cheminement est utilisé pour identifier les nœuds de connexion qui sont affectés par une latence élevée et la perte de paquets. Bien sûr, vous pouvez utiliser traceroute puis ping pour obtenir ces détails, mais disposer des fonctionnalités des deux outils sous une seule commande est bien plus pratique pour les administrateurs réseau.
L'un des inconvénients de l'utilisation du pathping est qu'il peut prendre un certain temps pour terminer son enquête (25 secondes par saut pour produire des statistiques de ping). Pathping vous montrera à la fois l'itinéraire vers la destination spécifiée et les temps d'aller-retour jusqu'à celle-ci.
Contrairement au ping et au traceroute, le pathping ping chaque routeur sur son chemin à plusieurs reprises, ce qui augmente son efficacité globale. Cependant, s'il rencontre un routeur qui a désactivé ses fonctions ICMP, le cheminement interrompra sa demande d'informations, tandis que le ping peut toujours atteindre un routeur sans fonctionnalités ICMP, et traceroute passera au routeur suivant sur son chemin et affichera une chaîne d'astérisques pour tous les routeurs non-ICMP.
Pathping est un outil intégré à Windows et fonctionne ainsi depuis Windows NT, vous pouvez donc l'utiliser comme vous le feriez pour ping ou tracert : via une ligne de commande.
Voici un exemple d'utilisation du pathping :
pathping TipsWebTech360.com -h 40 -w 2 -4
La commande ci-dessus vous montrera l'itinéraire vers notre site Web, ainsi que les temps d'aller-retour vers chaque routeur du chemin de connexion. De plus, les options que nous avons utilisées dans notre exemple augmenteront la valeur de sauts maximum par défaut de 30 à 40, ajouteront une valeur de délai d'attente de 2 millisecondes pour chaque réponse et forceront IPv4.
Consultez notre capture d'écran ci-dessous pour un guide rapide d'utilisation des chemins et une liste d'options que vous pouvez ajouter à la syntaxe de la commande.
Application ICMP dans les cyberattaques
Bien que la gamme ICMP facilite de nombreuses opérations de dépannage de connectivité, ce protocole peut également être exploité pour effectuer diverses cyberattaques. Si vous avez été assez longtemps sur Internet, vous avez probablement entendu parler de ping flooding, DDoS, Ping of Death, Smurf Attacks ou tunnels ICMP.
Alors que certaines de ces attaques servent aujourd'hui de PoC (Proof of Concept), d'autres sont encore utilisées par des agents malveillants pour endommager des systèmes Internet ou par des experts en sécurité pour tester les vulnérabilités.
Nous commencerons par le plus populaire, qui est le ping flood (encore largement utilisé, d'ailleurs), et expliquerons comment il utilise ICMP pour le mal.
inondation de ping
L'utilisation de ping pour envoyer des demandes d'écho et attendre les réponses d'écho semble assez inoffensive. Mais que se passe-t-il si, au lieu d'attendre la réponse, le ping enverrait simplement une énorme quantité de requêtes d'écho ICMP ? Dans ce scénario d'attaque DoS (Denial of Service) classique , l'appareil cible connaîtrait un retard important et même des coupures de connexion si l'attaque réussit.
Cette attaque est plus efficace si l'attaquant a plus de bande passante que la victime, et si la victime envoie des réponses d'écho ICMP à la multitude de requêtes qu'elle reçoit, consommant ainsi la bande passante entrante et sortante.
The attacker can specify a “flood” option to the ping command, but this option is quite rare and not embedded in operating systems’ built-in tools. For instance, Windows’ ping doesn’t have a “flood” option, but there are some third-party tools that integrate this feature.
A ping flood attack can truly become catastrophic if it turns into a DDoS (Distributed Denial of Service) attack. A DDoS attack uses multiple systems to target a single one, thus overwhelming it with packets from several locations at once.
One surefire way to protect yourself against a ping flood is to disable ICMP functions on your router. You can also install a web app firewall if you need to protect a web server from such attacks.
Ping of Death
This attack involves sending a malformed ping to a target computer. In this type of attack, the sent packet will contain an amount of filler in the payload that’s too large to be processed all at once.
However, before being sent, this malicious ping will be fragmented into smaller parts, as transmitting it in its original, assembled form would be impossible for the Internet Protocol processor.
The computer that’s targeted by the Ping of Death will receive the chunks and attempt to reassemble them before sending the malicious packet to its destination application. Here’s where the damage happens: if the assembled packet is longer than the available memory in the target computer, re-assembling it might result in a buffer overflow, system crashes, and might even allow malicious code to be injected into the afflicted machine.
On the bright side, Ping of Death is no longer a novelty, as many security systems recognize it without a hiccup and successfully block it.
Smurf attack
As opposed to the previous two attack types, a Smurf attack doesn’t attack a device directly but makes use of other devices on the same network to coordinate a distributed DoS attack (a DDoS) towards a single machine.
The attacker needs its target’s IP address and the target network’s IP broadcast address. The attacker adds the victim’s IP address to ICMP packets (spoofs it) and then broadcasts them to the target’s network by using an IP broadcast address.
In response, most devices connected to the same network will send a reply to the source IP address (replaced to reflect the target’s machine), which could be overwhelmed with traffic if the network is large enough (has a huge number of connected devices).
As a result, the target’s computer can be slowed down and even rendered unusable for a given period of time, if the attack is severe enough.
As before, you can avoid a Smurf attack by simply turning off your gateway router’s ICMP capabilities. Another way you could achieve protection is by blacklisting requests coming from your network’s broadcast IP address.
Twinge attack
A Twinge attack is lead by a program that sends a flood of spoofed ICMP packets in order to harm a system. The ICMP packets are fake since they’re all using random fake IP addresses, but in reality, the packets come from a single source (the attacker’s machine).
Reportedly, the ICMP packets contain a signature that can give away the fact that the attack didn’t come from multiple sources, but was coordinated with the help of Twinge instead.
Although this attack can be disastrous if planned right, turning off ICMP on your gateway router and installing a firewall or an intrusion detection system can help you protect yourself against it.
ICMP tunnel
By default, routers only scan for ICMP packet’s headers, making it possible that packets that actually contain a lot of additional data can easily bypass detection just as long as they contain an ICMP section. This type of attack is called a ping or ICMP tunnel. Fortunately, standard ping utilities aren’t capable of tunneling through firewalls and gateways, as ICMP tunnels need to be carefully adapted to the networks they’re intended to.
On the other hand, there are numerous online resources that attackers can use and emulate such a tunnel, granting themselves free passage through private networks and machines connected to it. As before, turning off ICMP capabilities on your gateway router, using firewalls, and enforcing strict blacklisting rules can be paramount in avoiding this type of attack.
ICMP – Conclusion
All things considered, although ICMP isn’t used to exchange information between connected devices on a given network as TCP and UDP do, it still has a huge applicability range. In fact, ICMP is one of the most flexible fundamental protocols that help keep the Internet the way we know it.
Mis à part son objectif fondamental d'informer un système lorsqu'il y a un étranglement dans sa connexion à un autre système, ICMP est l'épine dorsale de nombreux outils de dépannage tels que ping, pathping et traceroute. Malheureusement, il aide également les agents malveillants à fournir un large éventail d'attaques DoS et d'infiltration aux machines vulnérables.