ARP scanning

Par 4n9e le 15-10-2005



Address resolution protocol , vulnérabilités et Nmap



Sommaire :
I. Overview
II. En pratique
III. Vulnérabilités
IV. Back to Scan
V. Et plus si affinités



I. Overview

Avant d'entrer dans le vif du sujet, voyons un peu de quoi il retourne.

ARP est l'acronyme de address resolution protocol. Il faut voir ceci comme
un outil qui va se charger de la traduction entre l'adresse IP et l'adresse MAC
(Machine Access Code). C'est à dire, entre l'identité virtuelle (l'IP) d'une machine sur le reseau, et son identité réelle (MAC) et physique.

En gros, ceci revient à écrire votre numéro de téléphone en une suite de fils électriques branchés physiquement à votre appareil.


Veuillez patienter, nous recherchons votre correspondant...

Lors d'une communication entre A et B, A va dans un premier temps s'assurer que B est bien dans le meme reseau que lui. Si c'est le cas, A va alors envoyer à tous le reseau contenant un paquet qui va demander l'adresse MAC de son correspondant B.
Enfin, lorsque A connait l'adresse, il peut engager le dialogue avec son correspondant. En réalité, les hosts du reseau ont une table ARP qui contient les correspondances IP/MAC pour une periode donnée.

Dans l'éventualité où B serait sur un autre reseau, A va envoyer une requete similaire à ceci pres que c'est l'adresse MAC du routeur qu'elle attend cette fois.
Lorsque A enverra ses paquets à B, en réalité il va plutot les envoyer vers l'adresse MAC du routeur, qui se chargera a son tour de faire suivre (soit à l'adr MAC de B, soit à un autre routeur et ainsi de suite).

Le numéro que vous demandez n'est pas attribué. Essayez ulterieurement...

Si un routeur recoit un paquet SYN (paquet destiné à établir une negociation de connexion entre machines dans ce cas), et que l'adresse IP à laquelle il est destiné n'est pas attribuée, il va répercuter la demande ARP a tout le monde dans l'espoir de trouver son destinataire.
A ce petit jeu on ne s'en sortirait plus, c'est pourquoi la requete a une durée de vie (Timeout). Celui ci atteint, le routeur renvoie avec tristesse un ICMP "Host Unavalible" à son auteur.
Appliqué au scan, si on envoyait 4000 requetes SYN sur 10 hosts deconnectés dans notre liste , on verrait passer 40 000 requetes ARP a ce moment là...

Pour éviter ce genre de déconvenue, Nmap et d'une facon générale beaucoup d'applications réseau commencent d'abord par envoyer des requetes PING (Icmp ou "Tcp") afin de s'assurer de l'éveil de l'host en question.
Bien sur, il y a là aussi broadcast de requetes ARP si l'host est deconnecté, mais au moins ceci évite -il de poursuivre de la meme facon des tentatives de discussions inutiles et riches en ARP.

A ce stade, soulignons le fait que comme ces requetes ARP sont envoyées en broadcast a tout le monde, le danger de se faire repérer pour l'attaquant est multiple :
en effet, meme si l'admin n'a pas été alerté par son IDS/ Firewall, n'importe quel autre utilisateur qui y à fait attention peut avoir remarqué le traffic "étrange".

II. En pratique

Contenu du paquet ARP :

Taille :: contenu
28 byte :: en tete pour le protocole ethernet IPv4
8 bytes :: Donnée ARP
20 bytes :: Donnée ethernet/adresse IP


Types de requetes :

1- ARP Request Message

Contient les adresses IP et MAC de la source dans le champ Source, et l'adresse MAC de broadcast ff.ff.ff.ff.ff.ff dans le champ Destinataire.

2- ARP Reply Message

Contient les adresses MAC et IP de celui qui a répondu dans le champ Source, et les adresses MAC et IP de celui qui a envoyé la demande dans le champ Destinataire.

III. Vulnérabilités

La plus connue est l' ARP poisoning. Sous ce nom ce cache le fait de répondre à une requete ARP envoyée sur le reseau à la place du véritable destinataire.
Ceci se fait par modification de ses données de réponse, partant du principe que cette réponse va remplacer celle existante chez la machine qui a envoyé la requete, ou si elle n'existait pas, la créer.

Il en résulte des attaques de type DoS, Deni de Service. En pratique, l'attaquant aura pour but de forcer l'interdicition d'acces à un service à la machine qu'il vise sur les entrées du dispositif de filtrage.
Ceci lui permet d'éviter les limitations dues aux protocoles, ou de terminer des connexions TCP sans avoir besoin d'envoyer en masse des RST par exemple.
Il va donc viser à empecher des acces au web exterieur en changeant par exemple l'entrée MAC du client sur le cache de la passerelle.

