Vivons heureux, vivons cachés - épisode 2 : Tracking oueb

Friday, August 6, 2021

Une grande partie de nos usages d’internet, en particulier les plus importants (mails, réseaux sociaux, achats en ligne, etc), se font à travers le navigateur oueb. Les risques ont changés, on ne cherche plus à s’en prendre à l’intégrité de sa machine mais à collecter le maximum de données personnelles même les plus insignifiantes, tout est bon à prendre. On va essayé de s’en protéger dans cet article.

Introduction

La sécurité informatique est un domaine où on brutalise rapidement des mouches. Si on essaye de cocher toutes les cases des préconisations, on finit par débrancher son PC du réseau, le formater 7 fois, l’asperger d’essence, etc :D Il faut un compromis entre gain en sécurité et simplicité, sinon on va rapidement laisser tomber car trop contraignant.

Il est assez simple de limiter le tracking des sites web sans impacter leur usage. Ce n’est pas tout à fait de la sécurité certes, mais ça fera une petite introduction au sujet :-)

Les bases

Evidemment, avant de se pencher sur le paramétrage du navigateur, il est prioritaire de maintenir à jour son système, son antivirus, son navigateur et d’avoir un usage prudent d’internet. Par usage prudent, j’entends ne pas ouvrir des liens de mails non sollicités (aka SPAM), ne pas installer 200 applications d’origine douteuse et à la plus value discutable, ne pas donner son mot de passe à qui veut l’entendre, ne pas faire d’achat sur des sites inconnus, etc. Et je vous fais grace du couplet sur tous les avantages d’un système d’exploitation libre :)

Le petit cadenas

Toutes les campagnes de sensibilition à la sécurité informatique mettent en avant l’importance de faire du https (le pti cadenas en haut à gauche). Aujourd’hui, il ne reste quasiment plus de sites ne le supportant pas et souvent se sont des sites frauduleux ou à l’abandon.

Mais le fait d’encapsuler ses requêtes http dans un tunnel chiffré (le S dans https) ne nous met pas à l’abri pour autant. La phase où le navigateur et le site oueb établissent le tunnel chiffré est sensible. Quelqu’un pourrait usurper l’identité du site, par exemple en se plaçant en intermédiaire et donc pouvoir déchiffrer tous les échanges. Les navigateurs alertent lorsque le certificat présenté par le site n’est pas valide, c’est ce certificat qui permet au site de prouver son identité. Un attaquant qui possède un accès à notre machine, peut ajouter une autorité de certification bidon, d’où l’importance d’être à jour.

Il y a aussi des fuites de données à l’établissement du tunnel chiffré, les fournisseurs d’accès internet (FAI) et les gouvernements en rafolent :) En effet, afin que le serveur qui héberge le site, que vous voulez consulter, vous présente le bon certificat (pour prouver son identité), il a besoin de connaitre son nom. Cette information (SNI) est envoyée avant l’établissement du tunnel chiffré, elle est donc lisible par les intermédiaires (FAI principalement). Il semblerait que le protocole applicatif (ALPN) soit lisible aussi durant cette phase, un tier peut donc savoir si on fait du oueb, du mail, de la visio ou du téléchargement dans ce tunnel chiffré. Enfin, il a bien fallu résoudre le nom du site en une adresse IP (DNS), encore une fuite. On verra si on peut améliorer ces points dans un second article plus poussé.

Mise à part ces quelques limitations, tout le reste est illisible durant le voyage de la requête (elle en fait du chemin et passe par beaucoup de main). L’url complète est donc masquée, seul le nom du site est dispo dans le SNI et la requête DNS. Le contenu des échanges est chiffré, indispensable par exemple quand on rentre son mot de passe sur un site : sans https, il se promènerait lisible sur chaque noeud du réseau, traversant des fois la moitié du globe. Quand j’étais étudiant, on s’amusait à sniffer le wifi, là on prend conscience de l’importance de chiffrer ses échanges …

Un pti schéma pour illustrer tout ça, si je veux consulter le document titi.html sur le site toto.exemple, je dois d’abord traduire toto.exemple en une adresse IP (fuite DNS). Puis demander à cette adresse IP de créer un tunnel chiffré avec toto.exemple (fuite SNI). Pour enfin, pouvoir demander mon fichier titi.html (pas de fuite puisque tunnel chiffré) :

Le bon cookie et le mauvais cookie

Les cookies ont mauvaise presse depuis quelques temps et la situation a empiré avec l’entrée en vigueur du RGPD. Mais les cookies existent depuis la nuit des temps d’internet, bien avant que l’on cherche à tout monétiser et à surveiller. Ils sont indispensbales pour persister des informations : par exemple c’est grace à eux que l’on a pas besoin de retaper son mot de passe à chaque click sur un site, ils maintiennent la session.

