3psilon website

slogan


Vous êtes ici : Accueil » Articles » Réseau

>>Nmap

25 juillet 2006
Auteur(e) : 

Nmap

Nmap est le scanner de ports le plus utilisé car il est très puissant. En effet il dispose d’un nombre impréssionnant de fonctionnalités.

De plus il est disponible sur un grand nombre de système d’exploitation en plus de GNU/Linux.

Nmap vous sera très utile pour auditer votre réseau car c’est aussi un outil utilisé par les hackers.

Dans ce document je vous présenterais les principales fonctionnalités de Nmap bien que le but de celui-ci ne soit pas de remplacer la page man de Nmap.

Dans un premier temps je vous ferais découvrir les différentes méthodes de scans. Puis dans un second temps, je détaillerais quelques options intéressantes.

TCP connect()

Cette méthode utilise l’option -sT. C’est le type de scan le plus simple et il n’a pas besoin d’avoir les droits de l’utilisateur root. Pour tester si un port est ouvert ou non, Nmap emploi la fonction connect() du langage C.

Elle permet d’initialiser une connexion à une socket. On a alors une connexion TCP dite complète (méthode three way handshake). Si le port est ouvert l’appel de la fonction connect() fonctionnera sinon cela veut dire que le port est fermé.


nmap -sT 192.168.164.80

