samedi 23 février 2008

[PENTESTING] [Information gathering] Find the relevant information

La mission du jour, cher agent, est de vous former à la récupération d'information. En effet, cette étape est cruciale lors d'un test d'intrusion. C'est même la première à considérer et celle qui pourra faire la différence par la suite. Vous connaissez certainement des pistes pour trouver sur Internet des informations sur votre cible: bases WHOIS, annuaires et moteurs de recherche, newsgroups, etc...
Mais saurez vous trouver les portes plus cachées ? La porte d'entrée ouverte d'une filiale qui vous facilitera certainement grandement la tâche ... A vous de jouer !


Automatisation des recherches

L'information que l'on recherche se trouve très certainement sur Internet mais il s'agit clairement, la plupart du temps, de chercher une aiguille dans une botte de foin ! Alors dans ce cas, brûlons le foin me direz-vous ! Notre "brûleur" pourrait très bien être la suite BiLE car cet outil a pour objectif de trouver les liens entre les sites de manière automatique et, dans notre cas, les sociétés qui pourraient être en rapport avec notre cible. De plus, cette suite est capable de noter la pertinence des résultats trouvés. Voici un bon départ pour notre test ! Alors passons à l'action !

Installation de la solution

Pour récupérer la solution, il suffit de ce rendre sur le site de Sensepost et après enregistrement, on obtient la suite BiLE. Nous décompressons le fichier obtenus pour récupérer les fichiers Perl qui nous intéresse. Aussi, nous avons besoin de httrack (aspirateur de site WEB). Voilà, nous sommes prêts !

Exécution des scripts

Notre recherche va s'effectuer en deux étapes en exécutant l'un après l'autre les scripts suivants:

  • BiLE.pl pour trouver les liens avec notre cible;
  • BiLE-weigh.pl pour pondérer les résultats trouvés avec BiLE.pl.

Le premier script se lance de la manière suivante (ex avec www.blackhat.com):

perl BiLE.pl www.blackhat.com blackhat_1.txt

Une fois terminé, le script génère un fichier *.mine. En l'ouvrant, on obtient ce genre de résultats :

site1:site2

Les relations sont donc établies. Le deuxième script va nous permettre de pondérer ces liens:

perl BiLE-weigh www.blackhat.com blackhat_1.txt.mine

Cette fois, nous obtenons un fichier *.mine.sorted:


Pour comprendre la pondération attribuée, il faut juste savoir que plus le nombre est important, plus la relation entre les deux sites est forte. Nous obtenons de nombreux résultats mais peu en réalité avec une pondération pertinente. Quoiqu'il en soit, voici des pistes qui nous seront certainement bien utiles ;)


Comment ça marche ?

Nous allons expliquer ici en quelques mots le fonctionnement des deux scripts utilisés.

Le script BiLE.pl

Ce premier script repose sur deux choses :
  • HTTRACK ;
  • GOOGLE.
Le premier permet de récupérer les pages du site cible et de lire ainsi les liens qui figure dans le code sources de celles-ci. Quant à Google, il joue son rôle de moteur de recherche pour savoir à qui correspond chaque lien récupéré. Les relations entre sites sont ainsi établies.

Le script BiLE-weigh.pl

Ce second script ajoute une pondération donc. Pour cela, plusieurs critères sont à retenir :
  • Les liens "entrants";
  • Les liens "sortants";
  • Les relations entre les liens.
Concernant les liens entrants, ce sont les sites qui contiennent un lien vers notre cible. On comptera donc le nombre de liens entrants. Mais si un site ne contient qu'un seul lien et que celui ci est notre cible, alors, il aura plus de poids que s'il contenait une centaine de lien dont un vers la cible. Voici un extrait du code concernant les liens entrants avec ws, weight-source et wd, weight-destination):

if ($src eq ){
$newsites{$dst}=$newsites{$dst}+($sites{$src}*(1/$ws));
}

Quant aux liens sortants, il s'agit d'énumérer les liens du site cible vers les autres sites en relation. De le même façon que pour les liens entrants, si un site de notre cible ne contient qu'un seul lien vers un certain site relation, ce lien aura plus de poids que si le site cible en contient une centaine vers différents site en relation. Voici un extrait du code concernant les liens sortants :

if ($dst eq @ARGV[0]){
$newsites{$src}=$newsites{$src}+($sites{$dst}*(0.6/$wd));
}

