• Quand : un froid après-midi d'été à San Francisco
  • : bureau 305, chez Cloudflare
  • Qui : 2 personnes de chez Cloudflare et 9 personnes associées au projet Tor

Ça ne peut que bien se passer.

Petit rappel des faits

Il y a deux ans cette semaine, Cloudflare dévoilait le Opportunistic Encryption, une fonctionnalité qui offrait une sécurité et des performances supplémentaires aux sites Web qui n'étaient pas encore passés à HTTPS. En effet, à l'époque, certains sites Web n'utilisaient que le HTTP... Bizarre, non ? « Opportuniste » signifiait ici que le serveur annonçait la prise en charge du protocole HTTP/2 via un en-tête HTTP Alternative Service, dans l'espoir que tout navigateur qui reconnaîtrait le protocole pourrait profiter de ces avantages dans les requêtes ultérieures pour ce domaine.

Vers la même époque, le PDG Matthew Prince a parlé de l'importance et des défis de la protection de la vie privée sur Internet, et nous a chargé de trouver une solution alliant commodité, sécurité et anonymat.

Depuis la neutralisation de l'empreinte navigateur et des outils de surveillance dont Privacy Badger se nourrit quotidiennement jusqu'à l'atténuation des attaques par corrélation dont seuls les plus gros groupes sont capables, garantir la confidentialité est un défi complexe. Heureusement, le projet Tor répond à ce modèle d’adversaire étendu dans le navigateur Tor.

Cependant, Internet regorge de groupes et d'individus malveillants, et il devient de plus en plus difficile de distinguer le trafic légitime du trafic malveillant, qui est l'une des principales raisons d'être de Cloudflare, si ce trafic est anonyme. Notamment, de nombreuses fonctionnalités qui font de Tor un excellent outil de protection de la vie privée en font également un outil permettant de masquer la source du trafic malveillant. C'est pourquoi beaucoup de sites ont recours aux défis CAPTCHA pour perturber l'activité des bots sur le réseau Tor. Toutefois, le recours aux tests CAPTCHA pour arrêter les robots entraîne un dégât collatéral : les humains doivent aussi s'y confronter.

Pour réduire ce problème autant que possible, il est possible d'utiliser des signatures cryptographiques préservant la vie privée, c'est-à-dire des tokens aveugles, tels que ceux dont se sert Privacy Pass.

Il est également possible d'utiliser des services cachés.

Ajoutez les oignons

L'édition d'aujourd'hui de la Crypto Week propose une solution « opportuniste » à ce problème, de sorte que dans des conditions appropriées, toute personne utilisant Tor Browser 8.0 bénéficiera d'une sécurité et de performances accrues lorsqu'elle consultera les sites Web de Cloudflare sans devoir répondre à un questionnaire CAPTCHA. En même temps, cette fonction permet de limiter plus précisément le débit afin d'éviter le trafic malveillant, et, comme les principes de l'idée décrite ici ne sont pas propres à Cloudflare, tout le monde peut utiliser cette méthode sur son propre site.

Avant de continuer, si vous avez besoin de vous rafraîchir le mémoire au sujet de Tor ou si vous voulez savoir pourquoi nous parlons d'oignons, nous vous invitons à consulter le site Tor Project ou notre article de blog datant de juin sur le résolveur DNS basé sur .onion.

Comme Matthew l'a expliqué dans son article de blog, il est possible de trier le trafic Tor en utilisant le protocole du service onion. Les services cachés (Onion) sont des nœuds Tor qui annoncent leur clé publique, encodée comme une adresse avec le TLD .onion, et utilisent des « points de rendez-vous » pour établir des connexions intégralement sur le réseau Tor :

Bien que les services cachés soient destinés à garantir l'anonymat des fournisseurs de contenu, les agences de presse les utilisent pour communiquer en toute sécurité avec les lanceurs d'alerte, et Facebook en utilise un pour distinguer les utilisateurs Tor des bots.

