Chrooter apache
Matériel
Ajout disque dur
Ajout carte
Audit des disques durs
Gestion des peripheriques
Disquette d'installation
Ajout d'un scanner
Ajout d'une imprimante
Astuces
Astuces sous Linux
Réseau
Configuration reseau
Dns
Serveur cvs
Proxy squid 
Installation serveur ftp
Installation qmail 
Installation serveur courrier sous debian
Outil TCP/IP 
Le serveur samba
Connexion a distance securisee
Client/serveur vnc
Configurer apache
Dyndns
Installer un LAMP sous mandriva
Sécurité
Chiffrer un fichier/dossier
Securiser son poste
Mur pare feu pas a pas
Authentification ht-access
Surveillance de serveur CACTI
Snort
Snort-inline
Securiser Apache avec mod_security
Filtrage squid/squidguard/dansguardian
Auditer son site web
Sécuriser son linux
Installer un Lamp avec ssl
Contrer les scans de ports
Traitement anti-spam
Installer/Utiliser tripwire
Faire des sauvegardes incrémentales
Rsync
Nessus
Divers
Elisa, le multimédia facile
Utilisation de lilo
Les commandes Linux
Le multi-tache
Le crontab
Exploration de la configuration
Quotas
Messagerie
Installer une application
Debugger ses applications
Le format RPM
Mise a jour du noyau
Qemu
Tour d'horizon des principaux p2p
Récupération du système
Bips d'un pc
Astuces windows
Table Ascii
Lamerland
Conversion de fichiers musicaux
Compiler ses rpms
Graver en ligne de commande
Graver un fichier avi pour un dvd de salon
Récupérer des fichiers effacés
Gardez le contact avec Emesene
Liens
Notes php
hakin9
Secureroot.com
Hackerthreads.org
Defcon
Hackerlounge
Les derniers exploits
Tous les codes sources
Securite sous Linux
Les logiciels libres quotidiens
Ezine divers
Madchat
Textes divers
Archives
Tchat gratuit
 
Traductions LG
Toutes les traductions
Traductions Phrack
Toutes les traductions

Il y a actuellement 4 visiteurs connectés sur le site !

Google

Les tests d'intrusion
Les tests d'intrusion

 

Introduction
La guerre de l'information
Les requetes indirectes
Interrogation des bases whois
News Group
Moteur de recherche
Social Engineering
Divers
Les requetes directes
Interrogation des DNS
Utilisation de ping
Utilisation de traceroute
Port Scan
OS Fingerprinting
Bannieres
Informations relatives à des protocoles specifiques
Envoi de mail
Scan CGI
War Dialing
L'utilisation des informations
La recherche de vulnerabilites
L'exploitation des vulnerabilites
Conclusion

 

Introduction

Une fois le reseau installé et configuré celui-ci ne va cesser d'evoluer. De nouveaux systemes viennent s'y ajouter, de vieilles et fideles machines disparaissent, bref, tout change tout le temps. Les utilisateurs peuvent egalement agir dans le dos de l'administrateur et apporter leurs propres modifications au reseau.
Pour verifier l'etat de son reseau, un administrateur doit se comporter comme un pirate et tenter de penetrer ses propres defenses. Cet article presente la demarche à suivre.
Il est important de tester la securite de son propre reseau en se mettant à la place du pirate pour decouvrir d'eventuelles failles. Ces tests se decomposent en plusieurs etapes :

  • phase d'approche : recuperation d'informations sur le reseau cible ;

  • phase d'analyse : determination, à l'aide des resultats obtenus à l'etape precedente, des vulnerabilites potentielles et des outils necessaires à leur exploitation ;

  • phase d'attaques : passage à l'acte.

.


