THM5/Initiation au scanner Nmap

Un article de HackaWiki.

<<<< MAQUETTE : UTILISER LES IMAGES nmap-matrix2l.gif, nmap-matrix.gif, nmapterm.gif POUR ANIMER CET ARTICLE >>>>

Initiation au scanner Nmap

Nmap est un des programme les plus connu du monde du hack. Scanner entre tous les scanners, il a même eu sa minute de gloire au sein du film Matrix Reloaded. Et en plus, il fonctionne aussi sous Windows !

Newbie

By Inconnu

Pour utiliser à fond Nmap, ce n'est pas des plus évident. Il faut posséder une connaissance approfondie des réseaux, des protocoles et des OS. Je vais ici décrypter une infime partie des mystères de l'enfant terrible de la sécurité réseau.
Le programme et les explications complètes se trouve sur le site officiel du soft : http://www.insecure.org. Je vais ici donner des exemples sur la version linux, mais vous pouvez télécharger sur ce même site la version Windows qui a exactement les mêmes fonctionnalités, et possède en plus une interface graphique.


Modèle:Encadré

Nmap est un scanner de ports, c'est-à-dire qu'il fournit la liste des ports actifs de la ou les machine(s) visée(s). Pour chacun de ces ports il fournit le nom du service connu, l'état (service ouvert, fermé ou filtré par un firewall), et le protocole qu'il utilise. En d'autre terme, toutes les infos dont le hacker a besoin pour savoir par où rentrer!
Nmap comporte de nombreuses options, et je vous propose d'en découvrir ici les principales. (PS: cet article suppose que vous possédiez déjà des connaissances de base en matière de réseau et de protocole. En cas de problème, reportez vous aux RFC sur internet).

"Three way handshake" de TCP (option -sT):

La forme de scan la plus commune est l'option -sT. Ce type d'analyse réseau se base sur l'établissement de la connexion par protocole TCP, aussi connu sous le nom de "three way handshake". Voici la méthode interne développée par Nmap au pas-à-pas :

  1. Le serveur ciblé doit être en état d'écoute (listen) afin d'être prêt à établir une connection.
  2. Le client (nmap) lance une connexion active :
    • il appelle la fonction connect()
    • il envoie un segment SYN pour informer le serveur du numéro initial de séquence pour les données que le client va envoyer sur cette connexion. Le paquet SYN contient un Header IP, un Header TCP et éventuellement une option TCP.
  3. Le serveur reconnaît le SYN et envoyé un ACK en guise de bonne réception et envoie un SYN avec son numéro de séquence.
  4. Le client informe qu'il reconnaît le SYN envoyé par un ACK.

Le problème c'est que cette technique est très simple à détecter, car elle laisse des traces apparentes du scan (avec l'IP du scanneur dans le fichier /var/log/messages ) et est tout aussi facile à filtrer. En effet, la connexion est complète, c'est-à-dire que chaque service sur la machine qui est scannée va logguer une tentative de connexion venant de votre adresse IP.
Cependant, la simplicité de cette technique va vous permettre de mieux appréhender la complexité du programme.

Analysons le processus général de Nmap avec l'option -sT, en lançant tcpdump sur la machine cible. Pour cela on exécute Nmap sur la machine 192.168.255.20 vers la machine casa2.xxx.xxx.xxx, sur un réseau ethernet :

  1. 08:24:18.393108 192.168.255.20.1024 > casa2.xxx.xxx.xxx.653: S
    • 2632227152:2632227152(0) win 16060 <mss 1460,sackOK,timestamp 232602[|tcp]> (DF)
  2. 08:24:18.393167 casa2.xxx.xxx.xxx.653 > 192.168.255.20.1024: R 0:0(0) ack
    • 2632227153 win 0
  3. 08:24:18.393227 192.168.255.20.1025 > casa2.xxx.xxx.xxx.6141: S
    • 2644226118:2644226118(0) win 16060 <mss 1460,sackOK,timestamp 232602[|tcp]> (DF)
  4. 08:24:18.393258 casa2.xxx.xxx.xxx.6141 > 192.168.255.20.1025: R 0:0(0) ack
    • 2644226119 win 0
  5. 08:24:18.453343 192.168.255.20.1298 > casa2.xxx.xxx.xxx.pop3: S
    • 2640612362:2640612362(0) win 16060 <mss 1460,sackOK,timestamp 232608[|tcp]> (DF)
  6. 08:24:18.453542 casa2.xxx.xxx.xxx.pop3 > 192.168.255.20.1298: S
    • 1658259980:1658259980(0) ack 2640612363 win 16060 <mss 1460,sackOK,timestamp 243353[|tcp]> (DF)
  7. 08:24:18.458667 192.168.255.20.1298 > casa2.xxx.xxx.xxx.pop3: . ack 1 win
    • 16060 <nop,nop,timestamp 232609 243353> (DF)
  8. 08:24:18.461280 192.168.255.20.1298 > casa2.xxx.xxx.xxx.pop3: F 1:1(0) ack 1
    • win 16060 <nop,nop,timestamp 232609 243353> (DF)


En termes moins hermétiques :