La raison technique pour laquelle cela fonctionne est que, du point de vue d'un service caché, chaque connexion Tor (ou circuit) individuelle est associée à un numéro unique mais éphémère, alors que du point de vue du serveur normal, toutes les requêtes Tor effectuées via un nœud de sortie partagent la même adresse IP. En utilisant ce numéro de circuit, les services cachés peuvent distinguer les circuits individuels et stopper ceux qui semblent se comporter de manière malveillante. Attention : cela ne signifie pas que les services cachés peuvent identifier ou suivre les utilisateurs de Tor.

Si les individus ou groupes mal intentionnés peuvent toujours mettre en place un nouveau circuit en répétant le protocole de rendez-vous, cela implique un échange de clés cryptographiques nécessitant du temps et des calculs. Voyez ça comme une séquence de numérotation cryptée. Les spammeurs peuvent appeler notre service caché à plusieurs reprises, mais ils doivent à chaque fois répéter l'échange de clé.

On peut aussi considérer la fin du protocole de rendez-vous comme une sorte de preuve des efforts que nécessite l'utilisation du service Onion de Cloudflare. Cela augmente le coût d'utilisation de notre service Onion dans le cas d'attaques par déni de service.

Le problème est donc résolu, non ?

Pas tout à fait. Comme nous l'avons évoqué lors de la présentation du résolveur caché, la difficulté à s'assurer qu'une adresse .onion en apparence aléatoire soit correcte est un obstacle à la sécurité utilisable. Dans ce cas, notre solution fut d'acheter un certificat de validation étendue (EV), ce qui coûte beaucoup plus cher. Inutile de dire que cela limite le nombre de personnes ayant la possibilité d'acheter un certificat HTTPS pour leur service caché à quelques privilégiés.

Certaines personnes ne sont pas d’accord. La nouvelle génération de services cachés corrige notamment la faille que Matthew a mentionnée comme une raison possible au fait que le forum des autorités de certification autorise uniquement les certificats EV pour les services cachés. Cela pourrait signifier qu'il sera sans doute bientôt possible d'obtenir des certificats de validation de domaine (DV) pour les services cachés. Nous espérons sincèrement que ce sera le cas.

Néanmoins, les certificats DV ne portent pas le nom de l'organisme (par ex., « Cloudflare, Inc. ») qui apparaît dans la barre d'adresse, et aucun humain n'est capable de mémoriser ou de distinguer les chiffres importants du point de vue cryptographique. Cela nous ramène au problème de la sécurité utilisable, donc nous avons eu une autre idée.

Portons un autre regard sur les adresses .onion

Oublions pour le moment que nous parlons d'anonymat. Lorsque vous écrivez « cloudflare.com » dans un navigateur et que vous appuyez sur Entrée, votre appareil résout d'abord ce nom de domaine en adresse IP, puis votre navigateur demande au serveur un certificat valide pour « cloudflare.com » et essaie d'établir une connexion cryptée avec l'hôte. Tant que le certificat est approuvé par une autorité de certification, il n'y a aucune raison de se préoccuper de l'adresse IP.

En gros, l'idée ici est simplement de substituer à l'adresse IP du scénario ci-dessus une adresse .onion. Tant que le certificat est valide, l'adresse .onion elle-même n'a pas besoin d'être saisie manuellement par un utilisateur ni même d'être mémorisable. En effet, la validité du certificat indique que l'adresse .onion était correcte.

Ainsi, de la même manière que des millions de domaines peuvent être reliés à une seule adresse IP, une seule adresse .onion devrait pouvoir couvrir un nombre illimité de domaines.

Sauf que le système DNS ne fonctionne pas de cette façon.

Comment ça marche alors ?

Tout comme avec Opportunistic Encryption, nous pouvons diriger les utilisateurs vers le service Cloudflare Onion à l'aide de HTTP Alternative Services, un dispositif permettant aux serveurs de signaler aux clients que le service auquel ils accèdent est disponible sur un autre réseau ou avec un autre protocole. Par exemple, lorsque Tor Browser envoie une requête à « cloudflare.com », Cloudflare ajoute un en-tête de service alternatif pour indiquer que le site est accessible par HTTP/2 via nos services cachés.

