Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Créer un Hidden Service sur le réseau Tor

Par Olivier SEROR-DROIN Publié le 12/09/2015 à 23:56:27 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Cet article vous apprendra à héberger un site internet (bien que le principe puisse s'appliquer à d'autres technologies, channel IRC, accès SSH, ...) sur le réseau anonyme Tor (The Onion Router), ce dernier sera alors accessible soit en utilisant le réseau Tor pour s'y connecter, soit en utilisant un proxy tel que tor2web.org .

Attention, ni moi ni SUPINFO ne pourrons être tenu responsable de ce que vous hébergerez, ni de votre utilisation de votre Hidden Service.

Il est possible d'utiliser le réseau Tor sur n'importe quel système d'exploitation, que ce soit en tant que client, ou en tant que serveur "hidden service" ou encore en tant que noeud, cependant cet article se basera sur une interface UNIX (plus spécifiquement une Debian).

Le principe d'un Hidden Service

Le principe de Tor dans un premier temps vous permet d'accéder par un chemin de différent noeuds ne se connaissant pas tous entre eux (un noeud Tor ne connait que deux choses lors d'un transfert, l'émetteur du paquet qu'il reçoit, et le destinataire à qui il va devoir l'envoyer, de ce fait un noeud situé entre deux autres intermédiaires ne connaîtra que ces derniers), voici un schéma pour exprimer la chose (du point de vue du noeud "bleu") :

Le noeud bleu Allemand ne peut voir que le noeud vert allemand et le noeud vert au pays bas, car ce sont des "voisins directs" pour lui, il ne connait cependant absolument pas notre navigateur, ni le site internet de destination en fin de chaîne. De même, notez de même que le noeud aux Pays-Bas ne connaît que le site internet destinataire, et le noeud allemand qui le précède, il ne connait ni le premier noeud, ni notre navigateur.

On appelle le premier noeud après notre navigateur un noeud d'entrée et le dernier avant Internet un noeud de sortie.

Cependant, quand il s'agit d'un hidden service, le fonctionnement diffère, pour donner ceci :

Le même principe s'applique, mais de chaque côté, de ce fait il y a le double de relais, mais vous ne connaissez que les trois étant situés de votre côté.

De ce fait, il est considéré aujourd'hui comme peu utile d'appliquer le HTTPS (sans compter la difficulté d'obtenir un certificat signé pour un domaine dont l'extension n'existe pas vraiment, les .onions n'étant pas reconnu officiellement, et comme je vais bientôt vous l'expliquer diffère beaucoup d'un nom de domaine "normal"), car l'échange est chiffré à l'aide d'un autre protocole, plus lourds (le paquet d'origine se retrouve sous plusieurs couches de chiffrements, chaque couche ne pouvant être déchiffré que par un noeud qui découvre par la même occasion le destinataire suivant du paquet qu'il va transférer).

Un pseudo nom de domaine

