Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

5 Chapitre 5 sur 10
9 min de lecture

Protocole ARP

Comprendre ARP (Address Resolution Protocol) : résolution IP vers MAC, table ARP, ARP gratuit, Proxy ARP, ARP spoofing et outils de diagnostic.

Le problème fondamental : IP vs MAC

Lorsque vous envoyez un paquet à 192.168.1.50, votre système connaît l'adresse IP de destination. Mais pour envoyer une trame Ethernet sur le réseau local, il a besoin de l'adresse MAC de la carte réseau de destination (ou du prochain saut, la gateway).

Ces deux systèmes d'adressage opèrent à des niveaux différents :

  • Adresse IP (couche 3) : logique, configurable, changeable, mondiale
  • Adresse MAC (couche 2) : physique, gravée en usine, locale au segment

ARP (Address Resolution Protocol) est le protocole qui fait le pont entre ces deux mondes. Il répond à la question : "Qui a l'adresse IP X ? Donne-moi ton adresse MAC."

ARP est défini dans la RFC 826 de 1982 et opère en couche 2/3 — c'est l'une des rares entités à traverser la frontière des couches du modèle OSI.


Fonctionnement d'ARP : Request et Reply

Le processus complet

Imaginons que la machine A (192.168.1.10, MAC AA:AA:AA:AA:AA:AA) veuille envoyer un paquet à la machine B (192.168.1.50, MAC inconnue).

Étape 1 — ARP Request (broadcast)

La machine A envoie un ARP Request en broadcast (à toutes les machines du segment) :

Source MAC      : AA:AA:AA:AA:AA:AA
Destination MAC : FF:FF:FF:FF:FF:FF  ← broadcast Ethernet
Type            : 0x0806 (ARP)

Contenu ARP :
  Operation      : REQUEST (1)
  Sender MAC     : AA:AA:AA:AA:AA:AA
  Sender IP      : 192.168.1.10
  Target MAC     : 00:00:00:00:00:00  ← inconnu
  Target IP      : 192.168.1.50       ← cherché

Message en langage naturel : "Qui a 192.168.1.50 ? Dites-le à AA:AA:AA:AA:AA:AA"

Étape 2 — ARP Reply (unicast)

Toutes les machines reçoivent le broadcast. Seule 192.168.1.50 répond, en unicast directement à la machine A :

Source MAC      : BB:BB:BB:BB:BB:BB
Destination MAC : AA:AA:AA:AA:AA:AA  ← unicast, directement
Type            : 0x0806 (ARP)

Contenu ARP :
  Operation      : REPLY (2)
  Sender MAC     : BB:BB:BB:BB:BB:BB
  Sender IP      : 192.168.1.50
  Target MAC     : AA:AA:AA:AA:AA:AA
  Target IP      : 192.168.1.10

Message en langage naturel : "J'ai 192.168.1.50. Mon adresse MAC est BB:BB:BB:BB:BB:BB"

Étape 3 — Mise en cache et communication

La machine A mémorise la correspondance 192.168.1.50 → BB:BB:BB:BB:BB:BB dans sa table ARP (cache ARP). Elle peut maintenant encapsuler ses paquets IP dans des trames Ethernet avec la bonne MAC de destination.


La table ARP (cache ARP)

Pour éviter de refaire une requête ARP à chaque paquet, chaque système maintient une table ARP en mémoire : une correspondance IP → MAC avec un timer d'expiration.

Consulter la table ARP

# Méthode moderne (iproute2)
ip neigh show

# Exemple de sortie :
# 192.168.1.1   dev eth0 lladdr 00:1a:2b:3c:4d:5e REACHABLE
# 192.168.1.50  dev eth0 lladdr bb:bb:bb:bb:bb:bb STALE
# 192.168.1.100 dev eth0 lladdr cc:cc:cc:cc:cc:cc DELAY

# Méthode classique (dépréciée)
arp -n

# Afficher les entrées pour une interface spécifique
ip neigh show dev eth0

# Afficher avec les timestamps
ip -s neigh show

États des entrées ARP

État Signification
REACHABLE Entrée valide, communication bidirectionnelle confirmée récemment
STALE Entrée expirée mais conservée (sera revérifiée au prochain usage)
DELAY En cours de revérification (attente de confirmation)
PROBE Envoi actif de requêtes ARP de vérification
FAILED La résolution a échoué (hôte non joignable)
PERMANENT Entrée statique, jamais expirée
NOARP Interface sans ARP (ex: tunnel)

Timer de cache ARP sous Linux

Sous Linux, les entrées ARP ont des durées de vie contrôlées par le kernel :

