
Quand il s’agit de cartographier un réseau, un nom revient systématiquement : Nmap. Incontournable dans le monde de la cybersécurité, ce véritable couteau suisse de la reconnaissance réseau s’impose comme l’outil de prédilection pour identifier les services exposés, détecter les ports ouverts, et poser les bases d’un test d’intrusion de réseau interne efficace.
Dans un contexte où les infrastructures deviennent toujours plus hybrides et complexes, la capacité à visualiser avec précision les systèmes accessibles est plus cruciale que jamais. À ce titre, Nmap reste la référence.
Grâce à ses multiples fonctionnalités, il permet non seulement de scanner des hôtes, mais aussi de détecter les versions logicielles, d’identifier les systèmes d’exploitation, ou encore d’observer les réactions des pare-feu ou IDS en place.
Dans cet article, nous illustrerons le principe de la reconnaissance réseau (cartographie et découverte) à travers la présentation détaillée, cas concrets à l’appui, du fonctionnement et des fonctionnalités de Nmap.
Nmap, abréviation de Network Mapper, est un outil open source incontournable dans le monde de la cybersécurité. Disponible en ligne de commande et via une interface graphique (Zenmap), il fonctionne sur la plupart des systèmes d’exploitation.
Nmap est généralement utilisé pour collecter des informations réseau sur tout type de périphérique disposant d’une adresse IP, qu’il s’agisse d’une machine isolée ou d’un ensemble d’hôtes sur un réseau entier. À l’origine, Nmap a été conçu pour deux usages fondamentaux :
Au fil des années, ses fonctionnalités se sont considérablement étoffées. Grâce à ses nombreux modules, Nmap est désormais un véritable couteau suisse de la reconnaissance réseau.
Par ailleurs, Nmap est un outil polyvalent, aussi bien adapté à un usage personnel que professionnel. Gratuit et accessible, il permet à quiconque de découvrir les services actifs sur un système. Mais c’est surtout dans un cadre professionnel qu’il prend toute sa dimension : que ce soit pour inventorier les hôtes et services d’un réseau ou pour détecter des configurations à risque.
En matière de cybersécurité, identifier les services exposés, parfois vulnérables ou mal configurés, est une étape clé dans l’évaluation du niveau de sécurité d’un réseau. Et c’est précisément ce que permet Nmap.
Avant de rentrer dans les détails, illustrons le fonctionnement de Nmap avec un exemple concret : le scan d’un hôte ayant pour adresse IP 172.20.0.2.

