arp failles

ARP : comprendre le protocole et ses différentes failles de sécurité

Lorsque vous utilisez votre ordinateur ou bien même votre smartphone, ceux-ci communiquent sans cesse à l’aide de nombreux protocoles dont ARP. Dans cet article, nous allons nous intéresser de plus près à son fonctionnement et aux failles qui en découlent.

Cet article a un objectif purement éducatif. Je ne suis en aucun cas responsable de vos actes. Préférez les actions sur votre réseau ou sur un réseau qui vous y autorise.

Qu’est-ce que ARP (Address Resolution Protocol) ?

Comme son acronyme l’indique, ARP (Address Resolution Protocol) est un protocole qui permet de résoudre des adresses MAC (Media Access Control). Son objectif est d’associer une adresse IP (IPv4) à une adresse physique. Il est indispensable pour que les différentes machines d’un réseau communiquent entre elles. Si vous avez suivi les conseils de l’article sur comment sécuriser son serveur SSH en 12 étapes, vous avez utilisé le protocole ARP.

modèle OSI TCP/IP

En se basant sur le modèle OSI (Open Systems Interconnection), on peut donc positionner le protocole ARP entre la couche 2, liaison de données (avec l’adresse MAC) et la couche 3, réseau (avec l’adresse IPv4).

Les spécifications techniques de ARP ont été définies dans la RFC 826 de 1982 alors que celui-ci est encore utilisé aujourd’hui.

ARP plus en détail

Lorsqu’un ordinateur souhaite communiquer avec un autre, il va envoyer des trames Ethernet. Pour que celles-ci arrivent à destination, il a besoin de connaître l’adresse physique (MAC) de destination.

À ce stade, l’ordinateur émetteur connaît l’adresse IP de destination et va en conséquence regarder dans son cache (ou table) ARP pour y associer une adresse MAC. C’est tout simplement un fichier texte.

Consulter son cache ARP

Sur la majorité des systèmes d’exploitation, vous pourrez exécuter les commandes :

➜  ~ arp -a
livebox.home (192.168.1.1) at 98:42:65:14:ac:a0 on en0 ifscope [ethernet]
laptop-jl74fr23.home (192.168.1.18) at 54:13:79:b7:e9:af on en0 ifscope [ethernet]
chromecast.home (192.168.1.21) at 6c:ad:f8:88:45:4c on en0 ifscope [ethernet]
pc-29.home (192.168.1.40) at 46:34:40:52:e0:1c on en0 ifscope [ethernet]

Ou :

/ # ip neigh
10.5.0.4 dev eth0 lladdr 02:42:0a:05:00:04 ref 1 used 0/0/0 probes 4 REACHABLE

De ce fait, si la trame Ethernet que je souhaite envoyer est à destination de mon Chromecast avec l’adresse IP 192.168.1.21, je regarde dans ma table et je vois que l’adresse MAC associée est 6c:ad:f8:88:45:4c.

Trois types d’échanges ARP

Qui dit réseau dit communication. En effet, les tables ARP ne se sont pas remplies comme par magie. Si l’association n’est pas présente dans la table, il faut pouvoir trouver notre inconnue.

Pour ce faire, il y a trois types d’échanges :

  • Les requêtes (Request – Who has) : ce type d’échange est utilisé lorsque l’ordinateur qui souhaite émettre une trame ne connaît pas l’adresse MAC du destinataire. C’est de cette manière que le cache se remplit au fur et à mesure des communications.
    L’ordinateur, via ARP, demande : Who has 192.168.1.40? Tell 192.168.1.1. (quelle est l’adresse MAC correspondant à l’adresse IP adresseIP ? Répondez à monAdresseIP)
    Cette requête est réalisée en Broadcast, cela signifie qu’elle est envoyée à tout le segment réseau (dans mon cas : à tous les appareils de mon domicile).
  • Les réponses (Reply – Is At) : elle répond à la question précédemment posée si l’adresse IP lui appartient. Elle va alors répondre son adresse IP et son adresse MAC pour que l’ordinateur puisse l’ajouter à son cache ARP et envoyer la trame Ethernet.
    La réponse est en Unicast, c’est-à-dire uniquement vers l’ordinateur qui a posé la question : 192.168.1.1 is at 98:42:65:14:ac:a0 (je suis adresseIP, mon adresse MAC est adresseMAC)
  • Les gratuitous ARP (requêtes gratuites) : ce type d’échange est une réponse alors qu’il n’y a pas eu de demande. Elle est typiquement utilisée lorsqu’un appareil démarre pour s’annoncer sur le réseau. Contrairement à une réponse classique, elle n’est pas en unicast mais en broadcast.