Comme vous avez pu le constater précédemment sur le screenshot présentant l'accès à un hidden service, le nom de domaine semble impossible à retenir humainement. C'est car un domaine en .onion n'est pas enregistré auprès d'un DNS, il s'agit en réalité d'un hash de 16 caractères basé sur une clé publique 80bits généré automatiquement par l'hidden service. Il semble donc peu probable d'avoir quelque chose de simple à retenir en partant de ce concept, mais nous verrons plus loin qu'il est possible d'obtenir quelque chose de plus beau, voir de plus simple à retenir, la preuve étant que Facebook (qui dispose d'un accès Tor) est parvenu à se générer (à moitié grâce à une très grande puissance de calcule, mais également avec une chance énorme) le domaine : facebookcorewwwi.onion .

Créer son propre Hidden Service

Il vous faut tout d'abord un appareil qui servira de serveur, vous pouvez techniquement appliquer ceci sur un ordinateur personnel, un serveur dédié, un VPS, ... Nous utiliserons une Debian à jour pour ce service, mais d'abord si nous voulons un nom de domaine "beau", il va falloir le générer, et en vu du temps que cela peut prendre, nous allons commencer par ça.

Un .onion présentable

Réfléchissez donc à quoi doit ressembler votre nom de domaine, par exemple ses 6 ou 7 premiers caractères (attention à ne pas être trop précis, car l'attente nécessaire à ce que vous voulez peut rapidement passer de quelques minutes à quelques jours (voir à pour ainsi dire jamais). Vous pouvez demander à votre serveur ou à un autre ordinateur (y compris sous Windows) d'effectuer cette tâche en attendant, notez qu'il est important de disposer d'une carte graphique convenable (de préférence de marque NVIDIA ou AMD) pour effectuer cette tâche assez rapidement.

Nous allons utiliser Scallion, il s'agit d'un logiciel CLI développé en Mono/.NET capable de généré des milliers de clés de chiffrements asymétriques à très grande vitesse, via la puissance de votre GPU. Il travaillera jusqu'à obtenir un pattern que vous désirez.

Vous pouvez le télécharger ici : https://github.com/lachesis/scallion/raw/binaries/scallion-v2.0.zip

La commande pour l'utiliser est :

Sous Linux
mono scallion.exe -o result.txt test
Sous Windows
scallion.exe -o result.txt test

(notez que sous Linux, vous devez utiliser la dernière version disponible de Mono, si la version fournis par votre distribution est trop ancienne, Scallion aura tendance à crasher ou à freeze pendant l'utilisation, il est alors nécessaire de récupérer la dernière versions depuis les dépôts officielles de Mono)

Remplacez test par ce que vous voulez (du style monsite, ...), notez qu'il est possible d'utiliser des patterns spécifiques (définis sur le README.md de https://github.com/lachesis/scallion ) , par exemple pour "monsite" suivi tout de suite après par un "un chiffre", ... il faut faire :

scallion.exe -o result.txt monsite[234567]

Notez qu'il n'y a pas de temps précis pour obtenir une clé correspondante de cette manière, et que la chance joue un rôle on pourrait dire, notez néanmoins qu'une formule donne une approximation d'un temps moyen :

2^(5*L-1) / H

(avec L = le nombre de caractère voulu spécifiquement, et H la vitesse en h/s (hash par seconde) de votre carte graphique).

Installer Tor et le configurer pour fournir un HiddenService

La première étape est de correctement installer et configurer Tor. Pour être certains d'obtenir les dernières versions pour votre système, vous pouvez utiliser les dépôts officiels du Tor Project, pour cela vous devez éditer le fichier /etc/apt/sources.list afin d'y ajouter les lignes suivantes :

deb http://deb.torproject.org/torproject.org jessie main
deb-src http://deb.torproject.org/torproject.org jessie main

(remplacez "jessie" par le nom de code de votre Debian, vous devriez le voir sur d'autres lignes de ce fichier assez facilement, si vous n'utilisez pas Debian vous trouverez d'autres dépôts fournis par le Tor Project pour vos distributions)

Ensuite, tapez cette série de commande, afin d'ajouter les clés des dépôts de Tor, puis de recharger la liste des dépôts de votre Debian :

gpg --keyserver keys.gnupg.net --recv 886DDD89
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -
apt-get update

Enfin vous pouvez télécharger Tor à l'aide de cette commande :

apt-get install tor deb.torproject.org-keyring

Avant de pouvoir lancer Tor pour vérifier qu'il fonctionne correctement, il faut encore le configurer, sa configuration par défaut étant totalement commentée, vous allez devoir dé-commenter les lignes suivantes :

DataDirectory /var/lib/tor
...
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:80

Tapez ensuite la commande :

service tor reload

Afin de recharger votre nouvelle configuration, ceci va alors générer le répertoire /var/lib/tor/hidden_service , et le peupler avec deux fichiers : hostname et private_key. Si vous avez correctement suivi la procédure pour générer votre .onion "personnalisé", vous devrez remplacer ces deux fichiers à l'aide des informations fournies par Scallion. (Si Scallion n'a toujours pas finis de vous fournir votre nom, vous pourrez revenir ici ultérieurement pour remplacer ces fichiers) :

En ayant suivi mes instructions sur l'utilisation de Scallion, vous avez obtenu un fichier result.txt contenant (au moins) un résultat à votre recherche (dans le cas de nom très court tel que "kws" suivi d'un chiffre, le fichier contiendra plusieurs résultats cette requête ne prenant même pas une seconde sur ma machine), et présenté sous la forme :

<XmlMatchOutput>
  <GeneratedDate>2015-09-12T20:49:18.1861416Z</GeneratedDate>
  <Hash>kws7cbbmyrdxkdtm.onion</Hash>
  <PrivateKey>-----BEGIN RSA PRIVATE KEY-----
...VotreCléPrivée...
-----END RSA PRIVATE KEY-----
</PrivateKey>
  <PublicModulusBytes>2TFQsd+QiT8QNYyDGLUnQT9v227ebw+/FAIRaXEGpNE6M8IxrApxbAv9UN1ZkseP9AqZ1wpjnfTsaFZcf2idEeN7/gWswZw+8+ZAS3MEljvUq6Eifgu+883O2SvhEmY03svYd/ayEvhbsQwrqo+n861RYirxrzf0SwmgxKdeaf0=</PublicModulusBytes>
  <PublicExponentBytes>FPeawQ==</PublicExponentBytes>
</XmlMatchOutput>

Vous devrez modifier le contenu du fichier hostname, pour y mettre le contenu des balises <Hash></Hash> de ce résultat, puis modifier le fichier private_key pour y mettre le contenu des balises <PrivateKey></PrivateKey>.

Une fois ces changements faits, relancez votre service Tor à l'aide de la commande :

service tor restart

Vous avez désormais une installation de Tor configuré pour héberger votre Hidden Service.

Mettre en place un serveur Apache accessible exclusivement à travers Tor

Je ne traiterais pas de l'installation d'un LAMP complet, mais simplement de l'installation du serveur Apache, le reste des éléments pour un serveur web complet avec base de données et PHP ne variant pas énormément comparé à une installation standard.

Pour installer Apache, il vous suffit de taper :

apt-get install apache2

Après cette installation, vous devriez voir la page par défaut de Apache apparaitre si vous accédez à l'IP de votre machine depuis une autre à l'aide d'un navigateur internet :

Cependant, Apache n'est pas encore configuré pour être un "hidden service", il faut modifier quelques éléments de sa configuration, afin d'être assuré qu'il n'écoute pas les communications qui ne proviendraient pas de Tor :

Vous devez définir que seules les communications avec 127.0.0.1 doivent-être acceptées par Apache, pour cela, vous allez devoir modifier deux fichiers :

nano /etc/apache2/ports.conf

Remplacez la ligne Listen 80 par :

Listen 127.0.0.1:80

Ensuite, modifiez la configuration Apache du site à host (pour cet exemple je modifierais la configuration par défaut de Apache) :

nano /etc/apache2/sites-enabled/000-default.conf

Remplacez

<VirtualHost *:80>

par

<VirtualHost 127.0.0.1:80>

Puis si vous disposez de votre nom de domaine .onion, dé-commentez la ligne (sinon revenez-y plus tard) :

#ServerName www.example.com

et modifiez la en :

ServerName votreNomDeDomain.onion

Une fois ces modifications terminées, relancez Apache :

service apache2 restart

Vous disposez désormais d'un Hidden Service !

Vous pouvez contrôler son fonctionnement ainsi :

  • Vous ne devriez plus pouvoir vous y connecter simplement depuis son adresse IP.

  • Vous devriez pouvoir y accéder à l'aide de Tor en utilisant son adresse en .onion, par exemple depuis le Tor Browser.

Vous savez désormais comment héberger un "Hidden Service" utilisant le réseau Tor.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels