
I. Présentation
Nmap est l’outil de scan réseau et de découverte de vulnérabilité de référence. Il comporte de nombreuses subtilités et ne pas le manipuler correctement peut avoir des effets de bord dangereux.
Dans cet article, nous passons en revue les principales erreurs à éviter lors de la manipulation de Nmap.
Un scan réseau, une politique de filtrage à vérifier, on dégaine Nmap et quelques secondes après, un service tombe ou on se retrouve exclu du réseau. Ce sont les risques liés à l’utilisation de Nmap lorsque l’on ne connait pas bien les options ou le comportement par défaut de l’outil.
Nous allons ici lister 3 erreurs courantes à éviter lors d’un scan Nmap, c’est parti !
II. Nmap : les principales erreurs
A. Oublier de sauvegarder la sortie
Un scan Nmap, pour cartographier son réseau, évaluer une politique de filtrage entre deux réseaux ou rechercher des vulnérabilités sur son système d’information, génère une grande quantité d’informations. Par défaut, Nmap vous affiche ses résultats dans votre terminal :
Extrait d’une sortie de cartographie avec Nmap.
Quand il y a trop d’informations ou que l’on souhaite préserver ces données pour archivage ou des comparaisons futures, cette sortie terminal atteint vite certaines limites. Nous pouvons très bien copier/coller cette sortie dans un fichier texte, mais ce n’est pas optimal et pas toujours possible.
Le problème est que l’on sait rarement à l’avance la quantité de données qu’une cartographie Nmap va générer. Il arrive même que l’on se retrouve à faire deux fois un même scan pour pouvoir sauvegarder la sortie que l’on imaginait moins verbeuse.
Pour éviter ces scans en double qui génèrent des bruits inutiles et font perdre du temps, mais aussi une potentielle perte d’informations, je vous conseille de toujours utiliser les options de sauvegarde des résultats d’un scan Nmap :
# Sauvegarder la sortie nmap dans le format standard
nmap 192.168.56.0/24 -oN scanNmap_192.168.56.0.nmap
# Sauvegarder la sortie nmap dans le format condensé et greppable
nmap 192.168.56.0/24 -oG scanNmap_192.168.56.0.gnmap
# Sauvegarder la sortie nmap dans le format XML
nmap 192.168.56.0/24 -oX scanNmap_192.168.56.0.xml
Ces différents formats permettent ensuite d’être lu de façon programmatique (via Python et PowerShell notamment) ou d’être intégrés dans différents outils d’analyse et de traitement (exemple : Metasploit).
Pour être encore plus efficace, l’option suivante permet de sauvegarder les résultats dans les 3 formats en une seule commande :
# Sauvegarder la sortie nmap dans les trois formats
nmap 192.168.56.0/24 -oA scanNmap_192.168.56.0
B. Ne pas maitriser l’agressivité du scan
Nmap est un outil très puissant et précis. Il peut envoyer des milliers de paquets par seconde à destination d’un hôte ou d’un réseau, mais contient aussi des scripts offensifs qui visent à détecter des vulnérabilités.
Les scripts NSE (Nmap Scripting Engine) envoient souvent des paquets malformés pour vérifier une réponse particulière d’un hôte ou d’un service et déceler des faiblesses. Certains services ou composants du SI peuvent mal supporter ces scans et tout simplement se mettre à dysfonctionner !
Pour éviter de causer des dégâts importants sur un système d’information, voici quelques conseils :
Évitez de faire des scans à l’aveugle sur les services.
Le mieux est de procéder par étapes pour identifier les hôtes d’un réseau, les services disponibles, puis découvrir leurs versions et leurs faiblesses. Voici un exemple de démarche progressive :
Scanner les hôtes du réseau, en utilisant l’ICMP et quelques ports basiques
nmap -sP -PS22,3389,445,139 172.16.0.0/16 -oA NMAP_HostDiscovery
Convertir la liste des hôtes découverts en liste d’hôtes à scanner
cat NMAP_HostDiscovery.gnmap |grep “Status: Up” |cut -d ” ” -f 2 > HostUp_FromDiscovery.txt
Utiliser cette liste d’hôtes pour un scan de ports basiques (top 100), sans découvertes des versions
nmap -F –max-retries 1 -T4 –open -Pn -iL HostUp_FromDiscovery.txt
Sur les ports que vous avez découverts et identifiés comme non sensibles, effectuer une découverte des versions
nmap -sV -iL HostWithInterestingServices.txt -p
Sur les services non sensibles et intéressants, effectuer un scan avec les scripts de recherche de vulnérabilités :
nmap -sC -iL SafeHostWithInterestingServices.txt -p
Entre chacune de ces étapes, notez que je me sers de l’option -iL qui est simplement un fichier contenant un hôte (IP ou FQDN) par ligne. Je ne cible pas tout un CIDR, justement pour maitriser les cibles scannées, être sûr de ne pas cibler un matériel sensible, une machine industrielle ou un OS/services obsolètes.
Une autre possibilité consiste à exclure de manière explicite les IP/CIDR à ne pas scanner grâce à l’option suivante :
# Scan nmap complet et agressif, excluant des hôtes sensibles ou inutiles
Nmap -sV -sC -p- 172.16.0.0/16 –exclude 172.16.0.4, 172.16.4.0/24
Gérer les options de timing et de rapidité du scan
Nmap dispose de nombreuses options pour gérer la rapidité du scan, le nombre de paquets envoyés par seconde, l’attente à observer entre deux hôtes, etc.
Ces grâces à ces options que l’on peut rendre Nmap moins agressif au niveau réseau, et donc limiter le risque de saturation. Étudier toutes ces options est nécessaire, mais sachez que des configurations types existent : Timing Templates.
Bien qu’imparfaites, elles permettent d’utiliser une base de travail pour gérer l’agressivité des scans Nmap. Voici comment les utiliser :
# Scan lent et discret
Nmap -T1 192.168.56.0/24
# Scan très agressif
Nmap -T5 192.168.56.0/24
C. Passer à côté de 98% des ports à scanner
Nmap est souvent utilisé avec des options par défaut qui limitent drastiquement la portée des scans. Prenons pour exemple la commande standard suivante :
nmap 192.168.56.0/24
Celle-ci ne scanne que les 1 000 ports TCP les plus courants. Pire, l’option -F (Fast scan) se limite à seulement 100 ports. Pourtant, beaucoup de services critiques se trouvent souvent sur des ports plus exotiques.
Pourquoi est-ce un problème ? 98,48% des ports TCP (soit 64 511 ports) et 100% des ports UDP sont ignorés par défaut. Un attaquant ou un administrateur pourrait ainsi conclure à tort qu’un système est sécurisé, alors que des services vulnérables ou non autorisés sont actifs sur des ports un peu plus rares. Aussi, les ports UDP, souvent négligés, abritent des services comme DNS (53), SNMP (161), ou des protocoles industriels, qui peuvent être des cibles de choix.
Si l’on ne connait pas le fonctionnement par défaut de Nmap, nous pouvons nous mettre à affirmer que le SI est sûr ou que la politique de filtrage est robuste alors qu’il n’en est rien. Pour couvrir l’intégralité des ports TCP et UDP, utilisez :
# Scanner tous les ports TCP (1-65535)
nmap -p- 192.168.56.0/24
# Scanner tous les ports UDP (attention, beaucoup plus lent)
nmap -sU -p- 192.168.56.0/24
III. Maitriser Nmap : gagner du temps et s’éviter des problèmes
Ces erreurs, bien que courantes, sont faciles à éviter lorsque l’on a été un minimum formé à la maitrise de l’outil. La maitrise des outils offensifs, même utilisés pour de bonnes raisons, est primordiale dans un environnement professionnel. Ces outils peuvent rendre de grands services en identifiant des faiblesses et des vulnérabilités, mais n’oubliez pas qu’ils adoptent pour cela des comportements inhabituels qui peuvent causer des effets indésirables.
Aussi, ne pas connaitre les options, subtilités et comportement par défaut de l’outil peut mener à un faux sentiment de sécurité.
Pour éviter les erreurs que nous venons de parcourir (et bien d’autres), et pour tirer le meilleur parti de cet outil en tant que pentester, administrateur système, administrateur réseau, DSI ou RSSI : il faut vous former.
J’ai pour vous écrit un livre de 160 pages dédié à la maitrise de l’outil Nmap pour la cartographie et la recherche de vulnérabilité :
https://bit.ly/ITC-NMAP-LIVRE
L’objectif ? Vous rendre opérationnel pour une utilisation efficace, sûre et optimisée de cet outil pour sécuriser votre système d’information, que vous soyez administrateur réseau, système, pentester ou RSSI.
Co-fondateur d’IT-Connect.fr.
Auditeur/Pentester chez Orange Cyberdéfense.