# Voir les paramètres ARP actuels
cat /proc/sys/net/ipv4/neigh/default/gc_stale_time
# → 60 (secondes avant de passer en STALE)

cat /proc/sys/net/ipv4/neigh/default/base_reachable_time_ms
# → 30000 ms (30 secondes en REACHABLE)

# Temps total de vie : base_reachable_time + gc_stale_time
# Après expiration : entrée supprimée par le garbage collector

Manipuler le cache ARP manuellement

# Ajouter une entrée ARP statique
sudo ip neigh add 192.168.1.200 lladdr 11:22:33:44:55:66 dev eth0 nud permanent

# Modifier une entrée existante
sudo ip neigh replace 192.168.1.200 lladdr 11:22:33:44:55:66 dev eth0 nud permanent

# Supprimer une entrée
sudo ip neigh del 192.168.1.50 dev eth0

# Vider tout le cache ARP
sudo ip neigh flush all

# Vider le cache pour une interface spécifique
sudo ip neigh flush dev eth0

ARP Gratuit (Gratuitous ARP)

Un ARP gratuit est un ARP Request ou Reply particulier où une machine annonce sa propre association IP/MAC sans avoir reçu de demande. L'adresse IP cible est la même que l'adresse IP source.

Sender IP   : 192.168.1.10  (ma propre IP)
Target IP   : 192.168.1.10  (identique → gratuitous)
Sender MAC  : AA:AA:AA:AA:AA:AA

Usages légitimes de l'ARP gratuit

Usage Description
Détection de conflit IP Si quelqu'un répond à mon ARP gratuit, il y a un doublon
Mise à jour du cache Après changement d'adresse MAC (ex: NIC remplacée)
Failover haute disponibilité Un IP virtuel migre vers un autre serveur (Keepalived/VRRP)
Annonce au démarrage La machine annonce son existence au réseau
# Envoyer un ARP gratuit avec arping
sudo arping -I eth0 -c 1 -U 192.168.1.10

# Option -U : envoi d'un ARP Request gratuit (update)
# Option -A : envoi d'un ARP Reply gratuit (announce)
sudo arping -I eth0 -c 1 -A 192.168.1.10

Proxy ARP

Le Proxy ARP est une technique où un routeur répond aux requêtes ARP à la place d'une machine distante, en utilisant sa propre adresse MAC.

Scénario d'utilisation

Imaginons deux sous-réseaux sans routage explicite configuré sur les hôtes :

  • Hôte A : 10.0.0.1/8 (croit que tout 10.x.x.x est local)
  • Hôte B : 10.0.1.1/8 (sur un autre segment)

Sans Proxy ARP, A envoie un ARP pour 10.0.1.1, ne reçoit pas de réponse (B est sur un autre segment), et la communication échoue.

Avec Proxy ARP activé sur le routeur entre les deux segments : le routeur répond à l'ARP de A avec sa propre MAC. A envoie les trames au routeur, qui les transmet à B.

# Activer le Proxy ARP sur Linux
sudo sysctl -w net.ipv4.conf.eth0.proxy_arp=1

# Rendre permanent dans /etc/sysctl.conf
net.ipv4.conf.eth0.proxy_arp = 1

Le Proxy ARP est peu recommandé dans les architectures modernes car il masque la structure du réseau et complique le dépannage.


ARP Spoofing — L'attaque MITM de couche 2

L'ARP est sans authentification : n'importe quelle machine peut envoyer un ARP Reply affirmant qu'elle détient une IP donnée. C'est la faille exploitée par l'ARP Spoofing (aussi appelé ARP Poisoning).

Principe de l'attaque

Réseau légitime :
  A (192.168.1.10 / MAC:AA) ↔ Gateway (192.168.1.1 / MAC:GG)

Attaquant (192.168.1.99 / MAC:EE) envoie des ARP gratuits :
  À A     : "192.168.1.1 est à MAC:EE"  ← empoisonnement
  À Gateway : "192.168.1.10 est à MAC:EE" ← empoisonnement

Résultat :
  A         → EE (attaquant) → GG (gateway) → Internet
  Internet  → GG (gateway)  → EE (attaquant) → A

L'attaquant est au milieu (MITM) et voit tout le trafic.

Outils d'attaque ARP (à des fins de test/pentest uniquement)

# arpspoof (dsniff package) - NE PAS utiliser sur des réseaux tiers
# sudo arpspoof -i eth0 -t 192.168.1.10 192.168.1.1

# Détection d'ARP spoofing avec arpwatch
sudo apt install arpwatch
sudo systemctl start arpwatch
# → alerte par e-mail si une MAC change pour une IP connue

