Protocole:ARP
Protocole ARP
Définition
Le protocole ARP (Address Resolution Protocol) permet de déterminer l'adresse physique (adresse mac, couche 2-liaison du modèle OSI) à partir de l'adresse logique (adresse IP, couche 3-réseau du modèle OSI). Ceci est nécessaire dans la mesure où le routage s'effectue à partir des adresses IP, dites « logiques ». Il serait bien trop complexe de concevoir un routage avec les adresses physiques, celui-ci devrait être modifié à chaque fois qu'une carte réseau est changée.
Le protocole ARP crée une table de correspondance entre les adresses logiques et physiques, qu'il stocke dans une mémoire cache. Lorsqu'un hôte doit communiquer avec un autre hôte du réseau, il consulte sa table de correspondance. Si l'adresse IP s'y trouve, il en récupère l'adresse mac associée. Dans le cas contraire, il envoie une requête d'interrogation sur le réseau.
En-tête ARP
L'en-tête ARP se présente comme suit :
Avec le détail suivant:
Champ (abréviation) | Description |
---|---|
Type de matériel (hwtype) | |
Protocole (ptype) | |
Long. Physique (hwlen) | |
Long. Protocole (plen) | |
Opération (op) | |
Adresse MAC source (hwsrc) | |
Adresse MAC source (hwsrc) | |
Adresse IP source (psrc) | |
Adresse IP source (psrc) | |
Adresse MAC destination (hwdst) | |
Adresse MAC destination (hwdst) | |
Adresse IP destination(pdst) |
Manipuler les tables ARP
Comprendre comment la table ARP est alimentée
La table de correspondances ARP peut être consultée sous Linux par la commande arp. L'exemple qui suit illustre l'alimentation de cette table. Initialement, la table contient un seul enregistrement, avec l'adresse IP 192.168.1.1 :
$ arp -a ? (192.168.1.1) à 00:13:8b:bb:f3:2f [ether] sur wlan0
Lors de l'émission d'une requête de ping sur l'hôte 192.168.1.12, une requête ARP va être émise sur le réseau.
$ ping -c 1 192.168.1.12 PING 192.168.1.12 (192.168.1.12) 56(84) bytes of data. 64 bytes from 192.168.1.12: icmp_seq=1 ttl=128 time=2.76 ms --- 192.168.1.12 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 2.762/2.762/2.762/0.000 ms
La réponse à la requête ARP va permettre d'ajouter l'adresse à la table ARP :
$ arp -a ? (192.168.1.12) à 00:13:46:3a:b5:3d [ether] sur wlan0 ? (192.168.1.1) à 00:13:8b:bb:f3:2f [ether] sur wlan0
L'exemple précédent produit les traces suivantes :
19:22:43.220037 arp who-has 192.168.1.12 tell 192.168.1.10 19:22:43.236209 arp reply 192.168.1.12 is-at 00:13:46:3a:b5:3d 19:22:43.236244 IP 192.168.1.10 > 192.168.1.12: ICMP echo request, id 13575, seq 1, length 64 19:22:43.238643 IP 192.168.1.12 > 192.168.1.10: ICMP echo reply, id 13575, seq 1, length 64
Suppression d'une adresse de la table ARP
ARP Cache poisoning
Théorie
Le cache ARP peut être exploité de manière abusive lors d'une attaque de type « ARP cache poisoning ». On parle alors de modification de routage de niveau 2 (en référence à la couche liaison du modèle OSI). Dans une communication standard, les ordinateurs du réseau émettent des requêtes ARP afin de s'échanger et stocker les couples d'adresses IP/mac. |
|
Le protocole ARP n'offrant aucune protection (aucun mécanisme d'authentification) contre une utilisation détournée, il est trivial pour un attaquant d'émettre sur le réseau de fausses informations (ARP cache poisoning) afin de polluer le cache des hôtes du réseau. Par ailleurs, l'envoi gratuit de réponses ARP (gratuitous ARP) sans qu'il n'y ait eu de requête, est néanmoins pris en considération par les clients qui mettent à jour leur cache ARP. |
|
Ainsi, l'attaquant peut rediriger les futures requêtes du réseau vers lui afin d'enregistrer l'activité du réseau et rerouter les paquets vers l'hôte destinataire, par un mécanisme de translation d'adresses de type SNAT. |
Cette attaque est considérée comme étant l'une des plus dangereuses, dans la mesure où elle permet à l'attaquant d'intercepter, de filtrer et modifier les trames. Le logiciel Cain & Abel, peut décrypter des flux dits sécurisés comme SSH ou HTTPS.
Plutôt que de n'empoisonner que les caches ARP des deux correspondants, il est également possible de réaliser cette opération sur des routeurs, afin de sniffer la globalité des échanges des deux réseaux dont sont issues les machines ciblées.
Mise en pratique
Scapy permet de réaliser ce type d'attaque, grâce à la fonction arpcachepoison(). Celle-ci s'utilise de la manière suivante :
arpcachepoison(target, victim, interval=60) Poison target's cache with (your MAC,victim's IP) couple arpcachepoison(target, victim, [interval=60]) -> None
Exemple de table de routage sur l'hôte 172.16.196.128 (target) modifiée par la commande scapy arpcachepoison("172.16.196.128","172.16.196.129") :
# arp 172.16.196.1 ether 00:50:56:C0:00:08 C eth1 172.16.196.2 ether 00:50:56:ED:BA:1C C eth0 172.16.196.129 ether 00:50:56:C0:00:08 C eth1 172.16.196.1 ether 00:50:56:C0:00:08 C eth0