Nmap

Nmap (Network Mapper) est un outil open-source puissant utilisé pour l'exploration réseau et les audits de sécurité. Il permet de détecter les hôtes, les ports ouverts, les services actifs, les systèmes d'exploitation, et même les vulnérabilités. Ce tutoriel complet vous guide pas à pas dans son utilisation dans des contextes DevOps, MLOps, SecOps et DevSecOps modernes.


Introduction

Qu'est-ce que Nmap ?

Nmap, ou Network Mapper, est un outil open source conçu pour l'exploration réseau et les audits de sécurité. Développé initialement par Gordon Lyon (alias Fyodor), Nmap est aujourd'hui un pilier incontournable dans les environnements DevOps, SecOps et plus largement dans la cybersécurité.

Il permet de :

  • Scanner des hĂ´tes sur un rĂ©seau
  • DĂ©couvrir des services et systèmes d'exploitation
  • Identifier des vulnĂ©rabilitĂ©s potentielles
  • Cartographier dynamiquement une infrastructure rĂ©seau

Nmap est extrêmement modulable : il peut être utilisé de manière très simple en ligne de commande pour détecter rapidement si un hôte est actif, ou de manière plus avancée avec des scripts personnalisés capables de simuler des attaques spécifiques.

Pourquoi apprendre Nmap dans une approche DevOps/SecOps/MLOps ?

Traditionnellement utilisé par les pentesters et analystes sécurité, Nmap s'est imposé comme un outil essentiel pour d'autres domaines techniques, notamment :

Pour les DevOps

  • Visualiser en temps rĂ©el la structure rĂ©seau de l'infrastructure dĂ©ployĂ©e
  • VĂ©rifier que seuls les ports nĂ©cessaires sont exposĂ©s après un dĂ©ploiement
  • S'assurer de la bonne configuration des règles de firewall ou de sĂ©curitĂ© des groupes

Pour les SecOps

  • Identifier rapidement les services non autorisĂ©s ou les ports oubliĂ©s
  • Automatiser les audits de sĂ©curitĂ© en continu sur les rĂ©seaux internes
  • DĂ©tecter les changements suspects dans l’exposition des services

Pour les DevSecOps

  • IntĂ©grer des scans de ports et services dans les pipelines CI/CD
  • Bloquer ou notifier en cas de dĂ©couverte d’un port critique exposĂ©
  • Maintenir une « surface d’attaque » minimale au fil des itĂ©rations produit

Pour les MLOps

  • SĂ©curiser les environnements de dĂ©ploiement de modèles (API, dashboards, etc.)
  • Identifier les points d’exposition involontaires dans des clusters ou des notebooks partagĂ©s
  • PrĂ©venir l’ouverture non maĂ®trisĂ©e de ports (par exemple via Jupyter, MLflow ou TensorBoard)

Cas d’usage typiques

  • Cartographie automatisĂ©e d’un parc rĂ©seau : utile pour l’inventaire continu des ressources
  • VĂ©rification de conformitĂ© : s’assurer que la configuration rĂ©seau respecte les normes internes ou externes
  • Surveillance en temps rĂ©el : dĂ©tection de nouvelles machines, ports ou services dans un rĂ©seau sensible
  • Test avant dĂ©ploiement : scanner une VM ou un conteneur dans un pipeline avant mise en production
  • Analyse post-mortem : comprendre l’exposition rĂ©seau d’une machine compromise ou d’un service vulnĂ©rable

Apprendre à maîtriser Nmap, ce n’est pas seulement savoir taper quelques commandes. C’est acquérir une capacité d’analyse critique de l’exposition réseau de son système. C’est intégrer une approche préventive et proactive de la sécurité, essentielle dans les environnements modernes.

Le reste du cours vous apprendra à utiliser Nmap non pas comme un gadget ponctuel, mais comme un outil quotidien et intégré à votre cycle de développement, de déploiement et de supervision.


Partie 1 — Fondamentaux de Nmap

1. Installation et prise en main

1.1 Installation de Nmap

Sur Linux (Debian, Ubuntu, Kali, etc.)

Ouvrez un terminal et tapez :

sudo apt update sudo apt install nmap -y

Cela installera la dernière version disponible dans les dépôts officiels.

Sur Fedora / Red Hat / CentOS

sudo dnf install nmap -y

Sur Arch Linux / Manjaro

sudo pacman -S nmap

Sur macOS

Utilisez Homebrew :

brew install nmap