Nmap nous indique que le port 80 est ouvert et qu’un service HTTP y est probablement actif. Il précise également que 999 autres ports sont fermés.
À noter que, par défaut, Nmap analyse uniquement les 1 000 ports les plus couramment utilisés ; un comportement que l’on peut modifier à l’aide de l’option -p.
Dans les sections suivantes, nous allons approfondir le fonctionnement de Nmap et comprendre comment il parvient à ces résultats. Nous détaillerons les différentes étapes d’une exécution typique, les techniques de scan disponibles, ainsi que des fonctionnalités clés telles que la détection de version et l’identification du système d’exploitation.
Enfin, nous aborderons les usages plus avancés de Nmap, adaptés à des contextes spécifiques comme le contournement de pare-feu ou l’automatisation via scripts.
Chaque exécution de Nmap suit une séquence structurée d’étapes. Selon les options spécifiées, certaines peuvent être ignorées, tandis que d’autres ne s’exécutent que sur demande explicite.
Le tableau ci-dessous résume ces différentes phases, dans l’ordre où elles sont généralement exécutées :
| N° | Phase | Description |
|---|---|---|
| 1 | Scripts Pré-scan | Exécution des scripts de la catégorie prerule, avant tout scan. Ils peuvent, par exemple, envoyer des requêtes broadcast ou DNS.Défaut : non Option : --script ou -sC |
| 2 | Énumération des cibles | Génération de la liste des IP à analyser. Les noms de domaine sont résolus à cette étape. Défaut : oui Option : non désactivable |
| 3 | Découverte d’hôtes (Host Discovery) | Détecte si chaque hôte est actif ou non. Défaut : oui Option : désactivable avec -Pn |
| 4 | Résolution DNS inverse | Tente de récupérer les noms de domaine associés aux adresses IP. Défaut : oui Option : désactivable avec -n |
| 5 | Scan de ports | Fonction principale de Nmap : identification des états des ports via différentes techniques. Défaut : oui Option : désactivable avec -sn |
| 6 | Détection de version | Identification des services et versions actifs sur les ports détectés. Défaut : non Option : -sV |
| 7 | Détection du système d’exploitation | Tente de détecter le système d’exploitation en cours d’exécution sur l’hôte. Défaut : non Option : -O |
| 8 | Traceroute | Exécute un traceroute vers la cible. Défaut : non Option : --traceroute |
| 9 | Résultats en sortie | Formatage et affichage des résultats (stdout, XML, JSON, fichiers, etc.). Défaut : oui Option : non désactivable |
| 10 | Scripts Post-scan | Exécution des scripts postrule, ainsi que ceux explicitement demandés par l’utilisateur.Défaut : non Option : --script ou -sC |
Dans les sections suivantes, nous nous concentrerons sur les phases 3 (découverte d’hôtes), 5 (scan de ports), 6 (détection de version) et 7 (détection de l’OS), particulièrement intéressantes pour comprendre la puissance de Nmap.
Cette phase correspond à la cinquième étape présentée dans le Tableau ci-dessus. L’objectif ici est d’identifier les ports ouverts sur un hôte.
Cependant, avec la généralisation des solutions de sécurité à différents niveaux — comme les pare-feu qui bloquent certaines connexions selon des règles prédéfinies — il devient difficile de savoir si un port est effectivement à l’écoute ou non.
C’est pourquoi Nmap classe l’état d’un port selon plusieurs catégories :
Nmap propose plusieurs techniques de scan permettant de déduire l’état d’un port en exploitant des différences subtiles dans les implémentations des protocoles selon les équipements et systèmes d’exploitation.
Ces méthodes ne sont pas toujours fiables puisqu’elles dépendent du comportement spécifique des cibles, mais elles restent utiles à connaître, en particulier lorsqu’on interagit avec des systèmes ou appareils atypiques. Certaines d’entre elles ont aussi été conçues pour rester discrètes.
Voyons maintenant quelques techniques de scan de ports proposées par Nmap.
-sS)Cette technique nécessite des privilèges d’envoi de paquets bruts (raw packets) et elle est utilisée par défaut si l’utilisateur qui exécute Nmap dispose des droits nécessaires. Elle fonctionne avec n’importe quel service conforme au protocole TCP.
Le principe est le suivant : Nmap envoie un paquet au port cible avec uniquement le flag SYN activé.
Le scan TCP SYN est souvent qualifié de scan furtif (stealth scan), car Nmap n’établit pas de connexion complète : il envoie un paquet RST immédiatement après avoir reçu un SYN/ACK, interrompant ainsi la procédure de handshake avant qu’elle ne soit finalisée.
-sT)Cette technique est sélectionnée par défaut si l’utilisateur qui exécute Nmap ne dispose pas des privilèges nécessaires pour envoyer des paquets bruts.
Elle repose sur l’établissement classique d’une connexion TCP complète avec le port cible, en suivant le processus standard de handshake TCP. Elle permet de détecter les états des ports de la même manière que le scan SYN, à une différence près : le scan TCP connect n’est pas furtif.
En effet, cette méthode complète la connexion TCP en répondant avec un SYN/ACK, ce qui la rend facilement détectable. La majorité des systèmes modernes enregistrent toute tentative de connexion, ce qui peut attirer l’attention de solutions de sécurité ou d’administrateurs réseau.
-sA)Contrairement aux techniques précédentes qui exploitent uniquement le flag SYN, cette méthode envoie un paquet avec uniquement le flag ACK activé.
Lorsqu’un port ouvert ou fermé reçoit un paquet contenant uniquement ce flag ACK, il devrait répondre avec un paquet contenant un flag RST. Ainsi, si Nmap reçoit un RST en réponse, le port est classé comme non filtré (unfiltered). En revanche, l’absence de réponse ou la réception d’un message ICMP de type « destination inaccessible » indique que le port est filtré.
Il est donc important de noter que cette technique ne permet pas de savoir si un port est ouvert ou fermé, mais uniquement s’il est accessible ou non à travers un pare-feu.
Cette approche peut néanmoins s’avérer utile pour analyser la configuration d’un pare-feu. Par exemple, elle permet parfois de distinguer si un pare-feu est statique (stateless) ou dynamique (stateful). Les pare-feux stateful gardent en mémoire les connexions établies et autorisent généralement seulement les paquets appartenant à une session active, ou ceux qui tentent d’en initier une nouvelle.
Malgré ses limitations, le scan TCP ACK peut être utilisé en complément d’autres techniques. En croisant les résultats, il devient alors possible d’inférer si un port est ouvert ou fermé.
-sU)Le scan UDP consiste à envoyer des paquets UDP vides vers les ports cibles, puis à attendre une éventuelle réponse. Si le port répond avec des données, il est alors considéré comme ouvert.
Cependant, il faut garder à l’esprit que les services UDP répondent rarement à des paquets vides ou à des données inattendues. Cela rend difficile pour Nmap de savoir si l’absence de réponse est due à un service qui ignore le paquet, ou un pare-feu qui bloque le trafic.
Pour augmenter les chances d’obtenir une réponse, Nmap envoie parfois des données spécifiques à certains protocoles vers les ports connus. Par exemple, il envoie une requête DNS au port 53.
Lorsque aucune réponse n’est reçue, Nmap classe l’état du port comme « open|filtered » (ouvert ou filtré), faute de pouvoir trancher.
Enfin, il faut noter que le scan UDP est relativement lent, car Nmap attend plusieurs secondes par défaut avant de retransmettre un paquet.
-sN)Jusqu’à présent, nous avons vu des techniques qui exploitent les flags SYN et ACK. Cette méthode, en revanche, envoie un paquet TCP sans aucun flag activé — d’où son nom de NULL scan.
Elle s’appuie sur un détail précis de la RFC TCP, qui stipule que lorsqu’un port fermé reçoit un paquet sans le flag RST activé, il doit répondre avec un paquet RST.
Ainsi, en envoyant un paquet qui ne contient aucun des flags RST, SYN ou ACK, il devient possible d’identifier les ports fermés sur les systèmes qui appliquent ce comportement conforme à la RFC.
Cependant, cette technique présente une limitation : elle ne permet pas de distinguer un port ouvert d’un port filtré. En effet, la RFC indique qu’un port ouvert doit simplement ignorer les paquets qui ne contiennent pas les flags SYN, ACK ou RST.
-sF)Cette technique fonctionne de la même manière que le scan TCP NULL, à la différence qu’elle envoie des paquets avec le flag FIN activé.
-sX)Cette technique est similaire à la précédente, sauf que les paquets envoyés ont les flags FIN, PSH et URG activés, ce qui leur donne un aspect « d’arbre de Noël » (d’où le nom Xmas).
-sW)Cette technique est similaire au scan TCP ACK puisqu’elle envoie des paquets avec uniquement le flag ACK activé, mais elle interprète les réponses différemment.
Elle tente d’exploiter un comportement présent sur certains systèmes : ceux-ci répondent avec un paquet RST dont le champ window varie selon l’état du port.
Cette technique ne fonctionne que sur les systèmes qui implémentent ce comportement spécifique, ce qui la rend globalement peu fiable.
-sY)Le protocole SCTP est une alternative aux protocoles TCP/UDP. De manière similaire au scan SYN, cette technique détecte qu’un port est ouvert s’il reçoit un paquet INIT-ACK en réponse.
À l’inverse, si elle reçoit un paquet ABORT, elle considère le port comme fermé.
Enfin, si une erreur ICMP de type « destination inaccessible » est reçue, le port est classé comme filtré.
--scanflagsNmap est un outil flexible qui permet aux utilisateurs de créer des scans personnalisés en spécifiant n’importe quelle combinaison de flags TCP.
Il est également possible d’ajouter une option de scan comme -sF ou -sA afin que les résultats soient interprétés selon le comportement de ce type de scan.
Si aucune option n’est précisée, les résultats sont interprétés par défaut comme un scan SYN (-sS).
Le tableau ci-dessous résume comment les différentes techniques de scan TCP évoquées précédemment classifient les ports en fonction des réponses reçues.

