Nmap est un outil d’exploration réseau et d’audit de sécurité. Il permet de déterminer les hôtes présents sur le réseau en obtenant leurs informations par analyse des ports (services à l’écoute, OS de la machine, versions …).
Principe de fonctionnement
Le comportement par défaut de Nmap lorsqu’il n’utilise pas d’option est de détecter la présence de la cible passée en paramètre. Les protocoles employés pour la étection peuvent être l’ICMP, le TCP, l’UDP ou l’ARP. Si celle-ci est active, il poursuit son analyse en effectuant un scan sur les ports TCP les plus courants.
Voici un exemple de ce que donne le scan d’un élément réseau :
nmap 192.168.0.254 Starting Nmap 7.40 ( https://nmap.org ) at 2017-10-23 22:58 CEST Nmap scan report for 192.168.0.254 Host is up (0.0033s latency). Not shown: 995 filtered ports PORT STATE SERVICE 80/tcp open http 113/tcp closed ident 554/tcp open rtsp 5678/tcp open rrac 9100/tcp open jetdirect Nmap done: 1 IP address (1 host up) scanned in 4.59 seconds
L’un des grands intérêts de cette outil est qu’il est capable d’effectuer ce scan sur un réseau complet avec une grande souplesse de paramétrage de l’analyse (choix de la technique employée pour détecter l’hôte, sélection des ports scannés, vitesse de l’analyse, …).
Un autre élément intéressant est la granularité du résultat de l’analyse des ports qui a six états possibles (cf. colonne STATE de l’exemple ci-dessus). Voici la signification de ces états :
- open : une application est en écoute sur ce port
- closed : le port n’est pas utilisé, il n’y a pas d’application à l’écoute dessus.
- filtered : un dispositif de filtrage empêche l’analyse du port (un firewall par exemple)
- unfiltered : Nmap ne parvient pas à déterminé si le port est ouvert ou fermé
- open|filtered : Nmap est incapable de déterminé si le port est ouvert ou filtré
- closed|filtered : Nmap est incapable de déterminé si le port est fermé ou filtré
Scanner un réseau complet
La commande nmap permet d’effectuer une analyse du réseau en passant en paramètre les cibles à scanner. Celles-ci peuvent être un nom d’hôte/nom de domaine, une adresse IP, plusieurs d’adresses IP, une plage d’adresses IP ou un réseau complet :
# scanner un hote (soit par IP, soit par nom de domaine) nmap 192.168.0.10 nmap my.hostname.net # scanner plusieurs hotes nmap 192.168.0.1 192.168.10.1 nmap 192.168.0.1,10,11,12 # scanner une plage d'adresses IP nmap 192.168.0.10-50 # scanner un reseau complet nmap 192.168.0.* nmap 192.168.0.0/254 # exclure un hote dans le scan du reseau nmap 192.168.0.0/24 --exclude 192.168.0.1 # ou mixer les possibilites nmap 192.168.0.1 192.168.1.* --exclude 192.168.1.253,254
Détecter les hôtes
L’option -sP (scan Port) permet de s’arrêter à la découverte des hôtes sans poursuivre les tests.
nmap -sP 192.168.0.* Starting Nmap 7.40 ( https://nmap.org ) at 2017-10-23 22:59 CEST Nmap scan report for 192.168.0.254 Host is up (0.0022s latency). MAC Address: **:**:**:**:**:** (manufacturer) Nmap scan report for 192.168.0.14 Host is up. Nmap done: 256 IP addresses (2 hosts up) scanned in 7.75 seconds
Il est intéressant de noter que la technique de détection utilisée diffère en fonction du réseau scanné et de l’usager qui exécute la commande. Si c’est un utilisateur non-privilégié qui utilise la commande ce sera une requête TCP SYN qui sera employée, tandis que si c’est un utilisateur privilégié sur un réseau Ethernet, se sera des requêtes ARP.
Il est possible de forcer l’utilisation d’une méthode de détection en rajoutant une option :
# ping TCP SYN nmap -sP -PS 192.168.0.* # ping TCP ACK nmap -sP -PA 192.168.0.* # ping UDP nmap -sP -PU 192.168.0.* # pour changer de port (defaut 80), exemple TCP SYN / port 22 : nmap -sP -PS22 192.168.0.* # ping ARP nmap -sP -PR 192.168.0.* # et pour les autres options ... man nmap
Affiner les paramètres de scan des ports
D’autres options permettent d’affiner les paramètres de scan. En voici quelque-unes :
# scanner un port nmap -p22 192.168.0.1 # scanner un ensemble de ports nmap -p22,80 192.168.0.1 # scanner une plage de ports nmap -p10-400 192.168.0.1 # scanner tout les ports (par defaut > 1660) nmap --allports 192.168.0.1 # detection des services et de leurs numeros de version nmap -sV 192.168.0.1 # détection de l'OS nmap -O 192.168.0.1
Un scan complet (détection de l’OS, des noms et des versions des applications en écoute sur les ports, …) :
nmap -A 192.168.0.1 Starting Nmap 7.40 ( https://nmap.org ) at 2017-10-23 23:02 CEST Nmap scan report for 192.168.0.254 Host is up (0.0032s latency). Not shown: 995 filtered ports PORT STATE SERVICE VERSION 80/tcp open http Cheyenne httpd 2.2.8 |_http-server-header: cheyenne/2.2.8 | http-title: Site doesn't have a title (text/html). |_Requested resource was /index.html 113/tcp closed ident 9100/tcp open jetdirect? Service Info: Host: localhost; OS: Linux 2.6; Devices: media device, WAP; CPE: cpe:/o:linux:linux_kernel:2.6 Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 16.67 seconds