Aller au contenu
  1. Articles/

ARP Spoofing : comment ça fonctionne et comment s'en protéger

Ixonae
Auteur
Ixonae
Sommaire

Avertissement : Cet article a été traduit de l’anglais par un LLM. La précision n’est pas garantie. Vous pouvez lire l’article original en anglais.

L’attaque par ARP spoofing, également connue sous le nom d’empoisonnement ARP (ARP poisoning), est une technique utilisée pour attaquer les réseaux locaux. Elle permet d’intercepter les communications entre deux machines. Cet article explique comment elle fonctionne, comment l’utiliser et comment s’en protéger.

Le protocole ARP
#

Tout d’abord, nous devons définir ce qu’est le protocole ARP. ARP est l’abréviation de “Address Resolution Protocol” et opère dans la couche Internet du modèle TCP/IP. Je n’entrerai pas dans les détails de TCP/IP, mais ce que vous devez savoir, c’est que deux types d’adresses sont utilisés à ce niveau :

  • L’adresse IPv4 est une abstraction permettant d’identifier les machines sur le réseau. Elle est composée de 4 octets sous la forme A.B.C.D. Notez que si IPv6 est utilisé, le protocole NDP est utilisé à la place d’ARP.
  • L’adresse MAC est l’adresse physique de la carte réseau. Elle est censée être unique et est composée de 6 octets, représentée sous la forme AF:43:3E:54:FF:42.

Pour que deux machines communiquent sur le même réseau, c’est l’adresse MAC qui est utilisée. C’est là qu’intervient le protocole ARP. Il est chargé de trouver l’adresse MAC d’une machine à partir de son adresse IP. Pour ce faire, il existe deux solutions. Soit la machine possède déjà une entrée dans son cache et sait quelle adresse MAC correspond à quelle IP, soit non. Si ce n’est pas le cas, la machine diffusera une requête sur le réseau (ce qui signifie que toutes les adresses recevront la requête). La machine recherchée est censée être la seule à répondre à l’émetteur de la requête.

Cela fonctionne bien, mais aucune vérification n’est effectuée sur les différentes requêtes, ce qui rend le protocole non sécurisé.

Déroulement de l’attaque
#

La théorie
#

L’objectif de l’ARP spoofing est de faire croire à une machine que notre machine est celle avec laquelle elle souhaite communiquer. À cette fin, nous allons forger une requête (celle qui est diffusée dans la partie précédente) en nous faisant passer pour le routeur et l’envoyer à la victime.

Cette requête sera très similaire à une requête légitime, mais nous modifierons l’adresse MAC. Au lieu de l’adresse MAC du routeur, nous mettrons l’adresse MAC de notre machine (dans le cas où nous voulons nous faire passer pour le routeur ; nous pourrions mettre n’importe quelle autre adresse MAC). Lorsque la machine de la victime recevra le paquet, elle mettra à jour son cache avec les informations erronées… et voilà, nous recevrons désormais tout ce que la victime envoie au routeur. Bien entendu, nous devrons envoyer le paquet forgé régulièrement pour nous assurer que les informations erronées ne sont pas modifiées dans le cache de la victime.

La pratique
#

Avertissement : Mettre en pratique l’attaque suivante est illégal, sauf si vous la testez sur votre propre matériel ou avec l’autorisation des propriétaires des réseaux et des machines.

La théorie c’est bien, mais si on pratiquait un peu ? Nous allons maintenant utiliser l’ARP spoofing pour réaliser une attaque Man in the Middle. Brièvement, cette attaque consiste à intercepter les communications entre deux machines, c’est-à-dire que si Bob et Alice communiquent ensemble, Bob envoie un paquet au routeur, le routeur envoie le paquet à Alice, et ainsi de suite. Désormais, chaque paquet passera par notre ordinateur avant d’atteindre sa destination. Cela pourrait être utilisé pour intercepter les communications entre Bob et Alice mais aussi pour modifier le contenu des paquets (par exemple, pour inclure un logiciel malveillant).

À cette fin, nous utiliserons deux outils : Ettercap et Wireshark. Le premier s’occupera de l’empoisonnement ARP tandis que le second sera utilisé pour visualiser les paquets qui transitent.

D’abord, nous devrons activer le transfert IP (IP forwarding). Si nous ne le faisons pas, les paquets que nous interceptons s’arrêteront à notre machine, et donc la communication entre Bob et Alice sera interrompue. Pour ce faire, nous taperons la commande suivante. La modification ne sera pas permanente et sera désactivée au prochain redémarrage de l’ordinateur.

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

Une fois cela fait, nous lancerons Ettercap et nous irons dans “Sniff / Unified sniffing” pour sélectionner l’interface que nous utilisons pour nous connecter au réseau (par exemple eth0). Ensuite, nous sélectionnerons notre cible. Pour cela, nous ouvrirons “Hosts / Hosts List” et exécuterons un scan pour trouver les hôtes connectés au réseau. Vous devriez alors obtenir quelque chose ressemblant à la capture d’écran suivante.

