
Nmap avancé : audit réseau et détection de vulnérabilités
Maîtrisez les techniques avancées de Nmap : scripts NSE, scan furtif, timing, détection d'OS, export automatisé et intégration dans vos workflows de sécurité.
Nmap avancé : audit réseau et détection de vulnérabilités
Ce guide s'adresse aux administrateurs système et passionnés de sécurité qui connaissent déjà les bases de Nmap. On va couvrir les techniques de scan avancées, l'utilisation ciblée du NSE, l'optimisation des performances, et l'automatisation des audits récurrents.
Version utilisée : Nmap 7.98 (août 2025). Testé sur Ubuntu 24.04 LTS et macOS Sequoia.
Prérequis
- Nmap 7.98 installé
- Accès root ou sudo
- Connaissance des bases TCP/IP (modèle OSI, handshake TCP)
- Autorisation légale de scanner le réseau cible
Installation depuis les sources (dernière version)
Les dépôts de certaines distributions traînent en version. Pour avoir la 7.98 :
## Dépendances de compilation
sudo apt install -y build-essential libssl-dev libpcap-dev libpcre3-dev libssh2-1-dev
## Téléchargement et compilation
wget https://nmap.org/dist/nmap-7.98.tar.bz2
tar xjf nmap-7.98.tar.bz2
cd nmap-7.98
./configure —with-openssl
make -j$(nproc)
sudo make install
## Vérification
nmap —versionTechniques de scan TCP avancées
SYN Scan (half-open)
Le scan par défaut quand on est root. Envoie un SYN, attend le SYN-ACK, puis envoie un RST au lieu de compléter le handshake. Plus rapide et plus discret qu'un connect scan.
## SYN scan sur les 1000 ports les plus courants
sudo nmap -sS 10.0.0.0/24TCP Connect Scan
Complète le handshake TCP complet. Moins discret mais fonctionne sans privilèges root.
## Connect scan — pas besoin de sudo
nmap -sT 10.0.0.1ACK Scan (détection de firewall)
Ne détecte pas les ports ouverts mais identifie les règles de filtrage du pare-feu.
## Détermine quels ports sont filtrés par un firewall stateful
sudo nmap -sA 10.0.0.1Un port "unfiltered" signifie que le firewall laisse passer les paquets ACK. Un port "filtered" signifie qu'un firewall stateful bloque les paquets non sollicités.
FIN, Xmas et Null Scans
Exploitent une particularité de la RFC 793 : les ports fermés répondent par RST aux paquets inattendus, les ports ouverts les ignorent. Contournent certains firewalls qui ne surveillent que les SYN.
## FIN scan — envoie un paquet avec le flag FIN
sudo nmap -sF 10.0.0.1
## Xmas scan — flags FIN + PSH + URG activés
sudo nmap -sX 10.0.0.1
## Null scan — aucun flag TCP
sudo nmap -sN 10.0.0.1Attention : ces techniques ne fonctionnent pas sur Windows (la pile TCP Microsoft répond RST dans tous les cas).
Scan UDP
Souvent négligé mais indispensable. Des services critiques tournent en UDP : DNS (53), SNMP (161), DHCP (67-68), NTP (123).
## Scan UDP des 100 ports les plus fréquents
## Beaucoup plus lent que TCP — comptez 10-15 minutes pour un /24
sudo nmap -sU —top-ports 100 10.0.0.0/24Optimisation des performances
Templates de timing
Nmap propose 6 niveaux de timing (T0 à T5). Le choix dépend du contexte.
## T0 (paranoid) — 5 minutes entre chaque sonde, pour éviter les IDS
sudo nmap -T0 -sS 10.0.0.1
## T3 (normal) — le défaut
sudo nmap -T3 -sS 10.0.0.1
## T4 (aggressive) — recommandé sur un LAN fiable
sudo nmap -T4 -sS 10.0.0.0/24
## T5 (insane) — réseau local uniquement, peut rater des résultats
sudo nmap -T5 -sS 10.0.0.0/24Contrôle fin du timing
## Limiter le nombre de sondes simultanées
sudo nmap —min-rate 300 —max-rate 500 -sS -p- 10.0.0.1
## Timeout par hôte (évite de bloquer sur un hôte lent)
sudo nmap —host-timeout 5m -sV 10.0.0.0/24
## Délai minimum entre les sondes
sudo nmap —scan-delay 200ms -sS 10.0.0.1Exclusion d'hôtes
## Scanner tout le sous-réseau sauf certaines machines
sudo nmap -sS 10.0.0.0/24 —exclude 10.0.0.1,10.0.0.254
## Exclure depuis un fichier
sudo nmap -sS 10.0.0.0/24 —excludefile exclusions.txtDétection de services et d'OS en profondeur
Fingerprinting agressif
## Détection de version avec intensité maximale (0-9, défaut 7)
sudo nmap -sV —version-intensity 9 10.0.0.1
## Combiné avec détection d'OS et traceroute
sudo nmap -A 10.0.0.1
## -A équivaut à -sV -O -sC —tracerouteIdentifier les services cachés
Certains admins changent les ports par défaut. SSH sur le port 2222, un serveur web sur 8443.
## Scan complet avec détection de version sur tous les ports
sudo nmap -sV -p- —version-all 10.0.0.1Nmap Scripting Engine (NSE) avancé
Le NSE est le vrai cœur de la puissance de Nmap. Plus de 600 scripts classés par catégorie.
Catégories de scripts
## Lister toutes les catégories
ls /usr/share/nmap/scripts/ | head -20
## Voir les scripts d'une catégorie
nmap —script-help "vuln"
## Chercher des scripts par mot-clé
nmap —script-help "*ssl*" | grep -E "^[a-z]"Scripts de vulnérabilités ciblés
## Tester Heartbleed (CVE-2014-0160) — oui, encore trouvé en production
sudo nmap -p 443 —script ssl-heartbleed 10.0.0.1
## Vérifier les vulnérabilités SMB (EternalBlue, etc.)
sudo nmap -p 445 —script smb-vuln* 10.0.0.1
## Tester les vulnérabilités HTTP connues
sudo nmap -p 80,443,8080,8443 —script http-vuln* 10.0.0.1
## Énumérer les partages SMB accessibles
sudo nmap -p 445 —script smb-enum-shares —script-args smbusername=guest 10.0.0.1Scripts d'authentification
## Tester les credentials par défaut sur les services courants
sudo nmap -p 22,3306,5432,6379,27017 —script auth 10.0.0.1
## Brute force SSH (avec prudence — sur vos propres machines uniquement)
sudo nmap -p 22 —script ssh-brute —script-args userdb=users.txt,passdb=pass.txt 10.0.0.1Scripts SSL/TLS
## Audit complet de la configuration TLS
sudo nmap -p 443 —script ssl-enum-ciphers 10.0.0.1
## Vérifier la date d'expiration du certificat
sudo nmap -p 443 —script ssl-cert 10.0.0.1
## Détecter les protocoles obsolètes (SSLv2, SSLv3, TLS 1.0)
sudo nmap -p 443 —script ssl-enum-ciphers 10.0.0.1 | grep -E "TLSv1\.[01]|SSLv"Combinaison de scripts
## Audit complet d'un serveur web
sudo nmap -p 80,443 \
—script "http-enum,http-headers,http-methods,http-title,ssl-cert,ssl-enum-ciphers" \
10.0.0.1
## Audit réseau complet : vulnérabilités + auth + brute
sudo nmap —script "vuln,auth" -sV 10.0.0.0/24Contourner les protections (sur votre propre réseau)
Certains firewalls et IDS bloquent les scans. Techniques pour tester la robustesse de vos défenses.
Fragmentation
## Fragmente les paquets en morceaux de 8 octets
sudo nmap -f -sS 10.0.0.1
## Double fragmentation (fragments de 16 octets)
sudo nmap -ff -sS 10.0.0.1
## MTU personnalisé (doit être multiple de 8)
sudo nmap —mtu 24 -sS 10.0.0.1Decoys (leurres)
## Génère du trafic de scan depuis des IPs leurres
## Votre vrai scan est noyé dans le bruit
sudo nmap -D RND:5 -sS 10.0.0.1
## Avec des IPs spécifiques comme leurres
sudo nmap -D 10.0.0.50,10.0.0.100,ME -sS 10.0.0.1Source port spoofing
## Certains firewalls autorisent le trafic depuis le port 53 (DNS)
sudo nmap —source-port 53 -sS 10.0.0.1Idle scan (zombie scan)
Technique avancée qui utilise une machine tierce (le "zombie") pour scanner de manière totalement anonyme.
## Trouve d'abord un zombie potentiel (IPID incrémental)
sudo nmap —script ipidseq 10.0.0.0/24
## Lance le scan via le zombie trouvé
sudo nmap -sI zombie_ip:port cible_ipExport et traitement des résultats
Formats d'export
## Tous les formats simultanément
sudo nmap -sV -O -oA audit-2026-03 10.0.0.0/24
## Crée : audit-2026-03.nmap, .xml, .gnmap
## Format grepable — facile à traiter avec grep/awk
sudo nmap -sV -oG - 10.0.0.0/24 | grep "open"Convertir XML en HTML
## Nmap inclut une feuille de style XSLT
xsltproc audit-2026-03.xml -o audit-rapport.html
## Ou utiliser l'outil dédié
nmap -sV -oX - 10.0.0.1 | xsltproc /usr/share/nmap/nmap.xsl - > rapport.htmlParser le XML avec Python
## Installer python-nmap
pip install python-nmapimport nmap
nm = nmap.PortScanner()
nm.scan('10.0.0.0/24', '22,80,443', arguments='-sV')
for host in nm.all_hosts():
print(f"Hôte : {host} ({nm[host].hostname()})")
for proto in nm[host].all_protocols():
for port in nm[host][proto].keys():
service = nm[host][proto][port]
print(f" {port}/{proto} — {service['name']} {service['version']}")Script d'audit automatisé
Un script bash pour lancer un audit complet et comparer avec le scan précédent.
#!/usr/bin/env bash
## audit-reseau.sh — Scan récurrent avec comparaison
## Usage : sudo ./audit-reseau.sh 10.0.0.0/24
set -euo pipefail
TARGET="${1:?Usage: $0 <cible>}"
DATE=$(date +%Y-%m-%d_%H%M)
DIR="$HOME/nmap-audits"
mkdir -p "$DIR"
OUTPUT="$DIR/scan-$DATE"
LATEST="$DIR/latest.xml"
echo "[*] Scan en cours sur $TARGET..."
sudo nmap -sV -O -sC —script vuln \
-T4 —host-timeout 10m \
-oA "$OUTPUT" "$TARGET"
echo "[*] Scan terminé. Résultats dans $OUTPUT.*"
## Comparaison avec le scan précédent
if [ -f "$LATEST" ]; then
echo "[*] Comparaison avec le dernier scan..."
ndiff "$LATEST" "$OUTPUT.xml" || true
else
echo "[*] Premier scan, pas de comparaison possible."
fi
## Mettre à jour le lien vers le dernier scan
ln -sf "$OUTPUT.xml" "$LATEST"
echo "[*] Rapport HTML..."
xsltproc "$OUTPUT.xml" -o "$OUTPUT.html" 2>/dev/null || echo "[!] xsltproc non disponible"
echo "[OK] Audit terminé. Fichiers :"
ls -la "$OUTPUT".*Rendez-le exécutable et planifiez-le :
chmod +x audit-reseau.sh
## Exécution hebdomadaire le dimanche à 3h du matin
crontab -e
## Ajouter :
## 0 3 * * 0 /chemin/vers/audit-reseau.sh 10.0.0.0/24 >> /var/log/nmap-audit.log 2>&1Dépannage
"Permission denied" ou "Operation not permitted"
La plupart des scans avancés nécessitent les droits root. Le SYN scan, la détection d'OS, le scan UDP : tous ont besoin de créer des raw sockets.
## Toujours utiliser sudo pour les scans avancés
sudo nmap -sS -O 10.0.0.1
## Alternative : donner la capability à nmap (évite sudo)
sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip $(which nmap)Scan très lent
Causes fréquentes : trop d'hôtes, scan UDP, résolution DNS lente.
## Désactiver la résolution DNS (gros gain de temps)
sudo nmap -n -sS 10.0.0.0/24
## Augmenter le parallélisme
sudo nmap —min-hostgroup 64 —min-parallelism 10 -sS 10.0.0.0/24
## Scanner uniquement les ports pertinents
sudo nmap -sS —top-ports 200 10.0.0.0/24Faux positifs dans les scripts vuln
Les scripts de vulnérabilité génèrent parfois des faux positifs. Toujours vérifier manuellement.
## Relancer un script spécifique avec plus de verbosité
sudo nmap -p 443 —script ssl-heartbleed -d 10.0.0.1
## Le -d active le mode debugRésultats "filtered" partout
Un firewall bloque les sondes. Solutions :
## Essayer le scan ACK pour cartographier les règles du firewall
sudo nmap -sA 10.0.0.1
## Essayer un port source autorisé
sudo nmap —source-port 80 -sS 10.0.0.1
## Tenter la fragmentation
sudo nmap -f -sS 10.0.0.1"Host seems down" alors que la machine est accessible
Nmap envoie un ping avant de scanner. Si l'ICMP est bloqué, il croit que l'hôte est éteint.
## Forcer le scan même si le ping ne répond pas
sudo nmap -Pn -sS 10.0.0.1Bonnes pratiques de sécurité
- Documentez chaque scan dans un journal (qui, quoi, quand, pourquoi).
- Conservez les résultats XML pour les comparaisons futures avec
ndiff. - Scannez régulièrement : un scan mensuel minimum pour les environnements de production.
- Ne scannez jamais en production aux heures de pointe sauf urgence.
- Utilisez T2 ou T3 sur les réseaux WAN, T4 uniquement en LAN.
- Vérifiez toujours les résultats des scripts vuln manuellement avant de reporter une faille.
—-
À lire aussi
Scanner son réseau avec Nmap : le guide pas à pas
Apprenez à utiliser Nmap pour détecter les appareils connectés, les ports ouverts et les failles de sécurité sur votre réseau. Guide complet pour débutants.
Audit de mots de passe avec KeePassXC : guide technique avancé
Audit complet de votre base KeePassXC : vérification HIBP en CLI, détection de doublons, automatisation avec keepassxc-cli et hardening de la base de données.
Auditer ses mots de passe avec KeePassXC : le guide simple
Apprenez à vérifier si vos mots de passe ont fuité et à les renforcer avec KeePassXC, le gestionnaire open source gratuit et sécurisé.