TOR: The Onion Router (Part 1/2) -> Analyse approfondie

Equipe technique Kamea
12/08/2023
2 mins de lecture

Introduction

Plus connu pour son utilisation criminelle, le réseau TOR a pour but le respect de l’anonymat de ses utilisateurs, mais il n’est pas épargné par les failles de sécurité. De nombreux chercheurs ont démontré la possibilité d’attaquer ce réseau, et l’actualité ainsi que les coups de filet gouvernementaux dans les milieux mafieux opérant sur ce réseau ont prouvé que la notion d’anonymat est relative.

Ce billet en deux parties sera d’abord consacré au fonctionnement du réseau TOR, puis dans un second temps à certaines des attaques qui ont été menées contre lui.


1. Le protocole Oignon

1.1 – Vue d’ensemble

En 1995, aux USA, l’ONR (office of Naval Research) commence à financer un projet dont le but est de créer une technologie qui pourrait permettre de communiquer anonymement sur Internet.

Au début, 3 chercheurs, David Goldschlad, Michael Reed et Paul Syverson (les deux premiers indépendants, le dernier affilié à l’US Navy), commencent à développer des prototypes en suivant deux principes :

– Le code doit être ouvert pour gagner la confiance des utilisateurs

– Pour des raisons de sécurité, les machines utilisées pour accéder au système ne doivent pas être des serveurs

1.2 – Fonctionnement

Le protocole Oignon tient son nom de la structure avec laquelle les informations traversent le réseau. Un « oignon » est fait de couches de chiffrement créées par l’expéditeur du message.  Chaque routeur que l’« oignon » traverse retire une couche de chiffrement du message jusqu’à ce qu’il rejoigne sa destination. Les réponses suivent le même chemin, la différence, cette fois, est que chaque routeur ajoute une couche de chiffrement que le destinataire doit retirer.

Figure 1 : les couches de l’oignon

La route entre deux machines est appelée « circuit oignon ». Les routeurs qui forment cette route sont choisis aléatoirement par l’expéditeur du message, à partir d’une liste de serveurs enregistrés dans le réseau oignon. Le circuit est formé de telle manière que chaque nœud connaît seulement ses voisins.

Pour préserver la confidentialité des échanges et empêcher les nœuds intermédiaires d’accéder au message, l’expéditeur doit négocier une clé de chiffrement symétrique avec chacun d’entre eux.

Pour casser l’anonymisation, un routeur doit être en mesure d’envoyer un message à la fois à l’expéditeur et au destinataire. Par conséquent, si un attaquant acte en tant que routeur oignon entre un client et un serveur, l’attaquant peut facilement caser l’anonymisation si le circuit est fait 3 équipements de distance (client – nœud – serveur). Les développeurs ont donc décidé que la longueur minimale par défaut serait de 5 (client – 3 nœuds – serveur) pour préserver l’anonymisation.

Figure 2 : Le protocole oignon

Dans le cas d’une communication entre deux machines, toutes les deux connectés au réseau oignon, des « serveurs de rendez-vous » sont mis en place. Comme deux machines ne peuvent pas établir un circuit depuis leur IP, les serveurs de rendez-vous agissent comme des intermédiaires. Dans ce cas, la longue de la chaine est de 9 (client – 3 nœuds – serveur de rendez-vous – 3 nœuds – client).

2. L’histoire du protocole oignon

Première génération (1996 – 2004) : La différence principale entre la première génération et les suivantes et que pour la première un routeur oignon était intégré au logiciel client. Sous ces conditions, un ordinateur qui rejoint le réseau pour envoyer des messages peut être ajouté dans un circuit oignon. Cette fonctionnalité allait à l’encontre d’un des deux principes du protocole oignon (« un client n’est pas nécessairement un routeur ») et fut changé lors de la sortie de la deuxième génération, rendant possible l’utilisation du client et d’un routeur séparément.

Deuxième génération (2004 – 2006) : Durant la deuxième génération, de nombreux mécanismes ont été mis en place pour améliorer la sécurité :

– Ajout de bourrage dans les messages pour rendre l’analyse de trafic plus difficile

– Limitation de la bande passante pour éviter des changements dans les flux de trafic

– Possibilité de créer des circuits plus longs que 5 nœuds : dans cette version la longueur des circuits peut varier jusqu’à 11 nœuds.

