Introduction à Nmap
Nmap (Network Mapper) est un utilitaire puissant et polyvalent, essentiel pour les professionnels de la sécurité et les administrateurs réseau. Il permet de découvrir des hôtes et des services sur un réseau, d'identifier les systèmes d'exploitation, de cartographier l'architecture réseau et de détecter les vulnérabilités potentielles.
La syntaxe générale des commandes Nmap est la suivante :
nmap [ <Type de Balayage> ...] [ <Options> ] { <Spécification de Cible> }
Spécification des Cibles
Nmap offre une grande flexibilité pour définir les cibles à analyser. Il est possible d'utiliser des noms d'hôtes, des adresses IP, des plages d'adresses ou des réseaux entiers.
SPÉCIFICATION DES CIBLES :
Peut prendre des noms d'hôte, adresses IP, réseaux, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <nom_fichier_entree>: Entrée à partir d'une liste d'hôtes/réseaux
-iR <nombre_hôtes>: Choisir des cibles aléatoires
--exclude <hôte1[,hôte2][,hôte3],...>: Exclure des hôtes/réseaux
--excludefile <fichier_exclusion>: Exclure une liste d'un fichier
- Noms d'hôtes : Nmap résout les noms d'hôtes via DNS. Par défaut, il analyse la première adresse IP retournée, sauf si
--resolve-allest spécifié pour analyser toutes les adresses associées à un nom de domaine. - Adresses CIDR : Utilisez la notation CIDR pour désigner un réseau entier, par exemple
192.168.1.0/24. - Plages d'adresses : Spécifiez des plages avec des tirets ou des virgules, comme
192.168.0-255.1-254ou192.168.3-5,7.1. - Listes depuis un fichier (
-iL) : Permet de fournir une liste de cibles à partir d'un fichier texte. Les commentaires peuvent être inclus avec un#. - Cibles aléatoires (
-iR) : Génère un nombre spécifié d'adresses IP aléatoires à scanner, excluant automatiquement les adresses privées et non allouées. - Exclusions (
--exclude,--excludefile) : Permet de retirer des hôtes ou des réseaux spécifiques de l'analyse, soit directement en ligne de commande, soit à partir d'un fichier.
Découverte des Hôtes
Avant d'effectuer un balayage de ports détaillé, Nmap réalise une phase de découverte d'hôtes, souvent appelée "ping scan". Cette étape est cruciale pour identifier quels hôtes sont actifs sur le réseau, économisant ainsi du temps en évitant d'analyser des machines éteintes ou inaccessibles.
DÉCOUVERTE DES HÔTES :
-sL: Balayage de Liste - lister simplement les cibles à analyser
-sn: Balayage Ping - désactiver le balayage de ports
-Pn: Traiter tous les hôtes comme étant en ligne -- sauter la découverte d'hôtes
-PS/PA/PU/PY[liste_ports]: Découverte TCP SYN/ACK, UDP ou SCTP sur les ports donnés
-PE/PP/PM: Sondes de découverte par requête ICMP echo, timestamp et netmask
-PO[liste_protocoles]: Ping de protocole IP
-n/-R: Ne jamais résoudre les DNS/Toujours résoudre [par défaut: parfois]
--dns-servers <serv1[,serv2],...>: Spécifier des serveurs DNS personnalisés
--system-dns: Utiliser le résolveur DNS du système d'exploitation
--traceroute: Tracer le chemin de saut vers chaque hôte
Si aucune option de découverte n'est spécifiée, Nmap envoie par défaut des requêtes ICMP echo, un paquet TCP SYN sur le port 443, un paquet TCP ACK sur le port 80, et une requête ICMP timestamp. Les utilisateurs sans privilèges sur Unix utilisent des appels connect().
-sL(Balayage de Liste) : Liste les cibles sans envoyer de paquets. Effectue une résolution DNS inverse.-sn(Pas de Balayage de Ports) : Anciennement-sP. Effectue uniquement la découverte d'hôtes.-Pn(Pas de Ping) : Ignore complètement la phase de découverte. Traite toutes les cibles comme actives et passe directement au balayage de ports. Utile derrière un pare-feu bloquant les pings.-PS <portlist>(Ping TCP SYN) : Envoie des paquets TCP SYN sur des ports spécifiés (80 par défaut). UnSYN+ACKindique un port ouvert,RSTun port fermé.-PA <portlist>(Ping TCP ACK) : Envoie des paquets TCP ACK. UnRSTen réponse indique un hôte actif, que le port soit ouvert ou fermé. Utile pour contourner certains pare-feu sans état.-PU <portlist>(Ping UDP) : Envoie des paquets UDP sur des ports (40125 par défaut). Une réponse "ICMP destination port unreachable" indique un port fermé. L'absence de réponse peut signifier un port ouvert/filtré.-PE,-PP,-PM(Types de Ping ICMP) : Requêtes ICMP echo, timestamp et masque de sous-réseau. Souvent bloquées par les pare-feu.-PO <protocol list>(Ping de Protocole IP) : Teste la disponibilité de protocoles IP (ICMP, IGMP, IP-in-IP par défaut) plutôt que de ports spécifiques.-PR(Ping ARP) : Pour les cibles sur le réseau local, le balayage ARP est plus fiable que l'ICMP, car les requêtes ARP sont rarement bloquées par les pare-feu locaux.-n/-R(Résolution DNS) :-ndésactive la résolution DNS,-Rla force pour tous les hôtes actifs.--dns-servers,--system-dns: Permet de spécifier des serveurs DNS personnalisés ou d'utiliser le résolveur système.--traceroute: Trace le chemin des paquets vers chaque cible.
Balayage des Ports
Le balayage de ports est l'une des fonctions principales de Nmap, permettant de déterminer l'état des ports TCP et UDP sur une cible. Le format général est -s<caractère>, où le caractère indique le type de balayage.
États des Ports
Nmap catégorise les ports en plusieurs états :
| État | Description détaillée |
|---|---|
| Ouvert (Open) | Une application écoute sur ce port. |
| Fermé (Closed) | Aucune application n'écoute sur ce port, mais l'hôte est joignable et répond aux sondes. |
| Filtré (Filtered) | Un pare-feu, un routeur ou un autre filtre réseau bloque la sonde Nmap. Nmap ne peut pas déterminer si le port est ouvert ou fermé. |
| Non Filtré (Unfiltered) | La sonde Nmap a atteint le port, mais Nmap ne peut pas déterminer si le port est ouvert ou fermé (généralement après un balayage ACK). |
| Ouvert|Filtré (Open|Filtered) | Nmap ne peut pas déterminer si le port est ouvert ou filtré (absence de réponse aux sondes, typique des balayages UDP, IP, FIN, NULL, Xmas). |
| Fermé|Filtré (Closed|Filtered) | Se produit uniquement lors d'un balayage idle avec l'ID IP. |
Types de Balayage TCP et UDP
-
**
-sS(Balayage SYN / "Half-Open") :**Utilise le principe de la poignée de main TCP partielle. Rapide et discret, car il ne complète pas la connexion TCP.Nmap Cible État SYN SYN+ACK Ouvert (Nmap envoie RST pour terminer) SYN RST Fermé SYN (Pas de réponse ou ICMP Inaccessible) Filtré -
**
-sT(Balayage Connect) :**Effectue une connexion TCP complète (SYN, SYN+ACK, ACK). Moins furtif que le SYN scan, mais ne nécessite pas de privilèges root. C'est la méthode par défaut si-sSn'est pas possible.Nmap Cible État SYN SYN+ACK Ouvert (Nmap envoie ACK puis RST) SYN RST Fermé SYN (Pas de réponse ou ICMP Inaccessible) Filtré -
**
-sU(Balayage UDP) :**Envoie des paquets UDP aux ports cibles. Les services UDP (DNS, SNMP, DHCP) sont souvent lents à analyser. Une réponse "ICMP port unreachable" indique un port fermé. L'absence de réponse signifie "Ouvert|Filtré".Nmap Cible État UDP (Réponse UDP) Ouvert UDP ICMP port unreachable (type 3, code 3) Fermé UDP ICMP unreachable (type 3, code 0, 1, 2, 9, 10, 13) Filtré UDP (Pas de réponse) Ouvert|Filtré -
**
-sN,-sF,-sX(Balayages NULL, FIN, Xmas) :**Ces balayages manipulent les drapeaux TCP (NULL: aucun drapeau, FIN: drapeau FIN, Xmas: drapeaux FIN, PSH, URG). Selon la RFC 793, un port ouvert doit ignorer de tels paquets sans répondre, tandis qu'un port fermé doit répondre avec un RST. Cependant, de nombreux systèmes (Windows, Cisco) ne suivent pas cette RFC, rendant ces balayages moins fiables contre des cibles variées et inefficaces contre les pare-feu à états.Nmap Cible État TCP NULL, FIN, Xmas (Pas de réponse) Ouvert|Filtré TCP NULL, FIN, Xmas RST Fermé -
**
-sA(Balayage ACK) :**Envoie des paquets avec le drapeau ACK. Ce balayage ne peut pas déterminer si un port est ouvert ou fermé, car les deux états génèrent généralement une réponse RST. Il est principalement utilisé pour cartographier les règles d'un pare-feu, distinguant les ports "filtrés" (pas de réponse) des ports "non filtrés" (réponse RST).Nmap Cible État ACK (Pas de réponse) Filtré ACK RST Non Filtré -
**
-sW(Balayage Window) :**Similaire au balayage ACK, mais tente de déterminer l'état du port en analysant la taille de la fenêtre TCP retournée dans la réponse RST. Certains systèmes indiquent une fenêtre positive pour les ports ouverts et zéro pour les ports fermés. -
**
--scanflags <flags>(Balayage TCP Personnalisé) :**Permet de spécifier des drapeaux TCP arbitraires pour des balayages très spécifiques. -
**
-sO(Balayage de Protocole IP) :**Explore quels protocoles IP (par exemple, ICMP, IGMP, TCP, UDP) sont supportés par l'hôte cible, en utilisant le champ de numéro de protocole IP.
En résumé : Contre les pare-feu à états modernes, seuls les balayages -sS, -sT et -sU sont généralement efficaces pour déterminer les ports ouverts.
Spécification et Ordre des Ports
Par défaut, Nmap analyse les 1000 ports les plus courants pour chaque protocole.
-
**
-p <port_ranges>(Analyser des Ports Spécifiques) :**Permet de spécifier les ports ou plages de ports à analyser. Exemple :-p 80,443,21-25. Le balayage de tous les ports (1-65535) peut être fait avec-p-.Pour les protocoles spécifiques, utilisez un préfixe :
T:pour TCP,U:pour UDP,S:pour SCTP,P:pour IP. Exemple :-p U:53,T:80-85. -
**
--exclude-ports <ports>(Exclure des Ports) :**Exclut les ports spécifiés du balayage. -
**
-F(Balayage Rapide) :**Analyse les 100 ports les plus courants au lieu des 1000 par défaut. -
**
-r(Ne pas Aléatoriser les Ports) :**Effectue le balayage des ports dans l'ordre séquentiel, au lieu d'un ordre aléatoire par défaut. -
**
--port-ratio <ratio>:**Analyse les ports listés dans le fichiernmap-servicesdont la "probabilité" (ratio entre 0 et 1) est supérieure à la valeur spécifiée. -
**
--top-ports <n>:**Analyse lesnports les plus fréquents selon le fichiernmap-services.
Détection des Services et Versions
Une fois qu'un port est identifié comme ouvert, Nmap peut aller plus loin pour déterminer quelle application et quelle version de service tournent derrière ce port. Il utilise la base de données nmap-service-probes, qui contient des sondes et des expressions de correspondance pour identifier les services.
-
**
-sV(Détection de Version) :**Active la détection de version. Cette option est souvent combinée avec-Apour un balayage agressif (qui inclut aussi la détection d'OS). -
**
--allports(Ne pas Exclure de Ports de la Détection de Version) :**Par défaut, Nmap ignore certains ports (comme TCP 9100) pour la détection de version afin d'éviter des effets indésirables (par exemple, imprimer des requêtes HTTP sur une imprimante). Cette option force la détection sur tous les ports. -
**
--version-intensity <intensité>(Définir l'Intensité de la Détection de Version) :**Contrôle le niveau d'agressivité des sondes de version, avec des valeurs de 0 à 9. Une intensité plus élevée (9) est plus complète mais plus longue. L'intensité par défaut est 7. Les sondes spécifiques aux ports (ex: SSL sur 443) sont toujours tentées quelle que soit l'intensité.--version-lightest un alias pour--version-intensity 2.--version-allest un alias pour--version-intensity 9.
-
**
--version-trace(Tracer l'Activité de Détection de Version) :**Affiche des informations détaillées sur l'envoi et la réception des sondes de détection de version, utile pour le débogage.
Détection du Système d'Exploitation
Nmap peut tenter de déterminer le système d'exploitation et la version matérielle d'une cible en analysant les réponses TCP/IP. Cette fonction est essentielle pour comprendre la posture de sécurité d'un hôte.
- **
-O(Activer la Détection d'OS) :**Active la détection du système d'exploitation. - **
-A(Options de Balayage Agressif) :**Active un ensemble d'options populaires, y compris la détection d'OS (-O), la détection de version (-sV), le balayage de scripts par défaut (-sC) et le traceroute (--traceroute). - **
--osscan-limit(Limiter la Détection d'OS) :**Nmap n'effectuera la détection d'OS que sur les hôtes ayant au moins un port TCP ouvert et un port fermé, car cette configuration fournit les meilleures informations pour l'analyse. Cela permet d'économiser du temps.
Évasion de Pare-feu/IDS et Falsification
Nmap propose diverses options pour tenter de contourner les systèmes de détection d'intrusion (IDS) et les pare-feu, ou pour masquer l'identité du scanner.
- **
-f(Fragmmenter les Paquets) /--mtu <taille>(Utiliser un MTU Spécifié) :**Divise les paquets IP en fragments plus petits pour rendre leur détection plus difficile par les IDS et les pare-feu. Les pare-feu modernes et les IPS peuvent cependant reconstruire ces paquets virtuellement. - **
-D <leurre1>[,<leurre2>][,ME][,...](Masquer un Balayage avec des Leurres) :**Envoie des paquets depuis de multiples adresses IP "leurres" en plus de votre propre adresse réelle, rendant difficile la détermination de la véritable source du balayage. Les leurres devraient être des hôtes actifs pour être crédibles. L'optionMEdésigne votre propre IP dans la liste. - **
-S <Adresse_IP>(Falsifier l'Adresse Source) :**Permet de spécifier une adresse IP source différente pour les paquets. Pour que cela soit efficace, il faut souvent spécifier l'interface de sortie (-e) et désactiver la découverte d'hôtes (-Pn), car Nmap ne pourra pas recevoir de réponses à l'adresse falsifiée. - **
-e <interface>(Utiliser une Interface Spécifiée) :**Force Nmap à envoyer les paquets via une interface réseau spécifique. - **
--source-port <numéro_port>/-g <numéro_port>(Falsifier le Numéro de Port Source) :**Définit un port source spécifique pour les requêtes Nmap. Certains pare-feu mal configurés pourraient accorder des permissions spéciales à des ports sources connus (ex: 53 pour DNS). - **
--ttl <valeur>(Définir le Champ TTL IP) :**Spécifie la valeur du champ Time-To-Live (TTL) dans les paquets IP. Peut être utilisé pour des techniques d'évasion ou d'analyse spécifiques.
Formats de Sortie
Nmap offre plusieurs formats de sortie pour s'adapter à différents besoins, de la lecture humaine à l'analyse par d'autres programmes.
- **
-oN <nom_fichier>(Sortie Normale) :**Enregistre le résultat du balayage dans un fichier au format lisible par l'homme, identique à l'affichage console. - **
-oX <nom_fichier>(Sortie XML) :**Génère une sortie XML standardisée, idéale pour être parsée par d'autres applications ou scripts. - **
-oG <nom_fichier>(Sortie Greppable) :**Produit une sortie simple, ligne par ligne, formatée pour être facilement traitée par des outils commegrep,awkoucut. - **
-oA <base_fichier>(Sortie Tous Formats) :**Une option de commodité qui enregistre les résultats dans les formats normal (.nmap), XML (.xml) et greppable (.gnmap) avec le nom de fichier de base spécifié.
Verbosité et Débogage
- **
-v(Augmenter le Niveau de Verbosité) /-v<niveau>:**Affiche plus de détails pendant le balayage, aidant à comprendre le processus et à identifier des informations importantes. - **
-d(Augmenter le Niveau de Débogage) /-d<niveau>:**Fournit des informations de débogage très détaillées, au-delà de la verbosité normale, utile pour le dépannage de Nmap lui-même. - **
--reason(Raisons de l'État de l'Hôte et du Port) :**Explique pourquoi Nmap a déterminé un certain état pour un port ou un hôte (par exemple, "SYN-ACK" pour un port ouvert). - **
--packet-trace(Tracer les Paquets Envoyés et Reçus) :**Affiche chaque paquet envoyé et reçu par Nmap, ce qui est très utile pour comprendre le comportement réseau de Nmap.
Options d'Affichage
- **
--open(Afficher Uniquement les Ports Ouverts) :**Filtre la sortie pour n'afficher que les ports qui sont dans l'état "open" ou "open|filtered". - **
--iflist(Lister les Interfaces et les Routes) :**Affiche les interfaces réseau de la machine locale et les routes du système, utile pour la configuration. - **
--append-output(Ajouter aux Fichiers de Sortie) :**Ajoute les résultats aux fichiers de sortie existants au lieu de les écraser (supporté pour-oN,-oG). - **
--resume <nom_fichier>(Reprendre un Balayage Interrompu) :**Permet de reprendre un balayage Nmap qui a été interrompu (par exemple, avec Ctrl+C), en se basant sur un fichier de sortie normal ou greppable.
Autres Options Utiles
- **
-6(Activer le Balayage IPv6) :**Indique à Nmap d'utiliser le protocole IPv6 pour les cibles spécifiées. - **
-A(Options de Balayage Agressif) :**Une option tout-en-un qui active la détection d'OS (-O), la détection de version (-sV), le balayage de scripts par défaut (-sC) et le traceroute (--traceroute), offrant un aperçu complet de la cible. - **
--datadir <nom_répertoire>(Spécifier un Emplacement de Fichier de Données Nmap Personnalisé) :**Permet de spécifier un répertoire où Nmap trouvera ses ficheirs de données (commenmap-service-probes,nmap-services, etc.) au lieu des emplacements par défaut.