Point technique très important : les cookies sont liés à un nom de domaine et le navigateur enverra à un site tous les cookies correspondant à son domaine. C’est ainsi que l’on persiste des informations entre les pages d’un même site. Majoritairement, les cookies sont détruits à la fin de la session (quand son navigateur est fermé) mais certains peuvent persister au delà.

Malheureusement, ils ont été corompues par le capital :D Persister des données va forcement intéressé quelqu’un qui veut suivre l’usage d’un internaute, au sein d’un même site mais aussi plus globalement. C’est le fameux tracking. Borné à un site (au sens nom de domaine), ce n’est pas problématique à mon sens et se limite souvent à la gestion des sessions.

Par contre le suivi “inter-site” est un usage critiqué et un peu détourné de nos braves cookies. Un cookie est lié à un domaine et un seul, l’astuce réside dans le fait qu’un site incorpore, dans ses pages, des ressources externes comme par exemple de la publicité ou les fameux boutons de partage sur les réseaux sociaux. Une régie publicitaire va ainsi pouvoir suivre un internaute sur tous les sites qu’il consulte où elle diffuse de la publicité. De même pour les réseaux sociaux qui ne vont pas se priver pour collecter un max d’info, que l’on ait ou pas un compte chez eux.

Plus récemment, on a ce même problème avec les sites qui ont un trafic important : Ils s’appuyent sur le réseau d’un prestataire pour que son contenu statique soit plus proche géographiquement des usagers. On appelle cela un CDN (réseau de diffusion de contenu), un des plus connus est cloudflare. Ces tiers peuvent aussi utiliser des cookies pour nous pister entre plusieurs sites oueb.

Enfin, d’autres types de contenus externes sont des “mouchards” potentiels, par exemple des polices de caractètres, des bibliothèques javascript (coucou google encore), etc.

Choix navigateur

Pour moi, le choix est rapide vu l’offre réduite. Certes c’est discutable mais de mon point de vue, un logiciel propriétaire ne peut pas être considéré comme sécurisé puisque personne d’indépendant ne peut auditer son code. Le navigateur doit être libre et bénéficier d’une communauté conséquente afin d’avoir la capacité de se maintenir à jour et de se corriger rapidement. En plus de Firefox, on peut lister Chromium (qui n’est pas Google Chrome) et visiblement un petit nouveau appelé Brave (fondé par un ancien de Mozilla).

Google Chrome a plein de qualités mais il ne se cache pas de moissonner allègremment les données, il est donc exclue (en plus il est en partie propriétaire, donc doublement exclue :D). Personnelement, j’utilise Firefox depuis très longtemps, je n’ai pas testé les autres. La suite de l’article sera basée sur Firefox mais le principe est applicable à tous les navigateurs.

Il existe une version de Firefox moins blingbling, limitant l’ajout de nouvelles fonctionnalités (sources potentielles de failles) et qui est de mon point de vue plus adapté à notre objectif. Elle s’appelle ESR (Extended Support Release). https://www.mozilla.org/fr/firefox/enterprise/

Firefox par défaut se défend pas trop mal mais on va configurer une première ligne de défense contre le tracking. Puis compléter cela avec quelques modules (applications) bien utiles.

Page d’accueil

La page d’accueil va s’afficher dés que l’on ouvre un nouvel onglet ou une nouvelle fenêtre. Si des sites sont configurés sur cette page d’accueil, ils seront requêtés à chaque affichage de cette page. De même pour la page par défaut affichant des brêves et l’activité récente. Idéalement, cette page doit être vide (donc ne générer aucune requête). Dans un nouvel onglet, copiez/collez “about:preferences” dans la barre d’adresse pour accéder aux paramètres de Firefox puis cliquez sur “Accueil” dans le menu à gauche.

Si c’est trop austère, vous pouvez garder la page d’accueil par défaut mais en désactivant les options qui peuvent générer des requêtes :

Bloqueur de pub

Je vois rarement à quoi ressemble le net sans bloqueur de pub, ça a l’air assez agressif. En fait les rues des univers cyberpunk doivent être une métaphore du net actuel. Sur certains sites c’est presque caricatural, le contenu légitime est moins visible que la ribambelle de bandeaux publicitaires. J’ai conscience qu’il faut bien rentrer de l’argent mais ce modèle de financement rappelle trop la presse cheap ou la télé.

uBlock origin

