Pour vérifier l'état de son réseau, un administrateur doit se comporter comme un pirate et tenter de pénétrer ses propres défenses. Cet article présente la démarche à suivre.
Mettre à l'épreuve la sécurité d'un réseau signifie en général "résistance aux menaces externes". Cependant, de nombreuses opérations malveillantes sont facilement menées depuis une machine du réseau lui-même (virus, backdoor, sniffer...). Ces sources de danger sont rarement prises en considération lors de l'évaluation du réseau. De même, la plupart des attaques présentées dans l'article d'Éric Detoisien doivent également être évaluées (spoofing, (D)Dos...).
Des scénarii variés sont envisageables en guise de tests d'intrusion :
Les sociétés qui enregistrent les noms de domaine offrent
généralement un service d'interrogation en ligne (voir le
tableau 1). Sous Unix, il existe également
la commande
whois.
AFNIC | Association Française pour le Nommage Internet en Coopération | www.nic.fr/cgi-bin/whois | tous les ".fr" |
RIPE | Réseau IP Européen | www.ripe.net/cgi-bin/whois | couvre l'Europe, le Moyen-Orient et quelques pays d'Asie et d'Afrique |
InterNIC | Pris sur leur page web : "InterNIC is a registered service mark of the U.S. Department of Commerce. This site is being hosted by ICANN on behalf of the U.S. Department of Commerce". | www.internic.net/whois.html | les ".com", ".net", ".edu" et autres ".org" |
Pour vous montrer la richesses des inforamtions contenues dans ce type de base, rien de tel qu'un petit exemple sur un nom de domaine (fictif pour des raisons de confidentialité) :
[root@testeur -> ~]$ whois pigeons.fr@whois.nic.fr [whois.nic.fr] Tous droits reserves par copyright. Voir http://www.nic.fr/outils/dbcopyright.html Rights restricted by copyright. See http://www.nic.fr/outils/dbcopyright.html domain: pigeons.fr descr: PIGEON ET CIE descr: 10 RUE DE PARIS descr: 75001 Paris admin-c: BPxxx-FRNIC tech-c: LPxxx-FRNIC zone-c: CPxxx-FRNIC nserver: ns1.pigeons.fr nserver: ns2.pigeons.fr nserver: ns.heberge.fr mnt-by: FR-NIC-MNT mnt-lower: FR-NIC-MNT changed: frnic-dbm-updates@nic.fr 20001229 source: FRNIC role: HEBERGE Hostmaster address: Heberge Telecom address: 10 rue de Gennevilliers address: 92230 Gennevilliers phone: +33 1 41 00 00 00 fax-no: +33 1 41 00 00 01 e-mail: hostmaster@heberge.fr admin-c: AAxxx-FRNIC tech-c: BBxxx-FRNIC nic-hdl: CCxxx-FRNIC notify: hm-dbm-msgs@ripe.net mnt-by: HEBERGE-NOC changed: hostmaster@heberge.fr 20000814 changed: migration-dbm@nic.fr 20001015 source: FRNIC person: Bernard Pigeon address: PIGEON ET CIE address: 10 RUE DE PARIS address: 75001 Paris address: France phone: +33 1 53 00 00 00 fax-no: +33 1 53 00 00 01 e-mail: bernard.pigeon@pigeons.fr nic-hdl: BPxxxx-FRNIC notify: bernard.pigeon@pigeons.fr mnt-by: HEBERGE-NOC changed: bernard.pigeon@pigeons.fr 20001228 source: FRNIC person: Luc Pigeon address: PIGEON ET CIE address: 10 RUE DE PARIS address: 75001 Paris address: France phone: +33 1 53 00 00 00 fax-no: +33 1 53 00 00 01 e-mail: luc.pigeon@pigeons.fr nic-hdl: LPxxx-FRNIC mnt-by: HEBERGE-NOC changed: aaa@heberge.fr 20001228 source: FRNICNous apprenons que la société Pigeon et Cie est en fait hébergée par Heberge Telecom. Les adresses emails correspondent sans doute à des alias, mais elles nous fournissent également une piste sur l'existence de comptes sur des machines : si les mots de passe correspondant sont faibles (comme les prénoms, dates de naissance...), cette information peut se révéler utile.
Toujours via les bases whois des recherches plus poussées à partir d'une adresse IP appartenant à la société Pigeon et Cie nous amènent à découvrir les classes d'adresses IP qui lui ont été allouées. Pour cela, nous utilisons la base whois de RIPE qui se révèle être la plus pertinente :
[root@testeur -> ~]$ whois 10.51.23.246@whois.ripe.net % 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: 10.51.23..0 - 10.51.23.255 netname: PIGEON-CIE descr: Pigeon et Cie country: FR admin-c: OMxxxx-RIPE tech-c: OMxxxx-RIPE status: ASSIGNED PA notify: admin@pigeons.fr mnt-by: PC-XXX changed: admin@pigeons.fr 20000223 source: RIPEEn outre, des recherches croisées sur les noms récupérés peuvent nous donner des informations supplémentaires sur la cible (découvrir de nouvelles adresses IP ou de nouveaux serveurs DNS).
Le bilan des recherches via les bases whois est très concluant puisque nous avons récupéré :
Du point de vue de la cible, nous verrons également comment déjouer certaine interrogation. A la différence des étapes précédentes, la cible contrôle maintenant les données que le testeur recherche. C'est donc à elle de faire en sorte de les limiter au minimum.
[root@testeur -> ~]$ host -v -t ns pigeons.fr ns1.pigeons.fr Using domain server: Name: ns1.pigeons.fr Address: 10.250.149.163 Aliases: Trying null domain rcode = 0 (Success), ancount=3 The following answer is not verified as authentic by the server: pigeons.fr 172800 IN NS ns1.pigeons.fr pigeons.fr 172800 IN NS ns2.pigeons.fr pigeons.fr 172800 IN NS ns.heberge.fr Additional information: ns1.pigeons.fr 172800 IN A 10.250.149.163 ns2.pigeons.fr 172800 IN A 10.250.149.165 ns.heberge.fr 345317 IN A 10.51.3.65Nous avons donc la confirmation des serveurs DNS utilisés ainsi que leur adresse IP.
[root@testeur -> ~]$ host -v -t mx pigeons.fr ns1.pigeons.fr Using domain server: Name: ns1.pigeons.fr Address: 10.250.149.163 Aliases: Trying null domain rcode = 0 (Success), ancount=1 The following answer is not verified as authentic by the server: pigeons.fr 172800 IN MX 0 smtp1.pigeons.fr For authoritative answers, see: pigeons.fr 172800 IN NS ns1.pigeons.fr pigeons.fr 172800 IN NS ns2.pigeons.fr pigeons.fr 172800 IN NS ns.heberge.fr Additional information: smtp1.pigeons.fr 172800 IN A 10.250.149.35 ns1.pigeons.fr 172800 IN A 10.250.149.163 ns2.pigeons.fr 172800 IN A 10.250.149.165 ns.heberge.fr 345239 IN A 10.51.3.65
[root@testeur -> ~]$ host -a pigeons.fr ns1.pigeons.fr Using domain server: Name: ns1.pigeons.fr Address: 10.250.149.163 Aliases: Trying null domain rcode = 0 (Success), ancount=5 The following answer is not verified as authentic by the server: pigeons.fr 172800 IN NS ns1.pigeons.fr pigeons.fr 172800 IN SOA ns1.pigeons.fr dnsmaster.pigeons.fr( 2000060601 ;;serial (version) 21600 ;refresh period 3600 ;retry refresh this often 3600000 ;expiration period 172800 ;minimum TTL ) pigeons.fr 172800 IN NS ns2.pigeons.fr pigeons.fr 172800 IN NS ns.heberge.com pigeons.fr 172800 IN MX 0 smtp1.pigeons.fr For authoritative answers, see: pigeons.fr 172800 IN NS ns1.pigeons.fr pigeons.fr 172800 IN NS ns2.pigeons.fr pigeons.fr 172800 IN NS ns.heberge.fr Additional information: ns1.pigeons.fr 172800 IN A 10.250.149.163 ns2.pigeons.fr 172800 IN A 10.250.149.165 ns.heberge.fr 345225 IN A 10.51.3.65 smtp1.pigeons.fr 172800 IN A 10.250.149.35Désormais nous avons toutes les informations que nous pouvions recupérer facilement et à tous les coups. Explorons plus avant le domaine pigeons.fr en recherchant des informations sur les machines présentes sur le réseau :
[root@testeur -> ~]$ host -l pigeons.fr ns1.pigeons.fr Using domain server: Name: ns1.pigeons.fr Address: 10.250.149.163 Aliases: pigeons.fr name server ns1.pigeons.fr pigeons.fr name server ns2.pigeons.fr pigeons.fr name server ns.heberge.fr m01.pigeons.fr has address 10.51.23.226 m02.pigeons.fr has address 10.51.23.227 www2.pigeons.fr has address 10.51.23.247 m03.pigeons.fr has address 10.51.23.228 m04.pigeons.fr has address 10.51.23.229 m05.pigeons.fr has address 10.51.23.230 m10.pigeons.fr has address 10.51.23.238 m09.pigeons.fr has address 10.51.23.237 m12.pigeons.fr has address 10.250.149.162 m13.pigeons.fr has address 10.250.149.163 m14.pigeons.fr has address 10.250.149.165 m16.pigeons.fr has address 10.51.23.251 m39.pigeons.fr has address 10.51.23.249 w3.pigeons.fr has address 10.101.154.68 w5.pigeons.fr has address 10.101.154.67 w7.pigeons.fr has address 10.101.154.73 w8.pigeons.fr has address 10.101.154.77 w9.pigeons.fr has address 10.101.154.79 w5-private.pigeons.fr has address 10.101.154.70 w3-ccc.pigeons.fr has address 10.101.154.72 w3-bbb.pigeons.fr has address 10.101.154.71 www.pigeons.fr has address 10.51.23.246La chance est avec nous, une mauvaise configuration nous a permis de lister toutes les machines du domaine pigeons.fr. Dans le cas contraire, nous aurions refait la même opération sur les autres serveurs DNS car souvent le serveur principale est bien configuré contrairement aux autres.
[root@testeur -> ~]$ host -a 0.168.192.in-addr.arpa ns1.pigeon2.com Using domain server: Name: ns1.pigeons2.fr Address: 10.81.144.121 Aliases: Trying null domain rcode = 0 (Success), ancount=4 The following answer is not verified as authentic by the server: 0.168.192.in-addr.arpa 3600 IN NS server2.pigeons2.fr 0.168.192.in-addr.arpa 3600 IN NS server1.pigeons2.fr 0.168.192.in-addr.arpa 3600 IN NS echange.pigeons2.fr 0.168.192.in-addr.arpa 3600 IN SOA server1.pigeons2.fr root.pigeons2.fr( 585 ;serial (version) 900 ;refresh period 600 ;retry refresh this often 86400 ;expiration period 3600 ;minimum TTL ) Additional information: server2.pigeons2.fr 3600 IN A 192.168.0.1 server1.pigeons2.fr 3600 IN A 192.168.0.2 server1.pigeons2.fr 3600 IN A 10.81.144.121 echange.pigeons2.fr 3600 IN A 192.168.0.3Nous avons pris ici une autre cible puisque le transfert de zone précédent nous a montré aucune machine avec un adressage privé (192.168.0.1 par exemple). Nous voyons donc que la zone 0.168.192.in-addr.arpa est gérée par le serveur DNS ns1.pigeons2.fr. Il suffit donc de tester toutes les machines du réseau 192.168.0.*.
[root@testeur -> ~]$ host 192.168.0.1 ns1.pigeons2.fr 1.0.168.192.IN-ADDR.ARPA 1200 IN PTR server1.pigeons2.frIl ne reste plus qu'à créer un petit script (en Perl par exemple) qui répète cette commande pour les adresses de 192.168.0.1 à 192.168.0.254.
[root@testeur -> ~]$ nslookup Default Server: ns1.pigeons.fr Address: 10.250.149.163 > set class=chaos > set query=txt > version.bind Server: ns1.pigeons.fr Address: 10.250.149.163 VERSION.BIND text = "8.2.3-REL"Nous obtenons bien la version de Bind, ce qui pourra nous permettre de trouver une éventuelle vulnérabilité sur cette version (un buffer overflow par exemple).
[root@testeur -> ~]$ nmap -sP 10.51.23.* -n Starting nmap V. 2.54BETA25 ( www.insecure.org/nmap/ ) Host (10.51.23.226) appears to be up. Host (10.51.23.227) appears to be up. Host (10.51.23.228) appears to be up. Host (10.51.23.229) appears to be up. Host (10.51.23.230) appears to be up. Host (10.51.23.237) appears to be up. Host (10.51.23.238) appears to be up. Host (10.51.23.246) appears to be up. Host (10.51.23.247) appears to be up. Host (10.51.23.249) appears to be up. Host (10.51.23.251) appears to be up. Nmap run completed -- 256 IP addresses (11 hosts up) scanned in 2 seconds
[root@testeur -> ~]$ traceroute 10.51.23.251 traceroute 10.101.154.70 1 10.0.0.1 1.612 ms 1.443 ms 1.532 ms 2 10.18.23.5 5.790 ms 5.454 ms 5.536 ms 3 10.20.20.1 5.605 ms 5.453 ms 5.338 ms 4 10.51.15.1 6.805 ms 6.437 ms 6.552 ms 5 10.51.192.7 7.783 ms 7.246 ms 7.329 ms 6 10.51.173.65 7.402 ms 7.246 ms 7.732 ms 7 10.51.159.33 7.582 ms 7.844 ms 7.935 ms 8 10.51.23.1 8.202 ms 7.639 ms 7.909 ms 9 10.51.23.251 7.807 ms 7.633 ms 7.733 msLa machine juste avant la destination est un routeur.
Le but du scan est similaire à celui de l'éclaireur. Le testeur (ou le pirate) détermine ainsi le rôle des machines, les services accessibles, les protocoles supportés... A la fin de l'opération, les informations suivantes sont obtenues :
Il existe différentes solutions pour échapper à ce genre de détecteurs, en spoofant des adresses IP ou en distribuant le scan depuis plusieurs machines.
Par exemple, lorsque l'adresse source du paquet est spoofée, la machine de test reste inconnue de la machine cible, bien que celle-ci sache alors qu'elle a été scannée :
[root@kelly intrusion]$ hping -r bosley 46 bytes from 192.168.1.2: flags=RA seq=1 ttl=255 id=+1 win=0 rtt=0.3 ms 46 bytes from 192.168.1.2: flags=RA seq=2 ttl=255 id=+1 win=0 rtt=0.3 ms 46 bytes from 192.168.1.2: flags=RA seq=3 ttl=255 id=+1 win=0 rtt=0.4 ms 46 bytes from 192.168.1.2: flags=RA seq=4 ttl=255 id=+1 win=0 rtt=0.3 ms 46 bytes from 192.168.1.2: flags=RA seq=5 ttl=255 id=+2 win=0 rtt=0.4 ms 46 bytes from 192.168.1.2: flags=RA seq=6 ttl=255 id=+2 win=0 rtt=0.4 ms 46 bytes from 192.168.1.2: flags=RA seq=7 ttl=255 id=+3 win=0 rtt=0.3 ms 46 bytes from 192.168.1.2: flags=RA seq=8 ttl=255 id=+2 win=0 rtt=0.4 ms 46 bytes from 192.168.1.2: flags=RA seq=9 ttl=255 id=+2 win=0 rtt=0.3 ms 46 bytes from 192.168.1.2: flags=RA seq=10 ttl=255 id=+1 win=0 rtt=0.4 ms 46 bytes from 192.168.1.2: flags=RA seq=11 ttl=255 id=+1 win=0 rtt=0.4 msSimultanément depuis un autre terminal :
[root@kelly intrusion]$ hping -a bosley -p 22 -S charly eth0 default routing interface selected (according to /proc) HPING charly (eth0 192.168.1.1): S set, 40 headers + 0 data bytes --- charly hping statistic --- 6 packets tramitted, 0 packets received, 100% packet lossIl est normal que kelly ne recoive aucune réponse de charly puisqu'elles sont envoyées à bosley.
Au contraire, lorsque le port cible n'est pas ouvert, charly n'émet aucun paquet. Le champs id ne varie alors pas :
[root@kelly intrusion]$ hping -r bosley .. 46 bytes from 192.168.1.2: flags=RA seq=61 ttl=255 id=+1 win=0 rtt=0.3 ms 46 bytes from 192.168.1.2: flags=RA seq=62 ttl=255 id=+1 win=0 rtt=0.3 ms 46 bytes from 192.168.1.2: flags=RA seq=63 ttl=255 id=+1 win=0 rtt=0.4 ms 46 bytes from 192.168.1.2: flags=RA seq=64 ttl=255 id=+1 win=0 rtt=0.3 ms ..Le port cible (hping -a bosley -p 80 -S charly) est donc fermé. Les logs de charly contiennent une tentative de connexion provenant de bosley.
Pour induire un scan en erreur, il est également possible de laisser tourner un pot de miel (honney pot). Ceci ressemble à un serveur, a le goût d'un serveur, mais ce n'est pas un vrai serveur :
/* fake.c : just a socket bound to a port */ #include <stdlib.h> #include <netinet/in.h> #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <unistd.h> main(int argc,char *argv[]) { int port; //port number struct sockaddr_in sock; //the socket for the server int sd; //socket descriptor if (argc!=2) exit(EXIT_FAILURE); port = htons(atoi(argv[1])); if ( (sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("No socket"); exit(EXIT_FAILURE); } sock.sin_family = AF_INET; sock.sin_port = port; sock.sin_addr.s_addr = INADDR_ANY; if (bind(sd, (struct sockaddr*)&sock, sizeof(struct sockaddr)) == -1) { perror("can't bind"); exit(EXIT_FAILURE); } /* Let's go for LISTEN mode */ if (listen(sd, 2) == -1) { perror("Bad listen"); exit(EXIT_FAILURE); } while(1) sleep(1); }Il suffit alors de le mettre sur le port de son choix :
[root@charly fake]$ gcc -o fake fake.c [root@charly fake]$ ./fake 21 & [2] 3373 [root@charly fake]$ lsof -ni | grep fake fake 3373 root 3u IPv4 201230 TCP *:ftp (LISTEN) [root@charly fake]$ nmap charly Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ ) Interesting ports on charly (192.168.1.1): (The 1538 ports scanned but not shown below are in state: closed) Port State Service 21/tcp open ftp 22/tcp open ssh 6000/tcp open X11Nous lançons notre serveur fake sur le port 21 (ftp). lsof nous révèle bien qu'un serveur écoute sur ce port 21. Toutefois, nmap (scanner de port) se laisse abuser car il tente juste d'ouvrir une connexion sur le port 21. Comme il réussit, il croit que c'est bien un serveur ftp. L'illusion fonctionne avec ce type de scanners réseau car ils ne cherchent pas réellement à se connecter. Toute connexion plus approfondie révélera la supercherie, à moins d'affiner le faux serveur (par exemple en ajoutant les bannières pour simuler le service désiré). Signalons enfin que la commande nc (netcat) produit un résultat similaire (nc -l -p 21 pour écouter sur le port 21).
Ce genre de défense s'appelle pot de miel. Les projets honeynets et honneypots mettent en place des réseaux, ou des machines, destinés à attirer les pirates pour apprendre leurs techniques.
Scanner une machine se résumé toujours à envoyer un paquet de la machine de tests à la machine cible, indépendamment de la méthode employée. Selon les moyens de la machine cible (i.e. la sécurité attendue sur celle-ci), une tentative avec 2 paquets par jour suffit pour détecter le scan. Il faut alors de gros disques et enregistrer tous les paquets qui arrivent sur la machine pour analyser ces données sur plusieurs jours afin de reconstituer le scan.
Chaque OS possède sa propre conception de la gestion des protocoles réseaux. D'une part, certains champs sont laissés à la charge de l'OS (TTL, ToS, Win, DF...). D'autre part, même si les RFC définissent l'essentiel, elles ne sont pas toujours scrupuleusement respectées. De plus, si elles interdisent bien certaines configurations de paquets, elles ne précisent toutefois pas comment y répondre. Par exemple, que faire d'un paquet qui contient le flag 64, non défini ? Chacun a sa solution.
Par exemple, le champs id permet de distinguer facilement les linux 2.2.x des 2.4.x (la commande hping -1 -c 3 émet 3 paquets de type 1 i.e. ICMP) :
[root@charly intrusion]$ uname -a Linux charly 2.4.4 #4 Wed May 23 10:18:08 CEST 2001 i686 unknown [root@charly intrusion]$ hping -1 -c 3 charly 28 bytes from 192.168.1.1: icmp_seq=0 ttl=255 id=0 rtt=0.4 ms 28 bytes from 192.168.1.1: icmp_seq=1 ttl=255 id=0 rt t=0.3 ms 28 bytes from 192.168.1.1: icmp_seq=2 ttl=255 id=0 rtt=0.3 ms ... [root@kelly intrusion]$ uname -a Linux kelly 2.2.19ow1 #2 Mon May 21 12:29:48 CEST 2001 i686 unknown [root@kelly intrusion]$ hping -1 -c 3 kelly 28 bytes from 128.93.24.10: icmp_seq=0 ttl=255 id=4901 rtt=0.3 ms 28 bytes from 128.93.24.10: icmp_seq=1 ttl=255 id=4903 rtt=0.2 ms 28 bytes from 128.93.24.10: icmp_seq=2 ttl=255 id=4906 rtt=0.2 ms
Une méthode plus performante consiste à analyser les réponses de l'OS cible face à certains paquets : le testeur connaît alors le comportement de la pile TCP/IP de la cible, ce qui est suffisant pour identifier l'OS si les t ests sont bien choisis.
nmap (encore et toujours ;) utilise exactement cette démarche lorsque l'option -O (OS identification) est activée. Une base de données contient les réponses types selon les OS. Ainsi, l'empreinte des noyaux Linux 2.4.0 - 2.4.5 correspond à :
# Contributed byLes tests en eux-mêmes sont décrits par les lignes Ti. La lecture de l'article de Fyodor paru dans phrack vous les détaillera (phrack 54, fichier 9/12). Toutefois, dévoilons succinctement la signification de chacun :root@dexter.dynu.com Fingerprint Linux Kernel 2.4.0 - 2.4.5 (X86) TSeq(Class=RI%gcd=<6%SI=<2983C7E&>3DAF6%IPID=Z%TS=100HZ) T1(DF=Y%W=16A0|7FFF%ACK=S++%Flags=AS%Ops=MNNTNW) T2(Resp=N) T3(Resp=Y%DF=Y%W=16A0|7FFF%ACK=S++%Flags=AS%Ops=MNNTNW) T4(DF=Y%W=0%ACK=O%Flags=R%Ops=) T5(DF=Y%W=0%ACK=S++%Flags=AR%Ops=) T6(DF=Y%W=0%ACK=O%Flags=R%Ops=) T7(DF=Y%W=0%ACK=S++%Flags=AR%Ops=) PU(DF=Y|N%TOS=C0|0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E|F%ULEN=134%DAT=E)
[root@bosley intrusion]$ telnet ftp.pigeons.fr Trying 192.168.14.35... Connected to ftp.pigeons.fr Escape character is '^]'. 220 ProFTPD 1.2.0pre9 Server (ProFTPD) [ftp1-1.pigeons.fr]Cependant, certains serveurs autorisent la dissimulation de la bannière. La commande STAT peut nous sauver :
telnet ftp.pigeons2.fr 21 Trying 192.168.96.24... Connected to ftp.pigeons2.fr. Escape character is '^]'. 220 ftp.pigeons2.fr FTP server ready. USER ftp 331 Guest login ok, send your complete e-mail address as password. PASS raynal@home.net 230 Guest login ok, access restrictions apply. STAT 211-ftp.pigeons2.fr FTP server status: Version wu-2.6.1(1) Fri Feb 16 19:32:14 CET 2001 Connected to bosley (192.168.1.2) Logged in anonymously TYPE: ASCII, FORM: Nonprint; STRUcture: File; transfer MODE: Stream No data connection 0 data bytes received in 0 files 0 data bytes transmitted in 0 files 0 data bytes total in 0 files 144 traffic bytes received in 0 transfers 2502 traffic bytes transmitted in 0 transfers 2696 traffic bytes total in 0 transfers 211 End of status
telnet 192.168.1.1 Trying 192.168.1.1... Connected to charly (192.168.1.1). Escape character is '^]'. Red Hat Linux release 7.1 (Seawolf) Kernel 2.4.4 on an i686Si vous tenez vraiment à utiliser telnet, l'option -h ne les affichera qu'une fois le client authentifié.
# /etc/named.conf ... options { directory "/var/named"; version "What are you doing, dude !"; };
[root@bosley intrusion]$ telnet minimum 80 Trying 192.168.1.1... Connected to charly (192.168.1.1). Escape character is '^]'. HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Mon, 11 Jun 2001 19:28:57 GMT Server: Apache/1.3.19 (Unix) (Red-Hat/Linux) mod_ssl/2.8.1 OpenSSL/0.9.6 DAV/1.0.2 PHP/4.0.4pl1 mod_perl/1.24_01 Last-Modified: Thu, 29 Mar 2001 17:53:01 GMT ETag: "731a-b4a-3ac3767d" Accept-Ranges: bytes Content-Length: 2890 Connection: close Content-Type: text/html Connection closed by foreign host.L'ajout de la ligne ServerToken Prod limite l'information au nom du serveur, i.e. Apache.
[root@bosley intrusion]$ telnet charly 113 Connected to charly... VERSION 0 , 0 : X-VERSION : pidentd 3.0.10 for Linux 2.2.5-22smp (Jul 20 2000 15:09:20)Les serveurs qui supportent cette commande dispose également souvent d'une option pour la désactiver.
[root@bosley intrusion]$ finger @charly Login Name Tty Idle Login Time Office Office Phone detoisien Eric Detoisien pts/7 3d Jun 5 09:47 (jil) detoisien Eric Detoisien *pts/10 160d Jun 5 11:08 (kelly) raynal Frederic Raynal tty1 10d May 31 09:57 raynal Frederic Raynal pts/1 3d Jun 5 09:26 (:0) raynal Frederic Raynal pts/3 3d May 31 09:58 (:0) raynal Frederic Raynal pts/11 3d May 31 11:52 (:0) raynal Frederic Raynal pts/7 3d Jun 6 12:08 (:0) raynal Frederic Raynal pts/2 Jun 10 09:35 (bosley) root root pts/4 5d May 31 09:58En outre, il est possible d'enchaîner les requêtes avec la notation finger raynal@hots1@host2.
VERIFY (VRFY) Cette commande demande au récepteur de confirmer que les arguments fournis désignent bien un utilisateur. S'il s'agit d'un nom d'utilisateur, le nom complet de ce dernier (s'il est connu du récepteur) ainsi que la boîte aux lettres totalement qualifiée doivent être renvoyés au requérant. EXPAND (EXPN) Cette commande demande au récepteur de confirmer si l'argument associé identifie une liste de diffusion, et, si c'est le cas, de renvoyer la liste des membres de cette liste. Le nom complet des utilisateurs (s'il est connu) et les adresses de boîtes-aux-lettres entièrement qualifiées seront renvoyées via une réponse multilignes.Sur charly, nous obtenons les informations suivantes :
vrfy root 250 system PRIVILEGED account <root@charly.pigeons.fr> vrfy bin 250 system librarian account <bin@charly.pigeons.fr> vrfy web 250 Web Server manager <web@charly.pigeons.fr> vrfy ftp 550 ftp... User unknown vrfy raynal 250 Frederic Raynal <raynal@charly.pigeons.fr> expn pigeons 050 pigeons... aliased to detoisien, pappy, raynal 050 /home/detoisien/.forward: line 1: forwarding to detoisien@pigeons.fr 050 /home/raynal/.forward: line 1: forwarding to \raynal@charly.pigeons.fr 050 /home/raynal/.forward: line 2: forwarding to frederic.raynal@linuxmag.fr 250-Eric Detoisien <detoisien@pigeons.fr> 250-Frederic Raynal <pappy@charly.pigeons.fr> 250-Frederic Raynal <\raynal@charly.pigeons.fr> 250-Frederic Raynal <frederic.raynal@linuxmag.fr>La plupart des serveurs SMTP permettent maintenant de les désactiver, ce qui est donc recommandé ;)
Le résultat du scan de bosley est le suivant :
7/tcp open echo 22/tcp open ssh 80/tcp open http 113/tcp open auth 664/tcp open unknown 1024/tcp open kdm 1025/tcp open listen 6000/tcp open X11Nous initialisons une connexion sur le port 113 de bosley. Puis, pour chacun des ports ouverts, nous nous connectons avec un simple client telnet (telnet bosley 664). Nous demandons alors à identd de nous donner les informations voulues (la syntaxe des requêtes est <port-sur-serveur>,<port-sur-client>) :
[root@charly intrusion]$ telnet bosley 113 Trying 192.168.1.2... Connected to bosley. Escape character is '^]'. 7,32924 7 , 32924 : USERID : OTHER :root 22,32927 22 , 32927 : USERID : OTHER :root 80,32928 80 , 32928 : ERROR : UNKNOWN-ERROR 113, 32926 113 , 32926 : USERID : OTHER :nobody 664,32930 664 , 32930 : USERID : OTHER :root 1024,32931 1024 , 32931 : USERID : OTHER :rpcuser 1025,32932 1025 , 32932 : USERID : OTHER :root 6000,32933 6000 , 32933 : USERID : OTHER :root Connection closed by foreign host.Nous voyons ici quelques limites à nmap. Tout d'abord, l'erreur obtenue sur le port 80 signifie qu'en fait il n'y a pas de serveur web sur bosley . Ensuite, le kdm qui tourne avec l'identité rpcuser laisse plutôt penser qu'il s'agit en fait d'un programme RPC.
Regardez attentivement les indications de configuration de votre daemon. Il est souvent possible de remplacer le nom de l'utilisateur par son UID, mais d'une manière générale, mieux vaut désactiver ce serveur.
[root@charly intrusion]$ rpcinfo -p bosley program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100007 2 udp 661 ypbind 100007 1 udp 661 ypbind 100007 2 tcp 664 ypbind 100007 1 tcp 664 ypbind 100024 1 udp 1024 status 100024 1 tcp 1024 status 100011 1 udp 855 rquotad 100011 2 udp 855 rquotad 100005 1 udp 1025 mountd 100005 1 tcp 1025 mountd 100005 2 udp 1025 mountd 100005 2 tcp 1025 mountd 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100021 1 udp 1026 nlockmgr 100021 3 udp 1026 nlockmgr 100021 4 udp 1026 nlockmgr 390113 1 tcp 7937rpcinfo se connecte au port 111 de la machine cible et lui demande ce qui fonctionne dessus. portmap n'a pas prévu de mécanismes de contrôle. Il est donc conseillé de bloquer l'accès à se serveur via le pare-feu et le tcp-wrapper. Dans ce cas, toutes les requêtes fondées sur les RPC (comme les 2 suivantes) échoueront.
Cependant, l'authentification de RPCs repose sur l'adresse IP du client.
Sur un réseau local, il est très facile d'usurper une adresse
et d'accéder ainsi à tous les services RPCs disponibles.
[raynal@kelly intrusion]$ cat /etc/yp.conf domain charly server charly [raynal@kelly intrusion]$ ypwhich #quel est mon serveur NIS ? charly #bingo, il répond ;) [raynal@kelly intrusion]$ ypcat -k passwd.byname ... fguest fguest:B4wLh7jxO1eZA:5555:5555:Compte temporaire:/home/fguest:/bin/bash raynal raynal:YP5.ojuxdA/6.:10943:21196:Frederic Raynal:/home/raynal:/bin/bash ... [raynal@kelly intrusion]$ ypcat -k netgroup angels (charly,,) (bosley,,) (kelly,,) (jil,,) (sabrina,,)
[raynal@kelly intrusion]$ showmount -e charly /var/spool/mail angels /home/web/www (everyone) /home angels /opt/download jilNous retrouvons ici le netgroup angels découvert précédemment dans la base NIS. Les répertoires exportés à tout le monde (signalés par (everyone)) sont alors accessibles sur la machine tests par mount -t nfs <cible>:<répertoire> /mnt/cible.
[raynal@kelly intrusion]$ rusers -l charly raynal charly:tty1 Jun 16 18:11 :51 raynal charly:pts/ Jun 16 18:11 (:0) raynal charly:pts/ Jun 16 18:11 :19 (:0) raynal charly:pts/ Jun 16 18:11 :06 (:0) raynal charly:pts/ Jun 16 18:11 :20 (:0) raynal charly:pts/ Jun 16 18:59 :03 (bosley)On apprend ainsi les dates de connexion et leur provenance.
[raynal@kelly intrusion]$ rup -d charly charly 19:15pm up 1:05, load average: 0.09 0.14 0.13
Received: from smtp1.pigeons.fr ([xxx.xxx.xxx.xxx]) by front.testeur.fr (8.9.3/No_Relay+No_Spam_MGC990224) with ESMTP id OAA00632 for <detoisien@testeur.fr>; Wed, 18 Apr 2001 14:18:11 +0200 (MET DST) Received: from bpigeon ([10.33.11.153]) by smtp1.pigeons.fr (Netscape Messaging Server 3.6) with SMTP id AAA3A01 for <detoisien@testeur.fr>; Wed, 18 Apr 2001 14:14:50 +0200 Message-ID: <004401c0c801$319eff40$990b210a@sit.fr> From: "Bernard Pigeon" bernard.pigeon@pigeons.fr To: detoisien@testeur.fr Subject: Test Date: Wed, 18 Apr 2001 14:15:01 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.00.2919.6600 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600Nous récupérons le nom et l'adresse d'une machine interne, la version du serveur SMTP ainsi que la version du client SMTP utilisé. Il est fréquent d'envoyer un mail à un adresse inexistante. Ainsi, le serveur SMTP de la cible renvoie automatiquement une réponse avec la plupart des informations
[root@testeur -> ~]$ perl whisker.pl -h www.pigeons.fr -i -- whisker / v1.3.0a / rain forest puppy / ADM / wiretrip -- = - = - = - = - = - = = Host: www.pigeons.fr - Directory index: / = Server: Microsoft-IIS/4.0 - Appending ::, %2E, or 0x81 to URLs may give script source - Requesting a bogus .pl may give physical path like .idc bug does - if perl is installed - Security settings on directories can be bypassed if you use 8.3 - Warning: Syntax Error: names - http://www.securityfocus.com/templates/archive.pike?list=1 - &date=1999-08-15&msg=37B5D87E.D6600553@urban-a.net - Content-Location: http://10.51.23.246/cfdocs/index.htm + 200 OK: GET /cfdocs/cfmlsyntaxcheck.cfm + 200 OK: GET /cfide/Administrator/startstop.html - can start/stop the server...w00h00 + 200 OK: HEAD /iisadmpwd/aexp4b.htr - gives domain/system name + 200 OK: HEAD /msadc/msadcs.dll - RDS. See RDS advisory, RDP9902 - Need I remind you, do not abuse, kids?Nous avons une liste de scripts potentiellement vulnérables qui pourront exploités ultérieurement.
Un logiciel (Toneloc, THC-Scan...) appelle chacun des numéros de téléphone et détecte s'il s'agit d'une VMB (Voice Mail Box), d'un fax, d'une personne, d'un type de sonnerie (occupé, pas de réponse...) ou d'une porteuse c'est à dire un modem (ou plus généralement un Remote Access) qui répond. L'attaque suivant cette découverte se focalise sur la découverte d'un login/password permettant d'accéder à la machine derrière le modem.
Dans le cas où de nombreuses machines sont à tester, nous pouvons utiliser un scanner de vulnérabilités (comme Nessus). Il s'agit d'un logiciel qui automatise la découverte de vulnérabilités. Celles-ci sont maintenues au sein d'une base qui peut être mise à jour on-line. Ce type d'application est très utile mais a ses limites. En effet, un tel scanner peut remonter de fausses alertes ou, à l'inverse, ne pas détecter certaines vulnérabilités. Il pourra, néanmoins, compléter notre liste de failles qui nous sert dans la dernière étape.