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
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 .
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: | |
|
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'; } |