Tout comme Cloudflare possède les adresses IP qui sont utilisées pour les sites Web de nos clients, nous gérons 10 adresses .onion. Considérez-les comme 10 PoP (Points of Presence) Cloudflare sur le réseau Tor. L'en-tête exact ressemble à ceci, à l'exception des 10 adresses .onion jointes, chacune commençant par le préfixe « cflare » :

alt-svc: h2="cflare2nge4h4yqr3574crrd7k66lil3torzbisz6uciyuzqc2h2ykyd.onion:443"; ma=86400; persist=1

Ceci indique simplement que l'accès à « cloudflare.com » peut être autorisé par le biais de HTTP/2 (« h2 ») via le service caché « cflare2n[...].onion », avec le port virtuel 443. Le champ « ma » (max-age) indique combien de temps en secondes le client doit se souvenir de l'existence du service alternatif et « persist » indique si le cache du service alternatif doit être vidé lorsque le réseau est interrompu.

Une fois que le navigateur reçoit cet en-tête, il tente de mettre en place un nouveau circuit Tor vers le service caché indiqué dans l'en-tête alt-svc et de confirmer que le serveur qui écoute sur le port virtuel 443 peut présenter un certificat valide pour « cloudflare.com » (soit le nom d'hôte d’origine, pas l'adresse .onion).

Le service caché relaie alors le paquet Client Hello à un serveur local qui peut délivrer un certificat pour « cloudflare.com ». Ainsi, le daemon Tor lui-même peut être très réduit. Voici un extrait de fichier de configuration :

SocksPort 0
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
HiddenServiceVersion 3
HiddenServicePort 443
SafeLogging 1
Log notice stdout

Soyez prudent avec l'utilisation de la configuration ci-dessus, car elle permet un paramétrage non anonyme pour les services cachés qui n'ont pas besoin d'anonymat pour eux-mêmes. En clair, cela ne sacrifie pas la vie privée ou l'anonymat des utilisateurs de Tor, juste le serveur. De plus, la latence des circuits est améliorée.

Si le certificat est signé par une autorité de certification reconnue, pour toute requête ultérieure adressée à « cloudflare.com », le navigateur se connectera par HTTP/2 via le service caché, sans avoir à passer par un nœud de sortie.

Voici à nouveau le résumé des étapes :

  1. Un nouveau circuit Tor est établi.
  2. Le navigateur envoie un Client Hello au service caché avec SNI=cloudflare.com.
  3. Le service caché relaie le paquet à un serveur local.
  4. Le serveur répond avec Server Hello pour SNI=cloudflare.com.
  5. Le service caché relaie le paquet au navigateur.
  6. Le navigateur vérifie la validité du certificat.

Pour rappel, le certificat présenté par le service caché ne doit être valable que pour le nom d'hôte d’origine, ce qui signifie que l'adresse .onion n'a pas besoin d'être mentionnée sur le certificat. C'est un avantage énorme, car cela vous permet, par exemple, de présenter un certificat Let’s Encrypt gratuit pour votre domaine.org plutôt qu'un certificat EV coûteux.

Facilité d'utilisation, ✓

Distinguer les circuits

Rappelez-vous qu'un nœud de sortie peut desservir de nombreux clients différents, mais, du point de vue de Cloudflare, tout ce trafic provient d'une seule adresse IP. Cette mise en commun permet de limiter le trafic malveillant au sein du trafic légitime, mais n'est pas essentielle à la sécurité ou à la confidentialité de Tor. En fait, cela peut potentiellement nuire aux utilisateurs en exposant leur trafic à des nœuds de sortie dangereux.