Cela aboutit à une entrée ou une mise à jour du cache.

Si vous voulez voir les requêtes qui partent et arrivent de votre ordinateur, vous pouvez installer Wireshark. Il vous suffit ensuite de sélectionner la carte réseau de votre choix.

Paramètres du protocole

Lorsqu’on regarde de plus près les paramètres des trois types d’échanges, à l’aide de Wireshark par exemple, on se rend compte que c’est assez simple.

Hardware TypeMatériel utilisé pour véhiculer le message ARP.
Protocol TypeType de protocole utilisé.
Hardware sizeNombre d’octets pour les adresses MAC font 6 octets ou 48 bits.
Protocol sizeNombre d’octets pour l’adresse IPv4.
OpcodeDéfinit la nature du message.
Sender MAC addressAdresse MAC de l’émetteur.
Sender IP addressAdresse IP de l’émetteur.
Target MAC addressAdresse MAC de la cible (00:00:00:00:00:00 si l’opcode est à 1, donc une request et ff:ff:ff:ff:ff:ff si l’opcode est à 2 et que c’est une gratuitous ARP).
Target IP addressAdresse IP de la cible.

Sur une Request, notre inconnue : X est l’adresse MAC de la cible. C’est la raison pour laquelle elle est définie sur 00:00:00:00:00.

Différents opcode

Les trois opcodes de référence sont :

0Reserved[RFC5494]
1REQUEST[RFC826][RFC5227]
2REPLY[RFC5227]

Il y en a de nombreuses autres, mais qui ne sont pas de référence.

Vulnérabilités du protocole

Maintenant que nous avons bien compris son fonctionnement, on peut constater qu’il y a deux problèmes principaux en matière de sécurité informatique :

  • Pas de système d’authentification
  • Pas de contrôle sur la chronologie ou la séquence request/reply

Il est alors possible pour un attaquant de réaliser différentes attaques en forgeant des paquets ARP malveillants (en changeant certaines variables) pour faire un Man In The Middle (MITM).

ARP Cache Poisoning

Le cache poisoning est une des manières de faire un MITM. Comme son nom l’indique, l’attaque consiste à empoisonner le cache d’une ou plusieurs machines.

L’attaque consiste à envoyer des requêtes ARP de réponse à la victime en usurpant l’adresse MAC de la passerelle (ou d’un autre client). Il est nécessaire d’envoyer des requêtes à la victime en continu pour qu’elle garde notre adresse Mac liée à l’adresse IP de la passerelle dans le cache de la table ARP. Cela nous permet de nous positionner en MITM et de recevoir toutes les requêtes effectuées par notre victime.

ARP cache poisoning schéma attaque
Auteur : Morgan Soulard

Dans le but que l’attaque ne soit pas découverte, il faut rediriger le trafic reçu de la victime vers la passerelle légitime pour que les requêtes de la victime aient des réponses.

Pour ce faire, il existe différentes manières, vous pouvez construire un paquet avec Scapy, utiliser un outil tout prêt comme Ettercap ou bien même la ligne de commande arpspoof.

Si vous voulez intercepter le trafic entre un client et la passerelle, il suffit de créer deux requêtes ARP avec un opcode à 2 (is-at) :

  • Empoisonnement du client : nous renseignons l’adresse IP de destination “pdst” avec l’IP de notre victime et l’adresse MAC destination “hwdst” avec l’adresse MAC de la victime.
  • Empoisonnement de la passerelle : nous renseignons également l’adresse IP source “psrc” avec l’IP de la passerelle et l’adresse MAC source “hwsrc” avec l’adresse mac de notre poste afin d’usurper l’identité de la passerelle.

Renforcer le protocole ARP

Bien qu’il y ait des solutions simples, elles sont en réalité compliquées à mettre en place.

D’abord, vous pouvez surveiller le réseau grâce à différentes solutions de monitoring (arpalert, arpwatch, IDS, etc). Il est aussi possible de définir des entrées statiques dans le cache ARP de chaque machine, mais dès que le parc informatique est important, cette solution se révèle compliquée. Vous pouvez aussi limiter le nombre d’adresses MAC par port sur le switch.

Il y a aussi une version sécurisée de ARP : S-ARP (IEEE 1254311) que je n’ai jamais pu tester.


Publié

dans

par

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *