Pour les articles homonymes, voirARP.
L’Address Resolution Protocol (ARP, protocole de résolution d’adresse) est unprotocole utilisé pour associer l'adresse de protocole decouche réseau (typiquement uneadresse IPv4) d'un hôte distant, à son adresse de protocole decouche de liaison (typiquement uneadresse MAC). Il se situe à l’interface entre lacouche réseau (couche 3 dumodèle OSI) et lacouche de liaison (couche 2 dumodèle OSI).
Il a été défini en 1982 dans laRequest for commentsRFC 826[1] :An Ethernet Address Resolution Protocol.
Le protocole ARP est nécessaire au fonctionnement d’IPv4 utilisé au-dessus d’un réseau de typeEthernet.EnIPv6, les fonctions de ARP sont reprises par leNeighbor Discovery Protocol (NDP).
Dans la suite de l’article, le terme d'adresse IP est utilisé pour parler d’adresse IPv4.
Unordinateur connecté à unréseau informatique souhaite émettre une trameEthernet à destination d’un autre ordinateur dont il connaît l’adresse IP et placé dans le mêmesous-réseau.Dans ce cas, cet ordinateur va placer son émission en attente et effectuer une requête ARP enbroadcast de niveau 2. Cette requête est de type « quelle est l’adresse MAC correspondant à l’adresse IPadresseIP ? Répondez àmonAdresseIP ».
Puisqu’il s’agit d’unbroadcast, tous les ordinateurs du segment vont recevoir la requête. En observant son contenu, ils pourront déterminer quelle est l’adresse IP sur laquelle porte la recherche. La machine qui possède cette adresse IP sera la seule à répondre en envoyant à la machine émettrice une réponse ARP du type « je suisadresseIP, mon adresse MAC estadresseMAC ». Pour émettre cette réponse au bon ordinateur, il crée une entrée dans soncache ARP à partir des données contenues dans la requête ARP qu’il vient de recevoir.
La machine à l’origine de la requête ARP reçoit la réponse, met à jour soncache ARP et peut donc envoyer à l’ordinateur concerné le message qu’elle avait mis en attente.
Il suffit donc d’unbroadcast et d’ununicast pour créer une entrée dans lecache ARP de deux ordinateurs.
La commandearp
permet la consultation et parfois la modification de la table ARP dans certains systèmes d’exploitation. Cette commande est utile pour détecter de potentiellesvulnérabilités.
arp -a
: affiche toutes les entrées dans le cache ARP.arp -a @ip
: dans le cas où il y a plusieurs cartes réseau, on peut faire l’affichage du cache associé à une seule @ip.arp -s @ip @MAC
: ajout manuel d’une entrée statique permanente dans le cache (ce besoin se manifeste si on appelle régulièrement des hôtes, pour réduire le trafic réseau).
Le protocole ARP a été conçu sans souci particulier de sécurité. Il est vulnérable à des attaques locales sur le segment reposant principalement sur l’envoi de messages ARP erronés à un ou plusieurs ordinateurs. Elles sont regroupées sous l’appellationARP poisoning (pollution decache ARP). La vulnérabilité d’un ordinateur à la pollution de cache ARP dépend de la mise en œuvre du protocole ARP par sonsystème d’exploitation.
Soit une machine Charlie qui souhaite intercepter les messages d’Alice vers Bob, toutes appartenant au même sous-réseau.L’attaque consiste pour Charlie à envoyer unpaquet « arp who-has
» à la machine d’Alice. Ce paquet spécialement construit contiendra comme IP source, l’adresse IP de la machine de Bob dont nous voulons usurper l’identité (ARP spoofing) et l’adresse MAC de lacarte réseau de Charlie. La machine d’Alice va ainsi créer une entrée associant notre adresse MAC à l’adresse IP de la machine de Bob. Alice, destinataire de l’« arp who-has
», utilise le paquet pour créer une entrée dans sa table MAC. Si Alice veut communiquer avec Bob au niveau IP, c’est Charlie qui recevra les trames d’Alice puisque son adresse MAC est enregistrée dans le cache empoisonné de Alice comme équivalence pour l’IP du poste Bob. Ceci est une faiblesse connue de la mise en œuvre d’ARP et permet de corrompre facilement un cache ARP distant.
Ces attaques peuvent permettre une écoute des communications entre deux machines (attaque de l’homme du milieu), le vol de connexion, une surcharge descommutateurs servant de structure auréseau informatique ou undéni de service (en effectuant une attaque de l’homme du milieu puis en refusant les paquets).
Pour lutter contre ce type d’attaque, il est possible :
- de mettre en place des entrées statiques dans lecache ARP de chaque machine du réseau (commande
arp -s
). Ceci n’est applicable qu’à un faible nombre de machines (on privilégie les plus critiques, comme les serveurs et les passerelles). Sur lessystèmes d’exploitationMicrosoft Windows antérieurs à la versionXP, une entrée statique peut être mise à jour, la seule différence est qu’elle n’expire pas ; - de limiter les adresses MAC sur chaque port (renseignement statique) descommutateurs s’ils le permettent (fonctionPort Security). Les commutateurs deniveau 3 par exemple offrent la possibilité de paramétrer des associations port/MAC/IP statiques. Mais cela rend évidemment plus difficile la maintenance du parc ;
- de surveiller les messages ARP circulant sur le réseau, à l’aide d’outils de surveillance tels qu’ARPwatch[2] ou arpalert[3] ou desystèmes de détection d’intrusion (IDS).
Chaque entrée dans la table ARP a une durée de vie, ce qui oblige l’attaquant à corrompre régulièrement le cache de la victime. Certainssystèmes d’exploitation commeSolaris permettent de modifier la valeur de ce temps d’expiration (commandendd
). Une valeur courte rendra la corruption plus facilement visible.
Les paquets ARP sont transportés sur la couche liaison de données. Dans le cas d'un transport Ethernet, on utilise l'EtherType 0x0806. Le détail du paquet ARP est donné ci-dessous :
Cas général+ | Bits 0 - 7 | 8 - 15 | 16 - 31 |
---|
0 | Hardware type | Protocol type |
---|
32 | Hardware Address Length | Protocol Address Length | Operation |
---|
64 | Sender Hardware Address |
---|
? | Sender Protocol Address |
---|
? | Target Hardware Address |
---|
? | Target Protocol Address |
---|
|
avec :
- Hardware type (Type de matériel)[4]
Ce champ spécifie le protocole de couche 2 utilisé. Par exemple, Ethernet (10Mb) a la valeur 1,Experimental Ethernet (3Mb) a la valeur 2.
- Protocol type (Type de protocole)
Ce champ spécifie le protocole de couche 3 utilisé. Par exempleIPv4 a la valeur 0x0800. Ce champ prend les mêmes valeurs que les EtherTypes.
- Hardware Address Length (Longueur de l’adresse physique)
Ce champ correspond à la longueur de l’adresse physique. La longueur doit être prise en octets. Par exemple, une adresse Ethernet a la valeur 6 ; une adresseToken Ring a la valeur 1.
- Protocol Address Length (Longueur de l’adresse logique)
Ce champ correspond à la longueur de l’adresse réseau. La longueur doit être prise en octets. Par exemple, une adresse IP a la valeur 4.
- Operation(Opération)
Ce champ permet de connaître la fonction du message et donc son objectif. Il vaut soit 1 pour une requête (Request), soit 2 pour une réponse (Reply).
- Sender Hardware Address(Adresse physique de l'émetteur)
Adresse MAC du nœud émetteur. Cette adresse n'est pas forcément identique à l'adresse source de la trame Ethernet transportant le paquet ARP, cela arrive quand un nœud répond à la place d'un autre.
- Sender Prococol Address(Adresse logique de l'émetteur)
Adresse IP de l'interface du nœud émetteur, associé à l'adresse physique.
- Target Hardware Address(Adresse physique cible)
Adresse MAC de l'interface du nœud destinataire. Dans le cadre d'un paquet ARP de type requête, ce champ est mis à zéro car c'est justement celle-ci que l'émetteur cherche à connaître.
- Target Protocol Address(Adresse logique cible)
Adresse IP de l'interface du nœud destinataire, associé à l'adresse physique.
Exemple d’en-tête ARP : protocole IPv4 sur Ethernet (28 octets)Octet 1 | Octet 2 | Octet 3 | Octet 4 |
---|
0x0001 | 0x0800 | 0x06 | 0x04 | Operation | Adresse MAC source (octets 1-4) | Adresse MAC source (octets 5-6) | Adresse IP source (octets 1-2) | Adresse IP source (octets 3-4) | Adresse MAC destination (octets 1-2) | Adresse MAC destination (octets 3-6) | Adresse IP destination (octets 1-4) | |
Des requêtes ARP spontanées (gratuitous ARP) sont envoyées au démarrage de certains systèmes d'exploitation, par exemple, certains modems-routeurs. Elles permettent à cet équipement, nouvel arrivant sur le réseau, de vérifier que son adresse IP n'existe pas déjà, ce qui évite des conflits par doublon d'adresse IP[5]. L'interface expéditrice de la requête n'attend aucune réponse. La mise à jour de lamémoire tampon des systèmes connectés au réseau est alors assurée. Lescommutateurs sont informés de l'existence de l'adresse MAC de la machine en question. L'ensemble de ces actions assure une plus grande rapidité ultérieure de connexion au réseau. Une multitude d'émission de ces types de requêtes peut être un indicateur de câble défectueux entraînant des reconnexions fréquentes[6].
Sur les autres projets Wikimedia :