L'attaque de l'homme du milieu (MITM)

Ce chapitre de sécurité informatique sera consacré au protocole ARP. Il permet d’effectuer la correspondance adresse IP / adresse MAC, mais nous allons voir qu’il n’est pas très sûr. Une démonstration théorique de l’attaque de l’homme du milieu (couramment appelée MITM) sera présentée afin de mettre le doigt sur la sensibilité des données échangées dans un réseau local.

Le protocole ARP est utilisé avec l’IPv4, mais pas avec l’IPV6.

Le protocole ARP ?

Tout échange de données se fait suivant un protocole, c’est-à-dire un ensemble de règles permettant d’assurer la communication entre 2 machines. Le protocole ARP, pour Address Resolution Protocol (protocole de résolution d’adresse), est utilisé pour établir une correspondance entre adresses IPv4 et adresses MAC. Les cartes réseau raisonnent par adresses MAC, et donc il faut leur dire à quelle adresse MAC correspond telle IP : c’est là qu’intervient l’ARP.

Admettons un réseau en étoile dont les machines sont caractérisées par leur nom, leur adresse IP, leur adresse MAC :

  • Routeur, 192.168.1.1, 00:99:99:99:99:99 ;
  • Ordinateur 1, 192.168.1.51, 00:11:11:11:11:11 ;
  • Ordinateur 2, 192.168.1.52, 00:22:22:22:22:22.

Ces adresses MAC sont fictives et servent juste d’illustration.

Ordinateur 1 veut communiquer avec Routeur. Il connaît son adresse IP, mais la carte réseau a besoin de son adresse MAC pour lui transmettre le message. Il envoie donc une requête ARP. Mais pas n’importe comment ! Il va envoyer sa requête en broadcast. Si vous ne comprenez pas ce terme, vous devriez peut-être relire le paragraphe « Les envois de données » du chapitre sur l’adresse IPv4. Toutes les machines du réseau vont donc recevoir ce message disant « Qui est 192.168.1.1 ? Répondez-moi à 192.168.1.51 svp ! » (suivant le protocole ARP, bien entendu). Et normalement, le routeur doit lui répondre « C’est moi, mon adresse MAC est 00:99:99:99:99:99 ». Ordinateur 1 va alors stocker cette information dans une table de correspondance, la table ARP, au cas où il en aurait à nouveau besoin plus tard. On peut visualiser le contenu de cette table en rentrant la commande arp -a dans une console, sous Linux comme sous Windows. Ordinateur 1 peut maintenant communiquer avec Routeur, puisqu’il connaît son adresse IP et son adresse MAC.

Mais…

La faiblesse de ce protocole

Il est aisé pour une machine d’envoyer une requête ARP, aussi bien pour demander une adresse que pour répondre, pour en fournir une. Normalement, seule la machine dont l’adresse est demandée doit répondre à une requête. Mais en pratique, n’importe quelle machine peut le faire. Tout à l’heure, le routeur aurait pu répondre que son adresse MAC était 00:33:33:33:33:33, Ordinateur 1 l’aurait pris en compte sans sourciller. Simplement, quand il aurait voulu communiquer, cela n’aurait pas abouti. Pire encore ! Les ordinateurs acceptent généralement toutes les requêtes ARP leur parvenant. Ainsi, si Routeur dit à Ordinateur 1 que l’adresse MAC de Ordinateur 2 est 00:55:55:55:55:55, il va prendre en compte cette information. Cela pose un problème : un attaquant peut manipuler les tables ARP des machines présentes sur le réseau et ainsi détourner le trafic : c’est l’attaque de l’homme du milieu.

Le MITM : quand un intrus s’en mêle…

Restons dans le même réseau. Supposons maintenant que derrière Ordinateur 2 se trouve une personne indiscrète désireuse de savoir ce qui se dit entre Ordinateur 1 et Routeur. Il lui suffit d’envoyer une requête ARP à Ordinateur 1 disant que l’adresse MAC associée à 192.168.1.1 (l’IP du routeur) est 00:22:22:22:22:22, et d’envoyer une autre requête à Routeur disant que l’adresse MAC associée à 192.168.1.51 est 00:22:22:22:22:22. De cette manière, tout échange de données entre Ordinateur 1 et Routeur passera par Ordinateur 2 ! L’indiscrète personne peut alors analyser le trafic, puisqu’il passe par sa propre carte réseau, mais aussi l’altérer, modifier les informations qui transitent…

Attaque ARP cache poisoning en cours
Attaque ARP cache poisoning en cours
Attaque ARP cache poisoning
Attaque ARP cache poisoning

Plus précisément, il faut envoyer ces requêtes ARP à intervalles réguliers, car les tables peuvent se mettre à jour régulièrement. Si Ordinateur 1 et Routeur réussissent à se communiquer leurs vraies adresses MAC, le trafic reprendra normalement, et ne passera plus par Ordinateur 2.

Pour réaliser cette attaque, voici quelques logiciels utiles :

  • nemesis, sous Linux, permet de forger des requêtes ARP, entre autres ;
  • scapy, sous Linux également, est un outil très pratique en réseau, il permet de faire beaucoup de choses comme forger des requêtes ou faire de l’analyse réseau par exemple ;
  • Wireshark, sous Linux et Windows, permet d’analyser les requêtes qui passent par votre carte réseau ;
  • Cain&Abel, pour Windows, est un outil très puissant et potentiellement très dangereux, car il permet en quelques clics de notamment casser des mots de passe, de cracker des réseaux Wi-Fi et (c’est ce qui nous intéresse ici) de mettre en œuvre une attaque MITM très facilement ! Ce logiciel est génial car il est redoutable et facile d’utilisation, mais il peut être détecté comme dangereux par les antivirus. Et pour cause ! Il permet même de prendre discrètement le contrôle d’une machine à distance !

