Dans le monde de la sécurité informatique, il existe trois types de failles : L’exploit connu de tous, généralement rapidement corrigé par un patch. L’exploit de type 0-day, très peu de gens en ont connaissance — qui sera peut-être corrigé un jour — Et enfin les vulnérabilités dues a la conception d’un système/protocole et qui ne pourrons pas être, c’est le cas de par exemple du protocole de routage BGP (sur lequel j’ai fait un billet précédemment) ou encore de l’ « Address Resolution Protocol » aka ARP. Et tout bon sysadmin se doit de les connaitre pour savoir où et comment surveiller son réseau et se prémunir de ces attaques qui ne pardonnent pas.
Ce protocole et les attaques qu’il permet sur un LAN sont plutôt bien connus. Néanmoins, les conséquences de ces attaques sont rarement appréhendées à leur juste mesure. La technique que nous allons voir ici se nomme ARP Spoofing (ou ARP Cache poisoning). C’est une technique de spoofing très efficace bien que facilement détectable et – comme je le disais plus haut, parfaitement incurable, car lié directement a sa conception. . Nous étudierons trois possibilités de sont utilisation : Denial of Service, Man in the middle et MAC Flooding. Mais tout d’abord, commençons par une piqûre de rappel.
MAJ 6 Mai 2009: Correction de quelques fautes.
1. Modèle OSI
2. L’adresse MAC
3. Le protocole ARP
4. L’ARP Spoofing
5. Faiblesses
5.1 Denial of Service
5.2 Man in the middle
5.3 MAC Flooding
6. Solutions
6.1 Pour les petits réseaux
6.2 Pour les grands réseaux
6.3 Pour tous le monde
1. Modèle OSI
L’OSI (Open Systems Interconnection) est un modèle de communications entre machines proposé par l’ISO (Organisation internationale de normalisation). Il décrit les fonctionnalités nécessaires à la communication et l’organisation de ces fonctions.
Dans sa forme la plus simple, il divise le réseau en sept couches que nous ne détaillerons pas ici. La numérotation des couches commence par le bas, c’est à dire par le matériel (matériel en bas, logiciel d’application en haut. Nous nous intéressons uniquement à certaines couches dites basses :
• La couche physique (niveau 1) : La couche physique est chargée de la transmission effective des signaux électriques ou optiques entre les interlocuteurs (100BASE-TX, ADSL, Firewire, USB, RS-232…).
• la couche liaison (niveau 2) est le lien entre la carte réseau et la couche réseau (Ethernet, Token ring, WiFi, PPPoE)
• la couche réseau (niveau 3) gère l’adressage logique et le routage (IPv4, IPv6, ICMP).
Exemples :
- Un hub est un matériel de niveau 1 : il permet de relier plusieurs machines à une même branche du réseau. Il se contente de faire circuler les signaux dans les deux sens, sans traitement.
- Un routeur est un matériel de niveau 3, c’est-à-dire qu’il intervient aux niveaux 1 à 3. C’est le dispositif de base des réseaux. Il lit l’adresse IP des paquets qu’il reçoit et les re-expédie où il faut depuis les données contenues dans sa table de routage et son cache ARP. Cette dernière est mise à jour régulièrement, en fonction des données que le routeur reçoit des routeurs et des ordinateurs voisins.
2. L’adresse MAC
L’adresse MAC (Media Access Control) est un identifiant physique constitué de 6 octets, elle est attribuée par le constructeur de l’équipement et « hard codé » sur la carte (il est possible de la changer, mais ce n’est pas le but de cet article.) Elle consiste en six nombres hexadécimaux séparés par des « – » ou des « : », il existe potentiellement 248 (environ 281 000 milliards) d’adresses MAC possible, il est donc quasiment impossible de se retrouver avec un doublon sur le réseau. Notez que l’adresse de broadcast est: FF:FF:FF:FF:FF:FF, les données seront envoyées à l’ensemble du réseau local.
Nota : L’IEEE a donné des préfixes de 24 bits sur les 48 bits aux fabricants, c’est l ‘OUI (organizationally unique identifier). Ce qui permet facilement d’identifier une carte de destination, ex :
00-00-0C(hex) Pour Cisco ou encore 00-00-7D(hex) pour Sun – (clin d’œil a touff’.. si tu me lis ;)
Vous pouvez y avoir accès, sous Linux avec la commande ifconfig :
[user@machine]$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:90:27:52:78:7A
inet addr:192.168.10.51 Bcast:192.168.10.255 Mask:255.255.255.0
En savoir plus : http://www.iana.org/assignments/ieee-802-numbers
3. Le Protocole ARP
Ce protocole est vraiment très simple : Il sert à mettre en corrélation l’adresse IP avec l’adresse MAC pour savoir qui sont les machines sur le réseau et donc savoir ou router les paquets. Ce protocole est totalement séparé de TCP/IP puisqu’il n’opère qu’entre les niveaux 2 et 3 de la couche réseau. Nous pourrions le comparer aux DNS sauf qu’au lieu de convertir les noms de domaines en IP, il convertit les IPs en Adresse MAC.
Les équipements réseaux communiquent en échangeant des trames Ethernet (dans le cas d’un réseau Ethernet bien sûr) au niveau de la couche liaison de données, toute machine connectée a un réseau possède un cache ARP de toutes les adresses IP/MAC rencontrés, ce qui permet de ne pas encombrer les réseaux en renouvelant les requêtes pour communiquer avec les machines contactées précédemment.
Il comprend quatre messages de base :
1. Une requête ARP: L’ordinateur A demande sur le réseau (en broadcast) « Qui a cette adresse IP ? »
2. Une réponse ARP: L’ordinateur B répond a l’ordinateur A : « J’ai cette adresse IP et mon adresse Mac est .. »
3. Une requête RARP (ARP inversé): Même principe que le 1. sauf que l’ordinateur A demande : “Qui a cette adresse mac ?” (En réalité le RARP est très peu utilisé et est essentiellement utilisé pour les stations de travail n’ayant pas de disque dur et souhaitant connaître leur adresse logique.)
4. Une réponse RARP: L’ordinateur B répond a l’ordinateur A: “J’ai cette adresse IP:..”
Puisqu’il s’agit de broadcast, tous les ordinateurs connectés au support physique vont recevoir la requête. Les autres machines recevront aussi le message et pourrons analyser les messages pour stocker dans leur cache une liste des adresses IP/MAC (Vous commencez a voir ou je veux en venir…) La machine qui possède cette adresse MAC, sera la seule – ce qui est censé être le cas dans tout réseau, cf : Adresses MAC, plus haut – à répondre en envoyant à la machine émettrice une réponse.
En savoir plus : http://tools.ietf.org/html/rfc826
4. L’ARP Spoofing
Bien, assez de tous ces rappels ennuyeux, passons aux choses amusantes : la vulnérabilité de ce protocole. Pour améliorer le temps de réponse et limiter l’utilisation du réseau la plupart des systèmes mettent a jour leur cache ARP a chaque fois qu’ils reçoivent une réponse, même s’ils ne l’on pas demandé : ce qui veut dire qu’un « pirate » envoyant un message ARP a l’ordinateur B disant « l’ordinateur C a mon Adresse MAC » recevra ensuite tous les messages qui devraient normalement être délivrés a cet ordinateur C.
petite mise en situation :
(J’ai simplifié les adresses MAC pour une meilleure lisibilité)
A. Le serveur, 00:00:00:00:00:01 – 192.168.0.10
B. Un utilisateur, 00:00:00:00:00:02 – 192.168.0.20
C. Le pirate, 00:00:00:00:00:03 – 192.168.0.30
C annonce à B “192.168.0.10” est a l’adresse MAC: 00:00:00:00:00:03.
C annonce à A “192.168.0.20” est a l’adresse MAC: 00:00:00:00:00:03.
Comment ? avec des solutions comme ARPSpoof ou Némésis, très simplement :
[user@cible]$ traceroute 192.168.0.10
traceroute to 192.168.0.10 (192.168.0.10), 30 hops max, 40 byte packets
1 192.168.0.10 (192.168.0.10) 718 ms 461 ms 849 ms
[user@cible]$ arp
Address HWtype HWAddress Flags Mask Iface
192.168.0.10 ether 00:00:00:00:00:01 C eth0
192.168.0.30 ether 00:00:00:00:00:03 C eth0
[evil@pirate]$ arpspoof -t 192.168.0.30 192.168.0.10
0:0:0:0:0:3 0:0:0:0:0:2 0806 42: arp reply 192.168.0.10 is-at 0:0:0:0:0:3
0:0:0:0:0:3 0:0:0:0:0:2 0806 42: arp reply 192.168.0.10 is-at 0:0:0:0:0:3
0:0:0:0:0:3 0:0:0:0:0:2 0806 42: arp reply 192.168.0.10 is-at 0:0:0:0:0:3
[user@cible]$ traceroute 192.168.0.10
traceroute to 192.168.0.10 (192.168.0.10), 30 hops max, 40 byte packets
1 192.168.0.10 (192.168.0.10) 612 ms 465 ms 515 ms
2 192.168.0.30 (192.168.0.30) 238 ms 121 ms 169 ms
Maintenant toutes les communications de l’utilisateur vers le serveur (ou inversement) seront routées vers le pirate… qui pourra par exemple récupérer les login/mot de passe.
5. Faiblesses
Comme je viens de le dire, il n’y a aucun système d’authentification. ARP est basé sur la confiance : il considère tous les messages reçus comme authentiques, qu’il provienne de la machine légitime ou pas et il n’intègre aucun moyen de vérification. Je pense que les concepteurs de ces protocoles ont sûrement simplifié les communications pour que les réseaux fonctionnent de manière optimale, les débits étaient très peu élevés à cette époque et un système d’authentification aurait été beaucoup plus lourd.
La possibilité d’associer n’importe quelle adresse IP avec une @MAC permet à un pirate plusieurs vecteurs d’attaques, je vais maintenant en détailler 3 : Denial of Service, Man in the Middle et MAC Flooding.
5.1 Denial of Service (DoS)
Comme nous l’avons vu précédemment, un pirate peut facilement associer une adresse IP a une fausse adresse MAC. Par exemple, un pirate peut envoyer une réponse ARP associant l’adresse de vôtre routeur avec une adresse MAC qui n’existe pas. Votre ordinateur pense donc connaître réellement la passerelle par défaut, mais en fait ils envoient leurs paquets a une destination qui n’existe pas. Le pirate vous a isolé du réseau.
Nous pourrions tout aussi bien projeter – sur un réseau plus grand – une attaque de type DDoS (Distributed Denial of Service) en signalant a toutes les machines qu’une seule adresse MAC correspond a toutes les adresses IP. Ce qui risque de submerger la machine sous des requêtes en tout genre. (Voir aussi MAC Flooding).
5.2 Man in the Middle
Une autre utilisation intéressante de cette faille est de rester dans l’ombre et d’ « écouter » le trafic (sniffing) pour récupérer des informations comme les logins et mot de passe… ce qui est particulièrement dévastateur, car le pirate peut rapidement avoir accès a des informations qui lui permettront de s’infiltrer plus profond dans vôtre réseau.
Mise en œuvre : Dans le cadre d’un ARP Poisoning simple, les machines n’arrivent plus a joindre leur destinataire légitime, l’attaque est donc très facilement repérable. Mais le pirate peut facilement mettre en place ce qu’on appelle l’IP Forwarding (echo 1 > /proc/sys/net/ipv4/ip_forward), celles-ci enverront donc leurs trames Ethernet à la machine pirate tout en croyant communiquer avec la cible, et ce de façon transparente pour les switches. De son côté, la machine pirate stocke le trafic et le renvoie à la vraie machine en forgeant des trames Ethernet comportant la vraie adresse MAC (indépendamment de l’adresse IP) pour cela il suffit en fait d’envoyer régulièrement des paquets ARPReply en broadcast, contenant l’adresse IP cible (mettons, un serveur) et la fausse adresse MAC. Cela a pour effet de modifier les tables dynamiques de toutes les machines du réseau. Ce qui permet à la machine du pirate d’écouter toutes les informations qui transitent par son ordinateur et il peu – facilement – avoir accès a vos mots de passe non chiffrés (entre autres).
5.3 MAC Flooding
Le MAC Flooding est un ARP Cache poisoning visant les routeurs et les switches. Certains matériels réseaux actifs – lorsqu’ils sont surchargés – basculent dans un mode moins gourmand en ressources, pour sauvegarder leurs liens : ils deviennent de simples hubs et donc broadcastent tout le trafic réseau sur tous leurs ports (et donc tous les ordinateurs qui y sont connectés. (Et en floodant la table ARP d’un switch avec énormément de données on peut facilement le surcharger..) ce qui permet ensuite au pirate d’écouter facilement tout ce qui transite sur le réseau.
6. Solutions
Certaines solutions que je vous propose ci-dessous sont simples, mais n’hésitez pas à les mettre en place – car si vous vous pensez à l’abri c’est là que vous êtes le plus vulnérable. Notez tout de même que l’ «ARP Poisoning» ne peut être utilisé qu’en local. Il doit contrôler une machine sur votre réseau, ce qui veut dire que le pirate aurait déjà accès à ce réseau… Parce que cette faille est inhérente au protocole requis par TCP/IP vous ne pourrez le patcher, cependant il existe des solutions pour le surveiller/détecter.
6.1 Pour les petits réseaux
Si vous êtes administrateur d’un petit réseau, vous avez plusieurs méthodes imparables pour vous prémunir de ces attaques : Utiliser des Adresses IP fixes / Tables ARP statiques. (arp –s pour définir les @MAC/IP de tous vos périphériques) ils ne changeront donc jamais, quels que soient les messages reçus. Si vous avez mis en place un contrôleur de domaine, il est possible de définir un script de démarrage dans lequel vous spécifieriez ces adresses.
Gardez tout de même a l’esprit que maintenir une liste de ces adresses est possible seulement si vous possédez un petit réseau. S’il devait s’agrandir vous seriez rapidement submergé par le temps demandé a maintenir cette liste, car il vous faudrait ajouter chaque machine a ce script avant qu’elle ne puisse dialoguer avec les autres (quid de la taille du fichier script ?).
6.2 Pour les grands réseaux
Si vous êtes administrateur d’un réseau informatique assez étendu vous devriez être équipé de switch qui propose des options « port security » (par exemple Cisco) cette option permet de définir une seule adresse MAC par ports et qui – si cette adresse change – verrouille le port. Cela permet de limiter la plupart des attaques ARP comme le Man-in-the-middle.
6.3 Pour tous le monde
La meilleure protection contre l’ARP Poisoning est la surveillance de votre réseau, en effet, avec les outils appropriés, cette attaque ne peut pas passer inaperçue. Par exemple, il existe un outil nommé ARPwatch qui permet – en autres – d’envoyer une alerte quand messages ARP anormaux apparaissent (j’écrirais un billet sur l’envoi d’alertes par SMS via des API bientôt).
Possibly Related Posts:
- Du load-balancing avec vyatta
- Crashdump.fr passe en AES-256.
- Effacer définitivement les données d’un disque dur sous *nux (dd, zero, random)
- Serveur HTTP Python en une ligne..
- HackThisSite.org Basic Howto: 1 à 10













Tout sur HADOPI sans en parler says:
[...] Pujol de son côté a publié un billet très complet sur l’ARP Spoofing, également appelée ARP Cache [...]
avr 26, 2009, 20:11Amy says:
C'est bien expliqué, on dirait un de mes profs quand il nous fait découvrir ( ou faisait ) les grandes aventures de Rakam le red :p
avr 26, 2009, 8:29crashdump says:
Eh bien, Merci. Je file m'acheter un chapeau et me laisser pousser la barbe !
avr 26, 2009, 13:30crashdump says:
Merci, c'est toujours très appréciable d'avoir des retours comme ça !
PS: C'est la première fois que je trouve un Admin Sys MS sympathique… ;)
avr 26, 2009, 20:17Istace Emmanuel says:
Je suis moi même Admin Sys mais comme Unix/Microsoft Virtualisation Oriented System Administrator et je trouve votre résumé sur l'arp spoofing intéressant quoique, pas assez détaillé a mon gout… Enfin bref, chouette boulot.
PS : C'est la première fois que je trouve un militaire sympathique…
avr 26, 2009, 19:30