Le tableau ci-dessous résume les cas rencontrés lors de l’utilisation de la technique de scan UDP.

Ceci correspond à la sixième phase mentionnée dans le tableau présentant les phases d’exécution de Nmap.
À ce stade, tous les exemples que nous avons vus incluent une colonne SERVICE dans la sortie, indiquant des valeurs comme http.
Cela s’explique par le fait que, par défaut, Nmap tente de deviner quel service s’exécute sur un port donné en se basant sur un fichier nommé nmap-services. Ce fichier associe les numéros de ports aux services qui y sont généralement liés.
Toutefois, cette méthode reste imprécise, car les utilisateurs sont libres de faire tourner n’importe quel programme sur n’importe quel port, sans nécessairement respecter les conventions.
Dans l’exemple ci-dessous, Nmap identifie correctement qu’un service http s’exécute sur le port 80. Cette information figure dans le fichier nmap-services (puisque le port 80 est un port enregistré, couramment utilisé pour les serveurs HTTP).
En revanche, il ne parvient pas à identifier précisément ce qui tourne sur le port 5000, et le qualifie simplement de upnp. Cela est logique puisque le port 5000 n’est pas un port officiellement enregistré, il ne figure donc pas dans le fichier nmap-services.

Pour contourner cette limite et récolter un maximum d’informations sur les cibles, Nmap propose un module complet dédié à la détection des services. Ce module repose sur une méthode d’empreintes (fingerprinting), bien plus efficace que l’approche basée uniquement sur le fichier statique nmap-services.
Ce module peut être activé en ajoutant l’option -sV. Si l’on relance le scan précédent avec cette option, on obtient les résultats suivants :

