Découverte d'Hôtes Actifs avec Nmap

La découverte d'hôtes actifs est une étape fondamentale lors de l'exploration d'un réseau. Avant de procéder à une analyse de ports, il est crucial d'identifier les systèmes opérationnels pour optimiser le temps et minimiser l'empreinte sur le réseau cible. Nmap, l'outil de référence pour la cartographie réseau, excelle dans cette tâche en utilisant diverses techniques que nous allons détailler.

Principes Fondamentaux de la Détection d'Hôtes

L'objectif principal est de répondre à des questions clés comme "Quels systèmes sont actifs sur ce réseau ?" ou "Quels services y sont exécutés ?". Cet article se concentre spécifiquement sur la première question, abordant les mécanismes de Nmap pour identifier les hôtes actifs avant toute analyse de ports approfondie.

Nous examinerons les méthodes suivantes utilisées par Nmap pour cette détection :

  • Scans ARP : Utilisent des requêtes ARP pour localiser les hôtes.
  • Scans ICMP : S'appuient sur des requêtes ICMP pour déterminer la présence d'hôtes.
  • Scans TCP/UDP "Ping" : Impliquent l'envoi de paquets vers des ports TCP et UDP spécifiques pour sonder la réactivité des systèmes.

Nous mentionnerons également des outils complémentaires comme arp-scan et masscan, qui partagent des fonctionnalités similaires pour la découverte d'hôtes.

Comprendre les Sous-Réseaux

Avant de plonger dans les techniques de scan, il est utile de rappeler la distinction entre un segment de réseau et un sous-réseau. Un segment de réseau est un groupe d'ordinateurs partageant un même suppport physique (ex: un switch Ethernet ou un point d'accès Wi-Fi). Un sous-réseau, en revanche, est une division logique d'un réseau IP, souvent correspondant à un ou plusieurs segments connectés via un routeur. Le segment concerne la connectivité physique, tandis que le sous-réseau se réfère à la configuration logique.

Dans une architecture réseau typique, votre système est connecté à l'un de ces sous-réseaux, chacun ayant sa propre plage d'adresses IP et se connectant au réseau plus large via un routeur, potentiellement protégé par un pare-feu.

Les sous-réseaux sont définis par un masque de sous-réseau, souvent représenté en notation CIDR (Classless Inter-Domain Routing) :

  • Un sous-réseau en /16 (masque 255.255.0.0) peut accueillir environ 65 000 hôtes.
  • Un sous-réseau en /24 (masque 255.255.255.0) peut contenir environ 250 hôtes.

Lors d'une reconnaissance active, l'objectif est d'obtenir des informations détaillées sur un ensemble d'hôtes ou un sous-réseau spécifique.

Si vous êtes sur le même sous-réseau que les systèmes cibles, votre scanner pourra s'appuyer sur le protocole ARP (Address Resolution Protocol). Les requêtes ARP, conçues pour obtenir des adresses matérielles (MAC) pour la communication de couche liaison, peuvent également être exploitées pour déterminer si un hôte est en ligne. Par exemple, si vous êtes dans le réseau A (10.1.100.0/24), seule l'ARP peut découvrir les appareils au sein de ce même sous-réseau.

En revanche, si les systèmes cibles se trouvent sur un sous-réseau différent, tous les paquets générés par votre scanner devront transiter par la passerelle par défaut (le routeur). Les requêtes ARP ne sont pas routables ; elles sont limitées au sous-réseau local car l'ARP est un protocole de couche liaison.

Spécification des Cibles

Avant d'exécuter un scan, il est essentiel de définir précisément les cibles. Nmap accepte plusieurs formats pour spécifier les hôtes à scanner :

  • Liste d'adresses : 192.168.1.10 scanme.nmap.org example.com pour trois cibles distinctes.
  • Plage d'adresses : 10.0.0.10-15 pour six adresses (de .10 à .15).
  • Sous-réseau : 172.16.0.0/28 (un masque de 28 bits, 255.255.255.240) pour 16 adresses IP.

Vous pouvez également fournir une liste de cibles à partir d'un fichier : nmap -iL liste_hôtes.txt.

Pour prévisualiser la liste des hôtes que Nmap va scanner, sans lancer le scan réel, utilisez l'option -sL : nmap -sL CIBLES. Cette commande liste les hôtes et tente une résolution DNS inverse, ce qui peut révéler des informations utiles. Pour désactiver la résolution DNS inverse, ajoutez l'option -n.