J’ai utilisé longtemps “AD block plus” mais visiblement il est moins à la mode depuis qu’ils ont introduit un principe de liste blanche (désactivable) d’annonceurs non “instrusifs” dont Google. On lui préfère uBlock Origin actuellement, encore vierge de polémique et plus performant parait il. Les deux extensions se valent, uBlock est peut être plus rapide à réagir aux mises à jour de Firefox.

Il suffit d’installer le module, je n’ai pas eu besoin de faire de paramétrage supplémentaire. Ce plugin fait le gros du boulot, un petit exemple sur un site relativement clean :

Moteur de recherche

Comme évoqué plus haut, Google aime beaucoup nos données, normal pour la plus grosse régie publicitaire du monde. Autant ne pas trop lui faciliter la vie et utiliser un autre moteur de recherche. De plus, google ne serait pas toujours très objectif sur le classement de ses résultats de recherche.

Il y a eu la mode Qwant mais ça semble passé, ils ont eu quelques polémiques et j’avoue ne pas l’avoir trouvé très pertinent sur ses recherches. Le moteur en vogue en ce moment est DuckDuckGo, il a bonne réputation et s’en sort pas trop mal sur les recherches. Avoir un moteur par défaut autre que google, n’empeche pas de l’utiliser de temps en temps en complément.

DuckDuckGo

Dans la partie “Recherche” des options Firefox, choisir DuckDuckGo en moteur par défaut :

Et pour être sur, on vire google des options de recherche, on pourra toujours l’utiliser en tapant explictement son URL :

Forcer le HTTPS

Comme j’ai essayé de l’expliquer dans l’intro trop longue, le https n’est peut etre pas suffisant mais indispensable. On ne peut pas vérifier en permanence le “pti cadenas”, autant interdire le http non chiffré. Depuis la version 83, Firefox propose cela nativement dans la rubrique “Vie privé et sécurité” des options (about:preferences#privacy) :

Si vous êtes en Firefox ESR 78, cette option n’est pas dispo.

HTTPS everywhere

En Firefox ESR 78, il faut l’installer et l’activer. Pour les versions plus récentes, je ne sais pas trop si ce module est encore utile (TODO: check un site https avec du contenu en http). De plus, si on fait du DNSoHTTPS (requête de résolution des noms de sites encapsulée dans une requete http chiffré), toutes nos requetes seraient en https only (pas couvert dans cet article).

Filtrage des cookies

Pour résumer, il ne faut pas garder des cookies trop longtemps en plus de bloquer ceux qui ne sont pas utiles. Autant la suppression des pubs est plutôt transparente mais je ne vous cacherais pas qu’il y a quelques impacts dans ce cas. Il faudra se reconnecter après chaque redémarrage de son PC, redéfinir des préférences sur certains sites.

Premièrement, on va passer Firefox en mode stricte dans la rubrique “Vie privé et sécurité” des options (about:preferences#privacy) :

Et on active l’envoi de l’entête http “donottrack” même si je ne suis pas convaincu de l’utilité :) (un peu comme le fichier robot.txt pour dire à google de pas indexer son site, oui oui)

Privacy Badger

Ce plugin va venir en seconde ligne après le bloqueur de pub. De ce que je comprends, en plus d’envoyer des entêtes http pour dire que l’on refuse le tracking (oui c’est un peu naïf :D), il va bloquer certains cookies voir carrement des domaines. Il ne se baserait pas sur une blacklist mais détecterait des sites tiers communs entre plusieurs sites consultés et prendrait la décision de bloquer l’envoi de cookie, voir carrement la requête. Un bon complément à uBlock origin donc. https://addons.mozilla.org/fr/firefox/addon/privacy-badger17/

Pti exemple parfait, il a bloqué l’envoi du cookie vers ajax.googleapis.com (le blocage du domaine pourrait impacter le fonctionnement du site visité) et il a bloqué les requêtes vers google-analytics.com (site de stats, pas vraiment de la publicité).

Decentraleyes

Ce plugin est très intéressant puisqu’il tente de s’attaquer au problème des CDN listé plus haut. Certaines ressources hébergées sur des sites tiers sont requises pour le bon fonctionnement du site, on ne peut pas les bloquer. Au final, les sites utilisent souvent les mêmes frameworks ou librairies, Decentraleyes va remplacer les requêtes vers ces ressources distantes par des requêtes vers une copie locale de ces dernières.

Pour illustrer, la lib jquery est récupérée en local, aucune requête n’est envoyée à google :)

Gestion des mots de passe

