Pour reprendre la définition de wikipédia, le protocole ARP (Address Resolution Protocol) est un protocole effectuant la traduction d'une adresse de protocole de couche réseau (typiquement une adresse IPv4) en une adresse MAC(Media Access Control address) typiquement une adresse ethernet.
Donc, ARP permet au système d'exploitation de faire la correspondance entre les ardesses IP et MAC.
En pratique, l'ordinateur fait une requête de ce type :
Who has 192.168.1.1? Tell 192.168.1.10
192.168.1.1 is at 12:34:56:ab:cd:ef
Le résultat est stocké dans le cache ARP de l'ordinateur, visible par la commande :
$ arp -a ? (192.168.1.1) at 12:34:56:ab:cd:ef [ether] on wlan0
$ arp Address HWtype HWaddress Flags Mask Iface 192.168.1.1 ether 12:34:56:ab:cd:ef C wlan0
Toujours selon wikipédia, Le protocole ARP est vulnérable à des attaques locales reposant principalement sur l'envoi de messages ARP erronés à un ou plusieurs ordinateurs.
Elles sont regroupées sous l'appellation « pollution de cache ARP » (« ARP cache poisoning » en anglais).
Cette vulnérabilité est notamment utilisée dans l'attaque de « l'homme du mileu »
Il s'agit de renseigner manuellement les entrées du cache ARP dans l'ordinateur pour lui donner un caractère permanent.(statique).
yaourt -S net-tools iproute2
On va commencer par la commande arp, un peu plus simple d'utilisation.
Dans un cas général, puis toujours dans le cas où le routeur à l'adresse IP 192.168.1.1 et une adresse MAC 12:34:56:ab:cd:ef entrez la commande suivante en root :
# arp -i interface -s adresse_IP adresse_MAC # arp -i wlan0 -s 192.168.1.1 12:34:56:ab:cd:ef
Ce qui à pour effet de le rendre permanant (PERM et flags M):
$ arp -a ? (192.168.1.1) at 12:34:56:ab:cd:ef [ether] PERM on wlan0
$ arp Address HWtype HWaddress Flags Mask Iface 192.168.1.1 ether 12:34:56:ab:cd:ef CM wlan0
Le manuel d'arp nous renseigne :
On peut simplement effacer l'entrée par la commande suivante en root:
# arp -d adresse_IP # arp -d 192.168.1.1
Ce qui enlèvera le caractère permanent de l'entrée.
On peut se servir d'un fichier pour faciliter la manipulation si on a plusieurs IP/MAC à entrer dans le cache.
On utilise pour cela la commande “arp” avec ”-f” comme option . Si aucun nom de fichier n'est précisé à là suite de cette option, la commande “arp” ira lire le fichier /etc/ethers.
Par défaut (à confirmer) il n'existe pas de fichier /etc/ethers sur arch mais il suffit de le créer.
La syntaxe du fichier (format texte) est très simple : adresse_IP adresse_MAC
Donc par exemple, éditer en root le fichier /etc/ethers :
192.168.1.1 12:34:56:ab:cd:ef ... ...
Puis, faites simplement :
# arp -f
bien sûr si vous renseignez deux fichiers par exemple pour deux configurations, renseigner le nom du fichier en argument en fonction :
# arp -f /etc/autre_ethers
La commande ip est plus moderne, mais plus vaste d'utilisation également (réunissant ifconfig, route, arp et d'autres), la gestion du cache ARP n'est qu'un cas particulier de cette commande.
Pour indiquer que l'on veut intéragir avec le cache ARP, on ajoute à la commande “ip” l'argument “neigh” (raccourci de neighbour, signifiant voisin), on obtient donc :
ip neigh instruction arguments
D'une manière générale, les instructions pour ip neigh sont les suivantes :
Et les arguments sont les suivant :
Pour afficher la table du cache ARP :
$ ip neigh show 192.168.1.1 dev wlan0 lladdr 12:34:56:ab:cd:ef PERMANENT
La syntaxe pour l'ajout d'une entrée suit le schéma suivant :
ip neigh add <ADRESSE IP> dev <INTERFACE> lladdr <ADRESSE MAC> nud <ETAT>
Pour reprendre l'exemple utilisé précédemment, l'ajout d'une entrée s'effectue avec la commande suivante (en root)
ip neigh add 192.168.1.1 dev wlan0 lladdr 12:34:56:ab:cd:ef nud permanent
La suppression d'une entrée doit être renseignée par l'IP et l'interface, donc la commande suivante en root:
ip neigh del 192.168.1.1 dev wlan0
Pour donner un caractère permanent (statique) d'une entrée déjà dans le cache, la commande suivante, avec l'ip et l'interface obligatoire :
ip neigh replace 192.168.1.1 dev wlan0 nud permanent
Et inversement, pour revenir dans un cas dynamique :
ip neigh replace 192.168.1.1 dev wlan0 nud reachable
ip neigh flush dev wlan0
Pour effacer toutes les entrées statique du cache ARP :
ip neigh flush nud permanent
L'utilisation du cache ARP statique n'empêche pas complètement la possibilité du cache dynamique, les deux peuvent cohabiter. Mais pour sûr vous aurez ces deux avantages.
sources :
bien entendu vous pouvez consulter “man arp” et “man ethers” “man ip”
http://www-rp.lip6.fr/~fourmaux/www-l2ti.univ-paris13.fr/~fourmaux/stages/routeurlinux/iproute2.htm
http://linux-attitude.fr/post/iproute2
http://www.tcpipguide.com/free/t_ARPCaching.htm
http://www.developpez.net/forums/d412609/systemes/hardware/depannage-pc/reseaux/pollution-cache-arp/
et informations diverses par le net.
— Nic0 2009/08/11 23:31