Il y à une dizaine de jours une idée folle m’a traversé l’esprit: et si on essayait d’embrouiller les différents services chargés de nous espionner lorsque l’on navigue sur internet. Ce week-end j’ai trouvé un peu de temps pour coder un proof of concept. Je vais dans ce billet vous expliquer le pourquoi, le comment et même vous proposer de tester le bidule.

pervers

Quand vous visitez un site, votre navigateur va envoyer des requêtes vers différents services/serveurs. Dans de très nombreux cas, la réponse va contenir une directive demandant au navigateur de stocker des informations. Informations que le navigateur enverra dans chaque nouvelle requête vers le service concerné.

Voila en gros le fonctionnement des cookies.

Parfois ces cookies sont légitimes, ils permettent par exemple de stocker des informations de connexions, ce qui vous évite d’avoir à vous authentifier à chaque changement de page, mais bien souvent le but est de vous tracer afin d’extraire un maximum d’informations possibles vous concernant. Le but final étant - entre autre - de mieux cibler les publicités qui vous seront affichées.

Pour vivre heureux vivons cachés… ou pas.

Vous allez me dire que vous avez une extension qui bloque les pubs et les différentes requêtes vers les service de “profilage”. Très bien mais ce n’est pas suffisant, de nombreuses requêtes comportant des cookies de tracking vont quand même passer. Si vous en doutez ouvrez les “devtools” de votre navigateur et regardez de plus près les cookies dans les requêtes que vous envoyez. Vous verrez que tous n’ont pas pour unique but de vous faciliter la navigation…

Alors si au lieu de se cacher on se déguisait en quelqu’un d’autre ?

  • ça nous anonymiserait (en partie au moins…)
  • ça invaliderait nos profiles puisque d’autres personnes ayant d’autres centres d’intérêts navigueraient en utilisant nos cookies.
  • ça mettrait la pagaille dans les bases de données de ceux qui nous profilent.

Ok mais comment peut on faire ?

Et c’est là que ça se complique un peu.

A l’origine, j’ai pensé à utiliser un proxy qui va ré-écrire les headers HTTP à la volée. Cette solution présente l’avantage de centraliser l’échange de cookies entre les différents utilisateurs et ainsi de minimiser la latence induite par cet échange. Par contre ça à de sacrés inconvénients, en premier lieu il faut que le proxy voit le trafic HTTPS chiffré, ce qui implique qu’il faut avoir une confiance absolue dans celui qui maintient le proxy. Ensuite c’est assez laborieux à mettre en place pour l’utilisateur, surtout si il faut installer le certificat du proxy pour ne pas faire couiner les navigateurs. Enfin ça peut vite couter une fortune en bande passante…

Sachant que plus il y aura de participants plus le système sera efficace (plus de mélange), cette première idée, de part sa difficulté de mise en place pour l’utilisateur, n’était pas idéale.

Du coup j’ai suivi la suggestion de Martin:

Comment ça marche ?

Pour ce POC je me suis focalisé sur le cookie _ga de google analytics. Ce cookie permet de vous suivre au cours des différentes pages vues et visites que vous allez faire sur un site. Pourquoi celui là ? Parce qu’il en fallait un que l’on rencontre très souvent. On ne sera pas des millions à tester dans un premier temps donc autant maximiser les chances de pouvoir faire des échanges.

Un fois l’extension installée (voir plus bas), elle va intercepter chaque requête pour voir si elle contient le cookie “_ga”. Si oui elle va demander au serveur central si il a un autre cookie correspondant au même domaine. Si c’est le cas l’extension va ré-écrire la requête pour utiliser ce nouveau cookie.

