Scan Réseau – Nmap

De ce nouvel article nous allons aborder le thème des scans réseau.

Un scan de réseau est très utile pour collecter un maximum d’informations sur ce dernier.

 

Il est possible de faire un scan d’IP, un scan de ports, une détection d’OS mais aussi de services.

 

Pour effectuer les scans, nous utiliserons Nmap.

1) Détection de machines

 

Le premier type de scan qui peut être utile, est le scan de machines.

Il permet de lister les machines disponibles sur le réseau, et retourne leur IP, leur adresse MAC, et éventuellement leur nom d’hôte.

 

root@kali:~# nmap -sP 192.168.1.0/24

Starting Nmap 6.40 ( http://nmap.org )
Nmap scan report for unknown (192.168.1.1)
Host is up (0.00083s latency).
MAC Address: XX:XX:XX:XX:XE:6C (Netgear,)
Nmap scan report for 192.168.1.2
Host is up (0.00058s latency).
MAC Address: XX:XX:XX:XX:X3:4A (XXXXX)
…
Nmap scan report for 192.168.1.18
Host is up (0.00091s latency).
MAC Address: XX:XX:XX:XX:XD:23 (Asustek Computer)
…
…
Nmap done: 256 IP addresses (XX hosts up) scanned in 1.66 seconds

Le scan se fait à l’aide de requêtes ARP sur toutes les IP possibles, à condition qu’elles soient dans notre sous-réseau.

Si les IP de destination sont dans un autre sous réseau, des requêtes de Ping sont utilisées.

 

Des requêtes DNS inverses sont ensuite lancées pour les IP des machines qui ont répondu.

Les requêtes sont envoyées au serveur DNS.

 

Il est possible de lancer un scan légèrement différent avec l’option « SL ».

 

root@kali:~# nmap -sL 192.168.1.0/24
Starting Nmap 6.40 ( http://nmap.org )
Nmap scan report for 192.168.1.0
Nmap scan report for unknown (192.168.1.1)
Nmap scan report for unknown (192.168.1.2)
Nmap scan report for 192.168.1.3
…
…

Ce scan est effectué seulement à partir de requêtes DNS inverses, qui sont envoyées au serveur DNS.

Les hôtes ne sont jamais contactés.

Il est donc possible que la commande indique des hôtes qui ne sont pas en ligne.

 

2) Scan de ports

 

Maintenant que nous avons connaissance des hôtes présents sur le réseau, il peut être intéressent d’en savoir un peu plus sur ceux–ci.

Nous allons donc procéder à un scan de ports.

 

Mais tout d’abord, qu’est-ce qu’un port ?

 

Le port est ce qui permet à l’ordinateur de rediriger les données venant du réseau vers la bonne application.

 

Sur une machine, les ports peuvent avoir 3 états :

  • Ouverts
  • Fermés
  • Filtrés

 

Si le port est ouvert, c’est qu’une application écoute sur ce port.

Par exemple, si le port 80 est ouvert, c’est qu’il y a probablement un serveur Web qui est hébergé sur la machine.

Un port ouvert accepte les connections TCP ou les messages UDP.

 

Si le port est fermé, c’est qu’aucune application n’écoute sur ce port.

Le port est tout de même joignable. Il indique par des messages que le port est fermé.

 

Si le port est filtré, c’est qu’un Firewall bloque le port. Le port ne répond alors à aucun message.

 

Voyons quelques exemples de commandes pour scanner des ports avec Nmap.

Les types de scan que nous allons voir pourront être combinés ensemble.

A vous d’utiliser les bonnes options selon ce que vous souhaitez faire.

 

Scan TCP SYN

 

root@kali:~# nmap -sS 192.168.1.163
Nmap scan report for 192.168.1.163
Host is up (0.00096s latency).
Not shown: 977 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
25/tcp   open  smtp
…

Ce scan est le type de scan par défaut.

Il permet de détecter les ports TCP ouverts en envoyant des SYN.

Si le port est ouvert, la machine répondra par un SYN / ACK.

Si le port est fermé, la machine répondra par un RST.

Si après plusieurs essais il n’y a pas de réponse, le port est considéré comme filtré.

 

Scan UDP

 

root@kali:~# nmap -sU  192.168.1.1
Nmap scan report for unknown (192.168.1.1)
Host is up (0.0041s latency).
PORT   STATE SERVICE
53/udp open  domain

L’option sU permet de scanner les ports en UDP.

Le grand problème de ce type de scan est sa lenteur pour certaines cibles.

De nombreux systèmes Unix imposent une restriction sur les réponses UDP quand le port est fermé.

Un scan complet sur ce type de machines peut alors être très long.

 

A l’inverse, il peut être très rapide pour d’autres systèmes.

Pour exécuter ce scan, Nmap envoie des segments UDP sur chaque port.

Si un message UDP est reçu en réponse, alors le port est ouvert.

Si un message ICMP Port Unreachable est reçu en réponse, alors le port est fermé.

Les autres messages ICMP Unreachable indiquent que le port est filtré.

En cas de non réponse, le port peut être ouvert ou filtré.

 

Si le scan est trop lent, il est préférable de scanner des ports en particulier.

 

La commande suivante permet de scanner un port spécifique :

root@kali:~# nmap -sU -p 53 192.168.1.1

 

Ou bien pour scanner une liste de ports spécifiques

root@kali:~# nmap -sU -p 53,67,123 192.168.1.1

 

La commande suivante permet de scanner seulement les 10 ports les plus utilisés :

root@kali:~# nmap -sU --top-port 10 192.168.1.1
Nmap scan report for unknown (192.168.1.1)
Host is up (0.0035s latency).
PORT     STATE         SERVICE
53/udp   open          domain
67/udp   open|filtered dhcps
123/udp  closed        ntp
…

Cela permet un scan beaucoup plus rapide sur les machines avec une restriction sur les réponses des ports fermés.

 

Scan TCP ports couramment utilisés

 

root@kali:~# nmap -F 192.168.1.163
Nmap scan report for 192.168.1.163
Host is up (0.00084s latency).
Not shown: 82 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
25/tcp   open  smtp
…

Ce scan vise seulement les 100 ports les plus couramment utilisés en TCP

 

Scan Decoy

 

root@kali:~# nmap -D 192.168.1.210,192.168.1.211,192.168.1.213 192.168.1.163
…

Pour rendre l’attaquant plus difficile à identifier, il est possible de lancer un scan, en spécifiant plusieurs IP sources.

Dans la liste de ces IP, nous devons spécifier la nôtre.

Cela donnera l’impression que plusieurs machines ont lancé un scan.

Il sera alors plus difficile de savoir qui est l’attaquant.

 

Scan No Ping

 

root@kali:~# nmap -Pn 192.168.1.0/24
…

Avec cette option, le scan est réalisé sans vérification du statut de l’hôte.

En effet,en temps normal avant de lancer un scan, Nmap vérifie que la cible est joignable, soit avec une requête ARP, soit avec un Ping.

La requête ARP si la cible se trouve dans notre sous réseau, sinon le Ping

 

Si le Ping est utilisé comme vérification, et que la machine cible est configurée pour ne pas répondre au Ping, le scan n’aura alors pas lieu.

 

Scan Idle

 

Le scan Idle est un scan extrêmement furtif.

Pour cela, l’attaquant réalise le scan en se faisant passer pour une autre machine (le zombie).

La cible va donc répondre au scan en envoyant les réponses au zombie.

 

Comme nous ne recevons pas les réponses, il faut analyser le zombie pour connaitre l’issue du scan.

 

Pour cela, l’attaquant analyse l’IP ID du zombie avant et après chaque port scanné.

Si après le scan, l’IP ID a augmentée de 2, c’est que le port est ouvert. Sinon, s’il a augmenté de 1, alors il est fermé ou filtré.

 

Malheureusement, ce type de scan fonctionne rarement.

Voici la commande pour le lancer :

root@kali:~# nmap -sI IP-du-zombie IP-de-la-cible

 

Il est aussi possible de changer le port par défaut utilisé pour découvrir l’IP ID du zombie.

root@kali:~# nmap -sI IP-du-zombie:port IP-de-la-cible

 

Scan NULL / FIN / XMAS

 

Ce type de scan peut être utile pour passer à travers certains Firewall.

Il fonctionne sur la plupart des systèmes Unix, mais pas sur les systèmes Windows.

 

Ce type de scan peut être utilisé en complément d’autres scans.

 

De plus, ce type de scan ne fonctionne que sur les systèmes qui respectent RFC 793.

 

Le RFC 793 dit que si un port est fermé (CLOSED) alors tout segment qui arrive, et qui ne contient pas un RST, donne lieu à un RST en réponse.

Si le port est ouvert et que le segment entrant ne contient pas de SYN, RST ou ACK, alors il n’y a pas de réponse.

Donc, si le system respecte RFC 793, un message ne contenant pas SYN, RST ou Ack donne lieu à un RST en réponse, si le port est fermé, et pas de réponse si le port est ouvert.

 

Le scan Fin permet d’envoyer un message FIN à la victime
Le scan NULL envoie des segments sans flag TCP
Le scan XMAS envoie des segments avec les flags FIN, PSH et URG

 

Scan NULL :

root@kali:~# nmap -sN 192.168.1.1

 

Scan FIN :

root@kali:~# nmap -sF 192.168.1.163

 

Scan Xmas :

root@kali:~# nmap -sX 192.168.1.163

 

3) Génération de rapports

 

