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
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
pouvons-nous scanner notre propre machine avec nmap?
C’est une bonne question. Je pense que oui. Vous pouvez tester en scannant sur l’IP de votre machine.
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 )