Pour terminer, les occurrences entre les sites en relations sont étudiés. Notamment, si nous trouvons de nombreux liens vers notre cible ET vice-versa, ces deux sites sont certainement étroitement liés.
Enfin, un ratio est appliqué en faveur des liens vers la cible (6:10) que nous avons pu noter plus haut déjà. Ces deux lignes de code nous le montrent entre deux sites relevés :

$newsites{$dst}=$newsites{$dst}+($sites{$src}*(1/$ws));
$newsites{$src}=$newsites{$src}+($sites{$dst}*(0.6/$wd));

Voilà qui devrait nous faire gagner du temps pendant nos recherches. Cela tombe bien, le temps vous est compté cher agent !

Pour aller plus loin [PDF].

samedi 16 février 2008

[PENTESTING] Be careful about clear text protocol...

Un serveur sécurisé, c'est bien mais l'utilisation d'un protocole en clair peut anéantir les efforts de sécurisation. En effet, les protocoles comme FTP, Telnet, Rlogin et bien d'autres fonctionnent avec une méthode d'authentification faible, c'est-à-dire un couple mot de passe / login mais pire, le mot de passe est transmis en clair, ainsi que les communications. Une solution qui vous vient certainement est de sortir votre sniffer préféré (ex : wireshark). Bonne idée ! Surtout si la machine cible est sur le même réseau que le votre. Sinon, nous allons voir une autre méthode qui pourra s'avérer plus simple dans le cas d'une machine cible distante.


Contexte de l'attaque

Nous effectuons un test d'intrusion sur un serveur qui utilise un protocole en clair. Nous utiliserons pour exemple Telnet qui est - malheureusement - bien trop utilisé ... Le but de la mission est de localiser l'Agent J et de prendre possession de son compte ... Prêt à relever le défi ?

Première chose, la machine est-elle vulnérable ?

$ nmap -sS -sV -p 23,79 192.168.0.102

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2008-02-16 16:03 EST Interesting ports on 192.168.0.102:
PORT STATE SERVICE VERSION

23/tcp open telnet Linux telnetd

79/tcp open finger Debian fingerd
Service
Info: OS: Linux

Nmap finished: 1 IP address (1 host up) scanned in 6.250 seconds

Les deux démons dont nous avons besoin sont présents et actifs sur le serveurs cible : telnet et finger. Ce dernier n'est pas obligatoire mais nous facilitera la tâche comme nous le verrons dans le paragraphe qui suit.


Déroulement de l'attaque

Pour obtenir l'accès sur la machine, nous avons besoin dans un premier temps du login. Il peut être obtenu de plusieurs manières. Si par social engineering ou en sniffant cela n'a pas été possible, un autre possibilité est le démon finger s'il tourne sur la machine distante. C'est notre cas !

$ finger @192.168.0.102
[192.168.0.102]
Login Name Tty Idle Login Time Office Office Phone

agentJ secret *:0 Feb 16 15:47
root root pts/1 Feb 16 15:48 (:0.0)

Nous avons franchi la première étape en découvrant le login de l'utilisateur cible ! Il s'agit d'agentJ.

Maintenant, il nous reste à trouver le mot de passe. Pour cela, nous allons sur le site de packetstormsecurity pour y trouver :

  • Un fichier contenant des mots de passe (prenez le fichier qui vous semble le plus pertinent);
  • Un script perl pour casser le mot de passe de la session telnet.

Un peu de préparation ...

Pour que tout puisse fonctionner correctement, il faut décompresser le fichier contenant les mots de passe :

uncompress <fichier>


Dans le même répertoire, décompresser le fichier contenant le script perl (Telnet_crack.pl).

tar -xzvf Telnet_crack.tar.gz
cd Telnet_crack
tar -xvzf Net-Telnet-X.XX.tar.gz (avec X.XX, le numéro de la version)
cd Net-Telnet-X.XX
perl Makefile.PL
make
make install


Voilà, vous êtes prêt !


Crackage du mot de passe

Il nous suffit de lancer la commande suivante :

perl Telnet_Crack.pl -h 192.168.0.102 -u agentJ -P <fichier_mdp>

Pour obtenir :


Trouvé ! Le mot de passe est donc Missi0n_/\ccomplished.

Vérifions tout de suite notre résultat :



Nous nous sommes bien connecté avec le compte de la victime ...


Conclusion