Souvenez-vous que les circuits Tor vers les services cachés portent un numéro de circuit que nous pouvons utiliser pour limiter le débit du circuit. La question est maintenant de savoir comment communiquer ce numéro à un serveur comme nginx avec un minimum d'efforts. En fait, avec une petite modification dans le binaire de Tor, nous pouvons insérer un en-tête Protocole proxy au début de chaque paquet envoyé sur le serveur. Ce protocole est conçu pour aider les proxys TCP à transmettre les paramètres qui peuvent être manquants, tels que les adresses IP de source et de destination, et est déjà pris en charge par nginx, Apache, Caddy, etc.

Heureusement pour nous, l'espace IPv6 est si vaste que nous pouvons encoder le numéro de circuit Tor comme une adresse IP dans une plage inutilisée, et utiliser le protocole Proxy pour l'envoyer au serveur. Voici un exemple de l'en-tête que notre daemon Tor insérerait dans la connexion :

PROXY TCP6 2405:8100:8000:6366:1234:ABCD ::1 43981 443\r\n


Dans ce cas, 0x1234ABCD code le numéro de circuit dans les 32 derniers bits de l'adresse IP source. Le serveur Cloudflare local peut alors utiliser cette adresse IP de manière transparente pour attribuer une réputation, afficher les CAPTCHA ou bloquer les requêtes si nécessaire.

Notez que même si les requêtes relayées par un service caché ne portent pas d'adresse IP, vous verrez une adresse IP comme celle ci-dessus avec le code pays « T1 » dans vos journaux. Cette adresse IP ne spécifie que le numéro de circuit vu par le service caché, et non l'adresse IP réelle de l'utilisateur. En fait, 2405:8100:8000:8000::/48 est un sous-réseau inutilisé et alloué à Cloudflare que nous ne redirigeons pas dans le monde entier dans ce but.

Cela permet aux clients de continuer à détecter les bots en utilisant la réputation IP, tout en épargnant aux humains la corvée de devoir cliquer sans fin sur des images de panneaux de signalisation dans CAPTCHA.

Sécurité, ✓

Pourquoi devrais-je faire confiance à Cloudflare ?

Pas besoin. Le service Cloudflare Onion présente exactement le même certificat que celui que nous aurions utilisé pour les requêtes directes vers nos serveurs. Vous pouvez donc contrôler ce service avec Certificate Transparency (qui inclut Nimbus, notre journal de transparence des certificats), pour détecter toute triche éventuelle.

De plus, puisque Tor Browser 8.0 crée un nouveau circuit pour chaque nom d'hôte lorsqu'il se connecte via un service alternatif .onion, le numéro de circuit ne peut pas être utilisé pour relier des connexions à deux sites différents en même temps.

Remarquez que tout cela fonctionne sans exécuter de nœuds d'entrée, de relais ou de sortie. Par conséquent, les seules requêtes que nous voyons grâce à cette fonctionnalité sont celles qui nous étaient de toute manière destinées. Plus particulièrement, étant donné qu'aucun nouveau trafic n'est introduit, Cloudflare n'obtient plus d'informations sur ce que les gens font sur Internet.

Anonymat, ✓

Est-ce plus rapide ?

Tor n'est pas réputé pour sa rapidité. L'une des raisons réside dans le coût physique que représente le rebondissement des paquets dans un réseau décentralisé. Les connexions par l'intermédiaire du service Cloudflare Onion n'ajoutent pas à ce coût, car le nombre de sauts n'est pas plus élevé que d'habitude.

Les coûts de bande passante des opérateurs de nœuds de sortie expliquent également cette situation. C'est un domaine dans lequel nous espérons que ce service pourra apporter un soulagement, car il transfère le trafic des nœuds de sortie vers nos propres serveurs, réduisant ainsi les coûts de fonctionnement des nœuds de sortie.

BONUS : Performances, ✓

Comment l’activer ?

Onion Routing est désormais disponible pour tous les clients Cloudflare, et il est activé par défaut pour les clients Free et Pro. L'option est disponible dans l'onglet consacré au cryptage du tableau de bord de Cloudflare.

Compatibilité avec les navigateurs