Assurez-vous que brew est installé avant (voir https://brew.sh/).

Sur Windows

  1. Rendez-vous sur la page officielle : https://nmap.org/download.html
  2. Téléchargez l’installateur Windows (inclut Zenmap et Npcap)
  3. Lancez l’installateur et acceptez les options par défaut (ne décochez Npcap)
  4. Une fois installé, ouvrez cmd.exe et tapez :
nmap -v

Vous devriez voir s’afficher la version installée.

1.2 Interface CLI vs Zenmap (GUI)

Interface CLI (Command Line Interface)

C’est l’interface par défaut de Nmap. Elle permet :

  • Une exĂ©cution rapide et automatisable
  • L’intĂ©gration dans des scripts ou pipelines
  • Un contrĂ´le total sur les options

Exemple de commande simple :

nmap 192.168.1.1

Interface graphique Zenmap

Zenmap est une interface GUI qui facilite l’usage de Nmap pour les débutants. Elle permet de :

  • Sauvegarder des profils de scan
  • Visualiser les rĂ©sultats sous forme de tableaux
  • Voir la commande Nmap Ă©quivalente gĂ©nĂ©rĂ©e par l’interface

Astuce : même si vous débutez avec Zenmap, entraînez-vous à lire et modifier la commande affichée.


2. Principes de base des scans réseau

Un scan Nmap se décompose en plusieurs étapes :

  1. Découverte d’hôtes (hôtes actifs)
  2. Scan de ports
  3. Identification des services (bannière)
  4. Détection de l’OS

Nous abordons ici les bases :

2.1 Scan de ports TCP

Scan TCP SYN (semi-ouvert)

nmap -sS 192.168.1.1

Ce type de scan :

  • N’envoie qu’un paquet SYN (pas d’ACK)
  • Est plus rapide
  • Moins dĂ©tectable (ne termine pas la connexion)

Note : Nécessite les privilèges root/administrateur sur la plupart des OS.

Scan TCP connect (standard)

nmap -sT 192.168.1.1
  • Utilise l'appel système connect() du système d’exploitation
  • Plus dĂ©tectable car la connexion est complète (SYN, SYN/ACK, ACK)
  • Ne nĂ©cessite pas de privilèges root

2.2 Scan UDP

nmap -sU 192.168.1.1
  • Plus lent que TCP (pas de handshake, donc pas d’ACKs clairs)
  • Souvent utilisĂ© pour dĂ©couvrir des services comme DNS, SNMP, TFTP

Conseil : combiner avec TCP pour un scan complet :

sudo nmap -sS -sU 192.168.1.1

2.3 Détection d’hôtes (ping sweep)

nmap -sn 192.168.1.0/24
  • Envoie un ping ICMP Ă  chaque adresse du sous-rĂ©seau
  • N’affiche que les machines actives (pas les ports)

Utilité : cartographier les machines d’un réseau local ou cloud


2.4 Options de base à connaître

-sS : scan TCP SYN (rapide, discret, nécessite root)

sudo nmap -sS 192.168.1.1

-sU : scan UDP

sudo nmap -sU 192.168.1.1

-Pn : ne fait pas de ping préalable (utile sur les machines qui ne répondent pas à l’ICMP)

nmap -Pn 192.168.1.1

-p : sélectionner les ports à scanner

nmap -p 22,80,443 192.168.1.1
  • Vous pouvez aussi faire : -p- pour scanner tous les ports (1 Ă  65535)

-T : définir l’agressivité du scan (de T0 à T5)

nmap -T4 192.168.1.1
  • T0 : très lent (furtif)
  • T3 : Ă©quilibrĂ© (par dĂ©faut)
  • T5 : très rapide (bruyant)

Recommandé pour CI/CD ou scan rapide :

nmap -T4 -F 192.168.1.1

(-F = fast scan sur les ports les plus communs)


Résumé visuel des commandes utiles

ObjectifCommande
Scan rapidenmap -T4 -F 192.168.1.1
Scan tous ports TCPsudo nmap -sS -p- 192.168.1.1
Scan UDPsudo nmap -sU 192.168.1.1
Ping sweepnmap -sn 192.168.1.0/24
Sans ping ICMPnmap -Pn 192.168.1.1
Ports spécifiquesnmap -p 22,80,443 192.168.1.1
Scan lent/discretnmap -T1 -sS 192.168.1.1

Ă€ ce stade, vous ĂŞtes capable de :

  • Installer et lancer Nmap
  • Comprendre les principaux types de scans
  • Identifier les options essentielles pour adapter vos scans Ă  la situation

Dans la prochaine partie, nous apprendrons à identifier les systèmes, services et applications exposés, et à exporter les résultats pour les intégrer à un processus de supervision ou d’analyse de vulnérabilité.


Partie 2 — Exploration du réseau et cartographie

3. Détection d'OS et de services

L’un des grands points forts de Nmap est sa capacité à identifier les systèmes d’exploitation, les services actifs et les applications en réseau. Cela permet de comprendre exactement ce qui tourne sur une machine, pour anticiper les risques ou faire de l’inventaire automatisé.

3.1 Détection d’OS (-O)

sudo nmap -O 192.168.1.1

Cette option déclenche une tentative de détection du système d’exploitation distant. Elle s’appuie sur :

  • L’analyse des paquets de rĂ©ponse (TTL, TCP Window, etc.)
  • Des signatures connues dans la base de donnĂ©es interne de Nmap

Conditions nécessaires :

  • NĂ©cessite des privilèges administrateur (root)
  • Fonctionne mieux si plusieurs ports sont ouverts
  • Peut ĂŞtre imprĂ©cise si la machine cible utilise un pare-feu ou un proxy

Conseil : combinez avec -sS et -v pour plus de détails :

sudo nmap -sS -O -v 192.168.1.1

3.2 Détection de version des services (-sV)

nmap -sV 192.168.1.1

Cette option permet d’identifier :

  • Le nom du service (ex : SSH, HTTP, FTP...)
  • Sa version exacte (ex : OpenSSH 8.2p1, Apache 2.4.41...)

Utilité :

  • Évaluer la vĂ©tustĂ© des services
  • Identifier des failles spĂ©cifiques Ă  une version
  • Mieux cibler les audits de vulnĂ©rabilitĂ©

Conseil : combinez avec -p pour ne scanner que certains ports :

nmap -sV -p 22,80,443 192.168.1.1

3.3 Bannière et fingerprinting

Certaines bannières de services (retours de type "220 OpenSSH 8.2p1 Ubuntu") sont suffisantes pour déduire des informations sensibles.

Pour les afficher manuellement :

nmap -sV --version-all 192.168.1.1

Cela lance tous les tests de version disponibles, ce qui peut être plus long mais plus précis.


4. Découverte réseau automatisée

4.1 Scan de sous-réseaux

nmap -sn 192.168.1.0/24
  • Identifie tous les hĂ´tes actifs sur un sous-rĂ©seau donnĂ©
  • N’affiche pas les ports, uniquement les adresses IP actives

Conseil : combinez avec -oG pour un résultat facilement analysable :

nmap -sn 192.168.1.0/24 -oG subnet_scan.txt

4.2 Filtrage par type de machine / système

Une fois un scan complet effectué, vous pouvez filtrer les résultats pour ne garder que certains OS ou services.

Exemple avec grep sur les OS Linux :

grep -i linux subnet_scan.txt

Ou sur les services HTTP :

grep -i http subnet_scan.txt

Pour une approche plus structurée, utilisez le format XML ou JSON (voir section suivante).

4.3 Exportation des résultats

Nmap permet d’exporter les résultats dans plusieurs formats.

Format Grepable (rapide Ă  analyser)

nmap -oG resultats.txt 192.168.1.0/24

Format XML (structuré, idéal pour parsing automatique)

nmap -oX resultats.xml 192.168.1.0/24

Format JSON (avec nmap2json, un outil externe)

Nmap ne supporte pas le JSON nativement, mais vous pouvez convertir :

pip install nmaptocsv nmap -oX resultats.xml 192.168.1.0/24 nmaptocsv -i resultats.xml -o resultats.csv --fields ip-address,ports

Ou utiliser xml2json sur le XML produit.


5. Visualisation

5.1 Utilisation de ndiff (comparaison de scans)

ndiff permet de comparer deux fichiers de scan Nmap :

nmap -oX scan1.xml 192.168.1.0/24 # quelques jours plus tard nmap -oX scan2.xml 192.168.1.0/24 ndiff scan1.xml scan2.xml

Cela affiche :

  • Les hĂ´tes ou services nouvellement apparus
  • Ceux qui ont disparu
  • Les changements de versions ou d’état

5.2 Conversion en HTML avec xsltproc

Pour transformer le XML en page HTML :

xsltproc /usr/share/nmap/nmap.xsl resultats.xml -o rapport.html

Puis ouvrez rapport.html dans un navigateur.

5.3 Visualisation web : webxml

webxml est une interface web qui permet de naviguer facilement dans un fichier XML généré par Nmap. Elle peut être auto-hébergée ou utilisée localement.

Installation :

git clone https://github.com/mrschyte/webxml cd webxml # Placez vos .xml dans le dossier prévu, ouvrez index.html

5.4 Intégration avec d'autres outils

Graphviz

Vous pouvez générer un graphe des relations réseau à partir des données Nmap (avec traitement préalable du XML ou nmap -oG).

Exemple de pipeline :

nmap -oG res.txt 192.168.1.0/24 # Utiliser un script Python pour transformer en .dot # Puis générer l’image neato -Tpng fichier.dot -o reseau.png

ELK (Elasticsearch + Logstash + Kibana)

  1. Convertissez les résultats en JSON
  2. Utilisez Logstash pour ingérer les données dans Elasticsearch
  3. Créez un tableau de bord sur Kibana

Cela permet :

  • Une cartographie dynamique du rĂ©seau
  • Une dĂ©tection visuelle d’anomalies
  • Une historisation des scans (combinĂ© avec ndiff)

Récapitulatif

ObjectifCommande ou outil
Détecter l’OSsudo nmap -O IP
Détecter versions servicesnmap -sV IP
Export XMLnmap -oX fichier.xml IP
Comparer deux scansndiff scan1.xml scan2.xml
HTML Ă  partir XMLxsltproc nmap.xsl fichier.xml -o .html
Visualisation Webwebxml
Analyse structuréeJSON + ELK / CSV

Ă€ ce stade, vous ĂŞtes capable de :

  • Identifier les OS et versions de services sur n’importe quel hĂ´te
  • Scanner tout un rĂ©seau pour en extraire une cartographie exploitable
  • Exporter et visualiser les rĂ©sultats pour une analyse ou un reporting facile

La prochaine étape consistera à passer à la détection de vulnérabilités, un aspect central du travail SecOps/DevSecOps.


Partie 3 — Nmap pour la sécurité

6. Détection de vulnérabilités

6.1 Nmap Scripting Engine (NSE)

Le Nmap Scripting Engine (NSE) permet d'exécuter des scripts Lua embarqués dans Nmap, conçus pour :

  • DĂ©tecter des vulnĂ©rabilitĂ©s connues
  • RĂ©aliser du brute-force
  • Identifier des failles de configuration

Ces scripts sont classés en catégories :

  • auth : authentification, brute force
  • default : scripts activĂ©s par dĂ©faut
  • discovery : exploration rĂ©seau
  • exploit : exploitation de vulnĂ©rabilitĂ©s
  • vuln : dĂ©tection de vulnĂ©rabilitĂ©s connues

Pour voir tous les scripts disponibles :

ls /usr/share/nmap/scripts/

Ou directement dans Nmap :

nmap --script-help=all

6.2 Scripts populaires

Script vuln

C’est un script « méta » qui regroupe plusieurs tests de vulnérabilités :

nmap --script vuln 192.168.1.1

Il peut détecter :

  • SMBv1 (EternalBlue)
  • OpenSSL Heartbleed
  • Serveurs web obsolètes
  • Faille MS08-067, etc.

Script http-enum

Liste les répertoires et services d’un serveur web.

nmap -p 80 --script http-enum 192.168.1.1

Script ftp-anon

Teste si l’accès FTP anonyme est activé.

nmap -p 21 --script ftp-anon 192.168.1.1

Autres utiles :

--script sshv1 # Détection de SSHv1 --script smb-os-discovery # Découverte système via SMB --script dns-zone-transfer # Test de transfert DNS

6.3 Lancer un scan de vulnérabilités ciblé

Pour scanner un hôte et rechercher des vulnérabilités sur certains ports :

sudo nmap -sV --script vuln -p 21,22,80,443 192.168.1.1

Ou pour des catégories spécifiques :

sudo nmap -sV --script "default or vuln" 192.168.1.1

7. Éviter les détections / IDS

Les IDS (Intrusion Detection Systems) détectent souvent les scans Nmap. Heureusement, Nmap fournit plusieurs options pour rester discret.

7.1 Options d’évasion

--data-length <taille>

Ajoute des données aléatoires dans les paquets pour brouiller les signatures.

nmap --data-length 50 192.168.1.1

--randomize-hosts

Mélange l’ordre des IP scannées (utile dans une plage IP).

nmap --randomize-hosts -iL liste_ips.txt

--spoof-mac <valeur>

Change l’adresse MAC source pour chaque scan.

nmap --spoof-mac Apple 192.168.1.1

Ou valeur aléatoire :

nmap --spoof-mac 0 192.168.1.1

7.2 Timing et fragmentation

-T (Timing template)

Utilisez des scans plus lents pour passer sous les radars :

nmap -T1 192.168.1.1

-f (fragmentation)

Envoie des paquets fragmentés pour éviter la détection :

sudo nmap -f 192.168.1.1

--scan-delay <temps>

Ajoute un délai entre chaque paquet :

nmap --scan-delay 5s 192.168.1.1

Combinaison furtive recommandée :

sudo nmap -sS -T1 -f --data-length 50 --spoof-mac 0 192.168.1.1

8. Utilisation dans un pipeline SecOps / DevSecOps

8.1 Intégration dans un pipeline CI/CD

Vous pouvez intégrer Nmap dans un pipeline GitLab, GitHub Actions ou Jenkins pour automatiser les scans à chaque build ou déploiement.

Exemple dans .gitlab-ci.yml

stages: - scan nmap_scan: stage: scan image: instrumentisto/nmap script: - nmap -sV --script vuln -oX report.xml 192.168.1.1 artifacts: paths: - report.xml

Exemple GitHub Actions

name: Scan réseau on: [push] jobs: scan: runs-on: ubuntu-latest steps: - name: Installer Nmap run: sudo apt-get install nmap -y - name: Lancer le scan run: nmap -sV --script vuln -oX report.xml 192.168.1.1 - name: Enregistrer le rapport uses: actions/upload-artifact@v2 with: name: rapport-nmap path: report.xml

8.2 Génération de rapports automatisés

Ajoutez une étape dans le pipeline pour :

  • Transformer le XML avec xsltproc
  • Convertir en HTML ou PDF
  • Envoyer par e-mail ou sur un dashboard

Exemple :

xsltproc /usr/share/nmap/nmap.xsl report.xml -o rapport.html wkhtmltopdf rapport.html rapport.pdf

8.3 Alerting sur résultats critiques

Utilisez un script Python pour parser le fichier XML et envoyer des alertes si :

  • Un service vulnĂ©rable est dĂ©tectĂ©
  • Un nouveau port critique est apparu

Exemple simple :

import xml.etree.ElementTree as ET arbre = ET.parse("report.xml") racine = arbre.getroot() for hote in racine.findall("host"): for port in hote.findall("ports/port"): state = port.find("state").get("state") if state == "open": service = port.find("service") if service is not None and "vuln" in str(service.attrib): print("Alerte :", port.attrib, service.attrib)

Résumé

ObjectifCommande ou outil
Scan de vulnérabilité completnmap --script vuln -sV IP
Scan webnmap -p 80 --script http-enum IP
Scan discretnmap -sS -f -T1 --spoof-mac 0 IP
Export XML-oX rapport.xml
Intégration GitLab / GitHub.gitlab-ci.yml, GitHub Actions
Génération HTMLxsltproc
Parsing automatisé + alertingPython + xml.etree.ElementTree

À présent, vous êtes capable d’utiliser Nmap pour :

  • Scanner des services vulnĂ©rables
  • Éviter les systèmes de dĂ©tection
  • IntĂ©grer ces analyses dans un pipeline automatisĂ© de sĂ©curitĂ©

Nous passerons ensuite à des cas d’usage spécifiques DevOps/MLOps, avec des scans adaptés aux environnements en production, cloud ou conteneurisés.


Partie 4 — Cas d’usage spécifiques

9. Nmap pour DevOps

L’usage de Nmap dans une logique DevOps vise à visualiser l’infrastructure réseau, vérifier la disponibilité des services et sécuriser les déploiements à toutes les étapes du cycle de vie applicatif.

9.1 Cartographie dynamique de l’infrastructure

Objectif :

Obtenir une vue d’ensemble actualisée des services exposés dans un réseau DevOps (serveurs d'applications, bases de données, outils CI/CD, etc.).

Étapes :

  1. Créez une plage IP à scanner :
nmap -sn 10.0.0.0/24 -oG hosts.txt
  1. Filtrez les hĂ´tes actifs :
grep Up hosts.txt | cut -d ' ' -f 2 > active_ips.txt
  1. Scannez les services pour chaque hĂ´te :
nmap -sV -iL active_ips.txt -oX infra.xml
  1. (Optionnel) Convertissez en HTML :
xsltproc /usr/share/nmap/nmap.xsl infra.xml -o infra.html

9.2 Vérification de la disponibilité des services (health check avancé)

Nmap permet de vérifier si un service est présent ET fonctionnel (pas juste ouvert).

Exemple : Vérifier qu’un serveur PostgreSQL écoute bien sur le port 5432

nmap -p 5432 --script pgsql-brute 10.0.0.15

Exemple : Vérifier qu’un service web ne plante pas après déploiement

nmap -p 80 --script http-title 10.0.0.42

9.3 Audit réseau avant / pendant / après déploiement

Intégrez les scans dans les étapes clés de votre pipeline :

  • Avant : vĂ©rifier que seuls les ports nĂ©cessaires sont ouverts
  • Pendant : s'assurer que les règles de pare-feu sont en place
  • Après : vĂ©rifier l’impact d’un rollback ou d’un patch

Exemple d’audit post-déploiement :

nmap -sS -p- 10.0.0.0/24 -oG audit_post_deploy.txt

Puis comparer avec l’audit précédent via ndiff.


10. Nmap pour MLOps

Les environnements MLOps contiennent souvent des éléments exposés : API de modèles, Jupyter, TensorBoard, services REST… Il est crucial de détecter les ports et services ouverts sur ces machines.

10.1 Sécuriser les endpoints exposés par des modèles ML

Cas typique : API Flask exposée sur le port 5000

nmap -p 5000 --script http-title 10.0.0.33
  • Permet de vĂ©rifier si une API est exposĂ©e
  • On peut ajouter -sV pour identifier les frameworks

API non sécurisée ? Ajoutez :

nmap --script http-methods -p 5000 10.0.0.33

10.2 Scanner les containers / microservices dans des clusters

Si vous utilisez Docker ou Kubernetes, vous pouvez scanner les conteneurs depuis l’extérieur du cluster (réseau host) ou depuis un conteneur/pod.

Scanner tous les services exposés dans un bridge Docker

nmap -sS 172.17.0.0/16

Scanner depuis un conteneur Docker

  1. Créez un conteneur avec Nmap :
docker run -it --network host instrumentisto/nmap /bin/sh
  1. Lancez vos scans depuis l’intérieur.

Scanner dans Kubernetes (voir partie suivante pour les limites)

10.3 Détection de ports ouverts dans des environnements Jupyter, Airflow, etc.

Exemples typiques :

# Jupyter Notebook nmap -p 8888 --script http-auth 10.0.0.20 # Airflow Web UI nmap -p 8080 --script http-title 10.0.0.21 # MLflow nmap -p 5000-5001 10.0.0.22

Conseil : créez une liste de ports connus de vos outils ML et scannez-la régulièrement :

nmap -p 8888,5000,5001,8080 -sV 10.0.0.0/24

11. Nmap en environnement cloud / Kubernetes

11.1 Nmap depuis un pod (limites et solutions)

Dans Kubernetes, vous pouvez scanner le réseau interne depuis un pod Nmap :

kubectl run nmap --rm -it --image=instrumentisto/nmap -- bash

Puis, depuis ce pod :

nmap -sS 10.244.0.0/16

Limites :

  • Certaines communications inter-pods sont isolĂ©es
  • Vous n’aurez pas accès aux nodes ou Ă  Internet

Solution : déployer Nmap sur un node avec plus de droits, ou utiliser hostNetwork: true dans votre pod.

11.2 Cas GCP / AWS : scan inter-région, VPC peering

GCP :

  • Par dĂ©faut, les VPC sont cloisonnĂ©s entre projets ou rĂ©gions.
  • Utilisez une VM dĂ©diĂ©e avec une IP publique ou scannez par VPC peering.

AWS :

  • Activez le peering entre VPCs si vous devez scanner plusieurs zones.
  • VĂ©rifiez les règles de sĂ©curitĂ© (Security Groups et NACLs).

Exemple de scan entre 2 VPC peered :

nmap -Pn -sS -p- 172.31.0.0/16

11.3 Cloisonnement réseau et surface d’attaque dans les clusters

Objectif : identifier les services inter-pod ou exposés par erreur

Exemple :

nmap -p- -sV 10.244.0.0/16

Puis chercher :

  • Services inattendus
  • Ports exposĂ©s Ă  d’autres namespaces

Conseils :

  • Automatisez ces scans dans des pods CronJob
  • Comparez les rĂ©sultats avec la config YAML attendue

Résumé

Cas d’usageCommande clé / stratégie
Cartographie infra DevOpsnmap -sn, -sV, xsltproc
Vérification service post-deploynmap -sV -p <port>
API ML non sécurisées--script http-methods, http-auth
Scan dans un conteneurdocker run --network host
Scan entre pods K8skubectl run nmap ...
Inter-région cloudnmap -Pn + config peering
Audit surface d’attaque clusternmap -p- -sV <range interne>

Avec ces cas pratiques, vous êtes maintenant capable d’adapter Nmap à votre contexte spécifique — qu’il s’agisse d’un cluster Kubernetes, d’un pipeline DevOps, d’un environnement MLOps sensible ou d’une infrastructure cloud distribuée. La partie suivante vous apprendra à créer vos propres scripts personnalisés avec le moteur NSE pour aller encore plus loin.


Partie 5 — Aller plus loin avec Nmap

12. Écrire ses propres scripts NSE

Le Nmap Scripting Engine (NSE) permet de créer des scripts personnalisés en Lua pour étendre les fonctionnalités de Nmap : détection spécifique, exploitation, tests de configuration, etc.

12.1 Syntaxe de base d’un script NSE

Un script NSE est un fichier .nse écrit en Lua. Il doit suivre une structure précise.

Exemple minimal : mon_script.nse

local nmap = require "nmap" local shortport = require "shortport" local stdnse = require "stdnse" portrule = shortport.http action = function(host, port) return "Mon script personnalisé fonctionne sur " .. host.ip end

Étapes clés :

  • require : importer les bibliothèques internes de Nmap
  • portrule : fonction de test de port (ex : shortport.http, port.number == 80...)
  • action : fonction exĂ©cutĂ©e sur chaque hĂ´te/port correspondant Ă  la règle

12.2 Utiliser les bibliothèques internes

HTTP

local http = require "http"

Permet d’envoyer des requêtes HTTP, analyser les réponses, headers, etc.

SSH

local ssh = require "ssh"

Permet de tester les versions ou de faire du brute-force.

brute

local brute = require "brute"

Librairie spécialisée dans les attaques par dictionnaire (login/password).

stdnse

Bibliothèque standard NSE (logging, timeout, format, etc.) :

stdnse.debug1("Message de debug")

12.3 Cas pratique : scanner une API interne

Objectif : détecter si une API REST interne répond sur /status avec un champ "status": "OK"

Étapes :

  1. Créez un fichier api_status.nse dans /usr/share/nmap/scripts/
local http = require "http" local json = require "json" local shortport = require "shortport" portrule = shortport.http action = function(host, port) local path = "/status" local response = http.get(host, port, path) if not response then return nil end local body = response.body local decoded = json.parse(body) if decoded and decoded.status == "OK" then return "API interne opérationnelle (status OK)" else return "API détectée, mais pas de status OK" end end
  1. Lancez le script :
nmap -p 5000 --script api_status 10.0.0.42
  1. Vous verrez en sortie :
PORT     STATE SERVICE
5000/tcp open  http
| api_status:
|   API interne opérationnelle (status OK)

13. Bonnes pratiques et limitations

13.1 Considérations légales et éthiques

Important : Nmap est un outil puissant, et son usage sans autorisation explicite peut être considéré comme une intrusion illégale.

Toujours respecter :

  • Le cadre lĂ©gal de votre pays
  • Les politiques de sĂ©curitĂ© internes
  • Le consentement explicite du propriĂ©taire de l’infrastructure

Conseil : Utilisez des environnements de test ou des machines virtuelles pour apprendre.

13.2 Éviter les faux positifs et bien interpréter les résultats

Faux positifs

  • Un port « open » ne signifie pas que le service est actif ou vulnĂ©rable
  • Certains IDS modifient les rĂ©ponses pour tromper Nmap

Interprétation

  • Toujours croiser les infos : version + comportement
  • VĂ©rifiez les rĂ©sultats avec plusieurs options :
nmap -sV --script default,vuln -p 22,80 IP

13.3 Alternatives et compléments à Nmap

Masscan

  • ExtrĂŞmement rapide (10M paquets/sec)
  • Ne fait que le scan de ports (pas de dĂ©tection de service)
masscan 192.168.1.0/24 -p0-65535 --rate=10000

RustScan

  • BasĂ© sur Nmap + Rust pour accĂ©lĂ©rer la dĂ©couverte
  • DĂ©tecte les ports ouverts puis lance Nmap
rustscan -a 192.168.1.1 -- -sV

Zmap

  • Ultra-scalable pour du scan Internet large Ă©chelle
zmap -p 80 0.0.0.0/0

Conseil : utilisez Nmap pour la profondeur (détail), et Masscan/RustScan pour la largeur (vitesse).



Annexes — Outils et ressources complémentaires

Lexique des options courantes

OptionDescription
-sSScan TCP SYN (rapide, furtif, nécessite root)
-sTScan TCP connect (standard, sans privilèges root)
-sUScan UDP
-sVDétection de version des services
-ODétection de système d’exploitation
-pSpécifie les ports à scanner (ex : -p 22,80 ou -p- pour tous)
-T0 à -T5Réglage de la vitesse/agressivité du scan
-AScan avancé : OS + version + script + traceroute
-PnNe fait pas de ping avant le scan (utilisé sur des machines protégées)
-snPing sweep (détecte les hôtes actifs sans scanner les ports)
--scriptActive un ou plusieurs scripts NSE
-oGExport format grepable
-oXExport format XML
--openAffiche uniquement les ports ouverts
-iLListe d’IP à scanner (à partir d’un fichier texte)
--spoof-macChange l’adresse MAC pour chaque scan
--data-lengthAjoute des données dans les paquets pour évasion IDS

Cheatsheet Nmap

# Scan rapide (100 ports les + courants) nmap -T4 -F 192.168.1.1 # Scan complet TCP (tous les ports) sudo nmap -sS -p- 192.168.1.1 # Scan UDP sudo nmap -sU 192.168.1.1 # Ping sweep (liste des machines actives) nmap -sn 192.168.1.0/24 # Scan de version + OS sudo nmap -sS -sV -O 192.168.1.1 # Scan avec détection de vulnérabilités nmap -sV --script vuln 192.168.1.1 # Scan furtif sudo nmap -sS -T1 --spoof-mac 0 --data-length 50 192.168.1.1 # Export XML pour traitement ou rapport nmap -sS -oX rapport.xml 192.168.1.1 # Comparaison de deux scans ndiff scan1.xml scan2.xml # Script personnalisé (API interne) nmap -p 5000 --script api_status 192.168.1.1

Bibliographie et ressources complémentaires

Livres

  • Nmap Network Scanning — Gordon "Fyodor" Lyon (auteur de Nmap)
  • The Hacker Playbook — Peter Kim (avec exemples d’utilisation de Nmap)
  • Practical Packet Analysis — Chris Sanders (comprĂ©hension des protocoles scannĂ©s)

Sites officiels

Blogs et articles utiles

Vidéos et chaînes YouTube


Environnement de test

Travailler dans un environnement contrôlé est essentiel pour apprendre Nmap en toute sécurité. Voici plusieurs options :

1. Lab Dockerisé

Créez un réseau privé local avec plusieurs conteneurs :

docker network create testnet # Lancement de 3 conteneurs avec services variés for i in 1 2 3; do \ docker run -d --name host$i --network testnet -p 80$i:80 nginx; \ done # Scanner le réseau Docker (généralement 172.18.0.0/16) nmap -sn 172.18.0.0/24

2. Utilisation de Vagrant + VirtualBox

Créer un environnement multi-VM (Debian, Ubuntu, Windows) sur votre machine locale.

Exemple de Vagrantfile :

Vagrant.configure("2") do |config| config.vm.define "debian" do |debian| debian.vm.box = "debian/bullseye64" debian.vm.network "private_network", ip: "192.168.56.10" end config.vm.define "ubuntu" do |ubuntu| ubuntu.vm.box = "ubuntu/focal64" ubuntu.vm.network "private_network", ip: "192.168.56.11" end end

Puis :

vagrant up nmap -sS 192.168.56.0/24

3. Plateformes en ligne

Ces plateformes offrent des machines virtuelles prêtes à être scannées.

4. Réseau local réel (avec autorisation)

Utilisez un vieux routeur ou switch, branchez plusieurs machines, configurez des IP fixes, puis scannez votre réseau local privé.

Rappel : ne jamais scanner un réseau que vous ne possédez pas ou pour lequel vous n'avez pas l'autorisation explicite.


Avec ces ressources, lexiques et environnements, vous avez tout en main pour progresser rapidement, en toute sécurité, et approfondir vos compétences Nmap dans des contextes réels ou simulés.