Avant d'entreprendre la derniere etape, l'administrateur du reseau doit impetativement vous avoir donne son consentement, et pas uniquement oral. Le chapitre III du code penal traite des atteintes aux systemes de traitement automatise de donnees. On y trouve 7 articles, dont voici les trois premiers :
* Article 323-1 : Le fait d'acceder ou de se maintenir, frauduleusement, dans tout ou partie d'un systeme de traitement automatise de donnees est puni d'un an d'emprisonnement et de 100 000 F d'amende.
* Lorsqu'il en est reulte soit la suppression ou la modification de donnees contenues dans le systeme, soit une altetation du fonctionnement de ce systeme, la peine est de deux ans d'emprisonnement et de 200 000 F d'amende. Article 323-2 : Le fait d'entraver ou de fausser le fonctionnement d'un systeme de traitement automatisede donnees est puni de trois ans d'emprisonnement et de 300 000 F d'amende.
* Article 323-3 : Le fait d'introduire frauduleusement des donnees dans un systeme de traitement automatiseou de supprimer ou de modifier frauduleusement les donnees qu'il contient est puni de trois ans d'emprisonnement et de 300 000 F d'amende.
Le 323-1 concerne l'intrusion en elle-meme. Lorsque que, de plus, elle induit des altetations des donnees du systeme, la peine est majoree. Le 323-2 porte sur des nuisances faites au reseau (virus, mail bombing, DoS, ...). Enfin, le 323-3 punit les modifications faites volontairement aux donnees presentes sur le reseaux (comprendre par "donnees" aussi bien les meilleurs scores à xbill que les fichiers de configuration du reseau).
Mettre à l'epreuve la securite d'un reseau signifie en general "resistance aux menaces externes". Cependant, de nombreuses opetations malveillantes sont facilement menees depuis une machine du reseau lui-meme (virus, backdoor, sniffer...). Ces sources de danger sont rarement prises en consideration lors de l'evaluation du reseau. De meme, la plupart des attaques presentees dans l'article d'eric Detoisien doivent egalement etre evaluees (spoofing, (D)Dos...).
Des scenarii varies sont envisageables en guise de tests d'intrusion :
* le testeur ne connait rien du reseau cible et ne dispose d'aucun acces à celui-ci, nous sommes dans le cas d'un test d'intrusion externe ;
* le testeur dispose de privileges minimaux sur le reseau cible (compte utilisateur quelconque). Il cherche à accroitre ses privileges depuis l'interieur meme du reseau (ecrans de veille non active, sniffing, exploitation de vulnerabilites locales..). Dans ce cas, il s'agit d'un test d'intrusion interne.
Les resultats obtenus doivent permettre de mieux cerner, afin de les corriger, les problemes potentiels ou existants sur le reseau cible. Par exemple, il faut evaluer le comportement de l'administrateur face aux tentatives d'intrusion ou à 'intrusion elle-meme si elle reussit (sera-t-elle detectee ? Au bout de combien de temps ? ...)

La guerre de l'information

Nous nous placons donc dans la peau d'une personne qui cherche à recolter un maximum de renseignements sur un reseau cible. Cette collecte se divise en deux etapes. Dans un premier temps, nous allons recuperer toutes les informations disponibles sans acceder directement aux ressources de la cible. Ensuite, lorsque nous commencerons à avoir une idee plus precise de ce dont il retourne, nous acceserons directement aux moyens fournis par la cible.

Les requetes indirectes

Dans cette categorie, nous placons tous les moyens qui permettent d'en apprendre plus sur la cible, mais sans la contacter directement. Ces informations sont disponibles, il suffit de savoir o chercher.

Interrogation des bases whois 

Les serveurs whois, aussi appele nicname (port 43), permettent d'acceser à la base de donnees des renseignements fournis lors de l'enregistrement d'un nom de domaine :
* des informations administratives comme des noms, telephones et adresses pour differents contacts (admin-c, tech-c, zone-c, bill-c...) ;
* des informations techniques telles que le(s) nom(s) du(des) DNS(s), les adresses emails des responsables evoques ci-dessus, les ensembles d'adresses IP alloue à la cible...
Cette base de donnees, autrefois gere par InterNIC et maintenant par Network Solutions, reste simplement accessible à tous car elle permet de verifier si un nom de domaine existe deja.
Les societes qui enregistrent les noms de domaine offrent egalement un service d'interrogation en ligne (voir le tableau 1). Sous Unix, il existe egalement la commande whois.

Tab. 1 : bases whois AFNIC

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 informations 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: FRNIC

Nous apprenons que la societe Pigeon et Cie est en fait heberge par Heberge Telecom. Les adresses emails correspondent sans doute à des alias, mais elles nous fournissent egalement une piste sur l'existence de comptes sur des machines : si les mots de passe correspondant sont faibles (comme les prenoms, dates de naissance...), cette information peut se reveler utile.
Toujours via les bases whois des recherches plus poussees à partir d'une adresse IP appartenant à la societe Pigeon et Cie nous amement à decouvrir les classes d'adresses IP qui lui ont ete allouees. Pour cela, nous utilisons la base whois de RIPE qui se retee etre 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: RIPE

