Call-Informatique
Call-Informatique
Le média tech
Nmap avancé : audit réseau et détection de vulnérabilités
CybersécuritéGuides10 min de lecture

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 :

bash
## 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 —version

Techniques 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.

bash
## SYN scan sur les 1000 ports les plus courants
sudo nmap -sS 10.0.0.0/24

TCP Connect Scan

Complète le handshake TCP complet. Moins discret mais fonctionne sans privilèges root.

bash
## Connect scan — pas besoin de sudo
nmap -sT 10.0.0.1

ACK Scan (détection de firewall)

Ne détecte pas les ports ouverts mais identifie les règles de filtrage du pare-feu.

bash
## Détermine quels ports sont filtrés par un firewall stateful
sudo nmap -sA 10.0.0.1

Un 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.

bash
## 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.1

Attention : 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).

bash
## 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/24

Optimisation des performances

Templates de timing

Nmap propose 6 niveaux de timing (T0 à T5). Le choix dépend du contexte.

bash
## 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/24

Contrôle fin du timing

bash
## 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.1

Exclusion d'hôtes

bash
## 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.txt

Détection de services et d'OS en profondeur

Fingerprinting agressif

bash
## 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 —traceroute

Identifier les services cachés

Certains admins changent les ports par défaut. SSH sur le port 2222, un serveur web sur 8443.

bash
## Scan complet avec détection de version sur tous les ports
sudo nmap -sV -p- —version-all 10.0.0.1

Nmap 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

bash
## 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

bash
## 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.1

Scripts d'authentification

bash
## 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.1

Scripts SSL/TLS

bash
## 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

bash
## 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/24

Contourner les protections (sur votre propre réseau)

Certains firewalls et IDS bloquent les scans. Techniques pour tester la robustesse de vos défenses.

Fragmentation

bash
## 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.1

Decoys (leurres)

bash
## 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.1

Source port spoofing

bash
## Certains firewalls autorisent le trafic depuis le port 53 (DNS)
sudo nmap —source-port 53 -sS 10.0.0.1

Idle scan (zombie scan)

Technique avancée qui utilise une machine tierce (le "zombie") pour scanner de manière totalement anonyme.

bash
## 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_ip

Export et traitement des résultats

Formats d'export

bash
## 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

bash
## 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.html

Parser le XML avec Python

bash
## Installer python-nmap
pip install python-nmap
python
import 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.

bash
#!/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 :

bash
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>&1

Dé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.

bash
## 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.

bash
## 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/24

Faux positifs dans les scripts vuln

Les scripts de vulnérabilité génèrent parfois des faux positifs. Toujours vérifier manuellement.

bash
## 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 debug

Résultats "filtered" partout

Un firewall bloque les sondes. Solutions :

bash
## 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.

bash
## Forcer le scan même si le ping ne répond pas
sudo nmap -Pn -sS 10.0.0.1

Bonnes pratiques de sécurité

  1. Documentez chaque scan dans un journal (qui, quoi, quand, pourquoi).
  2. Conservez les résultats XML pour les comparaisons futures avec ndiff.
  3. Scannez régulièrement : un scan mensuel minimum pour les environnements de production.
  4. Ne scannez jamais en production aux heures de pointe sauf urgence.
  5. Utilisez T2 ou T3 sur les réseaux WAN, T4 uniquement en LAN.
  6. Vérifiez toujours les résultats des scripts vuln manuellement avant de reporter une faille.

—-

Nmap 7.98 — Documentation officielle : https://nmap.org/book/man.html — NSE scripts : https://nmap.org/nsedoc/
Sur le même sujet

À lire aussi

#tutoriel#guide-technique#nmap#pentest#audit-securite