Il est parfois difficile d’analyser le résultat d’un scan de port.

Pour cela, l’idéal est de générer un rapport.

 

root@kali:~# nmap 192.168.1.0/24 -oX rapport.xml

Le rapport est généré au format XML.

 

Pour le rendre lisible dans un navigateur Web, il est possible de le convertir.

root@kali:~# xsltproc rapport.xml -o rapport.html

Rapport Nmap

 

4) Détection des services et de versions

 

Autre fonctionnalité intéressante, la détection de services et de versions.

 

La détection de services permet de lister les services qui tournent sur une machine.

Pour chaque port ouvert, Nmap va indiquer le service correspondant.

Par exemple :

Port 80 ouvert : serveur Web

Port 22 ouvert : serveur SSH

Etc…

 

Pour indiquer le service, Nmap se base sur le fichier /usr/share/nmap/nmap-services

C’est-à-dire que la détection de services n’est pas fiable à 100%.

Si la cible héberge un serveur VPN sur le port 80, Nmap indiquera tout de même qu’il s’agit d’un serveur Web.

 

Nous retrouvons la détection de services dans de nombreuses commandes Nmap

 

La détection de versions permet d’indiquer la version du service qui tourne.

Pour cela, Nmap va interroger les ports, et analyser la réponse.

Pour détecter la version, Nmap se base sur le fichier /usr/share/nmap/nmap-service-probes

 