En outre, des recherches croisees sur les noms recuperes peuvent nous donner des informations supplementaires sur la cible (decouvrir de nouvelles adresses IP ou de nouveaux serveurs DNS).
Le bilan des recherches via les bases whois est tres concluant puisque nous avons recupere:

   1. les serveurs DNS ayant autorité sur le domaine pigeons.fr ;
   2. les coordonnees des contacts administratifs et techniques liees à Pigeon et Cie  ;
   3. les classes d'adresses IP allouees à la societe Pigeon et Cie.

Nous pouvons tout de meme continuer à glaner des informations sur Internet.

News Group

Souvent les administrateurs ou les developpeurs se retrouvent face à des problemes. Pour les resoudre, ils utilisent les NewsGroup pour poser des questions. Malheureusement, ils donnent souvent beaucoup trop d'informations sur leur systeme d'information (technologie, version des applications utilisées, fragment de code...). Pour faire des recherches, nous pouvons demander à groups.google.com avec comme critere de recherche @pigeons.fr par exemple. Ce moteur, tres performant, remonte alors tous les messages postes par des personnes de la societe Pigeon et Cie. Outre les informations techniques, nous pouvons obtenir des renseignements sur les gouts personnels de certaines personnes de la societes Ces indications servirons lors de recherche de mots de passe ou pour ameliorer une eventuelle tentative Social Engineering (expliquee ulterieurement).

Moteur de recherche

meme principe que pour les NewsGroup, nous essayons de recuperer d'autres donnees sur le systeme d'information cible en utilisant un moteur de recherche. des lors, les mots cles employes ne seront limites que par notre imagination. La encore, www.google.com est tres performant surtout grace à son cache. neanmoins, des meta-moteurs comme www.dogpile.com donnent des resultats pertinents en multipliant les recherches sur plusieurs moteurs.

Social engineering

Nous sortons un peu des requetes indirectes puisque cette technique implique un contact direct avec la cible. neanmoins, cette demarche n'est toujours pas technique c'est pourquoi elle ne fait pas partie des requetes directes. Le social engineering se pratique pour obtenir des informations confidentielles (mot de passe, renseignements techniques, numero de tetehone, adresse IP...) des utilisateurs du systeme d'information cible. Tous les moyens possibles et imaginables sont à disposition (tetehone, mail, fax...). Avec une usurpation d'identite et une exploitation habile des informations recoltes au prealable sur les personnes et la societes la credibilite est au rendez-vous ainsi que de precieuses donnees.

Divers

Les requetes indirectes sont quasiment illimitees, un pirate a le temps pour lui, il ira jetter un oeil sur le site de la societes ou de ces filiales. D'autres donnees sur les societes et sur les marques se retrouvent sur des sites comme www.societe.com ou celui des pages jaunes (les numeros de tetehone ou des noms de personnes). Les resultats dependent evidemment de l'inventivite du pirate.

Les requetes indirectes

Les informations recuperees jusqu'ici ne proviennent pas directement de la cible. Nous allons maintenant lancer quelques sondes dans sa direction et voir tout ce que nous pouvons recuperer.
Du point de vue de la cible, nous verrons egalement comment dejouer certaine interrogation. A la difference des etapes precedentes, la cible contrese maintenant les donnees que le testeur recherche. C'est donc à elle de faire en sorte de les limiter au minimum.


Interrogation des dns

La requete whois nous montre les DNSs utilises. Que peuvent nous dire ces derniers ? Pour obtenir des informations de ces serveurs, il suffit de les interroger dans un langage qu'ils comprennent à savoir le protocole DNS. Plusieurs requetes sont à notre disposition :

* recuperation de tous les serveurs DNS ayant autorite sur le domaine
* recuperation de tous les serveurs DNS ayant autorite sur le domaine
* recuperation de tous les serveurs DNS ayant autorite sur le domaine