Découverte d'Hôtes Actifs : Les Couches TCP/IP à la Rescousse

Nous exploiterons différents protocoles des couches du modèle TCP/IP pour identifier les hôtes en ligne :

  • Couche Liaison (ARP) : Utile pour obtenir l'adresse MAC d'un hôte connaissant son IP sur le même segment.
  • Couche Réseau (ICMP) : Le protocole ICMP (Internet Control Message Protocol), notamment les messages Echo (type 8) et Echo Reply (type 0), est la base du "ping". Sur un même sous-réseau, une requête ARP précédera une requête ICMP.
  • Couche Transport (TCP/UDP) : Même si ce sont des protocoles de transport, un scanner peut envoyer des paquets spécialement conçus vers des ports TCP ou UDP courants. Cette méthode est très efficace, surtout lorsque les requêtes ICMP Echo sont bloquées.

Détection d'Hôtes Nmap via ARP

Pour éviter de scanner des hôtes hors ligne ou des adresses IP inutilisées, Nmap utilise plusieurs stratégies de détection. Par défaut, Nmap applique la logique suivante en l'absence d'options de découverte spécifiques :

  • Si l'utilisateur est privilégié (root ou membre des sudoers) et scanne un réseau local, Nmap utilise des requêtes ARP.
  • Si l'utilisateur est privilégié et scanne une cible hors du réseau local, Nmap envoie des requêtes ICMP Echo, des paquets TCP ACK (vers le port 80), des paquets TCP SYN (vers le port 443) et des requêtes ICMP Timestamp.
  • Si l'utilisateur n'est pas privilégié et scanne une cible hors du réseau local, Nmap tente une poignée de main TCP complète (three-way handshake) en envoyant des paquets SYN aux ports 80 et 443.

Pour effectuer une découverte d'hôtes sans lancer de scan de ports, utilisez l'option -sn (signifiant "skip port scan" ou "ping scan only").

Un scan ARP n'est efficace que si vous êtes sur le même sous-réseau que la cible. Les adresses MAC sont indispensables pour les en-têtes de la couche liaison (Ethernet ou Wi-Fi) afin d'établir la communication. Une réponse à une requête ARP indique qu'un hôte est actif. Pour forcer Nmap à utiliser uniquement le scan ARP pour la découverte d'hôtes (sans scan de ports), utilisez nmap -PR -sn CIBLES.

Voici un exemple de scan ARP avec Nmap, exécuté depuis une AttackBox sur un sous-réseau :

pentester@TryHackMe$ sudo nmap -PR -sn 10.10.210.6/24

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 07:12 BST
Nmap scan report for host-10-10-210-75.compute.internal (10.10.210.75)
Host is up (0.00013s latency).
MAC Address: 02:83:75:3A:F2:89 (Unknown)
Nmap scan report for host-10-10-210-100.compute.internal (10.10.210.100)
Host is up (-0.100s latency).
MAC Address: 02:63:D0:1B:2D:CD (Unknown)
Nmap scan report for host-10-10-210-165.compute.internal (10.10.210.165)
Host is up (0.00025s latency).
MAC Address: 02:59:79:4F:17:B7 (Unknown)
Nmap scan report for host-10-10-210-6.compute.internal (10.10.210.6)
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 3.12 seconds

Dans cet exemple, l'AttackBox (10.10.210.6) envoie des requêtes ARP pour découvrir les hôtes actifs sur son sous-réseau. Les hôtes en ligne répondent par des répliques ARP.

L'analyse du trafic réseau avec des outils comme Wireshark révélerait des trames ARP. On verrait l'adresse MAC de l'AttackBox comme source et l'adresse de diffusion (broadcast) comme destination, car l'adresse MAC de la cible est inconnue. La colonne "Info" montrerait l'adresse IP de la cible demandée. Les hôtes correspondant à l'IP demandée répondraient avec leur adresse MAC, confirmant leur présence en ligne.

L'outil arp-scan

L'outil arp-scan est spécifiquement conçu pour la découverte d'hôtes via ARP. Il offre de nombreuses options de personnalisation. Une commande courante est arp-scan --localnet ou arp-scan -l, qui envoie des requêtes ARP à toutes les adresses IP valides du réseau local. Pour spécifier une interface réseau, utilisez -I, par exemple sudo arp-scan -I eth0 -l. Vous pouvez installer cet outil avec sudo apt install arp-scan.