On finit cet article sur un point un peu hors-sujet, les mots de passe. C’est beaucoup plus simple pour un pirate d’usurper une identité que de pénétrer sur notre machine ou d’écouter nos communications. C’est assez fréquent que des bases de comptes soient volées puis revendu à des pirates. Ces derniers tentent ensuite leur chance avec un dictionnaire de mot de passe quand il n’a pas été volé.

Il existe un site sympa qui permet de vérifier si une adresse mail figure dans ces bases de comptes utilisées par les pirates :
https://haveibeenpwned.com/

On ne peut pas empecher un site de se faire voler sa base de comptes, ça arrive même aux plus gros. On peut néanmoins limiter la “contagion” en utilisant un mot de passe différent pour chaque site où l’on possède un compte. Il faut aussi utiliser des mots de passe complexes qui compliquera l’attaque par dictionnaire. Il faut donc un mot de passe complexe par site, il va nous falloir une bonne mémoire ou un outil où les stocker :-)

Il existe de nombreux outils pour stocker ses mots de passe, sur le cloud ou en local. Le but ici n’est pas de le détailler d’autant plus que j’ai été fraichement converti par un collègue (coucou Colin), j’ai peu de recul. Premièrement, il faut désactiver l’enregistrement des mots de passe dans Firefox et utiliser l’outil tier de son choix :

Et penser à nettoyer ceux déjà enregistrer (on accède à cet écran en cliquant sur “Identifiants enregistrés…") :

KeepassXC-Browser

Keepass est un logiciel libre qui permet de stocker ses mots de passe dans une base chiffrée. Il y a des modules qui permettent à Firefox de demander l’usage de mots de passe stockés dans Keepass. Parmis les modules existants, on m’a conseillé KeepassXC-Browser, je n’ai pas testé les autres.

Je ne détaille pas volontairement ce point, il y a aura peut être un article dédié sur le blog ou de la part de mon collègue Colin.

Configurations bonus (facultatif)

On peut désactiver des fonctionnalités qui pourraient créer des fuites de données si on est inattentif (genre mal réveillé le matin). On va passer par la page permettant d’éditer directement la conf de Firefox : copiez/collez “about:config” dans la barre d’adresse et acceptez la mise en garde.

Par défaut, Firefox va essayer de précharger certains contenus pour tenter de fluidifier la naviagation. Il fait donc des requêtes sans que l’utilisateur l’aie demandé. On désactive ça (TODO vérifier si pas désactiver par défaut).

  • network.prefetch-next false
  • network.dns.disablePrefetch true
  • network.dns.disablePrefetchFromHTTPS true

On a pas envi d’indiquer notre localisation aux sites oueb (de toute façon, ça marche pas bien sur un PC), donc autant les empêcher de demander. On va modifier deux variables, la première empechera les sites de demander votre localisation et la seconde désactive cette fonctionnalité complétement.

  • permissions.default.geo 2
  • geo.enabled false

On empêche aussi les sites de faire des notifications.

  • dom.webnotifications.enabled false

On désactive entièrement “Pocket”, un genre de marque-page synchro sur le cloud.

  • browser.newtabpage.activity-stream.section.highlights.includePocket false
  • extensions.pocket.enabled false

On désactive la synchro avec un compte Firefox.

  • identity.fxaccounts.enabled false

On désactive la télémétrie Firefox (envoi de stats aux dev). Alors ici, j’ai préféré le faire via “about:preferences#privacy” car j’avais peur que les options impactent les devtools (la console accessible avec la touche F12).

Conclusion

Faut avoir conscience que se sont des mesurettes que l’on a mis en place, limitant tant bien que mal la moisson de données. Si on veut se prémunir de toutes fuites de données, faut repenser tout notre usage du numérique, en commençeant par le matériel et en acceptant de sacrifier certaines fonctionnalités. L’objectif ici était de limiter le tracking des géants internet et de sensibiliser sur quelques notions clés (cookie, chiffrement).

Après quelques mois d’utilisation dans cette configuration, je n’ai pas constaté de problème de navigation sur mes sites habituels. Le petite contrainte est de devoir se reconnecter quand on redémarre son navigateur, ça fait pas de mal et ça se fait bien avec les identifiants stockés dans un outil.

C’est une introduction, il y d’autres aspects que j’aimerai aborder dont certains sur des domaines où je ne suis pas à jour du tout, je pense aux smartphones et aux réseaux mobiles (pas fait de télécom depuis le DUT :). Le numérique est tellement implanté dans nos vies, qu’il devient nécessaire d’en comprendre une partie des mécanismes qui le composent.

Références

Geekfirefoxmozillacookiehardening
Le contenu de ce site est sous licence Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)

Gamb

DIY

B54 - Petite recette facile de reprise

Haute dispo de prolo - épisode 3 : Keepalived