Outils de hackers et leurs signatures, première partie Par
Toby Miller tmiller@va.prestige.net Traduit par NightBird http://www.nightbirdfr.com/ | ||||||||||
But Cet article est le premier d'une serie de papiers detaillant les exploits/outils des hackers et leurs signatures. Nous allons examiner l'exploit du serveur de noms de domaine Berkley (BIND) bind8x.c. La discussion couvrira les details de bind8x.c et fournira les signatures qui assisteront un specialiste en systeme d'intrusions a le detecter. Ce papier assume que le lecteur a quelques connaissances de TCP/IP et du format de tcpdump. BIND et DNS "DNS est une base de donnees distribuees qui utilise TCP/IP pour faire le lien entre les noms de machines et les adresses IP."[1] Pour resumer, cela veut dire que lorsqu'un utilisateur ecrit http://www.securityfocus.com/ sur son navigateur, l'ordinateur ne va pas automatiquement savoir ce que l'utilisateur demande. L'ordinateur ira vers le serveur DNS qu'on lui a assigne et demandera l'adresse IP de l'url demandée. Cela est aussi vrai pour resoudre les adresses IP vers les noms de machines. Un bon exemple de ce qui se passe reellement est montre sur la figure 1. Elle représente la sortie de tcpdump depuis mon ordinateur personnel quand il parle au serveur DNS.
Figure 1: Communications DNS En regardant le premier paquet, nous voyons que le port de destination est 53 et que le paquet lui-meme est un paquet UDP. Je pense qu'une partie du paquet est assez clair. C'est la partie DNS du paquet que nous allons expliquer. Avant que nous regardions le DNS, jettons un coup d'oeil a l'en-tete du DNS dans la figure 2.
Figure 2: Format de l'entete DNS [2] La figure 2 nous donne une bonne idee de ce que nous recherchons dans ce paquet. Depuis l'en-tete, nous voyons que 23838(hex 5d1e) est le numero d'identification dans le paquet DNS. Le numero ID est envoye au serveur par le client et il est ensuite renvoye au client par le serveur. Le but de cela est de permettre au client de regrouper les reponses avec les requetes correspondantes. L'objet suivant que nous voulons regarder est le sign +. Dans le monde des mathematiques, c'est le signe de l'addition; cependant, dans le monde des DNS cela veut dire que le parametre RD (requerence desire - recursion desired) a ete mis. Le 'A' veut dire que nous voulons une adresse IP. Le paquet numero 2 a une zone qui necessite explication. C'est la lettre q - pouvant vouloir dire requete (query). Enfin, dans le 3eme paquet nous voyons que mon ordinateur a ete capable d'obtenir l'adresse IP de www.securityfocus.com et qu'il a commence a faire la connexion initiale. BIND BIND veut dire Berkley Internet Name Domain. Dans l'environement Linux BIND peut etre habituellement trouve sous named. Le fichier de configuration est situe a /etc/named.conf. Named (s'il est activé au demarrage) tourne sur le port 53. Je ne vais pas rentrer dans les details sur comment installer le DNS ou meme les meilleurs tactiques de securite liees au DNS. A l'ecriture de ce papier, la version de BIND disponible consideree comme la plus sure est BIND 8.2.3. Le programme (bind8X.c) que nous allons etudier exploite la version 8.2.2. Bind8x.c Bind8x.c a ete ecrit par Ix et lucysoft. Il exploite les vulnerabilites trouvées dans BIND 8.2.2. Quand il est utilise, Bind8x.c vous donne un acces root sur la machine victime (fournissant une version de BIND vulnerable). Si vous voulez voir le code, regardez a http://packetstorm.securify.com/0102-exploits/bind8x.c. Compiler ce programme est relativement facile - tout ce que vous avez a faire est gcc -o bind8x bind8x.c. Cela me donne le programme dont j'ai besoin. J'ai lance ce programme sur mon reseau personnel, contre une machine RedHat 6.1 (192.168.1.25) qui n'a aucun patch et tous les services sont largement ouverts. La figure 3 est une trace tcpdump des paquets que nous allons analyses.
Figure 3: TCPDUMP de Bind8x.c Qu'est ce qu'il y a de si interessant dans ces paquets? D'abord, nous voyons que les paquets sont des requetes inverses. Qu'est ce que des requetes inverses? Des requetes inverses sont les liens inverses d'une requete standard [3]. Une autre chose interessante que nous voulons regarder est '48879', qui est lID. Si vous regardez precisement le paquet, nous voyons que 48879 = beef (bonne signature!). En regardant a 0980 dans le premier paquet nous voyons aussi quelques elements d'interet. La figure 4 est une sortie d'ethereal:
Figure 4: Affichage d'un paquet de requete inverse La figure 4 montre des elements DNS normaux. Mais jetons un coup d'oeil aux 'Reponses'. Les 'Reponses' nous montrent que le Nom vient apres la fin des donnees capturees dans le paquet. C'est là que le debordement de pile commence. Le prochain paquet est la reponse de la victime. Pour resumer en quelques mots, il dit "le nom vient apres la fin des donnees capturees du paquet>: type non utilise, classe inconnue". En d'autres termes, il ne sait pas ce qu'il se passe. Jetons un coup d'oeil à la sortie d'Ethereal pour le prochain paquet.
Figure 5: Sortie de Ethereal Encore une fois nous pouvons regarder a l'interieur du paquet et en sortir une belle signature. Si vous regardez a l'ID vous verrez 'dead'. Rappelez vous 57005 == dead. Cette fois la, regardez le nombre de questions envoyees - sept(7). Ces petits elements sont interessants si vous essayez de developper des signatures IDS pour des outils "hacker" specifiques. La reponse a ce paquet ressemble a ca:
Figure 6: Sortie de TCPDUMP pour la 25eme reponse. Le prochain couple de paquets que nous voyons ici nous montre 192.168.1.5 faisant une connexion avec 192.168.1.25. Ensuite, nous voyons 192.168.1.25 donner a 192.168.1.5 un acces root. La connexion initiale est montree dans la figure 7.
Figure 7 Notons le port eleve (36864) auquel 192.168.1.5 essaie de se connecter. Pour sauver un peu d'espace, nous omettrons les paquets ACK, a moins qu'ils soient vitaux a la sequence d'evenements. La arrive root!!
Figure 8 Les nombres hexa en gras viennent de 'uname -a; id;'. Encore une fois, notons le port de destination eleve.
Figure 9 Notons que 192.168.1.25 envoie maintenant toutes les informations sur sa machine a 192.168.1.5
Figure 10 Maintenant, nous avons root. Les nombres hexa en gras ci-dessus montrent uid=0(root) gid=0(root). Resume Ce papier a parle de DNS, BIND et de l'exploit bind8x.c. Nous avons aussi trouve quelques signatures. D'abord, nous avons le paquet UDP de la requete inverse avec un ID de 'beef' et un total de 484 octets. Ensuite, nous avons le paquet de la reponse UDP avec un ID de 'dead' et un total de 538 octets. Enfin, nous avons un port de destination de 36864. En utilisant ce port, l'attaquant aura un acces root (si vulnerable). J'espere que cette discussion aura fourni assez d'informations pour aider quelqu'un qui se gratte la tete a propos de paquets similaires a ceux-ci. Si le lecteur a d'autres questions, voila quelques liens interessants qui peuvent fournir des informations utiles. References [1] Stevens,W.R 1994, TCP/IP Illustrated Vol. 1. Addison-Wesley,
Reading Mass p. 187 Toby Miller est un contributeur au livre Intrusion Detection Signatures and Analysis (NEW RIDERS Publishing) et un contributeur au livre Maximum Security Rev. 3 (SAMS Publishing). Il a travaille dans le monde de la securite Linux et le monde des firewalls/IDS. M. Miller a publie de nombreux papiers pour SANS et Securityfocus.com. Il peut etre joint a tmiller@va.prestige.net. Liens interessants: DNS RFC IETF BIND Vulnerabilities CERT NAI Bulletin PGP Security |