1) la machine "attaquante" 192.168.255.20 envoie depuis le port 1024 un segment SYN vers le port 653 de la machine cible casa2.xxx.xxx.xxx . On sait qu'il s'agit d'un segment SYN gràce au S qui suit le 653.
2)la machine cible répond par un paquet RESET (soit le R après le 1024) indiquant ainsi qu'elle n'a pas de processus à "l'écoute" du port 653.

Les points 3 et 4 sont semblables aux 1 et 2. Ce qui change, c'est la vérification d'un processus sur le port 6141 de la machine cible, et comme il n'y en a pas, la réponse envoyée est de nouveau RESET.

5)la machine 192.168.255.20 envoie un segment SYN au port pop 3 de la machine cible (port 110) , cette fois la machine cible répond par un ACK accusant réception du SYN et du numéro de séquence envoyé (le numéro de séquence propre à la machine cible est envoyé, dans notre cas 1658259980 et le numéro de séquence envoyé par la machine 192.168.255.20 + 1, soit 2640612363) . Remarquez que dans le paquet envoyé par casa2, les bits SYN et ACK sont actifs
6) correspond au point « c) » de l'explication du "three way handshake".
7) montre la reconnaissance du dernier paquet réseau sur la machine 192.168.255.20 par un segment ACK.
8) fin de la connexion pour la machine 192.168.255.20 , ce qui s'effectue par l'envoi d'un segment FIN (le F après pop3)

Ce processus certes long et un peu lourd à décrypter pour le novice a permis à Nmap de détecter que le port 110 (pop 3) de la machine casa2 est actif, puisqu'une connexion TCP a pu s'initialiser correctement sur ce port.


Autre technique de scan, le balayage utilisant les segments SYN (à demi ouvert - half open - option -sS):

Ce type de balayage s'obtient en exécutant nmap avec l'option -sS.
La technique utilisée commence de la même façon que précédemment, en envoyant un segment SYN, mais sans initialiser entièrement les connexions sur les ports ouverts. Si un ACK est reçu à la suite du SYN, cela signifie qu'un port actif a été détecté sur la machine cible, à la suite duquel on renverra un RESET pour couper brutalement la communication (au lieu de compléter le "three way handshake"). Par contre, si un RST est reçu à la place d'un ACK, c'est que le port de la machine cible n'est pas ouvert.
Ce type de scan a pour inconvénient de nécessiter les privilèges de root (alors que la précédente technique n'en nécessite aucun !). Par contre, il offre l'avantage d'être un peu plus difficile à détecter et de ne laisser aucune trace dans les logs applicatifs...

Analysons le travail de Nmap avec cette option, toujours à l'aide de tcpdump :

  1. 22:25:45.856936 192.168.255.20.40175 > casa2.tau.org.ar.946: S
    • 1292785825:1292785825(0) win 3072
  2. 22:25:45.857078 casa2.tau.org.ar.946 > 192.168.255.20.40175: R 0:0(0) ack
    • 1292785826 win 0
  3. 22:25:45.970365 192.168.255.20.40175 > casa2.tau.org.ar.pop3: S
    • 1292785825:1292785825(0) win 3072
  4. 22:25:45.976022 casa2.tau.org.ar.pop3 > 192.168.255.20.40175: S
    • 185944428:185944428(0) ack 1292785826 win 16080 <mss 536> (DF)
  5. 22:25:45.979578 192.168.255.20.40175 > casa2.tau.org.ar.pop3: R
    • 1292785826:1292785826(0) win 0


Traduction :
Comme vous pouvez le constater, les premiers points sont très semblables et font appel aux mêmes techniques que pour le balayage précédent. La différence fondamentale se marque dans le segment SYN envoyé par la machine 192.168.255.20 au port 946 de la machine casa2, et la réponse de celle-ci par l'envoi d'un RESET indique qu'il ne s'agit pas d'un port actif.

Les points 3, 4, et 5 sont obtenues grâce au port 110 (pop3) de la machine casa2. Le "three way handshake" ne se déroule pas entièrement, puisque lors de la réception du segment SYN (par l'intermédiaire du segment ACK envoyé par casa2, ligne 4), nmap envoie un segment RESET qui force l'interruption de la communication.

Nous venons de passer en revue deux techniques de base de Nmap qui déjà ouvrent la porte à bien des questions. La puissance de Nmap n'aura d'égal que le temps que vous passerez sur le site à lire les tutoriels et autres cours online. A cette étude attentive il vous faudra rajouter de nombreuses heures à étudier les protocoles.
Consultez l'article sur le scan invisible présent dans ce numéro pour découvrir d'autres possibilités de Nmap, comme le scan par "idle host". Une autre fonctionnalité très utilisée est l'OS fingerprinting, dont nous avons déjà parlé dans des articles précédents, qui permet de détecter à distance le type et la version du système d'exploitation du système attaqué !

Pour ceux qui parmi vous se seraient sentis un peu floué par ces quelques explications, je ne puis que fortement vous conseiller d'effectuer quelques recherches sur le net afin d'étudier le modèle TCP et OSI, ciment de base de la communication réseau. Le RFC 793 et les cours Cisco sont une excellente base de travail mais je vous mets en garde dès à présent jeune « jedi »: un tel apprentissage demande 2 ans d'effort et d'étude appliquée... Long is the road, but happy is the end !</pre>