II] Les services ICMP Vous savez probablement tous ce qu'est plus ou moins ICMP. Avant donc de parler des services proprement dit, un petit rappel sur ce qu'est ICMP. Le protocole IP offre un service de remise de datagramme sans connection, cependant il ne tente pas d'assurer une remise fiable de ces mêmes datagrammes. C'est aux protocoles de couches supérieures tels que TCP, qu'incombe cette tâche. Il existe cependant un moyen pour le protocole IP, d'envoyer des messages d'alerte et de diagnostic par l'intermédiaire d'un module. Ce module c'est bien entendu ICMP (Internet Control Message Protocole ou encore : Protocole de message de contrôle Internet). Ces messages ont pour but de permettre de détecter des problèmes potentiels ou réels. En effet, le protocole IP ayant été conçu dans un souci de simplicité, des erreurs surviennent souvent, lors de la transmission d'un datagramme. Ces erreurs sont généralement détectées au niveau d'un routeur intermédiaire comme par exemple si le réseau de destination est de type local à diffusion tel qu'un Ethernet, le routeur s'apperçoit que l'hôte n'est pas disponible au moment où il utilise l'ARP pour trouver l'adresse matérielle de l'hôte de destination à partir de son adresse IP. Quand ce cas se présente, le routeur tente d'en informer l'emetteur en envoyant un message ICMP qui indique que l'hôte de destination n'est pas disponible. Il existe bien sur d'autres types de problèmes comme l'expiration du champ TTL, l'indisponibilité d'un protocole etc.. ICMP est plus simplement, le protocole particulier qui utilisé conjointement à IP permet d' alerter le réseau sur l'existence d'erreurs, de tester le réseau et d'obtenir des infos le concernant. Bon pour résumer disons que : Toutes les implémentations IP doivent implémenter le ICMP ICMP est un client de IP (il s'exécute au dessus) bien qu'il soit implémenter dans IP. ICMP bien que signalant les condition d'erreur ne rend pas le protocole IP plus fiable. ICMP ne signale les erreurs que pour le premier fragment d'un datagramme. ICMP ne génère aucun message d'erreur concenant les problèmes affectant des datagrammes ICMP. ICMP ne doit pas signaler les problèmes suivants : Broadcast ou multicast. Routage ou remise des messages ICMP. Diffusion ou multidiffusion au niveau de la couche de liaison de données. Si vous voulez plus d'infos : RFC 792,950,1812,1122,1256 et 1191. Bon maintenant passons aux services proprement dit. Je suis sur que les petis lamers qui cliquent sur "attaque packet ICMP Destination unreachable" dans leur super 3l33t WareZ WarlordZ programmes n'en soupçonnent même pas le fonctionnement... ----------------- | Services ICMP | ----------------- | | --------------------------------------------------------------------------- | | | | | | | | -------- | ----------------- | ---------------------------- | --------------- | | Echo | | | Time exceeded | | | Parameter unintelligible | | | Adress mask | | -------- | ----------------- | ---------------------------- | --------------- | | | | | | | | | ------------- --------------------------- ------------ ----------------- | Timestamp | | Destination Unreachable | | Redirect | | Source quench | ------------- --------------------------- ------------ ----------------- Comme vous pouvez le constater, ICMP fournit une gamme assez large de services de messages d'erreur, d'information et de diagnostic. Les principaux services sont listés si dessus. Voyons un peu leur utilité : Echo : Ce service est utilisé comme un outil de diagnostic et sert à déterminer si un noeud IP est accessible. Timestamp : C'est en quelque sorte un "marqueur de temps", en fait il est utilisé pour la mesure du temps sur un inter-réseau. Time exceeded : C'est le temps écoulé. Ce service est utilisé pour indiquer l'expiration de la valeur du champs TTL de l'en-tête de l'IP. Destination unreachable : Qu'on peut traduire par destination inaccessible est un service qui indique simplement qu'un noeud IP n'est pas accessible. Parameter unintelligible ou encore parameter problem : Indique un problème dans un datagramme IP Redirect : C'est un service utilisé par les routeurs pour indiquer une route de substitution Adress mask : Il s'agit du masque d'adresse, c'est à dire que ce service permet d'obtenir des informations de masque de sous-réseau pour le réseau. Source quench : Ce service sert simplement à indiquer un problème de congestion à la source. Quel que soit le message ICMP le format général reste à peu de choses près le même. Le premier octet de l'en-tête ICMP est le champ Type, indiquant le type du service ICMP. L' octet suivant contient une valeur code décrivant plus en détail la nature du type de message. Il faut donc considérer les valeurs des champs type ET code pour déterminer la valeur exacte du message ICMP. Un petit schéma qui montre la structure générale des messages IP. Octets |--------------------------------------------------------------------------------------- | | 1 | 1 | 2 | 4 | | ICMP | IP | |--------------------------------------------------------------------------------------- | En-tête IP | Type | Code | Total de contrôle | Paramètre | Informations | Data link | |--------------------------------------------------------------------------------------- | | | | | --------------------------------- | | En-tête IP en échec + 64 bits | | | de données ULP | | --------------------------------- | | | | ----------------------------------------- | Type | ICMP Message | ----------------------------------------- | 0 | Echo reply | | 3 | Destination unreachable | | 4 | Source quench | | 5 | Redirect | | 8 | Echo request | | 11 | Time exceeded | | 12 | Parameter (IP) unintelligible | | 13 | Timestamp request | | 14 | Timestamp reply | | 15 | Information request | | 16 | Information reply | | 17 | Adress mask request | | 18 | Adress mask reply | ----------------------------------------- Bon comme en plus je suis gentil je vais vous donner la liste des valeurs de type pour ICMP --------------------------------------------------------- | Valeur de type | Signification | --------------------------------------------------------- | 0 | Echo reply | | 1 | Unassigned | | 2 | Unassigned | | 3 | Destination Unreachable | | 4 | Source Quench | | 5 | Redirect | | 6 | Alternate Host Address | | 7 | Unassigned | | 8 | Echo | | 9 | Router Advertisement | | 10 | Router Selection | | 11 | Time Exceeded | | 12 | Parameter Problem | | 13 | Timestamp | | 14 | Timestamp Replay | | 15 | Information Request | | 16 | Information Reply | | 17 | Address Mask Request | | 18 | Address Mask Reply | | 19 | Reserved (for security) | | 20-29 | Reserved (for Robustness Experiment) | | 30 | Traceroute | | 31 | Datagram Conversion Error | | 32 | Mobile Host Redirec | | 33 | IPv6 Where-Are-You | | 34 | IPv6 I-AM-Here | | 35 | Mobile Registration Request | | 36 | Mobile Registration Reply | | 37-255 | Reserved | --------------------------------------------------------- Les types ICMP 0 et 8 : Echo/PING Les messages ICMP les plus utilisés sont sans doute les types Echo 0 et 8. Il s'agit des messages utilisés pour le diagnostic par l'utilitaire PING (Packet Internet Groper). PING permet en effet de vérifier qu'un noeud est "vivant" et accessible. Ping fonctionne de la manière suivante : Il envoie un message ICMP de type Requête d'écho (8) à un noeud IP. A la réception du message, le noeud IP renvoie un message ICMP de réponse d'écho (0). Le message de réponse d'écho contient une copie des données envoyées dans le message de requête d'écho. La réception d'un message de réponse d'echo confirme que la couche IP et les couches inférieures du système de transport fonctionnent bien entre la source et la destination. Si des routeurs intermédiaires sont rencontrés entre la source et la destination, le message de réponse d'écho indique aussi que les routeurs sont en mesure de transmettre des datagrammes entre la source et la destination. Le noeud IP est généralement un hôte ou un routeur. L'utilitaire PING est utilisé pour générer le message de requête d'écho ICMP. Le module IP qui s'éxécute sur le noeud de destination répond automatiquement aux messages ICMP de requête d'écho générés par PING. Je ne m'étendrai pas d'avantage sur les différentes options et fonctionnalités de PING sur les divers type d'OS. Type ICMP3 : Destination inaccessible. La non remise d'un datagramme est généralement détectée par les routeurs, le plus souvent, c'est le dernier routeur de la chaîne des routeurs du chemin emprunté par le datagramme. Quand un routeur se trouve dans l'incapacité de remettre un datagramme, il en avertit l' emetteur par le biais d'un message ICMP de destination inaccessible. Les protocoles de couche supérieure, tels que TCP, transmettent le message perdu sans connaître la cause de l'échec de la remise. Le message ICMP permet dans certains cas d'indiquer à l'emetteur cette cause. Codes pour le message Destination inaccessible --------------------------------------------------------------------------------- | Code | Signification | --------------------------------------------------------------------------------- | 0 | Net Unreachable | | 1 | Host Unreachable | | 2 | Protocol Unreachable | | 3 | Port Unreachable | | 4 | Fragmentation Nedded and Don't Fragment was Set | | 5 | Source Route Failed | | 6 | Destination Network Unknow | | 7 | Destination Host Unknow | | 8 | Source Host Isolated | | 9 | Communication with Destination Network is Administratively Prohibited | | 10 | Communication with Destination Host is Administratively Prohibited | | 11 | Destination Network Unreachable for Type of Service | | 12 | Destination Host Unreachable for Type of Service | | 13 | Communication Administratively prohibited because of firewalls | | 14 | Host Precedence Violation | | 15 | Precedence cut-off in effect | --------------------------------------------------------------------------------- Code 0 : Réseau inaccessible Cette valeur est générée lorsque le réseau spécifié dans l'adresse IP de destination est introuvable. Seuls les routeurs peuvent générer ce message. La cause peut être l'erreur dans l'IP de destination ou dans la table de routage du routeur générant le message ICMP. L'adresse source contenue dans l'en-tête IP transportant ce message identifie le routeur ayant généré l'erreur. Code 1 : Hôte inaccessible Cette valeur est générée par le routeur qui est directement connecté au réseau de destination. Elle indique que le datagramme a été remis avec succès par les routeurs mais que le dernier routeur se trouve dans l'incapacité de communiquer avec l'hôte. Les causes peuvent être multiples : routeur qui ne parvient pas à déterminer l'adresse matérielle de destination à l'aide du protocole ARP, hôte hors service, mal configuré ou IP spécifiée incorrecte. C'est l'adresse source contenue dans l'en-tête IP qui transporte le message ICMP qui identifie le routeur qui à généré l'erreur. Ce type de message d'erreur (code 1) implique un échec dans la remise tandis que les messages d'erreur de type code 0 impliquent un échec lors du routage. Code 2 : Protocole inaccessible Ce code est généré pas lhôte de destination. Il indique que le datagramme a bien atteint l'hôte de destination mais que le protocole de couche supérieure, transporté par le datagramme IP et identifié par le champs protocole de l'en-tête IP, n'est pas disponible. Les protocoles de couche supérieure les plus courant sur les hôtes TCP/IP sont TCP, UDP et OSPF. La majorité des hôtes TCP/IP prennent au moins en charge TCP et UDP. Un message ICMP qui indique qu'un tel protocole est inaccessible est signe d'un grave problème de configuration au niveau de l'hôte. Dans la majorité des cas, les systèmes TCP/ip mettent en place des données spécifiques pour la configuration. Par ex sous UNIX le fichier /etc/protocols. Code 3 : Port inaccessible Ce code est généré lorsque le protocole de couche de transport indiqué est incapable de démultiplexer le datagramme et ne dispose pas d'autre moyen pour en informer l'emetteur. La cause peut être par ex l'absence d'un service d'application spécifique au niveau de l'hote de destination. Les services d'application sont identifiés par des numéros de port TCP ou UDP. Sur la pluspart des systèmes, ces services sont lancés après lecture de fichiers de configuration dédiés, (ex sous Unix : /etc/inetd.conf) lors de l'initialisation du système TCP/IP. A notre aussi que de nombreux systèmes emploient le concept de processus de serveur,appelé le superdemon inetd, qui écoute les requêtes arrivant sur les numéros de port de service d'application. Il arrive lorque le processus de serveur n'est pas activé que les services d'application soient indisponibles. Code 4 : Fragmentation nécessaire et flag Ne pas fragmenter est activé Ce code est généré par les routeurs qui doivent fragmenter le datagramme parce que la taille de MTU de l'interface de réseau par laquelle doit trasiter le datagramme est inférieure à celle du datagramme. Si dans l'en-tête IP du datagramme, le flag (DF) est mis à 1, le routeur ne peut transmettre le datagramme et doit donc l'écarter. Il envoie alors à l' emetteur initial un message ICMP de type 3 signalant que le datagramme n'a pu être envoyé, le code 4 en indiquant la raison. Code 5 : Echec du source route Ce code est (encore) généré par un routeur. Il est généré seulement pour les datagrammes IP utilisant l'option IP Source Route. Si un routeur se trouve dans l'incapacité de transmettre le datagramme en respectant le chemin de source route, il doit écarter le datagramme, puis envoyer à l'émetteur un message ICMP type 3 code 5, indiquant que la source route a échoué. L'identité du routeur qui a généré ce message peut être trouvé en examinant le champ d'adresse source de l'en-tête IP du message ICMP. Le message ICMP Echec source route doit contenir une option source route de même type (strict ou loose), créée en prenant dns l'option de source route du datagramme initial la portion du champ d'option située avant le pointeur de route enregistrée, et en l'inversant. Le seul cas où les champs de source route du datagramme fautif ne sont pas utilisés se rencontre lorsqu'un message ICMP Problème de paramètre concernant une source route est envoyé, ou lorsque le routeur a connaissance de règlements qui empêcheraient la remise du message ICMP utilisant les informations de source route du datagramme initial. Code 6 : Réseau de destination inconnu Ce message n'est jamais généré sur un réseau réel, car le routeur préfèrer génerer un message de type 3 code 0, ce code est obsolète. En théorie, il était supposé être généré par un routeur lorsque celui-ci aurait détecté, en consultant sa table de routage un réseau de destination inconnu Code 7 : Hôte de destination inconnu Ce code est généré par un routeur lorsque celui-ci peut détecter, par le biais du logiciel de couche de liaison situé au niveau de son interface de réseau, que l'hôte de destination n'existe pas. Le protocole de couche de liaison de données pour les liaisons point to point peut détecter l'existence de périphériques à chacunes des extrémités de la liaison. Si un routeur est connecté à l'hôte de destination via un réseau local à diffusion tel qu' Ethernet, le routeur ne peut déterminer que l'hôte n'existe pas. Dans le cas d'un réseau local, le routeur envoie une requête ARP pour déterminer l'adresse matérielle, et s'il ne reçoit pas de réponse, il suppose que l'hôte de destinatino est inaccessible. Les routeurs doivent utilisér de messages code 1 ou code 7 lorque d'autres hôttes du même réseau de destination sont accessibles, sinon l'emetteur pourrait conclure à tort que tous les hôtes du réseau sont inaccessibles. Code 8 : Hôte source isolé STD3, qui est décrit par le RFC 1122, définit un message de code 8. Ce message est généré lorsqu'un routeur peut détecter que l'hôte source est isolé du reste du réseau. Toutefois, le RFC 1812 déclare que les routeurs ne doivent pas générer de messages de code 8 mais doivent utiliser plutôt un code 0 ou code 1, selon la circonstance. Les codes 8 sont donc obsolètes. Codes 9 et 10 : communication avec le réseau/hôte de destination inter. par l'administrateur Un code 9 indique que la communication avec le réseau de destination est interdite administrativement tandis que le code 10 indique que c'est la communication avec l'hôte de destination qui est interdite. Les codes 9 et 10 furent conçus pour être utilisés par des périphériques de chiffrement point à point des agences militaires américaines. Le RFC 18112 déclare que les routeurs doivent utiliser le code 13 nouvellement défini (communication interdite par l' administrateur) dans le cas d'un filtrage adminstratif des paquets. Codes 11 et 12 : Réseau/Hôte de destination inaccessible pour le type de service Ces messages sont générés si un routeur est incapable de transmettre le datagramme à un réseau ou à un hôte de destination parce que les routes de sa table de routage ne peuvent trouver le type de service (TOS) demandé, ou la valeur de TOS par défaut. La valeur de TOS est spécifiée dans l'en-tête IP du datagramme et permet de spécifier la présénce, le retard , le débit et le coût du chemin suivi par le datagramme. Un code 11 indique que le réseau de destination est inaccessible pour le TOS spécifié, un code 12 insique que c'est l'hôte de destination qui est inaccessible. Code 13 : Communication interdite par l'administrateur du fait d'un coupe-feu La pluspart des routeurs récents disposent d'un logiciel de filtrage des paquets permettant de mettre en place des règles de filtrage interdisant la transmission de paquets au vu de l'adresse IP, du type de protocole, des numéros de port spécifiés, etc. Ce filtrage est une mesure de sécurité et constitue la première ligne de défense contre des intrusions hostiles. L'implémentation d'un routeur peut envoyer des messages ICMP indiquant que le datagramme n'a pu être transmis pour des raisons administratives. Malheureusement pour nous (mais beaucoup ne le font pas), le routeur peut être configuré pour ne pas envoyer de tels messages. Dans ce cas aucun message d'erreur ICMP ne sera renvoyé pour chaque paquet refusé administrativement. De cette manière, le routeur ne risque pas de donner des informations supplémentaires à l'émetteur des paquets suspects. Code 14 : Violation de préseance d'hôte Ce message est généré par le routeur de premier pas c'est à dire le premier routeur que le datagramme doit franchir pour atteindre sa destination. Ce message ICMP est généré pour indiquer que la préséance demandée n'est pas permise pour l'adresse source-destination spécifiée, pour le protocole de couche supérieure ou pour les numéros de port source-destination Le routeur peut également être configuré de manière à ne pas renoyer de message de code 14. Code 15 : Precedence cut-off in effect Ce code est également généré par un routeur. Un administrateur peut spécifier un niveau de préséance minimale, requis pour une route spécifique de la table de routage. Si le datagramme a été envoyé avec une préséance inférieure, il ne peut être transmis par cette route. Si le datagramme doit être écarté, un message ICMP type 3 code 15 est envoyé à l' émetteur. Le routeur peut être dans ce cas aussi configuré pour ne pas générer de code 15. Le type ICMP 4 : source Quench. Le réseau IP est sans connexion. Les routeurs d'un réseau IP transmettent les datagrammes IP unité par unité et ne réservent pas de mémoire pour les datagrammes d'une session particulière. Le concept même de session est étranger au processus de routage. Il est donc possible que des routeurs connaissent une congestion temporaire, c'est à dire un état dans lequel il n'y a plus assez de mémoire ou de place dans le tampon pour que le routeur puisse stocker les datagrammes entrants. Lorsqu'une congestion survient, plusieurs routeurs du réseau peuvent être affectés. Les datagrammes entrants peuvent ne pas être traités immédiatemment parce que le routeur est occupé à traiter d'autres datagrammes. Les tampons sont utilisés par les routeurs pour stocker temporairement les datagrammes avant traitement et transmission. Les routeurs connectés à des liaisons lentes sont osuvent la proie de congestion, mais ce peut être également le cas de routeurs disposant de peu de mémoire ou de puissance de calcul limitée. Lorsqu'un routeur subit une congestion et que ses tampons sont pleins, il doit écarter les datagrammes entrants. Le routeur génère alors des messages ICMP Source Quench pour demander aux émetteurs de ralentir la fréquence de leurs envois. Le message Source Quench est un mécanisme assez rudimentaire de régulation de flux, destiné à éviter que les routeurs ne soient submergés par les datagrammes entrants. Il n'existe pour l'instant aucun message ICMP permettant d'annuler ou d'inverser le message Source Quench pour indiquer que la congestion a cessé. Les problèmes de contrôle de flux sont mieux traités par les protocoles de couche de transport tels que TCP, responsables de la remise fiable des données. Voir pour plus d'infos les RFC 1122 1106 et 1812 Le type ICMP 5 : Redirection Ce type de message est envoyé par un routeur chaque fois que celui-ci détecte qu'un autre routeur propose un chemin optimal pour le datagramme. Les routeurs échangent des informations de routage sur le réseau à l'aide d'un protocole de routage. A chaque instant, les routeurs disposent d'informations optimales ou presque, concernant les routes possibles dans le réseau. Quant aux hôtes, ils ne disposent que d'informations de routage minimales. Un hôte ne connaît généralement que quelques réseaux et le routeur de prochain pas permettant d'accéder à chacun de ces réseaux. Les routeurs de prochain pas sont les routeurs situés à un pas (hop) de la source. Autrement dit, l'hôte source et ses routeurs de prochain pas sont connectés directement. De plus les hôtes disposent généralement d'un routeur par défaut, utilisé pour transmettre les datagrammes vers toutes les destinations qui ne figurent pas explicitement dans la table de routage de l'hôte. L'initialisation de la table de routage d'un hôte se fait généralement au démarrage du système. Les informations de cette table figurent dans la zone de données de configuration de l'hôte, la pluspart du temps sous forme de fichiers. Si la topologie du réseau change, les routeurs prennent connaissance des nouvelles routes permettant d'atteindre les différentes destinations, car les protocoles de routage qu'ils utilisent leur permettent d'échanger des informations sur la topologie et conservent des tables de routage qui ne sont plus optimales. A la réception d'un message ICMP Redirection, les hôtes doivent mettre à jour leur table de routage en tenant compte des nouvelles informations concernant le nouveau routeur. Le prochain datagramme envoyé à la même destination devra utiliser la route optimale mentionnée dans le message Redirection. Toutefois certaines implémentaions d'hôte TCP/IP ignorent purement et simplement les messages ICMP de redirection chaque fois qu'un datagramme est envoyé au routeur non optimal. Le routeur qui génère le message ICMP de redirection transmet aussi le datagramme au routeur optimal. Comme cette transmission peut se faire sur le réseau qui a reçu le datagramme, le nombre de datagrammes transmis est doublé La présence de messages ICMP indique la possibilité que des routes ne soient pas optimales. Valeurs des codes pour le message ICMP de redirection ------------------------------------------------------------------------ | Code | Signification | ------------------------------------------------------------------------ | 0 | Rediriger le datagramme pour le réseau (ou sous réseau) | | 1 | Rediriger le datagramme pour l'hôte | | 2 | Rediriger le datagramme pour le Type de Service et le réseau | | 3 | Rediriger le datagramme pour le Type de Service et l'hôte | ------------------------------------------------------------------------ Les messages de code 0 et de code 2 s'appliquent à tous les hôtes du réseau spécifié. Le code 3 est généré lorsque le paquet qui a provoqué le message de redirection ICMP doit être envoyé par un chemin qui dépendrait, en partien du TOS demandé. Pour que les routeurs puissent générer ce type de message il faut impérativement uqe les conditions suivantes soient vérifiées : Le datagramme est transmis vers l'extérieur par l'interface physique utilisée pour sa réception. L'adresse IP source figurant dans les paquets est sur le même (sous) réseau IP que l' adresse IP de prochain pas. Le datagramme ne contient pas une option IP Source route. Pour finir récapitulons : ICMP est une composante obligatoire de IP qui permet d'envoyer des messages d'alerte et de diagnostic par le biais du module ICMP. Le module ICMP est implémenté au sein du module IP. Les messages ICMP sont donc très utiles pour la détection de problèmes réels ou potentiels sur un réseau. On peut générer des messages ICMP en réponse à des conditions d'erreur très variées. Les messages ICMP servent également à diagnostiquer un réseau et à établir des statistiques concernant celui-ci. J'espère que vous en comprendrez grâce à cette doc les autres utilisations que vous pouvez en faire....