Crawling and Indexing Tor Network

Crawling and Indexing Tor Network

Le réseau Draknet Tor repose sur l’anonymat et reste en grande partie caché car non indexé. Mon idée est de tenter d’indexer le Darknet Tor afin d’établir une cartographie de ses différents onions.

The Onion Router

The Onion Router (Tor) est un réseau qui se superpose à internet, il est mondial et décentralisé et garantit l’anonymat à ses utilisateurs de Tor. En faisant passer les connexions par différents nœuds relais, il permet d’anonymiser l’origine des connexions TCP et ainsi d’anonymiser l’activité de navigation de l’utilisateur sur le web.

Le routage en Onion :

Le principe de fonctionnement de TOR est le “routage en onion”. Le routage en onion permet de faire rebondir les échanges TCP sur les différents nœuds du réseau et de chiffrer les différents échanges. Lors de l’utilisation de TOR, la première étape est la construction d’un circuit. Il faut donc récupérer une liste de nœuds relais TOR depuis un serveur, avec un chemin aléatoire créé entre différents nœuds (il peut être changé au bout d’un certain temps). Une fois le chemin construit, TOR construit un circuit au sein duquel chaque
nœud va connaître son prédécesseur et son successeur. Ainsi seul le premier nœud du circuit connaît l’adresse IP de l’émetteur. Et dès le deuxième nœud, l’adresse IP de l’émetteur n’est plus connue. Ainsi seul le nœud 1 connaît l’adresse IP de l’émetteur et seul le nœud 4, appelé nœud de sortie (exit-node) voit les données non chiffrées qui sont transmises.

Circuit sur le Réseau Tor

Ce système garantit l’anonymat de l’utilisateur vis à vis de la destination finale. En effet seul le nœud d’entrée connaît l’IP de l’émetteur, et seul le nœud de sortie voit les données transmises au site destinataire en clair. Pour le site visité, c’est comme si l’utilisateur s’était connecté depuis le nœud de sortie.

Connexion via le réseau TOR comparé à une connexion classique

Les Hidden Services

En plus de permettre à ses utilisateurs de surfer anonymement, TOR propose d’héberger des services (sites web, messagerie instantanée …), les Hidden Services. Ainsi TOR permet aux utilisateurs de se connecter anonymement à des services. Nous allons ici nous intéresser au protocole de “rendez-vous point”. Dans un premier temps, un Hidden Service doit se faire connaitre sur le réseau TOR avant que des utilisateurs puissent s’y rendre. Pour cela, le service choisit aléatoirement plusieurs nœuds relais, construit un circuit pour s’y connecter afin qu’il agisse en tant que point d’introduction et leur donne sa clef publique. L’image suivante présente les différents acteurs et échanges qui sont effectués lors de cette étape. (Remarque : les liens en verts représentent les circuits de connexion jusqu’au point d’introduction et non pas une connexion directe). En effet le fait d’utiliser un circuit pour publier la
clef publique du service rend difficile de faire une correspondance entre le service et l’IP du serveur qui l’héberge, ainsi les points d’entrées ne peuvent faire de correspondance entre la clef publique et l’IP du serveur.

Hidden Service : publication de la clef publique

Dans un second temps, le Hidden Service va assembler un Hidden Service Descriptor (HSD), il contient la clef publique et une liste des différents points d’introduction, ce descripteur est signé avec la clef privée du Hidden Service permettant de s’assurer de son intégrité. Le Hidden Service Descriptor est ensuite envoyé vers une hash table distribuée qui permettra aux utilisateurs de trouver le descripteur correspondant au site XYZ.onion où XYZ est une chaîne de 16 caractères alphanumériques dérivés de la clef publique du Hidden Service. Ainsi n’importe qui peut vérifier qu’il est bien entrain d’échanger avec le bon Hidden Service.

Hidden Service : publication du Hidden Service Descriptor

Ensuite, lorsqu’un client souhaite se rendre sur le Hidden Service il doit connaître son adresse onion, par exemple ABC.onion. Après cela le client peut initier une tentative de connexion en téléchargeant le descripteur depuis la hash-table distribuée. Si il existe un descripteur pour le site XYZ.onion, le client connaît alors une liste de points d’introductions et la clef publique du Hidden Service permettant ainsi de s’y connecter. Pendant ce temps, le client choisit un nœud-relais aléatoirement pour qu’il serve de point de rendez-vous en lui donnant un secret.

Hidden Service : point de rendez-vous

Une fois que le client a récupéré le descripteur et que le point de rendez-vous est prêt, le client assemble un message d’introduction (chiffré avec la clef publique du Hidden Service) incluant l’adresse du point de rendez-vous et le secret. Ce message d’introduction est ensuite envoyé aux points d’introductions pour être délivré au Hidden Service. Encore une fois tous ces échanges se font au travers de circuits et jamais en connexion directe afin que personne ne puisse établir de lien entre l’IP du client et sa volonté de se
rendre sur XYZ.onion

Hidden Service : message d’introduction

Le Hidden Service reçoit le message d’introduction et le déchiffre avec sa clef privée afin de récupérer l’adresse du point de rendez-vous et le secret. Le Hidden Service va alors créer un circuit pour se connecter au point de rendez-vous et envoyer le secret.