Ces changements ont dû être abandonnés dans la génération suivante à cause de préoccupations liées aux performances et à l’efficacité.

Troisième génération (2006 – aujourd’hui) : Cette génération est la dernière en date et celle actuellement déployée. Un des changements majeurs observés dans cette génération est le protocole de distribution de clés utilisé lors de la création d’un circuit. Dans cette troisième génération, le protocole d’échange de clé Diffie-Hellman est utilisé pour distribuer les clés des nœuds de manière incrémentale pendant la création du circuit, ce qui est différent de la première version qui utilisait la structure de donnée en oignon. Ce changement permet l’implémentation de la confidentialité persistante qui assure la confidentialité des informations même si une des clés est compromise.

Un autre changement dans cette version est l’ajout de serveurs d’annuaires. Dans les générations précédentes, les informations à propos des adresses réseau étaient gérées à l’extérieur du réseau. Quand la taille du réseau a augmenté, cette méthode de distribution de l’information est devenue impossible et les serveurs d’annuaires offrent un moyen flexible de résoudre ce problème. Cela augmente également la sécurité, car l’information distribuée peut être sondée.

3. TOR

3.1 lES Caractéristiques

Tor est un réseau de routeurs oignon (aussi appelé relais) géré par des bénévoles autour du monde. Quand un utilisateur se connecte au réseau TOR en utilisant un navigateur compatible, un circuit est crée entre cet utilisateur et son serveur destination. Tous les circuits implémentés dans TOR comportent 3 types de nœuds : des nœuds d’entrée, des nœuds intermédiaires et des nœuds de sortie.

Chaque relai TOR possède plusieurs paires de clés asymétriques :

clé RSA 1024 :

– Une clé à long terme « clé identité », utilisée uniquement pour signer des documents et certificats et pour confirmer l’identité du relai.

– Une clé à moyen terme « clé oignon », utilisée pour accepter l’ajout du relai au circuit

– Une clé à court terme « clé connexion », utilisée pour négocier les connexions TLS

clé Curve25519 :

– Une clé à moyen terme « clé oignon », utilisée pendant la poignée de main ECDH (handshake ECDH) lors de la création ou l’allongement du circuit

clé ed25519

– une clé à long terme « identité principale » : cette clé ne change jamais et est uniquement utilisée pour signer la clé suivante

– une clé à moyen terme « signature », signée par la clé mentionnée au dessus et utilisée pour la grande majorité de signatures

– une clé à court terme « authentification de lien », signée par la clé de signature et utilisée pour authentifier

La clé identité RSA et la clé identité principale ed25519 identifient le routeur de manière unique. À noter qu’une fois que le routeur utilise une clé d’identité principale ed25119 avec une clé identité RSA, aucune de ces clés ne peut être utilisée avec une clé différente.

Les connexions entre deux relais TOR ou entre un client et un relai utilisent TLS/SSLv3 pour l’authentification du lien et le chiffrement. Le chiffrement « TLS_DHE_RSA_WITH_AES_128_CBC_SHA » doit être supporté, mais de meilleurs peuvent être utilisés si disponibles.

Quand le chiffrement symétrique est requis, spécifiquement pour le chiffrement ou le déchiffrement de cellules, AES-CTR 128-bits avec IV à zéro est utilisé. De manière similaire, SHA-1 est la fonction de hachage par défaut, avec quelles apparitions de SHA-256 et SHA3-256, spécifiquement lors de la négociation de clés.

Même si le design de TOR lui-même n’est pas voué à changer, des discussions sont en cours à propos du remplacement progressif de plusieurs éléments cryptographiques :

– AES-CTR, utilisé pour le chiffrement de cellules est considéré comme trop perméable

– Curse25519 utilisé pour la négociation de clés est vulnérable aux attaques quantiques

– RSA 1024, compte tenu du contexte d’utilisation potentiellement sensible, à l’air de moins en moins approprié

3.2 – le réseau TOR

Une implémentation du réseau oignon se compose simplement de clients, routeurs et relais qui envoient et reçoivent des messages à travers le réseau en utilisant le protocole de communication oignon.