[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.65

* Nous avons donc la confirmation des serveurs DNS utilises ainsi que leur adresse IP. recuperation des serveurs de messagerie (Mail eXchanger) du domaine

[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

* Verification des deux requetes precedentes

[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.35

desormais nous avons toutes les informations que nous pouvions recuperer facilement et à tous les coups. Explorons plus avant le domaine pigeons.fr en recherchant des informations sur les machines presentes sur le reseau :

Le transfert de zone renvoie toute la configuration du serveur DNS

[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.246

La 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 meme opetation sur les autres serveurs DNS car souvent le serveur principal est bien configuré contrairement aux autres. D'autres tests sont interessants quand le transfert de zone est impossible. Par exemple, nous pouvons regarder s'il est possible de recuperer l'adressage interne.

[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.3

Nous avons pris ici une autre cible puisque le transfert de zone ne nous a montres 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 gete par le serveur DNS ns1.pigeons2.fr. Il suffit donc de tester toutes les machines du reseau 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.fr

Il ne reste plus qu'a ecrire un petit script (en Perl par exemple) qui reitere cette commande pour les adresses de 192.168.0.1 à 192.168.0.254. Enfin, dans le cas d'un Bind uniquement, nous pouvons obtenir sa version, ce qui est tres interessant quand on connait le long passé de ce serveur en terme d'exploits à distance.

[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 eventuelle vulnerabilite sur cette version (un buffer overflow par exemple).

Utilisation de ping

Les requetes indirectes (whois) et l'interrogation des DNS nous ont permis de recuperer des adresses IP et des classes d'adresses IP appartenant à la cible. En effectuant, un ping sur chacune de ces adresses IP, nous allons savoir lesquelles sont accessibles. Il faut neanmoins prendre en compte le fait que la presence d'un firewall peut empecher la machine de repondre au ping. Le scan de port solutionnera ce probleme en desectant la presence de la machine dans le cas ou elle a un port ouvert. Nmap effectue tres bien cette tache :

[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

Utilisation de traceroute

Le but du jeu est d'obtenir l'adresse IP d'un routeur d'acces aux machines cibles. Pour cela, il suffit de faire un traceroute en direction d'une machine du reseau cible :

[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 ms

La machine juste avant la destination est un routeur.

Port Scan

Il existe une grande varietes de methodes pour scanner, dont la description depasse largement le cadre de cet article. Le principe general de toute methode de scan est d'envoyer un paquet (TCP, UDP, ICMP...) sur la machine cible et de voir ce qui se passe. Selon la methode employee, le testeur determine l'etat du port (ouvert, ferme, filtre.
Le but du scan est similaire à celui de l'eclaireur. Le testeur (ou le pirate) desermine ainsi le role des machines, les services accessibles, les protocoles supportes... A la fin de l'opetation, les informations suivantes sont obtenues :

    * les adresses IP des machines du reseau ;
    * la liste des services disponibles ;
    * la liste des differents protocoles supportes (TCP, UDP, ICMP...)
    * pour un maximum de machines, l'etat de chacun de ses ports.

Pour un administrateur, cette etape devoile les acces à ses machines. Il doit egalement installer des outils lui permettant de detecter les scans qu'il n'a pas lui-meme dilligentes (iplog ou portsentry par exemple).
Il existe differentes solutions pour echapper à ce genre de detecteurs, en spoofant des adresses IP ou en distribuant le scan depuis plusieurs machines.
Par exemple, lorsque l'adresse source du paquet est spoofee, la machine de test reste inconnue de la machine cible, bien que celle-ci sache alors qu'elle a ete scannee :

    * kelly (192.168.1.3) la machine de tests
    * bosley (192.168.1.2) une machine calme (i.e. qui ne genere pas beaucoup de trafic) ;
    * charly (192.168.1.1) la machine cible.

Pour detecter si un port TCP laisse passer les paquets, kelly envoie regulierement des paquets à bosley. Si bosley genere peu de trafic sur le reseau, le champs id de ses paquets varie peu. Dans le meme temps, kelly envoie à charly des paquets TCP avec le drapeau SYN active (comme pour une demande de connexion normale), mais en mettant comme adresse source celle de bosley. Ainsi, charly repond à bosley avec des paquets SYN-ACK si le port est ouvert. bosley, qui n'a rien demande envoie un paquet RST à charly pour couper la connexion. Du coup, le champ id augmente puisque deux paquets sont emis (le RST et la reponse à kelly :

[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 ms

Simultanement 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 loss

Il est normal que kelly ne recoive aucune reponse de charly puisqu'elles sont envoyees à bosley.
Au contraire, lorsque le port cible n'est pas ouvert, charly n'emet 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 ferme. Les logs de charly contiennent une tentative de connexion provenant de bosley.
Pour induire un scan en erreur, il est egalement possible de laisser tourner un pot de miel (honney pot). Ceci ressemble à un serveur, a le gout d'un serveur, mais ce n'est pas un vrai serveur :

/* fake.c : just a socket bound to a port */
#include
#include
#include
#include
#include
#include

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 X11

Nous lancons notre serveur fake sur le port 21 (ftp). lsof nous indique bien qu'un serveur ecoute 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 reussit, il croit que c'est bien un serveur ftp. L'illusion fonctionne avec ce type de scanners reseau car ils ne cherchent pas reellement à se connecter. Toute connexion plus approfondie revelera la supercherie, à moins d'affiner le faux serveur (par exemple en ajoutant les bannieres pour simuler le service desire. Signalons enfin que la commande nc (netcat) produit un resultat similaire (nc -l -p 21 pour ecouter sur le port 21).
Ce genre de defense s'appelle pot de miel. Les projets honeynets et honneypots mettent en place des reseaux, ou des machines, destinees à attirer les pirates pour apprendre leurs techniques.
Scanner une machine se resume toujours à envoyer un paquet de la machine de tests à la machine cible, independamment de la methode employee. Selon les moyens de la machine cible (i.e. la securite attendue sur celle-ci), une tentative avec 2 paquets par jour suffit pour detecter le scan. Il faut alors de gros disques et enregistrer tous les paquets qui arrivent sur la machine pour analyser ces donnees sur plusieurs jours afin de reconstituer le scan.

OS Fingerprinting

grace au scan du reseau cible, nous connaissons maintenant les machines actives. Nous affinons notre connaissance en determinant leur systeme d'exploitation. Cette connaissance nous permettra, lorsque nous aurons egalement desermine la version des daemons qui attendent sur les ports de la machine cible, de rechercher les exploits necessaires à nos tests d'intrusion.
Chaque OS possede sa propre conception de la gestion des protocoles reseaux. D'une part, certains champs sont laisses à la charge de l'OS (TTL, ToS, Win, DF...). D'autre part, meme si les RFC definissent l'essentiel, elles ne sont pas toujours scrupuleusement respectees. De plus, si elles interdisent bien certaines configurations de paquets, elles ne predisent toutefois pas comment y repondre. Par exemple, que faire d'un paquet qui contient le flag 64, non defini ? Chacun a sa solution.
valeurs par defaut dans les paquets
En recuperant des paquets emis par la cible, nous decouvrons la valeur de parametres :

    * le champs TTL (time to live) des paquets sortants ;
    * la taille de la fenetre (window) ;
    * le bit DF (Don't Fragment) ;
    * le champs TOS (Type Of Service).
    * ...

Selon les OS, tous ces parametres changent. Une base de donnees contenant leur valeur par defaut facilite alors l'identification. Il suffit ainsi d'envoyer des paquets differents pour tester les reponses puis de comparer ces dernieres à une base de signatures pour identifier l'OS.
Par exemple, le champs id permet de distinguer facilement les linux 2.2.x des 2.4.x (la commande hping -1 -c 3 emet 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

La pile TCP/IP Cependant, cette methode n'est pas tres fiable car les OS permettent souvent de modifier certaines de ces valeurs (avec sysctl sous Linux ou dans la base de registres pour Windows).
Une methode plus performante consiste à analyser les reponses de l'OS cible face à certains paquets : le testeur connait alors le comportement de la pile TCP/IP de la cible, ce qui est suffisant pour identifier l'OS si les tests sont bien choisis.
nmap (encore et toujours ;) utilise exactement cette demarche lorsque l'option -O (OS identification) est active. Une base de donnees contient les reponses types selon les OS. Ainsi, l'empreinte des noyaux Linux 2.4.0 - 2.4.5 correspond à :

# Contributed by 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)

Les tests en eux-memes sont desrits par les lignes Ti. La lecture de l'article de Fyodor paru dans phrack vous les detaillera (phrack 54, fichier 9/12). Toutefois, devoilons succinctement la signification de chacun :

* TSeq : decrit la nature de l'incrementation des numeros de sequence ;
* T1 : paquet TCP avec le flag SYN|64 (comme 64 ne correspond à aucune valeur de flag, le paquet est "syn-bogue) vers un port ouvert ;
* T2 : paquet TCP NULL, i.e. ne contenant aucune option ni aucun flag, vers un port ouvert ;
* T3 : paquet TCP avec les flags SYN|FIN|URG|PSH vers un port ouvert ;
* T4 : paquet TCP avec le flag ACK vers un port ouvert ;
* T5 : paquet TCP avec le flag SYN vers un port ferme;
* T6 : paquet TCP avec le flag ACK vers un port ferme;
* T7 : paquet TCP avec le flag FIN|PSH|URG vers un port ferme;
* PU : paquet UDP envoyeteun port fermeafin de recuperer un paquet ICMP "port unreachable".
S'il est souvent possible de modifier les valeurs de certains parametres, modifier le comportement complet de la pile est autrement difficile, voire impossible avec certains OS dont les sources ne sont pas disponibles.

Bannieres

L'objectif est simple : connaitre la version de l'application utilisee pour un service specifique. La plupart du temps, un simple telnet sur le port desire nous donne le renseignement. Signalons les quelques services qui ne delivrent pas cette information : finger (port 79), exec (port 512), login (port 513), printer (port 515).

    * FTP (port 21)

      Souvent la version est devoilee des le login :

      [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 banniere. 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 (port 23):

Avant meme que la connexion soit validee par le mot de passe, le serveur renvoie les informations recherchees :


      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 i686

Si vous tenez vraiment à utiliser telnet, l'option -h ne les affichera qu'une fois le client authentifie
* DNS (port 53) :
Nous avons vu qu'il etait assez simple de recuperer la version d'un serveur DNS. Il est cependant possible de fausser cette information en modifiant le champs options dans /etc/named.conf :

      # /etc/named.conf
      ...
      options {
                 directory "/var/named";
                 version "What are you doing, dude !";
              };

* HTTP (port 80) :
La commande HEAD ne renvoie que les meta-informations constituant l'en-tete HTTP :

[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.
# portmap (port 111) et les RPCs :
Comme nous le detaillons dans la suite de cet article, la commande rpcinfo fournit toutes les versions des services RPCs qui tournent sur la cible.
# identd (port 113) :
Certaines versions supportent une extension à la RFC 1413 : la commande VERSION :

      [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 egalement souvent d'une option pour la desactiver.

Informations relatives à des protocoles specifiques

Nous savons maintenant ce qui tourne sur chacun des systemes (OS, serveurs, version des serveurs...). Nous continuons notre quête de renseignements car de nombreux serveurs en desoilent encore beaucoup sur le reseau et ses utilisateurs :

    * finger fournit des informations sur les utilisateurs du systeme :

      [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:58

En outre, il est possible d'enchainer les requetes avec la notation finger raynal@hots1@host2. * le serveur de mails : le protocole SMTP (RFC 821) desinit les commandes VRFY et EXPN :
VERIFY (VRFY)
Cette commande demande au recepteur de confirmer que les arguments fournis designent bien un utilisateur. S'il s'agit d'un nom d'utilisateur, le nom complet de ce dernier (s'il est connu du recepteur) ainsi que la boite aux lettres totalement qualifiee doivent etre renvoye au requerant.
EXPAND (EXPN)
Cette commande demande au recepteur de confirmer si l'argument associe 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 boites-aux-lettres entierement qualifiees seront renvoyees via une reponse multilignes.
Sur charly, nous obtenons les informations suivantes :

vrfy root
250 system PRIVILEGED account
vrfy bin
250 system librarian account
vrfy web
250 Web Server manager
vrfy ftp
550 ftp... User unknown
vrfy raynal
250 Frederic Raynal
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
250-Frederic Raynal
250-Frederic Raynal <\raynal@charly.pigeons.fr>
250-Frederic Raynal

La plupart des serveurs SMTP permettent maintenant de les desactiver, ce qui est donc recommandes;) * identd (anciennement appele auth, port 113 - RFC 1413) fournit des informations sur l'identite des utilisateurs du systeme. Il devoile le detenteur d'une connexion, ce qui necessite de connaitre les ports cible et destination. Pour le port cible, comme nous sommes sur notre machine, la commande netstat -A inet nous le revele. Quant au port destination, nous avons decide de scanne la machine cible ! Il ne nous reste plus qu'à nous connecter à chacun des ports ouverts puis de demander à identd qui est en charge de cette connexion.

      Le resultat 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        X11                     

Nous 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 requetes est ,) :

[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'identite rpcuser laisse plutot 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 maniere generale, mieux vaut desactiver ce serveur. * portmap (sunrpc port 111) est le serveur essentiel au bon fonctionnement des services qui reposent sur les RPCs (NIS, NFS, rusers, rstat...). La commande rpcinfo repere ce qui tourne sur une machine :

[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 7937

rpcinfo se connecte au port 111 de la machine cible et lui demande ce qui fonctionne dessus. portmap n'a pas prevu de mecanismes de contre-feu. Il est donc conseille de bloquer l'acces à ce serveur via le pare-feu et le tcp-wrapper. Dans ce cas, toutes les requetes fondees sur les RPC (comme les 2 suivantes) echoueront.
Cependant, l'authentification de RPCs repose sur l'adresse IP du client. Sur un reseau local, il est tres facile d'usurper une adresse et d'acceder ainsi à tous les services RPCs disponibles.
* Un serveur NIS contraint les clients autorisés à l'interroger par un mecanisme appele securenets. Par desaut, tout le monde peut se connecter au serveur. N'importe quelle machine peut alors se declarer client de telle base NIS. Une fois connu le nom de la base NIS (il s'agit souvent du meme nom que le serveur), nous declarons notre machine de tests (kelly - 192.168.1.3) comme cliente du serveur NIS (charly - 192.168.1.1) :

      [raynal@kelly intrusion]$ cat /etc/yp.conf
      domain charly server charly
      [raynal@kelly intrusion]$  ypwhich        #quel est mon serveur NIS ?
      charly                                    #bingo, il repond ;)
      [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,,)

* Lorsque la machine cible exporte des repertoires par NFS, il est parfois possible de les connaitre en utilisant la commande showmount :

      [raynal@kelly intrusion]$ showmount -e charly
      /var/spool/mail  angels
      /home/web/www    (everyone)
      /home            angels
      /opt/download    jil

* Nous retrouvons ici le netgroup angels decouvert precedemment dans la base NIS. Les repertoires exportes à tout le monde (signales par (everyone)) sont alors accessibles sur la machine tests par mount -t nfs : /mnt/cible. Toujours parmi les RPC, voici quelques serveurs moins courants : ou ruserd refere les utilisateurs connectes sur une machine :

            [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)

o On apprend ainsi les dates de connexion et leur provenance. rstatd genere des statistiques sur le systeme, lues par la commande rup :
[raynal@kelly intrusion]$ rup -d charly
charly 19:15pm up 1:05, load average: 0.09 0.14 0.13

Envoi de mail

L'en-tete d'un mail fourmille d'informations pertinentes comme la version du serveur smtp utilise voir l'adressage interne. Nous obtenons obtient le chemin emprunte par le mail.

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 ; 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 ; 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: 8bi
t 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.6600

Nous recuperons le nom et l'adresse d'une machine interne, la version du serveur SMTP ainsi que la version du client SMTP utilise. Il est frequent d'envoyer un mail à une adresse inexistante. Ainsi, le serveur SMTP de la cible renvoie automatiquement une reponse avec la plupart des informations

Scan CGI

L'installation par defaut d'un serveur Web et/ou une mauvaise configuration font que de nombreux scripts peuvent etre present sur un serveur Web. Un nombre important de ces scripts sont la source de failles. Un scanner de CGI permet de tester la presence de ces scripts sur un serveur cible. Le pirate pourra ainsi les utiliser pour attaquer la machine cible. Le scanner le plus connu est whisker.

[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 vulnerables qui pourront être exploites ulterieurement.

War Dialing

Le War Dialing est une technique un peu à part. En effet, cela consiste à scanner tout un ensemble de numeros de telephone.
Un logiciel (Toneloc, THC-Scan...) appelle chacun des numeros de tetehone et desecte s'il s'agit d'une VMB (Voice Mail Box), d'un fax, d'une personne, d'un type de sonnerie (occupé pas de reponse...) ou d'une porteuse c'est à dire un modem (ou plus generalement un Remote Access) qui repond. L'attaque suivant cette decouverte se focalise sur la decouverte d'un login/password permettant d'acceder à la machine derriere le modem.

L'utilisation des informations

Apres avoir recupere tous ces renseignements sur le systeme d'information cible, nous pouvons planifier la suite du test d'intrusion.

La recherche de vulnerabilites

Cette etape utilise directement les donnees precedentes. L'objectif de la phase d'analyse est de trouver les vulnerabilites au niveau du reseau, des systemes, et des applications de la cible. Ces failles se trouvent dans des bases publiques (comme bugtraq qui est la liste la plus connue) et sur des sites de groupe de pirates. Cette recherche aboutit à l'etablissement d'une liste des vulnerabilites utilisables contre les machines de la cible.
Dans le cas ou de nombreuses machines sont à tester, nous pouvons utiliser un scanner de vulnerabilites (comme Nessus). Il s'agit d'un logiciel qui automatise la desouverte de vulnerabilites. Celles-ci sont maintenues au sein d'une base qui peut etre mise à jour on-line. Ce type d'application est tres utile mais a ses limites. En effet, un tel scanner peut remonter de fausses alertes ou, à l'inverse, ne pas detecter certaines vulnerabilites. Il pourra, neanmoins, completer notre liste de failles qui nous sert dans la derniere etape.

L'exploitation des vulnerabilites

Ces failles sont exploitees en utilisant des outils disponibles sur Internet ou deseloppes pour l'occasion (en C ou en Perl la plupart du temps). Cette derniere phase pourra aboutir à la compromission d'une machine. L'exploitation est tres specifique et depend evidemment des vulnerabilites decouvertes.

Conclusion

Cet article s'est focalise sur la recherche d'informations sur la cible dans l'objectif d'un test d'intrusion externe (via Internet). Cette phase d'approche est sensiblement la meme à chaque test contrairement à l'attaque en elle-meme. En ce qui concerne les tests d'intrusion internes, la met�hodologie reste identique mais le nombre de vulnerabilites est souvent plus important et les techniques d'attaque plus nombreuses.
Eric Detoisien - ede@global-secure.fr
Freteic Raynal - pappy@users.sourceforge.net

Sources de l'article


 

Le Blog
Le blog
Le Forum
Le Forum
Php/Mysql
Formulaire en php
Administrer un serveur Mysql
Session en php
Gerer ses bases mysql
Les bases php
Securiser ses scripts PHP
Controler ses programmes avec RATS
Convertir une base sql en utf8
Astuces php
Le fichier php.ini
Programmation
Python rapide
Tutorial Python
Tutorial Perl
Tutorial Perl complet
Tutoriel ruby
Tutoriel C
Introduction à gawk
Filtres et utilitaires
Find
Programmation Shell
Ecriture de scripts bash
Expressions regulieres
Vi
Introduction a Javascript
Compiler avec gcc
Astuces en Bash
Cracking
Tutoriel Assembleur
Guide du cracking pour débutant
Assembleur
Manual Unpacking
Techniques de Protection
Différentes failles Web
Arp spoofing dans un réseau switché
Les intrusions
Les attaques externes
Defacage
Defacage complet
Buffer overflow
Netcat
Injection sql
Injection sql(suite)
John the Ripper
Spoofer un email
Utiliser google
La faille system
Usurper une identité
Le rooting
Shellcode sous Unix
La faille race condition
La faille xss
La faille xss (2)
Attaques sur un routeur
P2P
Azureus pas-a-pas
News
Lire les news de Linux-pour-lesnuls.com au format RSS
Distros
Gestion des paquets debian
101 commandes debian
Jeu
Webtarot
Graphisme
Effet neon dans GIMP
Effet vapeur dans GIMP
Cours fonctionnalités de GIMP
Redimentionner une image avec GIMP
Redimentionner une photo pour en faire un cadre avec gimp
Morphing avec gimp
Détourer avec gimp
Réduire le poids d'une image avec gimp
Caricature avec gimp
Eclairage avec gimp
Mettre en évidence avec gimp
Pluie sur le château
Créer une onde de surface avec Gimp
Un aspect satiné avec Gimp
Impacts de balle avec Gimp
Humour
Ensemble
Divers