Ettercap hosts list
Liste des hôtes Ettercap

Ensuite, nous définirons notre routeur (192.168.1.1) comme première cible et un ordinateur connecté au réseau (192.168.1.105) comme deuxième cible. Veuillez noter que l’ordre des cibles n’a pas d’importance ici.

Avant de poursuivre l’attaque, ouvrons un terminal sur la machine cible et lançons la commande arp -a qui affichera l’état du cache. On peut alors voir que les adresses MAC correctes sont associées aux bonnes adresses IP.

Local IP/ARP address mapping
Correspondance locale IP/ARP

Maintenant, nous allons aller dans “Mitm / ARP Poisoning” pour lancer l’attaque. Avant cela, Wireshark a été lancé et configuré pour voir les requêtes ARP transitant sur le réseau.

Wireshark ARP messages capture
Capture des messages ARP par Wireshark

Comme on peut le voir sur Wireshark, nos paquets ARP forgés sont envoyés, vérifions donc à nouveau le cache ARP de la victime pour voir si l’attaque a réussi.

Poisoned ARP cache
Cache ARP empoisonné

Sans surprise, on peut observer que le cache ARP de la victime contient l’adresse MAC de l’attaquant au lieu de celle du routeur.

Maintenant, quand la machine attaquée envoie des paquets quelque part, au lieu d’aller vers le routeur puis là où ils doivent aller, ils passeront d’abord par l’appareil utilisé pour l’attaque. Nous allons maintenant utiliser Wireshark pour inspecter le trafic HTTP provenant de/vers la victime.

Si nous nous connectons à un site web qui n’utilise pas le SSL depuis la machine cible, alors, magie ! Vous pouvez voir sur la capture d’écran suivante que les identifiants de connexion ont été interceptés et que la victime essaie d’accéder au service avec le couple nom d’utilisateur/mot de passe “Moi” et “MonMotDePasse”.

Intercepting traffic with Wireshark
Interception du trafic avec Wireshark

Que pouvons-nous en retenir ?
#

En pratiquant cette attaque, nous avons appris plusieurs choses :

  • Cette attaque est extrêmement facile à réaliser
  • La personne qui vous a dit de faire attention aux WiFi publics avait raison
  • Le trafic non chiffré, c’est mal

Autres possibilités offertes par l’attaque
#

Dans cet exemple, nous avons uniquement intercepté les paquets passant par la machine en HTTP, mais il est tout à fait possible (même si plus difficile) de réussir cette attaque en interceptant le trafic HTTPS.

La raison pour laquelle c’est plus difficile est que le trafic HTTPS utilise des certificats signés. Un individu malveillant devrait alors voler la clé privée du certificat. S’il ne le fait pas, une alerte s’affichera sur l’ordinateur de la victime indiquant que le certificat est invalide (cependant, la victime a toujours la possibilité d’ignorer cette alerte).

L’attaquant pourrait également modifier les pages visitées par l’utilisateur avec du code Flash ou JavaScript malveillant pour infecter la machine de la victime avec un logiciel malveillant, ou procéder à du DNS spoofing afin de rediriger la victime vers un serveur de son choix.

Comment se protéger
#

Alors, ARP est vulnérable. Mais heureusement, il existe des moyens de se protéger.

Utiliser un VPN
#

C’est probablement lorsque vous connectez votre ordinateur à un réseau public (aéroport, hôtel, …) que vous êtes le plus exposé. Dans ce cas, la meilleure option est d’utiliser un VPN avec un killswitch empêchant tout paquet de ne pas passer par celui-ci. Ainsi, le trafic est chiffré et un attaquant potentiel ne pourra rien faire. Vous pourriez dire “Oui, mais si je ne me connecte qu’à des sites HTTPS, alors c’est bon, non ?”. La réponse est non. D’abord, vous pourriez toujours être victime d’empoisonnement DNS. Ensuite, une grande proportion de sites web utilisent HTTPS tout en chargeant du JavaScript via HTTP, donc le risque reste le même !

Utiliser une table ARP statique
#

Une autre solution est d’utiliser une table ARP statique au lieu d’une table dynamique comme dans notre exemple. Cela fonctionne bien mais n’est pas nécessairement l’option la plus pratique.

Surveiller le réseau
#

Il est très facile de détecter les attaques ARP (comme vous l’avez peut-être remarqué avec la capture d’écran de Wireshark). Vous pourriez utiliser des outils comme Arpwatch, Prelude-IPS ou Etherwall pour les détecter. Encore mieux, si vous utilisez un NIPS (Network Intrusion Prevention System), vous serez en mesure d’arrêter l’attaque automatiquement.