Voici le résultat d’une analyse de versions sur le port 22 pour deux cibles différentes :

root@kali:~# nmap -sV -p 22 192.168.1.163
Nmap scan report for 192.168.1.163
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

 

root@kali:~# nmap -sV -p 22 192.168.1.208
Nmap scan report for 192.168.1.208
PORT   STATE SERVICE VERSION
22/tcp open  ssh     Cisco SSH 1.25 (protocol 2.0)

Nous pouvons voir que Nmap a bien identifié les deux verrions différentes de SSH.

La première cible est une machine Linux utilisant Open SSH, alors que la deuxième machine est un switch Cisco, utilisant un serveur SSH propre à Cisco.

 

La détection de service peut être relativement longue.

Pour accélérer le processus, il est possible d’utiliser l’option  « version-light ».

root@kali:~# nmap -sV --version-light 192.168.1.163

 

Sur ma machine de test, le scan aura été 3 fois plus rapide, pour 25% de résultats en moins.

 

5) Détection d’OS

 

Il peut être intéressant de connaitre l’OS de la machine distante.

 

Pour trouver l’OS, Nmap analyse l’empreinte TCP/UDP de la machine distante, pour en déduire l’OS

Chaque OS aura sa propre empreinte

Pour faire la détection, Nmap envoie une série de paquets TCP et UDP, et analyse les réponses.

Il se base sur le fichier /usr/share/nmap/nmap-os-db pour en déduire l’OS.

root@kali:~# nmap -O 192.168.1.163
…
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33

 

Tagués avec : , ,
Publié dans Scan Réseau
3 commentaires pour “Scan Réseau – Nmap
  1. greg juli dit :

    pouvons-nous scanner notre propre machine avec nmap?

  2. cphi dit :

    bien sur c’est un excellent test de sécu ( avec votre @ip local LAN ou @ip internet WAN ou meme avec 127.0.0.1 )

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Le temps imparti est dépassé. Merci de saisir de nouveau le CAPTCHA.