Les résultats affichent désormais une nouvelle colonne VERSION, qui indique que le service en écoute sur le port 5000 est très probablement un serveur HTTP nginx, version 1.27.4.
Si cette version de nginx est vulnérable, cette information peut s’avérer extrêmement précieuse pour un attaquant. C’est pourquoi le type de service et sa version constituent des informations cruciales d’un point de vue sécurité.
Lors d’un scan, Nmap ne se contente pas de lister les ports ouverts. Il peut aussi essayer d’identifier les services qui tournent sur ces ports. Pour cela, il utilise un fichier appelé nmap-service-probes qui contient une grande liste de « probes ».
Une probe est tout simplement un petit message spécifique que Nmap envoie à un port pour voir comment le service va répondre. En comparant la réponse obtenue à ce qu’il attend, Nmap peut deviner quel service est en face (par exemple Apache, nginx, SSH, etc.).
Ces probes peuvent être modifiées ou enrichies par les utilisateurs avancés pour détecter des services spécifiques.
Ci-dessous un exemple de probe :

Chaque probe contient plusieurs lignes de directives :
Probe décrit le protocole utilisé (TCP ou UDP), le nom de la probe, et le contenu du message envoyé au port (le « payload »).match contiennent des expressions régulières : elles servent à vérifier si la réponse du service correspond à un modèle connu. Si ça matche, on identifie le service !ports liste les ports sur lesquels cette probe est habituellement efficace.Pour chaque port trouvé comme ouvert ou ouvert|filtré, Nmap procède ainsi :
match. Si aucune ne correspond, il essaie une « probe de secours » (fallback).rarity) et du niveau de verbosité demandé (--version-intensity).Néanmoins, il est important de noter que les résultats de cette phase ne sont pas toujours fiables à 100 %, car ils dépendent d’une base de données et de tests de correspondance par expressions régulières. Il peut y avoir des erreurs de détection.
C’est pour cela que Nmap encourage les utilisateurs à remonter les erreurs ou à contribuer à enrichir la base de données de probes.
Comme indiqué dans les sections précédentes, les ports ouverts UDP sont sujets à des dépassements de délai, car de nombreux services UDP ne répondent pas s’ils ne reconnaissent pas les données reçues.
En revanche, la phase de détection des services envoie des données spécifiques au protocole, ce qui augmente les chances d’envoyer les données attendues au service UDP et d’obtenir une réponse en retour.
Dans ce cas, tout port UDP précédemment marqué comme open|filtered peut être mis à jour en open.
La phase de détection des services peut également permettre d’identifier des systèmes d’exploitation, car de nombreux services peuvent révéler des informations utiles simplement en interagissant avec eux.
Par exemple, SSH envoie souvent une bannière qui peut contenir des détails sur le système d’exploitation du serveur. Il est donc possible d’extraire des informations relatives au système d’exploitation au cours de cette phase.
De plus, certains services sont connus pour fonctionner exclusivement sur des systèmes ou des appareils spécifiques, ce qui permet à Nmap de déduire le système d’exploitation sous-jacent.
Cependant, Nmap fournit un autre mécanisme pour la détection du système d’exploitation qui est invoqué en utilisant l’option -O, qui sera détaillée dans une autre section.
Par précaution, Nmap ignore par défaut les ports 9100 à 9107, souvent associés à des imprimantes. Ces dernières, comme mentionné dans la documentation, ont la mauvaise habitude d’imprimer tout ce qu’on leur envoie.
Donc si un serveur HTTP tourne sur un de ces ports, il ne sera pas détecté par défaut. Exemple :

