Nmap propose beaucoup d’options, parmi ces dernières, de nombreuses sont inutiles lors d’un test d’intrusion ( fragmentation, manipulation barbare des flags TCP, attaque zombie, FTP Bounces… ). Cet article traitera les options avancées réellement utiles et les pièges a éviter lorsque l’on utilise nmap.
-
Exécuter nmap en root
A la base, on pourrait croire que la seule raison valable pour exécuter nmap en root est pour profiter du scan SYN -sS plus rapide et plus discret que le scan connect -sC. En réalité, il existe une autre option que l’on utilise très souvent avec nmap et qui nécessite des droits privilégiés pour fonctionner efficacement: le ping -sP .
Lorsque l’on effectue un ping -sP en root, nmap va envoyer un paquet TCP SYN sur le port 80, puis un paquet ICMP “echo request”. Si la cible répond à un des deux paquets, elle sera considérée online.
Cependant, si utilisateur classique effectue un -sP, seul un paquet TCP SYN sera envoyé, pas de ping ICMP. Pour peu que le firewall drop les paquets vers le port 80, et on ne détectera pas l’hôte !
Il y a encore un autre cas où le ping ICMP n’est pas effectué lors d’un scan, si l’on spécifie l’option -PU ou -PS (options indiquant les ports UDP/TCP à utiliser pour le ping) alors il faut explicitement spécifier l’option -PE pour envoyer un ping ICMP.
-
Gagner du temps lors des scans
Utiliser les options -PU/-PS/-PE plutôt qu’un scan -PN/-P0
L’option -PN effectue un scan de port en considérant que la cible est online, même si elle n’a pas répondu au ping. Le simple fait de scanner un réseau /24 sur 1000 ports en -PN est déjà très long.
Une alternative pourrait être de pinger la cible sur une dizaine, voire une vingtaine de ports très courants, puis déclencher un scan sur les 1000 ports seulement si au moins un des ports a répondu au ping. Par exemple :
root@hacktop:~# nmap -PS21-23,25,80,135-139,443 -PU53,68,161 -sU -sS --top-ports 1000 10.0.0.0/24 --reason
Interesting ports on 10.0.0.13:
Not shown: 1991 closed ports
Reason: 996 resets and 995 port-unreaches
PORT STATE SERVICE REASON
135/tcp open msrpc syn-ack
139/tcp open netbios-ssn syn-ack
445/tcp open microsoft-ds syn-ack
912/tcp open unknown syn-ack
123/udp open|filtered ntp no-response
137/udp open|filtered netbios-ns no-response
138/udp open|filtered netbios-dgm no-response
445/udp open|filtered microsoft-ds no-response
1900/udp open|filtered upnp no-response
MAC Address: 11:22:33:44:55:66 (Fake Computer)
Cette commande regarde si au moins un des ports TCP 21-23,25,80,135-139,443 (-PS) ou un des ports UDP 53,68,161 (-PU) est ouvert. Si c’est le cas, alors on scan les 1000 ports TCP (-sS) et les 1000 ports UDP (-sU) les plus fréquents (–top-ports).
Attention à l’option -F :
Dans la version stable actuelle de nmap (4.76), l’option Fast -F n’optimise pas vraiment la vitesse du scan de ports, cette option est uniquement relative au nombre de ports scannés. Par défaut nmap scan 1650 ports, avec l’option -F vous scannerez les ports contenus dans nmap-services,soit plus de 1200 ports, ce qui ne fait pas une grosse différence.
Utilisez plutôt la commande –top-ports 100 qui scannera les 100 ports les plus courants. (A noter que dans la version beta actuelle 4.85, l’option -F est égale à un –top-ports 100 ).
Pour avoir une idée des ports les plus fréquents selon nmap :
pierz@hacktop:~$ sort -r -k3 /usr/local/share/nmap/nmap-services | egrep -v '^#' | grep tcp | head
http 80/tcp 0.484143 # World Wide Web HTTP
telnet 23/tcp 0.221265
https 443/tcp 0.208669 # secure http (SSL)
ftp 21/tcp 0.197667 # File Transfer [Control]
ssh 22/tcp 0.182286 # Secure Shell Login
smtp 25/tcp 0.131314 # Simple Mail Transfer
ms-term-serv 3389/tcp 0.083904 # Microsoft Remote Display Protocol
pop3 110/tcp 0.077142 # PostOffice V.3
microsoft-ds 445/tcp 0.056944 # SMB directly over IP
netbios-ssn 139/tcp 0.050809 # NETBIOS Session Service
Enlever la résolution des noms :
L’option -n permet d’éviter de faire des requêtes DNS PTR, on peut gagner beaucoup de temps si on effectue un simple ping sur une plage d’adresse d’ip, par exemple sur une plage /24 :
root@hacktop:~# nmap -sP 10.0.0.0/24
Starting Nmap 4.85BETA3 ( http://nmap.org ) at 2009-03-15 13:30 CET
Host 10.0.0.1 appears to be up.
Host 10.0.0.10 appears to be up.
MAC Address: 11:22:33:44:55:66 (VMware)
Host 10.0.0.13 appears to be up.
MAC Address: 11:22:33:44:55:67 (FakeComputer)
Nmap done: 256 IP addresses (3 hosts up) scanned in 28.44 seconds
root@hacktop:~# nmap -n -sP 10.0.0.0/24
Starting Nmap 4.85BETA3 ( http://nmap.org ) at 2009-03-15 13:33 CET
Host 10.0.0.1 appears to be up.
Host 10.0.0.10 appears to be up.
MAC Address: 11:22:33:44:55:66 (VMware)
Host 10.0.0.13 appears to be up.
MAC Address: 11:22:33:44:55:67 (Fake Computer)
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.44 seconds.
Attention à l’option – -host-timeout :
L’option - -host-timeout, cette option ne règle pas le timeout d’un paquet, mais le temps maximum à passer sur un hôte lors d’un scan.
Régler finement le timeout :
Il est intéressant de régler le timeout de nmap, en particulier lors des scans effectués en -PN ou -P0. Il y a de nombreuses options pour régler finement tous ces paramètres, mais je ne vous conseille pas d’y toucher directement.
Je vous recommande plutôt de vous limiter à l’option -T . Elle permet de choisir un template parmi 5 qui règle l’ensemble des options concernant la vitesse du scan.
Par défaut nmap effectue un scan -T3, si on utilise ce template, les options suivantes seront réglées de cette façon :
- Le timeout d’un paquet est fixé entre 100ms et 10000ms. ( ce qui peut être long).
- Les paquets qui timeouts sont renvoyés entre 1 et 10 fois.
On peut utiliser un template « aggressive » -T4 pour des ips externes (sauf si l’on travaille dans un endroit où l’on a une connexion pourrie):
- Le timeout d’un paquet est fixé entre 500ms et 1250ms.
- Les paquets sont rejoués entre 1 et 6 fois.
Et on effectuera plutôt un scan -T5 sur un réseau local de bonne qualité ( pas du wifi foireux par exemple ) :
- Le timeout d’un paquet est fixé entre 50ms et 300ms.
- Les paquets sont rejoués au maximum 2 fois.
- On ne passe pas plus de 15 minutes sur un hôte.
Ne pas confondre scan agressif -A et template agressif (-T aggressive ou -T5) :
L’option scan agressif -A effectue de nombreuses opérations qui peuvent faire perdre du temps, en plus d’effectuer une détection d’OS (-O) et des services (-sV), elle lance un traceroute ainsi que des scripts d’attaque et des scans de failles (je reviendrai là-dessus plus tard). En plus de faire perdre du temps, ces scripts peuvent avoir des effets non désirés ou être trop intrusifs en fonction du contexte.
-
Autres options intéressantes
L’option –resume permet de reprendre un scan interrompu avec CTRL+C si ce dernier a été sauvegardé au format nmap -oN ou greppable -oG (ou encore -oA).
La seule option utile au niveau de l’IDS evasion est celle qui permet de définir le port source -g. On peut l’utiliser afin de contourner certains firewalls mal configurés, on utilisera le port 20 en scan TCP (FTP actif) ou le port 53 (DNS) lors d’un scan UDP -sU.
Il est possible d’effectuer des requêtes DNS PTR via l’option -sL. Cette option permet de faire de la reconnaissance en repérant des hôtes possibles sur une plage d’adresse ip, sans leur envoyer un seul paquet.
Un détail, si vous avez envie de comprendre pourquoi nmap a déterminé si un port était OPEN/FILTRED/CLOSE/… , vous pouvez ajouter l’option –reason .
-
Les scripts
Attention, les fonctionnalités suivantes sont intéressantes mais reste peu fiables. Mieux vaut utiliser des outils spécialisés dans la détection de faille (nessus) ou de bruteforce (hydra) pour effectuer ce genre d’attaque.
Grâce aux scripts, nmap peut : récupérer plus d’informations relatives aux ports scannés, effectuer un scan de failles ou encore réaliser des attaques. On peut exécuter les scripts par défaut en utilisant l’option -sC (le scan agressif -A exécute également ces scripts).
Parmi ces attaques on a du bruteforce classique comme telnet, http basic, ftp… Ils peuvent également vérifier si clefs SSH sont vulnérables (debian-opensll ), lister les users,groups,… via SMB sur un windows (null sessions) , tenter un transfert de zone…, bref, plein de choses diverses et variées.
Les scripts sont stockés dans le dossier script du répertoire d’installation de nmap (/usr/local/share/nmap/script par défaut). Jeter un coup d’oeil sur le site pour comprendre comment ça marche.
Voici un petit aperçu :
root@hacktop:/usr/local/share/nmap/scripts# nmap --top-ports 50 --script all localhost
Starting Nmap 4.85BETA3 ( http://nmap.org ) at 2009-03-15 17:53 CET
Interesting ports on localhost (127.0.0.1):
Not shown: 47 closed ports
PORT STATE SERVICE
22/tcp open ssh
|_ banner: SSH-2.0-OpenSSH_5.1p1 Debian-3ubuntu1x0Dx0A
| ssh-hostkey: 1024 be:ff:7f:5f:af:bb:bb:f8:4a:ed:3d:ca:af:01:d6:9a (DSA)
|_ 2048 d3:7b:77:12:57:11:d3:11:ac:fa:1c:80:a3:6f:44:f1 (RSA)
23/tcp open telnet
|_ banner: xFFxFDx18xFFxFD xFFxFD#xFFxFD'
|_ telnet-brute: telnet - telnet
80/tcp open http
|_ html-title: Index of /
root@hacktop:/usr/local/share/nmap/scripts# nmap --script all 10.0.0.10,13
Starting Nmap 4.85BETA3 ( http://nmap.org ) at 2009-03-15 18:09 CET
Interesting ports on 10.0.0.10:
Not shown: 984 closed ports
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
|_ banner: ncacn_http/1.0
636/tcp open ldapssl
1025/tcp open NFS-or-IIS
1026/tcp open LSA-or-nterm
1028/tcp open unknown
|_ banner: ncacn_http/1.0
1040/tcp open netsaint
1048/tcp open unknown
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
MAC Address: 11:22:33:44:55:66 (VMware)
Host script results:
|_ nbstat: NetBIOS name: INDAHAX-DC, NetBIOS user: , NetBIOS MAC: 11:22:33:44:55:66
| smb-os-discovery: Windows Server 2003 3790
| LAN Manager: Windows Server 2003 5.2
| Name: INDAHAXINDAHAX-DC
|_ System time: 2009-03-15 18:09:58 UTC+1
| smb-security-mode: User-level authentication
| SMB Security: Challenge/response passwords supported
|_ SMB Security: Message signing required
Interesting ports on 10.0.0.13:
Not shown: 996 closed ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
912/tcp open unknown
|_ banner: 220 VMware Authentication Daemon Version 1.0, ServerDaemonPr...
MAC Address: 11:22:33:44:55:67 (Fake Computer)
Host script results:
|_ sniffer-detect: Likely in promiscuous mode (tests: "111___1_")
| smb-security-mode: User-level authentication
| SMB Security: Challenge/response passwords supported
|_ SMB Security: Message signing not supported
| smb-os-discovery: Windows XP
| LAN Manager: Windows 2000 LAN Manager
| Name: WORKGROUPPIERRE-WG
|_ System time: 2009-03-15 18:09:56 UTC+1
|_ nbstat: NetBIOS name: PIERRE-666, NetBIOS user: , NetBIOS MAC: 11:22:33:44:55:67
Nmap done: 2 IP addresses (2 hosts up) scanned in 36.32 seconds
Références:
[1] man nmap
Salut! Merci pour l’article :-). Je crois qu’il va m’être utile dès aujourd’hui.