Nous venons de voir un exemple de prise de contrôle d'un serveur via un service utilisant les texte en clair. A noter que d'autres outils existent pour cracker Telnet et les protocoles non chiffrés en général comme Brutus par exemple. Heureusement, des méthodes de sécurisation existent ! Par exemple, le service Telnet, quitte à être utilisé, aurait dû être "wrappé" pour en limiter l'accès. Mieux mais peu connu, il existe l'outil telnet-ssl où les communication sont chiffrées avec SSL comme son nom l'indique. Encore, mieux, utiliser des protocoles plus sûr comme SSH qui ont aussi l'avantage de permettre l'utilisation d'un authentification plus forte via des clés asymétriques. Cependant, pour des raisons "historiques" ou pour ne pas empêcher le fonctionnement de script sur des serveurs en production, le service Telnet est toujours utilisé...

mardi 5 février 2008

[INFORMATION GATHERING] Are you a fashion victim?

Aujourd'hui, une idée m'est venue (hé oui !?). Toute bête en soi mais tout de même, elle amène la réflexion. Pour aller droit au but, je ne sais pas si vous avez remarqué, mais vous êtes pistés ! Attention cher agent, notre agence déniera tout lien avec les services secrets en cas de problème !

Au départ, un effet de mode ...

Vous avez certainement fait l'objet d'une invitation de site de "rassemblement". Pis, vous vous y êtes incrits vous-mêmes ! ;) Que ce soit professionnel avec des sites comme linkedin ou personnel comme facebook, l'homme aime faire partie d'un groupe et se fait entourer de ses collègues ou ses amis. Que ce soit pour des opportunités de travail ou tout simplement pour ne pas perdre contact avec des collègues ou amis, le profil de chacun est inscrit quelque part sur le net. Bref, un simple effet de mode !


... Sauf que ...

Sauf qu'à force d'être inscrit partout, il devient de plus en plus facile de recouper les informations ! et là, "c'est le drame !" En effet, maintenant, si vous avez le "malheur" de poser un question sur un forum, de poster un article dans un blog ou dans un newsgroup, nous remarquons une chose : le WEB évolue, prend de l'ampleur - avec des moyens d'expression comme le blog - et nous y la faisons de moins en moins attention à ce que nous laissons comme traces et informations. A la base, les informations ne sont pas forcément pertinentes. Sauf que, à force de multiplier les sources, le recoupement se fait de plus en plus facilement. En effet, cette méthode de recherche d'information est connue de tout pentester et de tout curieux, mais ce que nous notons, c'est que c'est de plus en plus valable avec le temps ...
Si certaines personnes vont penser à faire attention à ne pas divulguer de renseignements sensibles dans un post, vont-elles penser dans le même temps qu'elles ont dit il y a quelques mois avoir qu'elle travaille pour telle ou telle société ? Déjà, vous commencez à comprendre ...


L'illustration par l'exemple


EXEMPLE 1:

Par exemple, imaginez une personne qui écrit dans un forum pour signaler, en tant qu'administrateur système, qu'il ne connaît pas les moyens pour sécuriser son serveur DNS (problème de transfert de zone). Si la personne n'a pas déjà donné son nom, il pourra certainement être retrouvé dans son profil (quitte à s'incrire avec un compte bidon sur ce même site). Au pire, quelques recherches Google feront le lien entre le pseudo et le nom. Ensuite, le nom en poche, il suffit de se rendre sur un site comme linkedin et là, vous retrouverez le profil professionnel de la personne cette fois. Bingo, vous savez où elle travaille, dans la société CompagnieSecrete.

(Par exemple, allez faire un tour dans la partie "Experience" de linkedin d'une personne).

Quoi, l'administateur a dit avoir rencontré des problèmes de transfert de zones sur son serveur DNS ? Mais mes mains s'agitent déjà, elles tapent des DIG NS CompagnieSecrete.com ?!? Oh non, maintenant, elles se mettent à écrire des host -l !!!
Oups, je crois que l'on ne retrouvera jamais le corps de cette personne.

Et vous, cher agent lecteur, on ne peut rien apprendre de vous ? Rien de compromettant ? Sûr ???

EXEMPLE 2:

Même pas peur ? Alors je vois que vous avez de l'entraînement mais là, nous allons voir vos limites. Par exemple, a tout hasard, prenons le profil de ... Jérôme KERVIEL (non non, nous n'en avons pas assez parlé ;). Savez-vous que son profil est disponible sur le site linkedin ? Maintenant, savez-vous que nous pouvons y retrouver ses contacts ??? Hé bien j'espère ne pas vous y retrouver ! Vous pourriez être dans de sals draps ! Mais ??? c'est qu'il EST dans mes contacts !


Finalement, le recoupement d'information n'est même pas obligatoire. Ces sites "à la mode" nous donnent déjà du fil à retordre à eux seuls.
Locations of visitors to this page