Nous voyons que le port n’a pas été identifié comme un serveur HTTP. Mais si nous ajoutons --allports pour forcer Nmap à scanner tous les ports :

Nmap arrive à identifier le service et la version.
Au-delà du scan de ports, Nmap permet également de détecter les machines accessibles sur un réseau donné. Cette fonctionnalité est particulièrement utile pour les administrateurs système ou réseau, car elle facilite la gestion de l’infrastructure et la constitution d’un inventaire réseau.
Plusieurs techniques sont proposées pour cela.
-PE) : Nmap envoie une requête ICMP Echo et attend une réponse (Echo Reply). Si aucune réponse n’est reçue, la machine est considérée comme hors ligne. Il s’agit du comportement par défaut du « ping ».-PM) : Fonctionne comme -PE, mais envoie une requête ICMP Address Mask. Utile si les requêtes Echo sont bloquées.-PP) : Envoie une requête ICMP Timestamp pour déterminer si l’hôte répond.-PR)Cette méthode est particulièrement efficace en réseau local. Le protocole ARP étant massivement utilisé et rarement bloqué, il constitue une solution fiable pour détecter les machines actives sur un LAN.
-PS : Envoie un paquet TCP SYN sur le port 443 (configurable). Si une réponse SYN/ACK ou RST est reçue, l’hôte est considéré comme actif. Cela fonctionne bien lorsque ICMP est bloqué, mais que des services comme HTTP sont autorisés.-PA : Même logique que -PS, mais envoie un paquet TCP ACK sur le port 80 par défaut.-PU : Envoie un paquet UDP, par défaut sur le port 40125.-PO)Nmap peut également tenter de détecter la présence d’un hôte via d’autres protocoles comme IGMP.
Par défaut, Nmap combine les options suivantes :
-PE -PP -PS443 -PA80-PS80,443Ci-dessous un exemple de scan dune machine sur un réseau :