Il peut aussi en resulter des tentatives d'overflow des tables ARP: si on considère qu'une adresse MAC est composée de 6 bytes (aa:bb:cc:dd:ee:ff), il existe donc 2^48 possibilités d'adresses.
Le but va être cette fois de toutes les créer alétatoirement et de les soumettre au switch jusqu'à voir à combien il crashe.
Le resultat est variable : le switch peut alors cesser de fonctionner et agir comme un simple hub, découvrant le reseau.
Ou il peut cesser completement de fonctionner, interdisant tout traffic et necessitant un reboot (hard ou soft).

Historiquement, les systèmes connus sensibles à ce genre de vulnérabilité (hors patches) sont :

Windows 95
Windows 98
Windows NT
Windows 2000
AIX 4.3
HP 10.2
Linux RedHat 7.0
FreeBSD 4.2
Cisco IOS 11.1
Netgear


Protection

D'une facon générale, la plupart des firewalls personnels ont du mal a sécuriser contre des attaques en dessous de la couche IP.
Le plus sûr outre les solutions complexes est donc d'établir des reseaux privés virtuels (VPN) entre les sous reseaux ou les machines, en utilisant le cryptage au niveau applicatif.

IV. Back to Scan

Mais revenons au sujet principal, le ARP scanning.
Apparut sur Nmap à la version 3.83DEFCON, il apporte deux options supplémentaires :

--spoof_mac pour cacher sa veritable adresse MAC :

--spoof_mac [argument] : Nmap utilise alors l'adresse MAC fournie pour tous les paquets envoyés.
Si l'argument entré est 0 , Nmap choisi une adresse MAC au hasard.
Si l'argument est une adresse MAC sous forme Hexadecimale (séparée par des : ou non), Nmap l'utilise telle quelle.
Si l'argument fais moins de 12 caracteres hexadecimaux, Nmap complete l'adresse
Si l'argument n'est ni 0 , ni une chaine hexadecimale, Nmap cherche dans la base des fournisseurs (case sensitive, attention) et forge l'adresse en conséquence
Exemple : --spoof_mac Apple
--spoof_mac 0
--spoof_mac 01:02:03:04:05:06
--spoof_mac deadbeefcafe
--spoof_mac 0020F2
--spoof_mac Cisco

manuel

et bien sûr -PR pour le scan en lui même :

-PR : Nmap utilise des requetes ARP en mode raw ethernet afin de determiner si les machines d'un reseau LAN sont actives ou non (detection d'hosts).
Le choix est fait de remplacer l'ancienne méthode de paquets de test IP dans le cas où une pre-authentification ARP est necessaire sur l'hote distant (IP-level firewalling).
La contrepartie est qu'evidement les machines scannées doivent appartenir au meme reseau LAN que l'attaquant.
Cette fonction est activée automatiquement en cas de scan d'un reseau ethernet.
Exemple : nmap -sP -PR 192.168.0.0/16 .

image031.jpg

V. Et plus si affinités

La communauté autour du developpement de Nmap constate depuis la version 3.93 qu'il est possible de passer outre la limitation qui consiste à ne pouvoir scanner que les machines appartenant au meme reseau.
Il est possible en effet de traverser le reseau en changeant son masque de reseau (NetMask) et en modifiant le code source de Nmap:

Plus precisement, dans targets.cc, en forcant la valeur de la variable directly_connected à VRAI (1)


code_header Code:
spacer void Target::Initialize() {
hostname = NULL;
memset(&seq, 0, sizeof(seq));
FPR = NULL;
osscan_performed = 0;

/*(...)*/

targetsocklen = sourcesocklen = nexthopsocklen = 0;
directly_connected = -1;
targetipstring[0] = '\0';

/*(...)*/

interface_type = devt_other;
devname[0] = devfullname[0] = '\0';
}


Le problème est alors que Nmap recoit aussi bien les réponses de la cible que celles du switch faisant relais dans les reseaux.
Comme Nmap ne garde qu'une valeur d'adresse MAC pour une cible donnée, on récupère parfois la veritable cible, mais aussi parfois le switch...

Il semble que deux voies se dégagent pour fixer cette limitation :

- soit permettre une option qui aurait pour but de forcer Nmap à ignorer certaines adresses MAC
- soit laisser l'utilisateur le soin de filtrer lui meme son traffic à un autre niveau que Nmap dans le cadre de ce genre d'utilisation.


4N9e pour FutureZone, 2005