Introduction

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 :

  • Il demande à qui est l'adresse IP 192.168.1.1? répondre à 192.168.1.10 (l'ordinateur)
Who has 192.168.1.1? Tell 192.168.1.10
  • Et le routeur lui réponds qu'il a l'adresse MAC 12:34:56:ab:cd:ef
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

Le problème

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 »

Une solution : le cache ARP statique

Il s'agit de renseigner manuellement les entrées du cache ARP dans l'ordinateur pour lui donner un caractère permanent.(statique).

Cette solution n'est applicable que dans les cas où la configuration du réseau est simple, cette solution n'est pas facile à maintenir.
En effet, il serait fastidieux de configurer correctement cette table de cache ARP pour tous les postes de travail d'un réseau complexe d'entreprise par exemple.
Mais ce cas est bien adapté à la situation suivante : un ordinateur connecté en wifi à un routeur.

Les deux commandes vu dans ce wiki, “arp” et “ip” font partie respectivement des paquets net-tools et iproute2, si vous ne les avez pas déjà, installez-les :

yaourt -S net-tools iproute2

Cas de la commande arp

On va commencer par la commande arp, un peu plus simple d'utilisation.

Ajout d'une entrée

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 :

L'adresse IP renseigné, peut être sous forme d'IP ou de nom d'hôte

# 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 :

  • le flag C pour chaque entrée complète dans le cache.
  • le flag M pour chaque entrée permanente.

Suppression d'une entrée

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.

Ajout d'entrée par fichier

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

Une alternative, la commande ip (iproute2)

Généralité

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 :

  • add : pour ajouter une entrée dans le cache.
  • del : pour supprimer une entrée.
  • change : modifier une entrée.
  • replace : modifier une entrée, créer l'entrée si non existante.
  • show : pour afficher l'état du cache ARP.
  • flush : pour vider le cache (les entrées déclarées statiquement ne sont pas supprimées si ce n'est pas spécifié dans la commande).

Et les arguments sont les suivant :

  • <ADRESSE IP> : adresse IP de l'hôte en question.
  • dev <INTERFACE> : interface sur laquelle on désire ajouter l'entrée (wlan0,eth1…)
  • lladdr <ADRESSE MAC> : adresse MAC de l'hôte à ajouter statiquement (lladr pour “link layer adress”)
  • nud <ETAT> : dans le cas qui nous intéresse c'est l'état “permanent”, à noter que l'état correspondant à une entrée dynamique est “reachable”

Afficher la table

Pour afficher la table du cache ARP :

$ ip neigh show
192.168.1.1 dev wlan0 lladdr 12:34:56:ab:cd:ef PERMANENT

Ajout d'une entrée

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

Suppression d'une entrée

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

Convertir une entrée statique en dynamique

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

Remise à zero de la table

Le flush ne fonctionne pas d'elle même, c'est une option qui demande au minimum un argument, pour en faire une sélection par un critère. Il faut noté également, que s'il n'y as pas de “nud” de renseigner (état), il n'effacera pas par défaut les entrées “permanent” et “noarp” donc, les entrées statiques perdurerons si cela n'est pas précisé dans le flush.

Deux exemples : Pour effacer toutes les entrées du wlan0 (à l'exception des permanent) :

ip neigh flush dev wlan0

Pour effacer toutes les entrées statique du cache ARP :

ip neigh flush nud permanent

Conclusion

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.

  • L'adresse du routeur ne peut être détourné dans le cache de l'ordinateur.
  • La bande passante utilisée par ce protocole (même si elle est relativement faible) est libérée pour une autre application.


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

 
informatique/serurite/arp.txt · Dernière modification: 2010/04/21 15:33 (édition externe)
 
Recent changes RSS feed
Linux | tout droits réservé ~ © 2009-2010 Nic0's Sphere ~ | Tchat gratuit | Tchat gratuit