Identifier le système d’exploitation utilisé par une cible constitue une information précieuse. Cela permet, par exemple, d’orienter l’identification du type d’appareil, comme les routeurs ou les imprimantes, qui exécutent souvent des systèmes spécifiques.
En audit de sécurité, cette donnée est cruciale pour adapter les charges utiles d’attaque en fonction de l’environnement ciblé.
Nmap intègre un module dédié à la détection du système d’exploitation, basé sur l’analyse d’empreintes réseau (fingerprinting). Cette méthode repose sur une série de métriques et de calculs permettant de comparer les caractéristiques d’un hôte inconnu à une base de données de références connues.
Toutefois, cette détection peut échouer ou aboutir à des résultats imprécis. Dans ce cas, Nmap fournit une liste de systèmes d’exploitation probables, accompagnés d’un pourcentage de confiance. Il arrive également que le système ne puisse pas être identifié du tout.
Les explications qui suivent s’appliquent exclusivement à l’IPv4.
La détection du système d’exploitation repose sur l’envoi de plusieurs types de probes à la cible. Ces paquets peuvent être de nature TCP, UDP ou ICMP, et incluent souvent des données inhabituelles dans certains champs du paquet. Nmap envoie environ 16 paquets différents et classe les résultats dans une douzaine de catégories.
Après réception des réponses, Nmap construit une empreinte de la cible (subject fingerprint) en attribuant des attributs spécifiques à chaque catégorie, en se basant sur les valeurs retournées ou des métriques calculées. Cette empreinte est ensuite comparée à une empreinte de référence, extraite de sa base de données, laquelle regroupe les signatures connues de nombreux systèmes d’exploitation.
Voici un exemple de détection d’OS réalisée sur un routeur, en utilisant l’option -d qui permet d’afficher les détails de l’empreinte calculée :
# nmap -O -d -sV 192.168.1.254
Not shown: 992 closed tcp ports (reset)
PORT STATE SERVICE REASON VERSION
53/tcp open domain syn-ack ttl 64 dnsmasq 2.90
[... TRUNCATED RESULTS ...]
Device type: general purpose|router
Running: Linux 4.X|5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 4.15 - 5.19, OpenWrt 21.02 (Linux 5.4), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
TCP/IP fingerprint:
OS:SCAN(V=7.95%E=4%D=5/1%OT=53%CT=1%CU=42846%PV=Y%DS=1%DC=D%G=Y%M=8C97EA%TM
OS:=68133D2C%P=arm-apple-darwin24.1.0)SEQ(SP=104%GCD=1%ISR=10D%TI=Z%CI=Z%II
OS:=I%TS=A)OPS(O1=M5B4ST11NW7%O2=M5B4ST11NW7%O3=M5B4NNT11NW7%O4=M5B4ST11NW7
Le bloc d’empreinte TCP/IP (non affiché ici en entier) illustre la richesse des données collectées par Nmap. À partir de celles-ci, Nmap a identifié trois systèmes d’exploitation possibles pour la cible :
De plus, Nmap indique que l’équipement ciblé est probablement un routeur ou une machine standard.
Dans cette section, ce qui nous intéresse, c’est l’empreinte de la cible générée par Nmap. Celle-ci est affichée dans un format condensé, conçu pour être facilement partageable lors de la remontée d’erreurs ou d’incohérences.
Heureusement, ce format est relativement simple à décoder : il suffit de retirer le préfixe OS: présent au début de chaque ligne, puis d’ajouter un retour à la ligne après chaque parenthèse fermante.
Voici une version décodée de l’empreinte :

Chaque ligne représente une catégorie qui synthétise les résultats des sondes envoyées, à l’exception de la première. Ces résultats sont exprimés sous forme de paires attribut-valeur, séparées par le caractère %. Le format général est : NOM_DE_CATEGORIE(ATTR_1=valeur%ATTR_2=valeur%...).
Par exemple, la catégorie SEQ fournit des résultats d’analyse basés sur des calculs statistiques portant sur certains champs comme l’IP ID et la prédictibilité du numéro de séquence initial (ISN).
Un autre exemple : l’attribut R, présent dans de nombreuses catégories, correspond à la réactivité (Responsiveness). Sa valeur est fixée à Y (yes) si la cible a répondu aux sondes associées à cette catégorie.
Quant à la ligne SCAN, elle se distingue des autres : elle récapitule les conditions générales du scan, incluant notamment la version de Nmap utilisée, la date, ou encore le nombre de ports ouverts identifiés.
Pour une compréhension complète des différentes catégories et de la signification des attributs, on se référera à la documentation officielle de Nmap.
Une fois l’empreinte du système cible générée, Nmap la compare à toutes les empreintes de référence disponibles, en calculant un score de similarité (ou de confiance).
Prenons l’exemple de l’empreinte de référence correspondant à « MikroTik RouterOS », identifiée dans l’analyse précédente. Toutes les empreintes de référence sont stockées dans le fichier nmap-os-db.

Une empreinte de référence a une structure très proche de celle d’une empreinte cible, à ceci près que les valeurs ne sont pas fixes : elles sont exprimées sous forme de tests logiques ou expressions de correspondance.
Par exemple, dans la catégorie OPS, l’attribut O1 est défini comme suit : O1=M[54E-5B4]ST11NW[2|3|5|7].
[54E-5B4] désigne une plage de valeurs hexadécimales que l’on peut retrouver dans cette position.[2|3|5|7], cela signifie que la dernière valeur doit obligatoirement être l’un de ces chiffres précis (2, 3, 5 ou 7).Les premières lignes de l’empreinte servent à décrire le système d’exploitation et la version ciblée par l’ensemble des tests qui suivent.
Comme mentionné précédemment, Nmap calcule un score de confiance pour déterminer si une empreinte collectée (subject fingerprint) correspond à une empreinte de référence (reference fingerprint). Ce score est basé sur un modèle défini au début du fichier nmap-os-db, reconnaissable grâce à la directive MatchPoints.
Cette directive spécifie, pour chaque attribut de chaque catégorie, le nombre de points pouvant être attribués si l’attribut de l’empreinte à analyser correspond à celui de l’empreinte de référence.
Deux accumulateurs sont utilisés : TotalPoints et GainedPoints.
Nmap calcule ensuite un score de confiance sous la forme du ratio GainedPoints / TotalPoints, ce qui donne un nombre décimal entre 0 et 1.
Voici l’exemple de modèle de correspondance par défaut extrait du fichier nmap-os-db :

NB : La détection du système d’exploitation pour les cibles IPv6 repose sur une approche différente, basée sur des techniques de machine learning.
Nmap intègre un module de script connu sous le nom de Nmap Scripting Engine (NSE). Son objectif, comme son nom l’indique, est d’exécuter des scripts sur les cibles, ce qui peut s’avérer très utile pour automatiser des tâches fastidieuses ou répétitives. Ces scripts sont écrits dans le langage de programmation Lua.
Le module est livré avec une large collection de scripts, mais les utilisateurs peuvent également écrire et ajouter leurs propres scripts personnalisés.
Les scripts peuvent être exécutés à quatre étapes distinctes lors de l’exécution d’un scan Nmap. C’est l’auteur du script qui spécifie à quelle étape celui-ci doit s’exécuter. Voici les quatre étapes possibles :
hostrule définie dans le script.portrule.Les scripts sont aussi classés en catégories, selon leur finalité. Par exemple :
-sC ou --script sont utilisées sans arguments supplémentaires.http-brute (attaque brute force sur l’authentification HTTP basic, digest ou NTLM), snmp-brute, oracle-brute, etc.Voici un exemple d’exécution de Nmap utilisant l’option --script :

Comme on peut l’observer, le script a réussi à contourner l’authentification HTTP basic en réalisant une attaque brute force.
Nmap propose plusieurs techniques pour contourner des pare-feux ou des systèmes de détection/prévention d’intrusion (IDS/IPS) mal configurés.
Certaines de ces techniques ne sont efficaces que contre des machines anciennes avec des logiciels obsolètes.
Bien qu’elles puissent échouer face à des outils de sécurité modernes, elles méritent d’être essayées, en particulier lors d’un audit en réseau local.
Voici un aperçu de quelques techniques d’évasion disponibles dans Nmap.
-sI)Cette technique est utile lorsque l’on est bloqué pour scanner la cible, mais qu’on peut atteindre une autre machine qui :
Cette machine est appelée zombie et permet d’inférer des informations sur la cible. Le principe est le suivant :
Trois cas peuvent se produire :
Enfin, on réinterroge le zombie :
Cette méthode dépend du comportement de l’IP ID, donc elle est peu fiable si la machine zombie a d’autres connexions actives. Il est préférable de choisir une machine vraiment idle. Nmap propose un script nommé ipidseq pour détecter si les IP ID sont générés de manière incrémentale.
-sA)Cette technique est utile pour différencier les pare-feux stateful et stateless. Comme seuls les paquets avec le drapeau ACK sont envoyés, les pare-feux stateless peuvent les laisser passer, tandis que les stateful vérifieront s’il existe une connexion associée.
Cette technique permet d’envoyer les paquets en fragments plus petits. Cela peut contourner des équipements de sécurité qui ne gèrent pas correctement les paquets fragmentés.
Parfois ignoré dans la configuration des pare-feux, ce protocole peut permettre de contourner certaines protections via des scans IPv6.
Nmap implémente d’autres techniques intéressantes à tester lors d’un audit : routage source, usurpation d’adresse MAC, rebond FTP (FTP bounce), etc.
Il s’agit d’un type de scan particulier qui ne rentre pas dans les techniques de scan de ports classiques. Le scan des protocoles IP (-sO) a pour objectif d’identifier les protocoles IP supportés par la cible : ICMP, TCP, IGMP, etc.
Plutôt que de scanner des ports comme dans les scans traditionnels, cette méthode fait varier la valeur du champ Protocole (8 bits) de l’en-tête IP, permettant de déterminer quels protocoles sont acceptés ou filtrés par l’équipement visé.
Voici un exemple de scan réalisé avec Nmap sur un routeur :

