Apprendre avec nmap

ArticleCategory: [Choose a category for your article]

System Administration

AuthorImage:[Here we need a little image form you]

[Foto del Autor]

TranslationInfo:[Author and translation history]

original in es Danilo Lujambio

es to fr Georges Tarbouriech

AboutTheAuthor:[A small biography about the author]

Abstract:[Here you write a little summary]

ArticleIllustration:[This is the title picture for your article]

[nmap]

ArticleBody:[The article body]

Pourquoi les scanners de ports sont-ils si importants au sein d'un réseau ? Fondamentalement parce que ce sont des outils indispensables à ceux qui souhaitent attaquer un système. Les différentes méthodes pour la préparation d'une attaque sont les suivantes :

Pour cette raison, un administrateur préoccupé par la sécurité, devra scanner son réseau et y chercher les points faibles avant que d'autres, aux intentions moins avouables, ne s'en chargent.

Plusieurs scanners sont disponibles, mais dans cet article nous traiterons de nmap qui est certainement l'un des plus complets.

nmap permet aux administrateurs système et aux curieux de scanner les réseaux afin de déterminer quels sont les serveurs actifs et les services qu'ils proposent.

nmap offre plusieurs techniques de "balayage". Dans cet article, nous nous proposons de travailler sur un nombre limité d'entre elles et d'en profiter pour réviser (ou peut-être de découvrir ?) les aspects du protocole TCP.

L'idée, c'est de pouvoir observer les différents usages de nmap pour obtenir des informations sur les systèmes et en même temps de découvrir les traces laissées par le balayage de nmap du côté de la cible.

Vous trouverez nmap à www.insecure.org; une fois téléchargé :

tar zxvf nmap-2.30BETA17.tgz
cd ...../nmap-2.30BETA17/
./configure
make
make install
et le voici installé.

Le résultat affiché par nmap est généralement une liste des ports "intéressants" (les ports actifs) sur la machine scannée. Pour chacun de ces ports il fournit le nom du service connu, l'état et le protocole.

Balayage utilisant le"three way handshake" de TCP (option -sT)

La forme de scan la plus commune consiste à utiliser l'option -sT. Ce mode se base sur l'établissement de la connexion par TCP, plus connu sous le nom de "three way handshake". Pour le décrire brièvement, voici la séquence [1]
a) Le serveur doit être prêt à recevoir une connexion (en général, en utilisant les fonctions socket, bind et listen).
b) Le client lance une connexion active - il appelle 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. Normalement, SYN contient un Header (entête) IP - un Header TCP et peut être une option TCP.
c) Le serveur doit informer de la reconnaissance le SYN en envoyant un ACK, et à son tour envoie un SYN avec son numéro de séquence (le tout en un seul paquet TCP).
d) Le client doit informer de sa reconnaissance le SYN envoyé par un ACK.

Ce mode de balayage a deux avantages :

et il a le gros inconvénient d'être très simple à détecter et facile à filtrer.

Analysons maintenant le processus généré par 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)

La numérotation des lignes a été ajoutée pour une meilleure compréhension :
sur la ligne 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. Nous sommes donc au point b) de l'explication du "three way handshake".
sur la ligne 2) la machine cible répond par un paquet RESET ( notez le R après le 1024) indiquant ainsi qu'elle n'a pas de processus à "l'écoute" du port 653
les lignes 3 et 4 sont semblables aux deux premières, 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 est encore un RESET
la ligne 5) montre comment 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. Vous pouvez l'observer à la ligne 6) et ça correspond au point c) de l'explication du "three way handshake".
La ligne 7) montre la reconnaissance du dernier paquet reçu sur la machine 192.168.255.20 par un segment ACK, et nous arrivons ainsi au point d) du "three way handshake". La ligne 8) représente la 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 a permis à nmap de détecter que le port 110 (pop 3) de la machine casa2 est actif.

Signalons que cette forme de balayage est facile à détecter, remarquez les traces laissées dans le fichier /var/log/messages (cela dépend de la configuration de syslog.conf) par la connexion dans les lignes 5, 6, 7 et 8 :

May 6 08:24:01 casa2 in.pop3d[205]: connect from root@192.168.255.20

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 consiste à ouvrir une "demi-connexion", c'est-à-dire à envoyer un segment SYN et si un ACK est reçu c'est parce qu'un port actif a été détecté sur la machine cible, à la suite duquel un RESET est envoyé pour couper brutalement la communication. Si un RST est reçu à la place d'un ACK c'est que le port de la machine cible est inactif. Ce type de scan a pour inconvénient de nécessiter les privilèges de root. Par contre il offre l'avantage d'être difficile à détecter sur la machine visée.

Analysons maintenant le travail de nmap avec cette option à l'aide de tcpdump (encore une fois les lignes sont numérotées pour une meilleure clarté)


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


les lignes 1) et 2) sont très semblables à leur équivalent du paragraphe précédent, sinon que 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.
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

les lignes 3) 4) y 5) sont obtenues grâce à la découverte réussie du port 110 (pop3) de la machine casa2. Comme déjà mentionné, le "three way handshake" ne se déroule pas entièrement, puisque lors de la réception de l'accusé de 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.

