Vous êtes ici : Accueil » Articles » Réseau
>>Nmap
Sommaire - Nmap NmapNmap 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 scanCette 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 scanCes 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 scanCes 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
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 scanCette 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 scanLe 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 anonymatLa 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 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
Document original par Neeho. |