Dans cet exemple, on peut observer que les protocoles ICMP (1), TCP (6), UDP (17) et SCTP (132) sont clairement ouverts. D’autres comme IPv6 (41), GRE (47) ou ESP (50) apparaissent comme open|filtered, ce qui signifie que Nmap ne peut pas déterminer avec certitude si le protocole est bien autorisé ou simplement filtré.
Ce type de scan est surtout utile lors d’audits de routeurs, pare-feux, ou autres équipements réseau qui pourraient laisser passer certains protocoles tout en bloquant d’autres.
Nmap est un outil puissant et polyvalent qui constitue un pilier essentiel dans l’arsenal des professionnels de la cybersécurité. Grâce à ses nombreuses fonctionnalités — de la découverte d’hôtes à la détection des systèmes d’exploitation, en passant par l’exécution de scripts automatisés et les techniques d’évasion avancées — Nmap permet d’obtenir une cartographie précise et approfondie des réseaux cibles.
Sa capacité à s’adapter à différents environnements et scénarios d’audit en fait un allié incontournable pour identifier les vulnérabilités, comprendre la configuration réseau, et préparer des stratégies de défense efficaces. Les fonctionnalités avancées telles que la comparaison des empreintes (fingerprints) ou le scan des protocoles IP illustrent la finesse d’analyse que l’on peut obtenir, même face à des systèmes complexes ou protégés.
Enfin, le fait que Nmap intègre un moteur de scripts extensible, avec une large bibliothèque et la possibilité d’ajouter ses propres scripts en Lua, lui confère une souplesse exceptionnelle pour automatiser et personnaliser les audits, allant bien au-delà d’un simple scanner de ports.
Maîtriser Nmap, c’est donc s’équiper pour mieux comprendre et protéger les réseaux, anticiper les attaques et renforcer la sécurité globale. Que ce soit pour un pentest, une analyse réseau ou un diagnostic rapide, Nmap reste un outil de référence indispensable pour tout expert en sécurité informatique.
Source :
Documentation Nmap : https://nmap.org/book/man.html
Auteure : Souad SEBAA – Pentester @Vaadata