Comme prévu, ce balayage ne laisse aucune trace dans le fichier /var/log/messages.

Balayage utilisant les segments FIN

L'idée sur laquelle se fonde ce type de balayage, repose sur le fait que les ports inactifs de la machine cible répondent à un paquet FIN par un paquet RST. Les ports actifs, par contre, ignorent ces paquets. On obtient malgré tout la liste des ports intéressants par l'analyse de ceux qui n'ont pas "répondu". Les machines fonctionnant sous des sytèmes Microsoft ne sont pas vulnérables à ce type de balayage, puisque le fonctionnement de TCP n'y est pas standard.

nmap fonctionne de trois façons différentes en utilisant des techniques semblables, avec les options -sF , -sX y -sN.

Dans cet article nous analysons le comportement avec l'option -sF. Pour cela nous procédons comme pour les options précédentes.

1) 06:50:45.643718 192.168.255.20.35600 > casa2.tau.org.ar.864: F 0:0(0) win 2048
2) 06:50:45.643865 casa2.tau.org.ar.864 > 192.168.255.20.35600: R 0:0(0) ack 0 win 0

sur les lignes 1) y 2) nous pouvons voir l'envoi du segment FIN (remarquez le F après 864 sur la ligne 1) à la machine cible et sa réponse par un paquet RST (remarquez le R ligne 2 après 35600). nmap en déduit que le port 864 de casa2 est inactif.

3) 06:50:47.933227 192.168.255.20.35600 > casa2.tau.org.ar.pop3: F 0:0(0) win 2048
4) 06:50:48.251147 192.168.255.20.35601 > casa2.tau.org.ar.pop3: F 0:0(0) win 2048

les lignes 3) y 4) reprennent l'exemple du port pop3 de la machine casa2 Sur la ligne 3, nous pouvons voir l'envoi du segment FIN, celui-ci n'obtenant aucune réponse de la part de casa2. La ligne 4 constitue une surprise et il doit s'agir d'une précaution prise par nmap envers les ports qui "ne répondent pas", puisqu'il renvoie un segment FIN après un délai pour vérifier que ce port reste sans réponse. Dans les deux cas, casa2 ignore les paquets, montrant ainsi à nmap que son port pop3 est bien actif.

Expressions utiles de tcpdump

Dans la partie "balayage utilisant le three way handshaking de TCP", nous signalons et montrons les traces laissées par le scan de nmap avec l'option -sT. Dans les deux parties suivantes nous avons vu que les options -sS et -sF ne laissent pas de traces. Nous pouvons utiliser tcpdump pour détecter ce type de balayage sur une machine connectée au réseau et susceptible d'être attaquée. L'inconvénient vient du fait que le programme tcpdump génère une énorme quantité d'information posant des problèmes d'espace disque et de possibilité d'analyse. Nous proposons ici quelques expressions agissant comme des filtres sur tcpdump, de manière à ce que l'information obtenue soit moindre et plus simple à analyser.

Pour comprendre les expressions utilisées, la figure suivante présente le format du paquet TCP [2].

TCP (RFC 793)

0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |        Destination Port       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Sequence Number                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Acknowledgement Number                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Offset |  Reserver |U|A|P|R|S|F|             Window            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Options                      |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              Data                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Comme nous pouvons le voir, c'est dans l'octet 13 que se trouvent les drapeaux identifiant le paquet comme segment SYN, FIN, etc. Sachant cela et en utilisant l'expression et (&) avec des masques pour détecter les bits actifs, nous pouvons créer les expressions suivantes

tcpdump 'tcp[13] & 7 !=0 and dst 192.168.255.20' > /tmp/sortie7
les paquets possédant les bits R, S ou F (le masque est 00000111) actifs et destinés à la machine 192.168.255.20 seront filtrés (et bien sûr, ce numéro d'IP sera celui de la machine à protéger).

En utilisant

tcpdump 'tcp[13] & 1 !=0 and dst 192.168.255.20' > /tmp/sortie1
nous obtiendrons les paquets dont le bit FIN est actif ( le masque est 00000001). Ca peut nous servir pour détecter les scans de nmap qui utilisent l'option -sF. Et en tapant
tcpdump 'tcp[13] & 2 !=0 and dst 192.168.255.20' > /tmp/sortie2
nous obtiendrons seulement les paquets dont le bit SYN est actif, nous permettant ainsi de détecter les scans effectués avec l'option -sS

Pour ce dernier type (le scan nmap -sS), des programmes de détection sont disponibles [3]

Conclusion

Des programmes tels que nmap sont très utiles pour l'amélioration de la sécurité d'un système en informant sur ses faiblesses. Ici, nous n'avons montré qu'une petite partie de son fonctionnement, mais elle pourra être utile afin de mieux comprendre de l'intérieur, comment travaillent les scanners.

Bibliographie

[1] W. Richard Stevens Unix Network Programming Volume 1
[2] RFC 793
[3] voir la documentation de nmap