|
|
Cet article est disponible en: English Castellano Deutsch Francais Nederlands Portugues Russian Turkce |
par Danilo Lujambio L´auteur: Sommaire: |
Résumé:
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 installet 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.
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 :
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 [email protected]
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é)
|
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.
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
|
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
|
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.
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].
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/sortie7les 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/sortie1nous 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/sortie2nous 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]
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.
[1] W. Richard Stevens Unix Network Programming Volume 1
[2] RFC 793
[3] voir la documentation de nmap
|
Site Web maintenu par l´équipe d´édition LinuxFocus
© Danilo Lujambio, FDL LinuxFocus.org Cliquez ici pour signaler une erreur ou envoyer un commentaire � Linuxfocus |
Translation information:
|
2001-05-25, generated by lfparser version 2.12