Défenses contre l'ARP Spoofing

Défense Niveau Description
Dynamic ARP Inspection (DAI) Switch Valide les ARP contre la table DHCP snooping
Entrées ARP statiques Hôte Pour les gateways critiques
DHCP Snooping Switch Base de confiance IP/MAC/port
VPN/IPsec Application Chiffrement qui rend l'écoute inutile
Segmentation VLAN Réseau Limiter la portée des attaques broadcast

Outils de diagnostic ARP

arping — Tester la connectivité couche 2

# Envoyer des requêtes ARP et mesurer les temps de réponse
sudo arping -I eth0 192.168.1.1

# Exemple de sortie :
# ARPING 192.168.1.1 from 192.168.1.100 eth0
# Unicast reply from 192.168.1.1 [00:1A:2B:3C:4D:5E]  1.234ms
# Unicast reply from 192.168.1.1 [00:1A:2B:3C:4D:5E]  0.987ms

# Compter le nombre de paquets envoyés
sudo arping -I eth0 -c 3 192.168.1.1

# Quitter après la première réponse
sudo arping -I eth0 -f 192.168.1.1

arp-scan — Scanner les hôtes sur le réseau local

# Scanner tout le sous-réseau local
sudo arp-scan --localnet

# Exemple de sortie :
# Interface: eth0, IP: 192.168.1.100, MAC: AA:AA:AA:AA:AA:AA
# 192.168.1.1    00:1A:2B:3C:4D:5E    (Unknown)
# 192.168.1.10   BB:BB:BB:BB:BB:BB    Dell Inc.
# 192.168.1.50   CC:CC:CC:CC:CC:CC    Apple, Inc.

# Scanner un sous-réseau spécifique
sudo arp-scan 10.0.0.0/24

# Afficher les doublons (détection d'usurpation)
sudo arp-scan --localnet --ignoredups

tcpdump — Capturer le trafic ARP

# Capturer tous les paquets ARP
sudo tcpdump -i eth0 arp

# Exemple de sortie :
# 14:23:01.123456 ARP, Request who-has 192.168.1.50 tell 192.168.1.10, length 28
# 14:23:01.124567 ARP, Reply 192.168.1.50 is-at bb:bb:bb:bb:bb:bb, length 28

# Sauvegarder pour analyse dans Wireshark
sudo tcpdump -i eth0 arp -w /tmp/arp_capture.pcap

# Afficher en détail avec décodage verbose
sudo tcpdump -i eth0 arp -v

ARP et la Gateway : le cas le plus fréquent

Dans la majorité des communications, ARP n'est pas utilisé pour trouver la machine de destination directe, mais pour trouver la gateway (routeur par défaut).

Votre PC (192.168.1.100) veut joindre Google (142.250.74.46) :

1. Google n'est pas dans le même sous-réseau → utiliser la gateway
2. Gateway = 192.168.1.1 → ARP pour 192.168.1.1
3. Réponse : 192.168.1.1 est à MAC:GG:GG:GG:GG:GG
4. Trame Ethernet envoyée à MAC:GG avec IP dest = 142.250.74.46
5. Le routeur reçoit la trame, lit l'IP, route vers Internet

C'est pourquoi si vous avez un problème avec votre gateway, ip neigh show ne montrera pas d'entrée REACHABLE pour l'IP de la gateway — diagnostic couche 2/3 classique.


Position d'ARP dans les couches réseau

ARP est unique : il opère entre la couche 2 et la couche 3.

┌────────────────┐
│  Couche 3 (IP) │  ← utilise ARP pour résoudre les adresses
├────────────────┤
│     ARP        │  ← opère ici, à la frontière
├────────────────┤
│ Couche 2 (ETH) │  ← transporte les trames ARP
└────────────────┘

Il est encapsulé dans des trames Ethernet (type 0x0806) mais gère des adresses de couche réseau. Dans le modèle TCP/IP, il appartient à la couche "Accès réseau". Dans le modèle OSI, il est souvent placé en couche 2 ou entre 2 et 3.


Récapitulatif

Concept Détail
ARP Request Broadcast, demande IP → MAC
ARP Reply Unicast, réponse avec MAC
Cache ARP Table locale IP → MAC avec timer
ARP Gratuit Annonce spontanée, détection de conflit
Proxy ARP Routeur répond à la place d'un hôte distant
ARP Spoofing Empoisonnement du cache → MITM
Outils ip neigh, arping, arp-scan, tcpdump arp

Passez maintenant au chapitre suivant : TCP et la connexion fiable — le protocole de transport qui garantit que vos données arrivent intactes.

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis