Protocole:ARP

From aldeid
Jump to: navigation, search
Translation.png
This article needs to be translated
This article has been copied from the old wiki and is in french. It needs to be translated into english. If you wish to participate, please send a mail to (click to reveal email)
VoirAussi.png
You might also see: Nemesis, Cain & Abel

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 :

En-tete-arp.png

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.

Arp-001.png

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.

Arp-002.png

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.

Arp-003.png

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.

Arp-cache-poisoning-routers.png

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

Protocole RARP

Définition

En-tête RARP

En-tete-rarp.png