Cette solution n’est pas idéale non plus, les plus perspicaces auront vu deux points qui peuvent poser problème:

  • la latence que cela va induire. Si à chaque requête il faut exécuter une autre requête ça va forcément ralentir la navigation. J’ai limité ce problème de deux façons: coté serveur, en utilisant un système de stockage et “d’indexation” plutot véloce avec Boltdb et au niveau de l’extension j’ai implémenté un cache qui va garder le nouveau cookie au chaud pendant un certain délais (pour le moment 15 minutes mais on peut imaginer que ce delais s’adapte à la ressource dispo coté serveur…). Au final, si le cookie est en cache, la latence n’est pas perceptible, si il ne l’est pas et donc si l’extension doit faire une requête au serveur central c’est tout à fait acceptable puisque l’on a une latence induite qui dans la majorité des cas inférieure à 100ms. Dans la pratque, de mon coté je ne sens pas cette latence.
  • si cette idée fait son chemin il va falloir mettre a disposition pas mal de ressources pour répondre à la masse de requêtes… mais bon on en est pas là ;)

Donc pas idéale mais c’est, pour le moment, le meilleur compromis.

On peut essayer ?

Et comment ! Nous seulement vous pouvez, mais je compte sur vous pour le faire.

Comment ?

Il vous suffit d’installer l’extension sur votre navigateur.

Pour le moment je ne la mets pas sur les différents “stores”, c’est trop tôt, donc il vous faudra l’installer “à la main”, mais ne vous inquiétez pas comme vous allez voir plus bas, c’est très simple.

Une précision importante le code source de tout ce qui est utilisé pour ce POC est disponible sur Github.

N’hésitez pas à y jeter un coup d’oeil pour vous assurer que je n’ai pas inséré un script pour miner des moneros ;)

Installer l’extension sous Chrome

  • commencez par télécharger le zip contenant l’extension.
  • décompressez le zip
  • ouvrez chrome à l’adresse chrome://extensions/, activez le mode developpeur et cliquez sur le bouton “charger l’extension non empaquetée…”:

installation de Khao sous chrome - etape 1

  • indiquez le répertoire ou se trouve l’extension et validez.
  • si vous avez déjà des “bloqueurs de publicités” je vous conseille d’activer l’option: “Autoriser en mode navigation privée” et de surfer de temps à autre sous ce mode.

installation de Khao sous chrome - etape 2

  • si vous voulez voir les logs de l’extension cliquez sur “page en arrière-plan”

Installer l’extension sous Firefox

  • commencez par télécharger le zip contenant l’extension.
  • décompressez le zip
  • entrez dans la barre d’adresse: about:debugging
  • cliquez sur “charger un module temporaire”
  • contrairement à chrome, il vous faudra ici indiquer que l’adresse du fichier “manifest.json”
  • si vous souhaitez avoir des info de debug il vous suffit de cliquer sur “Activer le dobogage des modules”

Mode d’emploi

Voilà vous devriez avoir à droite de votre barre de navigation un nouvel icône triangulaire jaune. Par défaut le switch de cookies est activé. Si vous souhaitez le désactiver, il vous suffit de cliquer sur l’icône, il va devenir gris. Un nouveau clic sur l’icône va réactiver la fonctionnalitée.

Ne vous attendez à rien d’extraordinaire, en toute logique de votre coté, pour le moment en tout cas, vous n’aller rien constater. De son coté l’ami google lui, devrait voir quelques incohérences dans les info remontées. A terme, quand par exemple on ferra la même chose sur les cookie des annonceurs, là on devrait avoir un peu plus de retours de notre coté en voyant par exemple des publicités n’ayant aucun rapport avec nos centres d’interets.

Pour le moment il n’y a rien d’implémenté concernant les mises à jour, je les signalerais sur mon compte twitter.

Si vous avez besoin d’informations complémentaires, n’hésitez pas à me contacter, par exemple via Discord

Participez au projet

help

Si vous voulez filer un coup de main n’hésitez pas. En particulier si vous:

  • êtes développeur javascript, ce n’est pas ma spécialité et donc je suis certain qu’il a pas mal d’améliorations à faire.
  • êtes à l’aise avec l’anglais pour rédiger de la doc.
  • avez de connaissance sur le tracking.
  • avez juste envie.

Dans tous les cas contactez moi et/ou faites des pull-request sur Github

Et puis n’hésitez pas à partager cet article, il est important d’avoir des testeurs, des avis, des retours, des…

Voila en espérant que la suite ne soit pas celle envisagée par Martin ;)