Un exemple d'utilisation sur le même sous-réseau que l'AttackBox donnerait un résultat similaire à Nmap :

pentester@TryHackMe$ sudo arp-scan 10.10.210.6/24
Interface: eth0, datalink type: EN10MB (Ethernet)
WARNING: host part of 10.10.210.6/24 is non-zero
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.10.210.75	02:83:75:3a:f2:89	(Unknown)
10.10.210.100	02:63:d0:1b:2d:cd	(Unknown)
10.10.210.165	02:59:79:4f:17:b7	(Unknown)

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 2.726 seconds (93.91 hosts/sec). 3 responded

arp-scan, comme Nmap avec -PR -sn, génère un flux de requêtes ARP qui peut être visualisé avec Wireshark, montrant des schémas de trafic similaires.

Détection d'Hôtes Nmap via ICMP

La méthode la plus directe pour détecter des hôtes est de "pinger" chaque adresse IP sur le réseau cible et d'attendre une réponse ICMP Echo Reply (type 0) à notre requête ICMP Echo (type 8). Cependant, cette méthode n'est pas toujours fiable, car de nombreux pare-feu bloquent les requêtes ICMP Echo par défaut (c'est le cas de Windows).

Si la cible est sur le même sous-réseau, les requêtes ARP précéderont toujours les requêtes ICMP.

Pour que Nmap utilise les requêtes ICMP Echo pour la découverte d'hôtes, ajoutez l'option -PE (combinée avec -sn pour éviter le scan de ports). Cette méthode consiste à envoyer des paquets ICMP Echo et à s'attendre à des réponses Echo Reply des hôtes actifs.

Exemple de scan ICMP Echo :

pentester@TryHackMe$ sudo nmap -PE -sn 10.10.68.220/24

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 10:16 BST
Nmap scan report for host-10-10-68-50.compute.internal (10.10.68.50)
Host is up (0.00017s latency).
MAC Address: 02:95:36:71:5B:87 (Unknown)
Nmap scan report for host-10-10-68-52.compute.internal (10.10.68.52)
Host is up (0.00017s latency).
MAC Address: 02:48:E8:BF:78:E7 (Unknown)
Nmap scan report for host-10-10-68-77.compute.internal (10.10.68.77)
Host is up (-0.100s latency).
MAC Address: 02:0F:0A:1D:76:35 (Unknown)
Nmap scan report for host-10-10-68-110.compute.internal (10.10.68.110)
Host is up (-0.10s latency).
MAC Address: 02:6B:50:E9:C2:91 (Unknown)
Nmap scan report for host-10-10-68-140.compute.internal (10.10.68.140)
Host is up (0.00021s latency).
MAC Address: 02:58:59:63:0B:6B (Unknown)
Nmap scan report for host-10-10-68-142.compute.internal (10.10.68.142)
Host is up (0.00016s latency).
MAC Address: 02:C6:41:51:0A:0F (Unknown)
Nmap scan report for host-10-10-68-220.compute.internal (10.10.68.220)
Host is up (0.00026s latency).
MAC Address: 02:25:3F:DB:EE:0B (Unknown)
Nmap scan report for host-10-10-68-222.compute.internal (10.10.68.222)
Host is up (0.00025s latency).
MAC Address: 02:28:B1:2E:B0:1B (Unknown)
Nmap done: 256 IP addresses (8 hosts up) scanned in 2.11 seconds

L'affichage des adresses MAC dans la sortie indique que l'AttackBox se trouve sur le même sous-réseau que les cibles, et Nmap a utilisé des requêtes ARP en premier lieu pour confirmer la présence des hôtes.

Si le scan est effectué depuis un sous-réseau différent, les adresses MAC ne seront pas affichées, comme dans l'exemple suivant :

pentester@TryHackMe$ sudo nmap -PE -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:16 EEST
Nmap scan report for 10.10.68.50
Host is up (0.12s latency).
Nmap scan report for 10.10.68.52
Host is up (0.12s latency).
Nmap scan report for 10.10.68.77
Host is up (0.11s latency).
Nmap scan report for 10.10.68.110
Host is up (0.11s latency).
Nmap scan report for 10.10.68.140
Host is up (0.11s latency).
Nmap scan report for 10.10.68.142
Host is up (0.11s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap scan report for 10.10.68.222
Host is up (0.11s latency).
Nmap done: 256 IP addresses (8 hosts up) scanned in 8.26 seconds

Un examen du trafic avec Wireshark montrerait des requêtes ICMP Echo émises depuis l'IP source (d'un sous-réseau différent) vers toutes les IP du sous-réseau cible, attendant les réponses.

Autres types de requêtes ICMP

Étant donné que les requêtes ICMP Echo sont souvent filtrées, Nmap propose d'autres types de requêtes ICMP pour la détection :

  • Requêtes ICMP Timestamp : Nmap peut envoyer des requêtes Timestamp (type 13) et vérifier si une réponse Timestamp Reply (type 14) est reçue. L'option -PP active ce type de scan.

Exemple de scan avec ICMP Timestamp :

pentester@TryHackMe$ sudo nmap -PP -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:06 EEST
Nmap scan report for 10.10.68.50
Host is up (0.13s latency).
Nmap scan report for 10.10.68.52
Host is up (0.25s latency).
Nmap scan report for 10.10.68.77
Host is up (0.14s latency).
Nmap scan report for 10.10.68.110
Host is up (0.14s latency).
Nmap scan report for 10.10.68.140
Host is up (0.15s latency).
Nmap scan report for 10.10.68.209
Host is up (0.14s latency).
Nmap scan report for 10.10.68.220
Host is up (0.14s latency).
Nmap scan report for 10.10.68.222
Host is up (0.14s latency).
Nmap done: 256 IP addresses (8 hosts up) scanned in 10.93 seconds

Ce scan envoie des requêtes ICMP Timestamp à chaque adresse IP du sous-réseau cible. L'examen du trafic réseau montrerait ces paquets ICMP circulant depuis l'IP source vers chaque IP potentielle.

  • Requêtes ICMP Address Mask : Nmap peut également utiliser des requêtes Address Mask (type 17) et attendre des réponses Adddress Mask Reply (type 18). L'option -PM active ce scan.

Exemple de scan avec ICMP Address Mask :

pentester@TryHackMe$ sudo nmap -PM -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:13 EEST
Nmap done: 256 IP addresses (0 hosts up) scanned in 52.17 seconds

Dans cet exemple, aucun hôte n'a été détecté. Cela démontre que les pare-feu ou les routeurs peuvent bloquer certains types de requêtes ICMP. Il est donc crucial de maîtriser plusieurs techniques pour contourner de tels blocages et réussir la découverte d'hôtes.

Même sans réponse, le trafic réseau montrerait des requêtes ICMP Adress Mask envoyées deux fois à chaque IP valide, en attente de réponses.

Détection d'Hôtes Nmap via TCP et UDP

Lorsque les méthodes basées sur ICMP sont inefficaces, les protocoles de transport TCP et UDP offrent des alternatives robustes.

Ping TCP SYN

Cette technique consiste à envoyer un paquet TCP avec le drapeau SYN (Synchronize) activé vers un port TCP (par défaut 80). Si le port est ouvert, une réponse SYN/ACK (Synchronize/Acknowledge) est attendue. Si le port est fermé, une réponse RST (Reset) est envoyée. L'état exact du port n'est pas l'objectif ici, mais toute réponse indique que l'hôte est actif. Pour les utilisateurs privilégiés, le processus ne nécessite pas une poignée de main TCP complète, ce qui est plus discret. Les utilisateurs non privilégiés, en revanche, doivent compléter la poignée de main.

L'option Nmap est -PS, suivie d'un numéro de port, d'une plage ou d'une liste (ex: -PS21, -PS21-25, -PS80,443,8080). Sans spécification, Nmap utilise des ports communs.

Exemple de scan TCP SYN Ping :

pentester@TryHackMe$ sudo nmap -PS -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
Nmap scan report for 10.10.68.121
Host is up (0.16s latency).
Nmap scan report for 10.10.68.125
Host is up (0.089s latency).
Nmap scan report for 10.10.68.134
Host is up (0.13s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 17.38 seconds

L'analyse du trafic réseau montrerait des paquets SYN envoyés vers le port 80. Toute réponse SYN/ACK ou RST confirmerait la présence de l'hôte.

Ping TCP ACK

Avec cette méthode, un paquet TCP avec le drapeau ACK (Acknowledge) est envoyé (par défaut vers le port 80). Seuls les utilisateurs privilégiés peuvent effectuer ce scan. Si le port est ouvert, un paquet RST (Reset) est la réponse attendue, car le paquet ACK ne fait partie d'aucune connexion établie. Cette réponse RST indique que l'hôte est actif.

L'option Nmap est -PA, avec la même syntaxe que -PS pour les ports.

Exemple de scan TCP ACK Ping :

pentester@TryHackMe$ sudo nmap -PA -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:46 EEST
Nmap scan report for 10.10.68.52
Host is up (0.11s latency).
Nmap scan report for 10.10.68.121
Host is up (0.12s latency).
Nmap scan report for 10.10.68.125
Host is up (0.10s latency).
Nmap scan report for 10.10.68.134
Host is up (0.10s latency).
Nmap scan report for 10.10.68.220
Host is up (0.10s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 29.89 seconds

Le trafic réseau montrerait des paquets ACK envoyés deux fois vers le port 80. Les systèmes qui ne répondent pas sont considérés comme hors ligne ou inaccessibles.

Ping UDP

L'UDP peut également être utilisé. Contrairement au TCP SYN, l'envoi d'un paquet UDP à un port ouvert n'attend aucune réponse. Cependant, si un paquet UDP est envoyé à un port UDP fermé, une réponse ICMP "Port Unreachable" (Type 3, Code 3) est attendue. Cette réponse indirecte confirme que le système cible est en ligne et fonctionnel.

L'option Nmap est -PU, avec la même syntaxe pour les ports.

Exemple de scan UDP Ping :

pentester@TryHackMe$ sudo nmap -PU -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
Nmap scan report for 10.10.68.121
Host is up (0.10s latency).
Nmap scan report for 10.10.68.125
Host is up (0.14s latency).
Nmap scan report for 10.10.68.134
Host is up (0.096s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 9.20 seconds

Le trafic réseau révélera des paquets UDP envoyés à un port UDP peu commun (souvent un port fermé) pour provoquer l'erreur ICMP "Port Unreachable", signalant ainsi un hôte actif.

Masscan : La Découverte à Grande Vitesse

L'outil masscan est similaire à Nmap pour la découverte d'hôtes mais se distingue par sa vitesse d'exécution agressive. Il peut scanner l'intégralité d'Internet en quelques minutes. Sa syntaxe est très proche de Nmap, utilisant -p pour spécifier les ports.

Exemples de commandes Masscan :

  • masscan 192.168.1.0/24 -p443
  • masscan 10.0.0.0/16 -p80,443,8080
  • masscan 172.16.0.0/20 -p22-25
  • masscan 192.168.50.0/24 --top-ports 100

Pour l'installer : sudo apt install masscan.

Résolution DNS Inverse

Nmap effectue par défaut une résolution DNS inverse pour les hôtes en ligne, car les noms d'hôtes peuvent offrir des indices précieux. Si vous préférez éviter ces requêtes DNS, utilisez l'option -n. Pour forcer la résolution DNS même pour des hôtes hors ligne (avec l'option -R) ou pour utiliser un serveur DNS spécifique, ajoutez --dns-servers IP_SERVEUR_DNS.

Récapitulatif des Options Nmap pour la Découverte d'Hôtes

Voici un aperçu des principales options de Nmap pour la découverte d'hôtes :

  • -sn : Mode "ping scan" uniquement (pas de scan de ports).
  • -PR : Utilise les requêtes ARP pour la découverte d'hôtes sur le réseau local.
  • -PE : Utilise les requêtes ICMP Echo.
  • -PP : Utilise les requêtes ICMP Timestamp.
  • -PM : Utilise les requêtes ICMP Address Mask.
  • -PS [ports] : Utilise les paquets TCP SYN pour la découverte.
  • -PA [ports] : Utilise les paquets TCP ACK pour la découverte.
  • -PU [ports] : Utilise les paquets UDP pour la découverte.
  • -n : Désactive la résolution DNS inverse.
  • -R : Force la résolution DNS inverse pour tous les hôtes (même hors ligne).
  • --dns-servers <serveur> : Spécifie un serveur DNS à utiliser.

Toute réponse d'un hôte, quelle que soit la méthode utilisée, confirme sa présence en ligne. L'omission de -sn entraînera un scan de ports automatique pour les hôtes découverts.

Étiquettes: nmap Host Discovery ARP ICMP TCP

Publié le 29 juillet à 10h00