Le fait d’altérer volontairement les tables ARP s’appelle ARP cache poisoning (empoisonnement du cache ARP). Vous pouvez rencontrer cette expression dans le logiciel Cain&Abel. On parle de MITM uniquement quand quelqu’un s’intercale entre 2 machines pour intercepter, contrôler des données.

Si l’échange de données sensibles comme des mots de passe n’est pas chiffré, voici ce qui se passe.

Exemple concret

Pour illustrer la théorie, voici un cas concret d’une attaque MITM réalisée sur un réseau qui nous appartient (rien d’illégal, donc). Pour ce faire, les logiciels Cain et Wireshark seront utilisés. Toutefois, Cain étant un logiciel qui permet de faire beaucoup de choses pas très honnêtes, nous ne pouvons pas vous montrer précisément les manipulations à effectuer pour réaliser un MITM.

Il y a 2 hôtes dans le réseau 192.168.1.0/24 : Pirate-PC (192.168.1.56) et Pigeon-PC (192.168.1.84). Il y a aussi un routeur qui donne accès à Internet (192.168.1.1). Pirate-PC lance une attaque MITM entre Pigeon-PC et le routeur.

Interface de Cain
Interface de Cain

C’est facile, vous trouverez comment faire en cherchant un peu.

Sur Pirate-PC, on lance l’analyseur de trafic Wireshark. On lance une capture en ne demandant que les paquets en rapport avec Pigeon-PC.

Options de capture dans Wireshark
Options de capture dans Wireshark

Le filtre n’est pas obligatoire mais conseillé si on ne veut pas se perdre avec ses propres requêtes.

Maintenant, PigeonMan se connecte sur un site web qui ne propose pas d’identification sécurisée. On voit défiler plein de lignes incompréhensibles, mais en fouillant un peu, on tombe sur ça :

Paquets en clair capturés par Wireshark
Paquets en clair capturés par Wireshark

Un filtre « http » a été appliqué pour qu’on ne voie que les requêtes HTTP. On voit clairement les identifiants transmis en clair.

Voilà comment on peut se faire voler ses identifiants en moins d’une minute chrono. Pour les plus fainéants, Cain propose de récupérer automatiquement les mots de passe transmis par HTTP, FTP, SMTP, etc. C’est illégal dans la plupart des pays de voler des identifiants comme cela, mais pour notre exemple, cela a été réalisé depuis un réseau qui nous appartient et avec de faux identifiants (vous ne croyez quand même pas qu’on va vous donner accès à nos comptes ? :p ), donc ce n’est pas interdit. Mais ne comptez pas trop sur la loi pour vous protéger : pour arrêter une personne pratiquant cette attaque, il faut la prendre sur le fait, car une adresse MAC est facilement falsifiable et ne servira à rien si elle est enregistrée.

Peut-on se défendre ?

Malheureusement, cette faiblesse du protocole ARP est difficile à combler. On peut utiliser des tables ARP statiques, mais ce n’est pas pratique et lourd à mettre en place. Sous Windows par exemple, il faut utiliser la commande arp -s adresse_IP adresse_MAC pour chaque adresse à fixer. Une autre solution est d’utiliser uniquement IPv6, qui n’utilise pas ARP. En entreprise, des outils comme des IDS peuvent détecter des requêtes anormales. Les switchs peuvent aussi être configurés pour filtrer les adresses MAC autorisées en fonction des ports.

Pour garantir l’intégrité des données que vous échangez, le plus sûr est d’utiliser des connexions sécurisées quand c’est possible, en utilisant le HTTPS dès qu’un site le permet (le navigateur Firefox depuis sa version 69 le fait automatiquement), en configurant votre client e-mail pour qu’il envoie ses requêtes over SSL, c’est-à-dire à travers un protocole chiffré, … De nos jours, la plupart des logiciels chiffrent toutes les communications de bout en bout.

Il ne faut pas accepter n’importe qui sur son réseau : il convient de sécuriser son réseau Wi-Fi autant que possible (malheureusement, tous les systèmes de protection du Wi-Fi sont faillibles, même le WPA). Et même si vous utilisez un réseau câblé, si une machine du réseau est infectée par un malware, ce dernier pourra utiliser une attaque MITM pour espionner ce qu’il se passe sur les autres ordinateurs… :( C’est pas pour vous faire devenir paranoïaque, mais c’est important de faire attention à ce qu’il se passe sur son réseau !


La faiblesse étudiée est donc difficile à combler. Vous ne devriez pas laisser n’importe qui se connecter sur votre réseau. Par ailleurs, dans un réseau où les machines sont connectées en Wi-Fi non sécurisé, le simple fait d’être connecté au réseau permet de voir tout ce qui s’y passe : il suffit de configurer sa carte réseau en mode promiscuous, ou en mode monitor (pas besoin d’être connecté au réseau dans ce dernier cas) et on reçoit tous les paquets, même ceux qui ne nous sont pas destinés. Même pas besoin de trafiquer les tables ARP. Le chiffrement des communications sensibles est alors essentiel.