Hidden Service : connexion au point de rendez-vous

A partir de là, le nœud de rendez-vous va notifier le client de l’établissement de la connexion. Ainsi le client et le Hidden Service peuvent alors utiliser leurs circuits jusqu’au point de rendez-vous pour dialoguer. Le nœud de rendez-vous ne fait que transmettre le message du client vers le service et vice versa.

Hidden Service : connexion établie

Tor permet ainsi d’implémenter un système similaire au DNS mais qui est décentralisé et non contrôlé. En effet il suffit de publié un Hidden Service Descriptor dans la hash table pour enregistrer un nom de domaine en onion. Indexer le Darknet Tor s’avère donc plus compliqué que le web classique. En effet aucun noeud ne possède toute la hash table contenant les Hidden Service Descriptor qui permettraient ainsi de récupérer la liste complète de tous les onions actifs. Il existe une méthode qui permet de récupérer une part significative de la hash table en utilisant plusieurs nœuds c’est le travail réalisé ici ou encore .

 

Explorer le Darknet Tor

Pour explorer les onions de Tor, j’ai utilisé un Crawler Web. Un Crawler ou robot d’indexation est un logiciel qui permet d’explorer
automatiquement le web. Il est utilisé par les moteurs de recherche comme Google, Bing ou encore Yahoo pour parcourir le Surface Web afin d’indexer de nouveaux contenus qui seront par la suite triés et catégorisés pour alimenter les résultats des recherches des utilisateurs.

Les Crawlers vont de manière automatique extraire des méta-données permettant de catégoriser la page, une fois ces méta-données extraite le crawler va chercher tous les liens de la page et les enregistrer et va continuer à visiter chacun des liens qu’il trouve. Pour l’implémentation de mon crawler, je me suis penché sur les méta-données qui sont définies par le langage HTML. Le langage HTML définit différentes balises de type meta qui permettent de donner une description, des mots-clés, le type de générateur. Le crawler récupère donc les balises représentées sur l’image suivante :

Exemple de meta-données extraites pour deux onions

Selon les sites, les balises ne sont pas toujours présentes ou sont mal formatées, je récupère donc en plus le titre de la page qui se trouve dans les balises title. Si on voulait réellement indexer le Darknet afin de créer un moteur de recherche, il faudrait également s’intéresser au contenu de la page que le crawler visite afin d’en extraire un résumé. En plus des méta-données qui permettent de catégoriser les pages visitées, j’ai enregistré les liens existant entre les différents onions afin d’établir une cartographie du Darknet Tor.

Architecture du Projet

L’ensemble du projet est constitué de deux parties. La première est une partie d’exploration qui permet d’explorer et indexer les onions, cette partie est codée en python. La seconde partie est la visualisation qui est faîte grâce à une interface web. L’iamge suivante présente les différents éléments. Ainsi le crawler se connecte à Tor pour explorer les différentes URL qui se trouvent dans la base de données. Pour chaque URL visitée, le crawler va extraire les méta-données présentées précédemment et les enregistrer dans la base de données.

Architecture du Crawler

Architecture de la base de données

Pour stocker toutes les informations que le Crawler va collecter, il est important de bien comprendre leurs interactions. La figure 3.3 représente le MCD ( Modèle Conceptuel des Données), ainsi on voit qu’un domaine onion peut posséder 0 à N URL et qu’une URL ne peut être possédée que par un seul et unique domaine. Une URL peut posséder 0 à N data correspondant aux méta-données et ces méta-données peuvent être communes à plusieurs URL. Il en est de même pour les mots clefs. Ensuite on voit qu’une URL peut être liée à d’autres URL (0 à N), cela permet d’établir les connexions entre les onions.

Architecture de la base de donnée

Architecture logicielle du Crawler

Je vais ici détailler l’architecture logicielle que j’ai mis en œuvre pour le crawler. Dans un premier temps le crawler va établir une connexion au réseau Tor, pour cela il faut préalablement installer le daemon Tor. Tor va alors agir comme un proxy local entre le crawler et le réseau TOR, pour s’y connecter il faut établir une connexion de type SOCKS5 à l’adresse 127.0.0.1:9050 (par défaut).
Une fois la connexion établie toutes les requêtes HTTP passeront par le réseau TOR, on peut à partir de là explorer le web classique comme le Darknet. Dans un second temps, le crawler va alors effectuer une requête HTTP grâce à la librairie Urllib2 pour récupérer le code HTML de l’URL http://XYZ.onion/. On récupère alors le code HTML brut correspondant à l’URL, d’où le crawler extrait ensuite les méta-données pour enfin les enregistrer dans la base de données MySQL. Cette démarche est résumée dans l’image suivante :

Architecture logicielle du Crawler

Voilà, je présenterais dans un autre articles, les premiers résultats que j’ai obtenu ainsi que mes premières analyses. Vous pouvez me contacter sur Twitter ou dans les commentaires, je me ferais un plaisir de répondre à vos questions.

Leave a Reply

Your email address will not be published. Required fields are marked *