Dans ce guide, nous allons explorer Nmap, l’un des outils puissants intégrés à Kali Linux, installé ici sur VMware Workstation. Kali Linux est une distribution réputée pour les tests d’intrusion et la sécurité réseau, avec une large gamme d’outils permettant d’analyser et d’auditer les systèmes avec précision.
Avant de commencer nos premiers scans, il est essentiel de configurer correctement la carte réseau de votre machine virtuelle Kali. En passant la carte réseau en mode “Bridged” dans les paramètres de VMware Workstation, cela permet à votre machine virtuelle de fonctionner comme un appareil distinct sur le réseau, simplifiant ainsi l’accès aux autres équipements connectés.
Ensuite, nous plongerons dans les différentes fonctionnalités de Nmap, en commençant par ses commandes de base. À travers quelques exemples concrets, nous allons explorer un réseau en 192.168.0.0/24, où sont installés, entre autres, un Raspberry Pi et un ancien switch Cisco. Ces appareils serviront de base pour démontrer les capacités de Nmap.
Par souci de sécurité, j’ai pris soin de masquer les autres dispositifs présents sur mon réseau ainsi que les adresses MAC, afin de préserver la confidentialité des informations sensibles. 🙂
Syntaxe de base de Nmap
La syntaxe de base pour lancer Nmap est très simple. Il suffit de spécifier l’adresse IP ou la plage d’adresses que vous souhaitez scanner, ainsi que les options souhaitées.
nmap [options] [adresse]
Voici les principales options de Nmap:
-sL : Générer une liste des hôtes détectés, sans scanner les ports.
-sP : Vérifier si les hôtes sont en ligne à l’aide d’un simple ping.
-PN : Considérer que tous les hôtes sont accessibles, même s’ils ne répondent pas aux pings.
-sS/sT/sA/sW/sM : Scanner TCP.
-sS : Scan TCP SYN (demi-ouvert).
-sT : Scan TCP Connect (scan complet).
-sA : Scan TCP ACK (détection de règles de pare-feu).
-sU : Scanner les ports UDP.
-sN/sF/sX : Scans TCP NULL, FIN et Xmas, utilisés pour éviter les pare-feu et les systèmes de détection d’intrusion (IDS).
-sC : Lancer les scripts par défaut (détection de version, informations sur le système).
-sI : Scan “idle” (masquage du scanner avec un hôte tiers).
-p : Spécifier une plage de ports à scanner.
-sV : Détection détaillée des versions des services.
-O : Détecter le système d’exploitation de la cible.
-T[0-5] : Vitesse du scan (0 = très lent, 5 = très rapide).
-D : Masquer le scan avec des adresses IP fictives.
-S : Spécifier l’adresse IP source du scan.
-e : Utiliser une interface réseau spécifique.
–spoof-mac : Changer l’adresse MAC pour le scan.
–top-ports [X]: avec un nombre spécifique permet de scanner les X ports les plus communs pour un hôte
-A : Activer une détection avancée (système d’exploitation et services).
Exemples d’Utilisation de Nmap
Dans le réseau 192.168.0.0/24, j’utiliserai pour le test Nmap sur un Raspberry Pi, un ancien switch Cisco avec accès Telnet, ainsi qu’un routeur. Voici quelques exemples pratiques d’utilisation de Nmap dans ce contexte.
Avant de commencer, il est important de vérifier si notre Kali Linux est bien connecté au réseau et a reçu une adresse IP valide. Pour cela, utilisez la commande suivante :
ip a
Mon Kali a reçu l’adresse 192.168.0.25/24, qui fait partie de mon réseau 192.168.0.0/24, donc je peux commencer le test.
Vérifier quels hôtes sont en ligne (Ping Scan)
Pour savoir quels appareils du réseau sont actifs et répondent aux requêtes ICMP (ping), vous pouvez utiliser l’option -sP de Nmap. Cette commande teste simplement si les hôtes sont accessibles sur le réseau en envoyant un ping :
sudo nmap -sP 192.168.0.0/24
Ce type de scan est très utile pour obtenir une vue d’ensemble rapide des appareils actifs sur le réseau. Par exemple, si vous gérez un réseau qui inclut des ordinateurs sous Linux, Windows, des commutateurs (switchs) Cisco, et des routeurs, cette commande vous permet de vérifier en un instant quels appareils sont connectés et disponibles pour une analyse plus approfondie.
Scan SYN pour détecter les ports ouverts
Le scan SYN (SYN signifie synchronize, c’est la première étape d’une connexion TCP) est une méthode rapide et efficace pour détecter les ports ouverts sur une machine cible. En envoyant des paquets SYN, Nmap peut découvrir quels services sont en écoute sur les machines du réseau sans établir de connexion complète, ce qui rend ce type de scan plus discret et plus rapide qu’un scan complet.
Scan du Raspberry Pi
sudo nmap -sS 192.168.0.4
Par défaut, Nmap scanne les 1000 premiers ports TCP les plus couramment utilisés. Ces ports sont ceux où les services critiques (comme HTTP, SSH, DNS, etc.) sont souvent en écoute. Cela permet de gagner du temps et de ressources en ne scannant pas l’intégralité des 65535 ports possibles, sauf si une analyse plus approfondie est nécessaire.
Résultat du scan SYN pour le Raspberry Pi
Voici le résultat obtenu après l’exécution de la commande :
Port 22/tcp (SSH) : Le port SSH est ouvert, ce qui signifie qu’un service SSH est disponible pour une connexion distante.
Port 80/tcp (HTTP) : Le port HTTP est également ouvert, indiquant qu’un serveur web est probablement en service sur cette machine.
Scan du switch Cisco
Pour le switch Cisco, nous lançons la commande suivante :
sudo nmap -sS 192.168.0.5
Résultat du scan SYN pour le switch Cisco
Voici le résultat obtenu :
Port 23/tcp (Telnet) : Le port Telnet est ouvert, ce qui signifie qu’un service Telnet est disponible pour une connexion distante.
Port 80/tcp (HTTP) : Le port HTTP est également ouvert, indiquant qu’un serveur web est probablement en service sur cet appareil.
Le port Telnet (23), bien qu’il soit ouvert ici, est rarement utilisé aujourd’hui en raison de ses problèmes de sécurité, mais il peut encore être trouvé sur certains équipements plus anciens. Dans cet exemple, il s’agit d’un vieux switch Cisco d’environ 20 ans.
Le scan SYN peut parfois prendre plusieurs minutes, en particulier si l’appareil est plus lent ou si la connexion réseau est congestionnée. Pour vérifier l’état d’avancement du scan, vous pouvez appuyer sur la touche Entrée pour obtenir des informations sur le pourcentage de progression, comme vu dans cet exemple.
Détection des services et versions sur un serveur spécifique
Pour obtenir des informations détaillées sur les services en cours d’exécution sur un hôte particulier, comme un serveur, vous pouvez utiliser l’option -sV de Nmap. Cela permet de déterminer les versions précises des services actifs, ce qui est très utile pour identifier d’éventuelles vulnérabilités.
Dans cet exemple, nous scannons tous les ports (1-65535) d’un serveur à l’adresse 192.168.0.4 afin d’obtenir plus de détails sur les services qui y sont exécutés :
sudo nmap -sV -p 1-65535 192.168.0.4
Résultat de la détection des services et versions
Voici le résultat obtenu après l’exécution de la commande :
Port 22/tcp (SSH) : Le service SSH est en écoute et utilise le protocole 2.0. Cette version est importante pour s’assurer qu’une version sécurisée du protocole SSH est utilisée.
Port 80/tcp (HTTP) : Le service web Apache HTTPD 2.4.62 est en exécution sur cet hôte, et il est associé à une distribution Raspbian (qui indique qu’il s’agit probablement d’un Raspberry Pi).
Importance de ces informations
Les versions des services fournissent des détails cruciaux pour évaluer la sécurité d’un système. Par exemple :
- Connaître la version exacte du service Apache permet de vérifier si le serveur web est à jour ou s’il existe des vulnérabilités connues dans cette version (comme les failles de sécurité pouvant être exploitées).
- De même, la version du protocole SSH (ici 2.0) garantit que le serveur utilise une version compatible avec les normes de sécurité actuelles.
Ces informations sont essentielles pour un audit de sécurité, car elles permettent de repérer rapidement les services potentiellement vulnérables.
Scan de l’ancien switch Cisco avec Telnet
Pour vérifier si un service Telnet est en cours d’exécution sur un ancien switch Cisco, vous pouvez scanner directement le port 23 (qui est le port utilisé par Telnet). Cela permet de déterminer si le service est actif et si le switch est accessible.
Utilisez la commande suivante pour effectuer le scan :
sudo nmap -p 23 192.168.0.5
Résultat du scan Telnet pour le switch Cisco
Voici le résultat obtenu après l’exécution de la commande :
Port 23/tcp (Telnet) : Le port Telnet est ouvert, indiquant que le service Telnet est bien en écoute sur ce switch. Cela signifie que vous pouvez potentiellement accéder à l’appareil via Telnet pour une gestion à distance.
Bien que Telnet soit aujourd’hui considéré comme non sécurisé (car il transmet les données en clair sans cryptage), il est encore utilisé sur certains équipements plus anciens, comme dans ce cas avec un vieux switch Cisco. Si Telnet est activé, il est recommandé de le désactiver ou de le remplacer par un protocole plus sécurisé, comme SSH, pour éviter les risques de sécurité.
Scan complet du réseau avec détection de l’OS
Pour une analyse complète d’un appareil ou d’un réseau, y compris la détection des systèmes d’exploitation et des services, l’option -A de Nmap est très utile. Cette option permet de récolter des informations détaillées sur chaque appareil, notamment les versions des services et le type de système d’exploitation.
Utilisez la commande suivante pour effectuer un scan approfondi :
sudo nmap -A 192.168.0.4
Résultat du scan complet avec détection de l’OS
Voici le résultat du scan pour l’appareil à l’adresse 192.168.0.4 :
Port 22/tcp (SSH) : Le service SSH utilise la version OpenSSH 9.2p1 avec le package Debian deb12u3. Ce type de détails permet d’identifier la version exacte du serveur SSH.
Port 80/tcp (HTTP) : Le serveur web Apache HTTPD 2.4.62 est en écoute, associé à la distribution Raspbian. Le titre de la page par défaut d’Apache 2 indique également qu’il s’agit de la page par défaut Debian (“It works“).
Le scan fournit également des détails sur l’identification des services par empreintes digitales (fingerprinting) et peut également indiquer des informations sur les systèmes d’exploitation. Toutefois, dans ce cas particulier, la présence de Raspbian suggère qu’il s’agit probablement d’un Raspberry Pi exécutant une distribution basée sur Debian.
Scan des vulnérabilités sur un serveur
Nmap peut être utilisé pour détecter des vulnérabilités connues sur un serveur spécifique en utilisant les scripts NSE (Nmap Scripting Engine). Ces scripts sont capables de scanner un large éventail de vulnérabilités, comme les failles liées à Heartbleed, SMB, ou d’autres services mal configurés ou obsolètes.
- Heartbleed est une vulnérabilité critique dans la bibliothèque OpenSSL, qui permet à un attaquant de lire des données sensibles (comme des mots de passe ou des clés privées) depuis la mémoire d’un serveur, même sans authentification.
- SMB (Server Message Block) est un protocole de partage de fichiers et d’imprimantes sur les réseaux. Les anciennes versions de SMB sont vulnérables à des attaques telles que EternalBlue, qui a été utilisé dans des cyberattaques majeures comme WannaCry.
Ces failles représentent un risque sérieux pour la sécurité des réseaux si elles ne sont pas corrigées.
Dans cet exemple, nous scannons le serveur Linux à l’adresse 192.168.0.4 avec l’option –script vuln pour détecter d’éventuelles faiblesses de sécurité :
sudo nmap --script vuln 192.168.0.4
Résultat du scan des vulnérabilités
Voici le résultat obtenu après l’exécution de la commande :
Port 22/tcp (SSH) : Le port SSH est ouvert, mais aucune vulnérabilité spécifique n’a été détectée.
Port 80/tcp (HTTP) : Le port HTTP est également ouvert, mais aucun problème de sécurité lié à des failles XSS ou CSRF n’a été détecté.
- Le script http-dombased-xss n’a trouvé aucune vulnérabilité XSS basée sur le DOM.
- Le script http-csrf n’a trouvé aucune vulnérabilité CSRF.
- Le script http-stored-xss n’a trouvé aucune vulnérabilité XSS stockée.
L’utilisation du script vuln permet de vérifier rapidement les vulnérabilités courantes sur des services spécifiques. Dans ce cas, le serveur à l’adresse 192.168.0.4 ne présente pas de failles détectables par les scripts NSE de Nmap pour les ports 22 et 80. Cependant, il est important de noter que cela ne signifie pas que le serveur est entièrement sécurisé — d’autres types de vulnérabilités pourraient exister.
Ce type de scan est particulièrement utile pour les administrateurs système qui cherchent à renforcer la sécurité de leurs serveurs en identifiant rapidement les faiblesses potentielles avant qu’elles ne soient exploitées par des attaquants.
Scan de l’hôte avec détection de pare-feu
Pour déterminer si un hôte sur le réseau dispose d’un pare-feu actif, vous pouvez utiliser un scan ACK (ACK signifie acknowledgment, et dans le contexte TCP, il est utilisé pour confirmer la réception de données). Ce type de scan envoie des paquets ACK pour vérifier la réponse de l’hôte et déduire s’il y a un filtrage des paquets, ce qui peut indiquer la présence d’un pare-feu.
Par exemple, pour tester l’hôte à l’adresse 192.168.0.5, je vais exécuter la commande suivante :
sudo nmap -sA 192.168.0.5
Cette commande envoie des paquets ACK pour vérifier la réponse de l’hôte et déduire s’il y a un filtrage des paquets, ce qui indique un pare-feu.
Résultat du scan ACK pour détection de pare-feu
Voici le résultat obtenu après l’exécution de la commande :
- L’hôte 192.168.0.5 est actif avec une latence de 0.0079 secondes.
- Tous les ports scannés sont dans des états ignorés, ce qui signifie qu’ils ne sont pas filtrés mais également non ouverts.
- Aucun port non filtré (unfiltered) n’a été trouvé, ce qui suggère qu’un pare-feu est en place et qu’il rejette les paquets ACK ou les filtre silencieusement sans renvoyer de réponse visible.
Utilité du scan ACK
Ce type de scan est particulièrement utile pour identifier si un hôte est protégé par un pare-feu sans nécessairement déclencher des alertes de sécurité sur le réseau. Lorsque tous les ports sont “ignorés” ou fermés, cela peut être un signe que les paquets ACK sont rejetés ou filtrés par un pare-feu.
Ce scan ne révèle pas quels ports sont ouverts, mais il peut aider à savoir si un filtrage des paquets est appliqué, ce qui est une indication importante pour l’évaluation de la sécurité réseau.
Scan des ports UDP sur le serveur DNS
Les ports UDP sont souvent utilisés par des services comme DNS, NTP et SNMP, qui reposent sur des communications rapides et sans état. Pour vérifier si ces services sont disponibles sur un serveur, vous pouvez scanner les ports UDP spécifiques.
Dans cet exemple, nous scannons les ports 53, 123, et 161 sur l’hôte 192.168.0.5. Le port 53 correspond au DNS, le port 123 au NTP, et le port 161 au SNMP :
sudo nmap -sU -p 53,123,161 192.168.0.5
Résultat du scan des ports UDP
Voici le résultat obtenu après l’exécution de la commande :
- 53/udp (DNS) : Le port DNS (53) est fermé sur cet hôte.
- 123/udp (NTP) : Le port NTP (123) est également fermé.
- 161/udp (SNMP) : Le port SNMP (161) est lui aussi fermé.
Utilité du scan UDP
Ce type de scan est crucial pour vérifier si des services essentiels, comme le DNS ou le NTP, sont en cours d’exécution et accessibles via UDP. Dans ce cas, tous les ports scannés sont fermés, ce qui signifie que ces services ne sont pas activés ou accessibles sur l’hôte 192.168.0.5.
Cela peut indiquer que cet appareil n’a pas besoin de ces services, ou que ces services sont désactivés pour des raisons de sécurité. Le DNS et le SNMP sont souvent des cibles pour les attaquants, et fermer ces ports lorsqu’ils ne sont pas nécessaires est une bonne pratique en matière de sécurité.
Scan des ports les plus populaires
L’utilisation du paramètre –top-ports avec un nombre spécifique permet de scanner les X ports les plus communs pour un hôte donné. Cela permet de cibler rapidement les ports où les services les plus utilisés sont susceptibles de fonctionner.
Par exemple, pour scanner les 20 ports les plus populaires sur l’hôte 192.168.0.242, la commande suivante est utilisée :
sudo nmap --top-ports 20 192.168.0.242
Résultat du scan
Comme on peut le voir dans la capture d’écran, le scan montre l’état des 20 ports les plus fréquemment utilisés, tels que SSH (22), HTTP (80), et HTTPS (443). Ces ports sont fréquemment utilisés pour des services essentiels comme le web, le transfert de fichiers, ou la messagerie. Dans ce cas, on remarque que la plupart des ports sont fermés à l’exception de SSH (port 22) et HTTP (port 80) qui sont ouverts.
Nmap est un outil puissant et flexible pour la découverte et l’analyse de réseau. Grâce à ses nombreuses options, il permet d’obtenir des informations précises sur les hôtes de votre réseau, les services qu’ils exécutent, ainsi que les vulnérabilités potentielles. Les exemples que nous avons parcourus, comme les scans TCP et UDP, la détection des services, l’analyse des vulnérabilités et la détection de pare-feu, vous donnent une base solide pour explorer les capacités de Nmap.
Bonne chance!