Les routeurs et clients, qui peuvent eux-mêmes être des routeurs, forment la majorité du réseau TOR. La plupart des clients utilisent le réseau TOR pour établir des communications entre eux ou avec des services cachés (détaillé plus tard) ou pour accéder à des serveurs en dehors du réseau TOR. En 2016, le nombre de clients utilisant le réseau TOR était proche de 2 millions avec un nombre de relais approchant les 7000.

Pour rendre TOR plus résiliant à l’écoute illicite, des gardes d’entrée ont été introduits dans le réseau. Leur but est d’offrir plus de sécurité contre un attaquant qui voudrait se positionner en tant que nœud d’entrée d’un circuit. 3 gardes d’entrés ont été sélectionnés à partir d’une liste de routeurs fiables et seront utilisés comme routeurs d’entrée pour tous les circuits créés par l’utilisateur durant une période allant de 1 à 2 mois avant d’être renouvelée, à la place du nœud d’entrée aléatoire pour chaque circuit de la version initiale.

Pour des raisons de sécurité, certains routeurs n’annoncent pas leur adresse de manière publique : ils sont appelés ponts (bridge). Comme leur IP n’est pas connue, les ponts sont capables de contourner les restrictions ayant pour but de bloquer les adresses TOR dans les pare-feu, une pratique très commune dans les pays dirigés par des régimes autoritaires.

Figure 3 : une connexion par TOR

3.3 – Le circuit TOR

Quand un utilisateur TOR souhaite se connecter à un serveur externe, son client sélectionne d’abord un nœud d’entrée depuis la liste des routeurs TOR enregistrés. Ensuite, le reste du circuit est formé : les nœuds les plus rapides et efficaces sont ceux qui ont le plus de chance d’être sélectionnés. Pour plus de stabilité, seuls les nœuds qui sont diagnostiqués comme stables sont sélectionnés.

Figure 4 : Diagramme de séquence de la création d’un circuit TOR

3.4 – les services cachés

TOR permet le déploiement de services dits cachés. Ce sont des serveurs à l’intérieur du réseau TOR qui communiquent avec des clients de manière anonyme, ce qui veut dire que les communications entre un client et un service caché ont lieu sans qu’aucune des deux parties n’ait connaissance de l’identité de l’autre.

Les services cachés peuvent seulement être contactés à travers des serveurs TOR spécifiques. Quand un service caché veut publier son adresse, il crée un circuit oignon et déclare son adresse comme celle du dernier routeur du circuit : on appelle ces routeurs des points d’introduction.

Figure 5 : Connexion à un service caché

3.5 – cellules TOR

Les messages échangés entre des nœuds à l’intérieur d’un circuit TOR sont appelés cellules. En plus de transmettre des données, les cellules sont également impliquées dans la création et suppression de circuits, mais aussi dans le maintien d’une connexion. La taille des cellules est fixée  à 512 octets pour éviter l’analyse de trafic.

Toutes les cellules sauf les cellules relais sont appelées cellules de contrôle. Leur en-tête est constitué d’un identifiant de circuit (circID) et un champ de commande appelé commande de contrôle de cellule (CMD).

Figure 6 : Cellule de contrôle

Les cellules utilisées dans la transmission de message sont appelées cellules relais. Leur en-tête contient, en plus des en-têtes cirID et CMD, un identifiant de flux, une somme de contrôle et la longueur du message. La taille du message est 498 octets et peut aussi être utilisée pour transmettre des cellules de contrôle aux nœuds du circuit.

Figure 7 : Cellule de relai

Il existe différents types de cellules relayés. Les cellules de données relayées sont utilisées pour transmettre des données dans un sens ou dans l’autre du circuit. Les cellules de début de relai sont utilisées pour ouvrir un flux, qui sera fermé par une cellule de fin de relai. Les cellules de relai sont également utilités pour créer un circuit via des cellules d’extension de relai qui servent à initier un ‘handshake’ entre deux routeurs. Le routeur répond alors avec une cellule de création si le ‘handshake’ a été un succès. La figure 8 montre un diagramme expliquant comment les cellules sont utilisées pour créer un circuit à 2 relais.

Figure 8 : Diagramme de création d’un circuit à 2 relais

Dans la seconde partie de ce post, nous aborderons certaines des attaques qui ont été menées ou théorisées sur le réseau TOR

Prendre rendez-vous