Nous recommandons d'utiliser Tor Browser 8.0, qui est la première version stable basée sur Firefox 60 ESR, et qui prend en charge les en-têtes .oignon Alt-Svc ainsi que HTTP/2. Le nouveau navigateur Tor pour Android (alpha) prend également en charge cette fonctionnalité. Vous pouvez vérifier si votre connexion est acheminée via un service caché ou non dans la fenêtre Developer Tools (Outils de développement) de l'onglet Network (Réseau). Si vous utilisez le navigateur Tor et que vous ne voyez pas Alt-Svc dans les en-têtes de réponse, cela signifie que vous utilisez déjà le routage .onion. Vous pourrez le voir dans l'interface utilisateur des futures versions de Tor Browser.

Nous avons de grandes nouvelles. Nous avons remanié l'expérience utilisateur de Tor Browser.
Tor Browser 8.0 offre une nouvelle expérience d'intégration aux utilisateurs, une page d'accueil mise à jour, un support linguistique supplémentaire, et de nouveaux comportements pour aller chercher les passerelles, afficher les circuits et visiter les sites .onion. https://blog.torproject.org/new-release-tor-browser-80...

D'autres fournisseurs de navigateurs soucieux de la protection de la vie privée s'y intéressent également. Tom Lowenthal, chef de produit en matière de confidentialité et de sécurité chez Brave, a déclaré :

Les migrations automatiques vers les sites « .onion » fourniront une autre couche de sécurité à la navigation privée Brave avec Tor. Nous nous réjouissons de la concrétisation de cette nouvelle norme.

Un dernier mot ?

Tout comme Opportunistic Encryption, Opportunistic Onions ne vous protège pas complètement contre les attaquants qui peuvent simplement supprimer l'en-tête de service alternatif. Il est donc important d'utiliser HTTPS Everywhere pour sécuriser la première requête. Une fois qu'un circuit Tor est établi, les requêtes suivantes devraient rester dans le réseau Tor de la source à la destination.

Au fur et à mesure que nous actualiserons et améliorerons ce service, nous vous ferons part de nos découvertes. En attendant, n'hésitez pas à essayer cette idée sur Caddy et à nous faire part de vos commentaires ou suggestions.

Remerciements

Patrick McManus de Mozilla pour avoir rendu possible la compatibilité des services alternatifs .onion dans Firefox ; Arthur Edelstein du projet Tor pour avoir corrigé et activé HTTP/2 et HTTP Alternative Services dans Tor Browser 8.0 ; Alexander Færøy et George Kadianakis du projet Tor pour l'ajout de la compatibilité de Proxy Protocol avec les services cachés ; l'équipe du projet Tor pour son aide précieuse et les discussions qui ont été menées ; sans oublier tous les membres de Cloudflare ayant participé à ce projet.

Adresses utilisées par le service Cloudflare Onion

cflarexljc3rw355ysrkrzwapozws6nre6xsy3n4yrj7taye3uiby3ad.onion
cflarenuttlfuyn7imozr4atzvfbiw3ezgbdjdldmdx7srterayaozid.onion
cflares35lvdlczhy3r6qbza5jjxbcplzvdveabhf7bsp7y4nzmn67yd.onion
cflareusni3s7vwhq2f7gc4opsik7aa4t2ajedhzr42ez6uajaywh3qd.onion
cflareki4v3lh674hq55k3n7xd4ibkwx3pnw67rr3gkpsonjmxbktxyd.onion
cflarejlah424meosswvaeqzb54rtdetr4xva6mq2bm2hfcx5isaglid.onion
cflaresuje2rb7w2u3w43pn4luxdi6o7oatv6r2zrfb5xvsugj35d2qd.onion
cflareer7qekzp3zeyqvcfktxfrmncse4ilc7trbf6bp6yzdabxuload.onion
cflareub6dtu7nvs3kqmoigcjdwap2azrkx5zohb2yk7gqjkwoyotwqd.onion
cflare2nge4h4yqr3574crrd7k66lil3torzbisz6uciyuzqc2h2ykyd.onion

Abonnez-vous à notre blog pour recevoir quotidiennement des bulletins d’information.