Starting nmap 3.27 ( www.insecure.org/nmap/ )
at 2003-08-16 13:45 CEST
Interesting ports on nserver (192.168.164.80):
(The 1617 ports scanned
but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
80/tcp open http
81/tcp open hosts2-ns
111/tcp open sunrpc
139/tcp open netbios-ssn

Nmap run completed -- 1 IP address (1 host up)
scanned in 1.138 seconds


> Exemple : TCP connect()

Ci-dessus on peut voir que Nmap nous a retourné la liste des ports ouverts sur la machine cible 192.168.164.80. Pour chaque port ouvert Nmap affiche le service qui devrait ?re lancer sur le port correspondant d’après le fichier nmap-services. Ici Nmap ne vérifi pas si c’est vraiment le service affiché qui tourne sur ce port. En effet, on peut très bien lancer un serveur FTP sur le port 80 qui est habituellement réservé à un serveur HTTP. On peut aussi lancé un honeypot en écoute sur ce port...

Son principal inconvéniant pour une personne mal-intentionnée est qu’il sera facile à détecter. L’attaque sera alors visible dans les fichiers logs. Par contre, certains IDS n’en tienne pas compte car c’est une connexion TCP classique en trois temps. En effet ceux-ci, se préoccupe plus des méthodes décrites après.

SYN scan

Cette méthode consiste à ne pas ouvrir une connexion TCP complète comme précédement. Cette technique est généralement appelée "half-open" ou scan furtif. Celle-ci utilise l’option -sS de Nmap.

Le principe de fonctionnement est le suivant : un flag SYN est envoyer à la station cible et on attend la réponse. Si on re ?it un SYN/ACK cela veut dire que le port est ouvert, sinon si la réponse est un RST, c’est que le port est fermé. Si Nmap détecte un port ouvert il coupe brutalement la connexion par un RST.


nmap -sS 192.168.164.80

Starting nmap 3.27 ( www.insecure.org/nmap/ )
at 2003-08-16 13:52 CEST
Interesting ports on nserver (192.168.164.80):
(The 1617 ports scanned
but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
80/tcp open http
81/tcp open hosts2-ns
111/tcp open sunrpc
139/tcp open netbios-ssn

Nmap run completed -- 1 IP address (1 host up)
scanned in 0.990 seconds


> Exemple : SYN scan

Ce type de scan à pour avantage d’être plus rapide et il est moins détectable que la méthode précédente par quelques IDS simplistes. En effet de nos jours, la majorité des IDS détecte ce type de scan à cause de sa grande popularité. Par contre il nécessite les droits de l’utilisateur root mais en général le méchant a normalement un accès root sur sa machine :)

FIN, XMAS et NULL scan

Ces trois méthodes fonctionnent de la même manière. Avec l’option -sF (scan FIN), comme son nom l’indique on envoie un paquet avec un flag FIN. Le scan XMAS (option -sX), quand ?lui, il envoie un paquet avec les flags FIN|URG|PSH. Et le NULL scan utilisant le paramètre -sN n’envoie aucun flag. Chaque port fermé retourne un RST.


nmap -sX 192.168.164.80

Starting nmap 3.27 ( www.insecure.org/nmap/ )
at 2003-08-16 14:12 CEST
Interesting ports on nserver (192.168.164.80):
(The 1617 ports scanned
but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
80/tcp open http
81/tcp open hosts2-ns
111/tcp open sunrpc
139/tcp open netbios-ssn

Nmap run completed -- 1 IP address (1 host up)
scanned in 4.325 seconds


> Exemple : FIN, XMAS et NULL scan

L’inconvénient principal de cette méthode est quelle ne fonctionne pas sous Windows, Cisco, BSDI, HU/UX, MSV et IRIX. Pourquoi ? Tout simplement parce que ces systèmes d’exploitation ne respectent pas standards établis dans les RFC. Ceux-ci renvoient un RST lorsqu’un port est ouvert au lieu de rien du tout. Ces techniques se révèlent aussi plus lente que les deux précédentes. Il y a aussi quelques firewalls bien configurés qui rejettent ces paquets particulièrement avec l’option -sN. Cependant cela fonctionne sur la plus part des machines et peut ?re plus ou moins bien détecté.

ACK et Window scan

Ces deux fonctionnalités utilisent respectivement les options -sA et -sW. La principale utilité des ces méthodes est de déterminer le type de firewall de la cible, si c’est un stateful ou simple firewall qui bloque les paquets SYN entrants. L’inconvéniant majeur est que cela ne fonctionne pas sur la totalité des sytèmes d’exploitation. La liste de systèmes supportant ces techniques sont disponibles dans la page man et suremment dans les archives de la mailling-list nmap-hackers.

Le ACK scan envoie un numéro de séquence aléatoire au port voulu. Tandis que le Window scan fournie une taille de fenêtre invalide. En retour, si on obtient un RST cela indique que le port n’est pas filtrer. Si on a rien ou un ICMP unreachable, le port est filtré. Scan en utilisant le protocole UDP

-  sU est l’option utilisé pour effecter un scan de ce type. Le principe de fonctionnement est simple, il suffit d’envoyer un paquet vide sur le port désiré. Si l’on re ?it un paquet ICMP port unreacheable cela signifie que le port est fermé.


nmap -sU 192.168.164.80

Starting nmap 3.27 ( www.insecure.org/nmap/ )
at 2003-08-16 14:02 CEST
Interesting ports on nserver (192.168.164.80):
(The 1465 ports scanned
but not shown below are in state: closed)
Port State Service
111/udp open sunrpc
137/udp open netbios-ns
138/udp open netbios-dgm
2049/udp open nfs
32770/udp open sometimes-rpc4
32771/udp open sometimes-rpc6

Nmap run completed -- 1 IP address (1 host up)
scanned in 1471.748 seconds


> Exemple : UDP scan

En regardant l’exemple, vous avez surement remarqué que cette méthode est extremment lente comparée ?un scan TCP. Un autre inconvénient pour l’attaquant est que l’on peut facilement bloquer un scan UDP. Il suffit tout simplement de ne pas renvoyer la réponse désirée. Cela est assez simple à mettre en place avec IPtables.

Idle scan

Cette méthode permet de garder son anonymat en utilisant une troisième machine. Cette dernière est appelée zombie. Voici comment Nmap met en place cette méthode :

Nmap envoie un paquet contenant un SYN|ACK au zombie Le zombie retourne un RST à l’attaquant ce qui permet de récupérer son IP ID L’attaquant envoie alors ?la cible un SYN avec comme adresse source l’IP du zombie Si le port de destination est ouvert, le zombie va reçevoir un SYN|ACK de la cible Le zombie renverra alors un RST à la cible car il n’as pas établie de connexion vers la cible (l’IP ID est alors incrémenté) L’attaquant envoie donc un paquet SYN|ACK au zombie pour récupérer la valeur de l’IP ID Si le port de la cible est fermé, un RST est envoyé au zombie ce qui ne provoque pas la modification de l’IP ID Nmap peut alors déterminé si le port est ouvert ou non en fonction de la valeur de l’IP iD du zombie


nmap -P0 -sI 192.168.164.2:139 192.168.164.80

Starting nmap 3.27 ( www.insecure.org/nmap/ )
at 2003-08-16 15:24 CEST
Idlescan using zombie 192.168.164.2 (192.168.164.2:139);
Class: Incremental
Interesting ports on nserver (192.168.164.80):
(The 1617 ports scanned but
not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
80/tcp open http
81/tcp open hosts2-ns
111/tcp open sunrpc
139/tcp open netbios-ssn

Nmap run completed -- 1 IP address (1 host up)
scanned in 39.578 seconds


> Exemple : Idle scan

Dans l’exemple, l’option -P0 signifie que l’on ne ping pas la cible avant le scan. On utilise ici la machine 192.168.164.2 comme zombie sur le port 139. La cible étant la station 192.168.164.80. L’avantage majeur de cette technique est que la cible n’a quasiment aucun moyen de conna ?re le vrai attaquant. Celle-ci pense que l’attaquant est la machine zombie. Grâce à cette technique on peut alors tester certaines règles d’un firewall vu du zombie et non de l’attaquant. On peut citer comme inconvénient que c’est un peu lent et qu’il faut trouver un "bon" zombie. Sinon la méthode possède les mêmes atouts et inconvéniants que le SYN scan car c’est la même méthode de scan qui est employée.

RPC scan

Le principe est l ?aussi simple, Nmap envoie aux ports ouverts des commandes SunRPC afin de récupérer le nom et la version des programmes qui tournent sur ces ports. L’option à utiliser est -sR. Pour l’utiliser on doit coupler ce paramètre avec d’autres type de scan comme le TCP connect() ou l’UDP scan.


nmap -sTUR 192.168.164.80

Starting nmap 3.27 ( www.insecure.org/nmap/ )
at 2003-08-16 14:35 CEST
Interesting ports on nserver (192.168.164.80):
(The 3082 ports scanned
but not shown below are in state: closed)
Port State Service (RPC)
21/tcp open ftp
22/tcp open ssh
80/tcp open http
81/tcp open hosts2-ns
111/tcp open sunrpc (rpcbind V2)
111/udp open sunrpc (rpcbind V2)
137/udp open netbios-ns
138/udp open netbios-dgm
139/tcp open netbios-ssn
2049/udp open nfs (nfs V2-3)
32770/udp open sometimes-rpc4 (nlockmgr V1-4)
32771/udp open sometimes-rpc6 (mountd V1-3)

Nmap run completed -- 1 IP address (1 host up)
scanned in 1479.600 seconds


> Exemple : RPC scan

Ce type de scan est voyant (les tentatives s’affichent clairement dans les logs) et lent si on scan aussi en UDP (regardez le temps d’execution de l’exemple).

Scan personnalisé

En lisant Linux Magazine j’ai découvert que l’on pouvait faire des scans personnalisés. Cette possibilité n’est pas encore documenté. Pour cela on doit utilisé le paramètre —scanflags. Bien entendu, comme toute les méthodes qui nécessite de forger ses propres paquets, un accès root est obligatoire.


nmap --scanflags FINURGPSH 192.168.164.80

Starting nmap 3.27 ( www.insecure.org/nmap/ )
at 2003-08-16 15:01 CEST
Interesting ports on nserver (192.168.164.80):
(The 1617 ports scanned
but not shown below are in state: closed)
Port State Service
21/tcp filtered ftp
22/tcp filtered ssh
80/tcp filtered http
81/tcp filtered hosts2-ns
111/tcp filtered sunrpc
139/tcp filtered netbios-ssn

Nmap run completed -- 1 IP address (1 host up)
scanned in 5.806 seconds


> Exemple : Scan personnalisé

Dans l’exemple ci-dessus j’ai envoyer les mêmes flags qu’avec la méthode XMAS. Sauf qu’ici j’obtient à chaque fois un état filtré même si il n’y a pas de firewall (testé sur deux machines différentes). Cette fonction permet donc de se faire une méthode de scan personnalisée. Mais pour cela je pense que l’utilisation de l’outil hping2 (lui aussi très puissant) est plus intéressante.

Garder son anonymat

La première chose à laquelle va penser une personne mal-intentionnée est qu’on ne puisse pas la retrouver lorsqu’elle fait quelque chose d’illégale. Il faut donc qu’un scan ne soit pas détecter par un IDS qui est une chose de plus en plus difficile... Pour ceux qui ne sont toujours pas convaincu de la puissance de Nmap voici ce que l’on peut encore faire :

Pour éviter de se faire détecter par certains IDS il suffit de réduire le temps entre deux scans. Nmap permet cela en utilisant l’option -T . En mode Paranoid, Nmap envoie un paquet toutes les 5 minutes et ne fait pas de scans parallèles. Sneaky est similaire au paramètre Paranoid sauf que l’on a un délai de 15 secondes entre chaque paquets. Polite est censé soulager la charge réseau et réduire les chances de planter une machine. Le temps d’attente est alors de 0.4 secondes entre chaque paquets réseau. Le comportement par défaut de Nmap est bien entendu le mode Normal. Le paramètre Aggressive est particulièrement intéressant pour le SYN scan qui permet d’aller plus vite. Selon la page man ce mode est conseillé aux gens impatients qui possèdent une connexion rapide. Le dernier paramètre, Insane, est pratique pour scanner rapidemment une plage d’IP du moment que perdre quelques informations ne vous gène pas. A moins que vous possèdiez une connexion réseau très rapide.

Une autre solution consiste à simuler un scan de ports par plusieurs machines en utilisant de fausses adresses IP source. Autrement dis, on fais croire à la cible qu’elle est scannée par plusieurs machines en même temps. Il nous suffit donc de même notre IP avec celles forgées. Pour cela l’option -D est utilisée. Par exemple dans le cas suivant la cible va détecter 3 attaques simultanée : -D 192.168.164.5,ME,192.168.164.2.

Si vous êtes sur un réseau local, vous pouvez spoofer votre adresse IP et récupérer le résultat en utilisant un sniffer tel que TCPdump. Spoofer son adresse IP consiste généralement à modifier l’adresse IP source du paquet réseau. l’inconvénient est que la réponse fournie par la cible sera envoyée à l’adresse spoofée. Il est donc plus facile de le faire sur un LAN. Il existe tout un tas de méthode pour récupérer ces paquets mais je ne le détaillerais pas ici. l’utilisation de cette méthode étant assez simple : -S 192.168.164.85. Ici la station cible renverra la réponse ?la machine ayant pour IP 192.168.164.85.

Une autre méthode vue plus haut est l’idle scan. Elle permet de se cacher derrière un poste "zombie".

Options utiles

-  O : Détection du système d’exploitation utilisé sur la cible en fonction de l’empreinte TCP/IP capturées
-  osscan_guess : Retourne les systèmes d’exploitation les plus probables si l’option -O ne trouve rien
-  p : Plage de ports à scanner, par exemple : -p 80,21,135-139
-  f : Fragmente les paquets, permet de contrer certains NIDS
-  F : Scan dit rapide, Nmap ne scan que les ports listés dans le fichier nmap-services
-  n : Ne pas faire la conversion adresse IP en nom de domaine
-  oN : Sauvegarde le résultat du scan dans le fichier file
-  P0 : Ne lance pas de ping avant scanner une cible, utile car de plus en plus de serveurs ignore les paquets ICMP
-  sP : Ne scanne pas les ports, Nmap fait seulement un ping
-  PT [ports] : Lance un ping TCP sur un ou plusieurs ports (port 80 par défaut) pour tester si la cible est accéssible ou non, utile pour les machines refusant les pings ICMP
-  g : Port source utilisé lors d’un scan, utile pour contrer certains firewall qui accepte tous les paquets venant du port source 53 par exemple
-  I : "Reverse ident scanning", cela permet de connaitre l’utilisateur qui fait tourner le programme qui écoute sur un port
-  scan_delay : Temps d’attente entre chaque test
-  host_timeout : Délai d’attente d’un ping
-  packet_trace : Affiche les paquets envoyés au format TCPdump
-  max_parallelism : Nombre maximum de paquets envoyés en parallèle
-  randomize_hosts : Scan dans un ordre aléatoire une plage d’IP

Document original par Neeho.

Formuler un commentaire


3psilon (c) 2003

[W3C CSS Validator] [W3C XHTML Validator] [W3C WAI AAA]