Que fait Firefox sur le réseau quand on le démarre et faut-il y remédier ?

En lien avec les évènements relatés dans mon article précédent « Une avalanche de FUD sur Mozilla et Firefox. » Oros a conduit une petite étude du comportement d’un Firefox fraîchement installé et en a tiré un fichier de configuration à appliquer pour le rendre complètement silencieux.

Cependant, je trouve non seulement que son analyse manque cruellement d’explications et que son fichier de configuration propose des valeurs qui vont beaucoup trop loin à mon goût, d’autant que ces choix ont pour seule justification le fait de faire taire Firefox. Cette approche est donc dommageable et on voit déjà des partages affolés de la part de gens pour qui « requête réseau » signifie que Firefox vends leurs données personnelles à des grosses corporations :

https://twitter.com/molokoloco/status/636533449269084160

Je vais donc détailler un peu à quoi correspondent les requêtes listées ainsi que ce qui se trouve dans ce fichier de configuration et, quand c’est le cas, pourquoi j’estime qu’une telle désactivation est problématique.

Pour les requêtes réseaux, je n’ai pas leur contenu et ne pourrai donc pas en expliquer certaines mais les noms de domaine des autres sont pour la plupart assez parlants.

1 : www.mozilla.org.
1 : snippets.cdn.mozilla.net.
1 : geo.mozilla.org.
1 : location.services.mozilla.com.
1 : search.services.mozilla.com.
1 : self-repair.mozilla.org.
1 : aus4.mozilla.org.
3 : search.yahoo.com.
3 : ff.search.yahoo.com.
1 : ciscobinary.openh264.org.
1 : clients1.google.com.
1 : safebrowsing.google.com.
53 : safebrowsing-cache.google.com.
1 : ocsp.digicert.com.

geo.mozilla.org et location.services.mozilla.com correspondent de manière assez évidente à un service de géolocalisation. Mozilla connait donc l’emplacement approximatif de tel navigateur. Ces requêtes disparaissent en passant browser.search.geoip.url à false cela a donc à voir avec les fonctionnalités de recherche comme nous le verrons dans le détails des options.

search.services.mozilla.com, aus4.mozilla.org et self-repair.mozilla.org sont des domaines utilisés par Mozilla pour la maintenance de Firefox : des vérifications de mises à jour pour les deux premiers et le service Heartbeat pour le dernier. Heartbeat étant le service de feedback pour Firefox (ce panneau « Rate your experience with Firefox » qu’on voit s’afficher de temps en temps.) Il permet à Mozilla de savoir combien de personnes démarrent leur Firefox chaque jour pour avoir un suivi statistique.

search.yahoo.com et ff.search.yahoo.com sont là pour fournir à Yahoo des statistiques d’utilisation. Ils ont un contrat avec Mozilla pour être le moteur de recherche par défaut, ces appels servent à justifier l’utilité de ce deal.

ciscobinary.openh264.org a rapport avec le décodage des vidéos en h264 dans le lecteur HTML5. h264 est un codec brevet et les éditeurs de logiciel qui distribuent un codec h264 doivent payer une licence pour chaque codec distribué. Ça ne s’applique pas en Europe car (pour l’instant) les brevets logiciels sont encore considérés comme nuls mais aux États-Unis notamment, il faut passer à la caisse. Pour éviter à Mozilla de devoir mettre la plupart de ses économies dans le paiement de la licence à MPEG-LA, Cisco lui fournit gracieusement un codec nommé openh264. Cet appel réseau peut donc aussi bien être présent à des fins de statistiques mais aussi de mise à jour. (Si vous allez dans les Préférences - Modules - Plugins, vous verrez le codec en question.)

Le grand nombre d’appels à Google ont rapport au service SafeBrowsing de Google (Navigation Sécurisée en français). C’est une liste noire de domaines qui contiennent ou ont contenu divers malwares ou qui pratiquent le phishing. Cela permet au navigateur de bloquer la page avant même de la charger et d’afficher une alerte mais cela implique d’envoyer l’URL visitée au service. Et ce service est tenu par Google.

Le dernier, ocsp.digicert.com, concerne le protocole OCSP (Online Certificate Status Protocol) et sert à vérifier la validité d’un certificat chez son émetteur (ici, DigiCert) afin de s’assurer qu’il n’a pas été révoqué. Ni information personnelle, ni statistique, il s’agit d’un protocole de sécurité qui va de pair avec TLS.

On remarquera aussi que, contrairement aux cris d’horreur poussés par les détracteurs de Firefox Hello et de l’intégration de Pocket, strictement aucune requête réseau ne concerne ces fonctionnalités.

Voila pour les appels réseau que j’ai pu identifier, passons maintenant aux différents blocs du fichier de configuration.

Le rafraichissement automatique de certaines pages

user_pref("accessibility.blockautorefresh",true);

On commence bien avec un réglage de bon sens. accessibility.blockautorefresh bloque le rafraichissement automatique de certaines pages. Cette fonction était sensée avant la démocratisation d’AJAX pour mettre à jour une page qui disposait d’un nouveau contenu mais la technique est usée et abusée par les sites de presse qui profitent des onglets en arrière plan pour se booster les vues et rentabiliser leurs lecteur⋅ices. Pour plus d’infos : accessibility.blockautorefresh sur Mozillazine.

Des préférences sans lien avec le réseau

user_pref("browser.cache.disk.enable", false);
user_pref("browser.download.panel.shown", true);
user_pref("browser.newtab.url","about:blank");

Ces trois-là portent plus matière à controverse puisqu’il s’agit de préférence personnelle.

Pour le premier pas de cache sur le disque signifie potentiellement moins d’accès disques (et c’est bien) mais ça signifie aussi que le cache se vide quand on ferme Firefox. Il faudra donc charger à nouveau toutes les ressources sur chaque site web. Ça veut donc dire plus de trafic réseau, plus de charge sur les serveurs et des pages qui s’affichent globalement moins vite.

Pour le second, on force Firefox à nous demander où enregistrer les fichiers qu’on télécharge au lieu de les mettre d’office dans un dossier spécifié. C’est bien quand on apprécie ce comportement, c’est moins bien quand on préfère le comportement par défaut. De plus la présence de cette ligne empêche de modifier l’option dans Préférences - Général - Téléchargement.

Idem pour le dernier du bloc, afficher about:blank à l’ouverture d’un onglet n’est peut-être pas du goût de tout le monde. Alors que about:mozilla ou about:about valent le détour.

Google SafeBrowsing

// I remove all URL because I don't want to
// connecte my PC to Google
user_pref("browser.safebrowsing.appRepURL", "");
user_pref("browser.safebrowsing.downloads.enabled", false);
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
user_pref("browser.safebrowsing.enabled", false);
user_pref("browser.safebrowsing.gethashURL", "");
user_pref("browser.safebrowsing.malware.enabled", false);
user_pref("browser.safebrowsing.malware.reportURL", "");
user_pref("browser.safebrowsing.reportErrorURL", "");
user_pref("browser.safebrowsing.reportGenericURL", "");
user_pref("browser.safebrowsing.reportMalwareErrorURL", "");
user_pref("browser.safebrowsing.reportMalwareURL", "");
user_pref("browser.safebrowsing.reportPhishURL", "");
user_pref("browser.safebrowsing.reportURL", "");
user_pref("browser.safebrowsing.updateURL", "");
user_pref("browser.trackingprotection.gethashURL", "");
user_pref("browser.trackingprotection.updateURL", "");
user_pref("services.sync.prefs.sync.browser.safebrowsing.enabled",false);
user_pref("services.sync.prefs.sync.browser.safebrowsing.malware.enabled",false);

Ici on s’attaque à SafeBrowsing de Google. Il y a des pour à propos de cette désactivation : On envoie pas les URLs visitées à Google, mais il y a des contres : on ouvre laisse plus de champs à une infection par Javascript ou à un Phishing. Bref, c’est quelque chose qu’il faudrait désactiver après réflexion et pas « parce que Firefox envoie des données mon dieu ! »

Ne vous leurrez pas non plus si vous utilisez GNU/Linux, pas plus tard que début août une faille dans PDF.js permettait à un script JS de récupérer des fichiers de votre ordinateur, l’exploit visait /etc/passwd, .my.conf (coucou le mot de passe MySQL) ou encore .bash_history.

Et en aucun cas ne faites ça chez un⋅e ami⋅e ou parent⋅e qui ne maîtrise pas l’outil informatique.

Le moteur de recherche par défaut

user_pref("browser.search.defaultenginename", "DuckDuckGo");

Sur le fait de forcer DuckDuckGo comme moteur de recherche par défaut, je n’y vois personnellement aucun inconvénient mais il faudra penser à cette ligne si vous préférez utiliser autre chose. Un méta moteur comme l’instance searx de Framasoft par exemple.

La géolocalisation

user_pref("geo.enabled",false);
user_pref("browser.search.geoip.url", "");
user_pref("geo.wifi.uri", "");

Ces règles de configuration désactivent la géolocalisation du navigateur. geo.enabled permet, quand sa valeur est true, d’autoriser certains sites à géolocaliser votre navigateur pour « améliorer » le service fourni. Ça va de Facebook Messenger qui le fait à des fins commerciales et qui fait fuiter l’info à vos amis à monprochainbus.eu qui indique les arrêts de bus les plus proches sans qu’on ait rien à saisir. Dans tous les cas, Firefox vous demande l’autorisation.

De son côté, browser.search.geoip.url aide le navigateur à identifier le pays dans lequel vous vous trouvez à l’aide de la technique GeoIP. Pour cela il effectue une connexion à l’adresse https://location.services.mozilla.com/v1/country?key=%MOZILLA_API_KEY% et reçoit le nom standardisé du pays. Vous remarquerez l’envoi d’un identifiant unique %MOZILLA_API_KEY% qui identifie une installation de Firefox. Il est possible que ce soit utilisé à des fins de limitations du nombre de requêtes. Conserver l’URL en enlevant ?key=%MOZILLA_API_KEY% ne perturbe pas plus Firefox que ça, empêche Mozilla de suivre votre instance particulière de Firefox mais cela fausse aussi certainement leurs statistiques d’usage par pays.

Enfin, geo.wifi.uri aide la géolocalisation de Firefox à se montrer plus précise en utilisant Google Location Services. Firefox envoie donc votre IP, la liste des réseaux Wifi environnants et un identifiant unique régénéré toutes les deux semaines à Google pour obtenir une localisation fiable au niveau de la rue au lieu de n’avoir que GeoIP qui est fiable au niveau de la ville (et encore, parfois on a que le pays). Sans cette option, la précision prend un sacré coup ce qui peut jouer des tours aux personnes qui en ont l’utilité.

De plus comme indiqué dans ce commentaire, il est possible d’utiliser Mozilla Location Service à la place de Google Location Service pour la préférence geo.wifi.uri.

D'autres préférences sans rapport avec le réseau

user_pref("browser.search.openintab",true);
user_pref("browser.search.showOneOffButtons",false);
user_pref("browser.startup.page", 0);
user_pref("browser.tabs.warnOnClose", false);
user_pref("browser.tabs.warnOnOpen", false);
user_pref("plugins.click_to_play",true);
user_pref("general.warnOnAboutConfig",false);
user_pref("browser.urlbar.trimURLs",false);

Ici on retrouve à nouveau des préférences qui n’impactent pas la « vie privée », browser.search.openintab force l’ouverture d’un onglet après une recherche dans la barre de recherche, browser.search.showOneOffButtons masque les boutons des moteurs de recherche installés qui s’affichent en bas du champ de recherche, browser.startup.page définit la page qui s’affiche au démarrage du navigateur (ici elle est à 0 donc une page blanche, par défaut c’est la page d’accueil. Du coup ça fait doublon puisque précédemment on a défini la page d’accueil à about:blank), les deux directives browser.tabs suppriment respectivement l’alerte du navigateur quand on le ferme et que plusieurs onglets sont ouverts et l’avertissement quand on ouvre un nouvel onglet alors qu’il y en a déjà 15 ouverts (browser.tabs.warnOnOpen va de pair avec browser.tabs.maxOpenBeforeWarn qui est par défaut à 15)

De son côté plugins.click_to_play force l’activation des plugins à « Toujours demander » ce qui est le cas par défaut depuis Firefox 31.

user_pref(“general.warnOnAboutConfig”,false); supprime simplement l’avertissement qui s’affiche en visitant la page about:config (comme quand on coche la case « Ne plus me demander » de cette même page d’avertissement.)

Le dernier force l’affichage de http:// ou de https:// dans la barre d’adresse puisqu’ils sont masqués par défaut depuis Firefox 7. À ça on pourrait rajouter le passage de browser.urlbar.formatting.enabled à false qui va empêcher d’afficher le domaine en noir et les autres parties de l’URL en gris.

Les rapports de santé de Firefox

user_pref("datareporting.healthreport.service.enabled",false);
user_pref("datareporting.healthreport.uploadEnabled",false);

Le service rapport de santé est un service qui enregistre divers statistiques d’utilisation comme les derniers crashes de Firefox ou le temps de démarrage moyen. Désactiver le service empêche purement et simplement la création de tels rapports et désactiver le partage fait que Mozilla ne reçoit plus les rapport générés. S’il est compréhensible de désactiver le partage du rapport, il peut par contre s’avérer problématique de désactiver la création de ces rapports qui peuvent servir à dépanner un Firefox bancal.

Les rapports en question sont accessibles via la page about:healthreport, en cliquant sur données brutes vous pouvez voir les rapports tels qu’ils sont envoyés à Mozilla, la page en question contient également un bouton pour désactiver le partage (même effet que datareporting.healthreport.uploadEnabled) et un lien vers une page d’explication assez bien faite : Bilan de santé de Firefox – comprendre vos performances navigateur

L'injection de contenu dans le presse-papier

user_pref("dom.event.clipboardevents.enable",false);

Cette préférence désactive les évènements JavaScript oncopy, oncut et onpaste qui permettent aux sites web de manipuler le contenu du presse papier. Désactiver cette fonction n’a que du positif puisque le site sur lequel vous faites un copier-coller ne pourra pas rajouter du texte arbitraire comme un lien promotionnel après le contenu désiré.

Les suggestions de recherche

user_pref("browser.search.suggest.enabled",false);

Cette option va désactiver les suggestions de la barre de recherche. C’est ce qui permet à DuckDuckGo de vous suggérer « Les hommes les plus riches du monde » quand vous saisissez « Les hommes » ou « Les femmes les plus belles du monde » quand vous saisissez « Les femmes » (On notera au passage l’influence du patriarcat sur les suggestions de recherche…).

Pour que ça fonctionne, Firefox envoie une requête à chaque lettre tapée dans le champ de recherche. Personnellement j’ai du mal à saisir l’intérêt de désactiver les suggestions que je trouve souvent pertinentes, d’autant que quand je tape une phrase, je me fiche de savoir que mon moteur de recherche sait que j’en ai saisi chaque lettre une par une.

Sans les suggestions, Firefox se rabat sur son historique interne.

Le User Agent et ses potes

// user-agent
user_pref("general.appname.override", "");
user_pref("general.appversion.override", "");
user_pref("general.oscpu.override", "");
user_pref("general.platform.override", "");
user_pref("general.useragent.override", "Mozilla/5.0 ()");
user_pref("general.useragent.vendor", "");

Le user-agent est une chaine de caractère identifiant les différents navigateurs, leur version et leur environnement. À titre d’exemple, celui de mon Firefox est Mozilla/5.0 (X11; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0 On retrouve l’environnement pour lequel Firefox a été compilé, sa version, la version de son moteur, etc. Ce bloc-là masque tout ce qu’il est possible de masquer dans cette chaine et force en plus sa valeur à une chaine arbitraire et je suis plus que dubitatif sur l’utilité de dissimuler cette information.

Par contre la conséquence la plus directe est de faire baisser les statistiques d’utilisation de Firefox puisque les sites qui recensent de telles statistiques ne sauront plus par quel navigateur ils sont visités. Les parts de marché de Firefox sont déjà en baisse plus ou moins constante au profit de Chrome et contribuer à les faire diminuer pour aucun bénéfice revient à confirmer Chrome dans sa position de nouvel IE6 (et on ne veut vraiment pas amplifier le mouvement).

Bref, masquer son user-agent, sauf cas spécifiques comme par exemple à des fins de tests ou encore quand on utilise Opera et que Google fournit délibérément une version inutilisable de ses application, n’a aucun intérêt.

Mise à jour : Visiblement Google aime bien faire n’importe quoi avec les user-agents et semble empêcher le plein écran sur Youtube si general.useragent.override ne contient pas Gecko, merci à un⋅e anonyme sur OpenNews pour le signalement. (Le lien vers la question, le lien vers la réponse)

La lecture HTML5 sous windows et les DRM

user_pref("media.directshow.enabled",false);
user_pref("media.windows-media-foundation.enabled",false);

Ces deux préférences n’ont d’intérêt que sous windows et vont désactiver le lecteur interne de Firefox en ce qui concerne les fichiers mp4 et mp3. Le problème qui se pose c’est que les sites proposant un lecteur HTML5 comme SoundCloud ou Youtube vont à présent utiliser la rétro-compatibilité et se rabattront sur Flash. Ce qui est un peu paradoxal quand on pense protéger sa vie privée.

user_pref("media.eme.enabled",false);
user_pref("media.gmp-eme-adobe.enabled",false);

Celles-là ont rapport avec le support des EMEs (Encrypted Media Extension) qui sont les DRMs standardisées de HTML5. Comme les DRMs c’est purement et simplement de la merde il parait logique de désactiver leur support. Néanmoins, les sites avec EME risquent une fois encore de se rabattre sur Flash qui a lui aussi son système de DRMs, non standardisé lui. Si vous voulez éviter à tout prix les DRMs il faudra donc vous assurer de désactiver Flash également. Et de garder à l’esprit que si votre navigateur ne lit pas les fichiers que tous les autres utilisateur⋅ices arrivent à lire, ce n’est pas de sa faute.

Des fuites d'information

user_pref("media.peerconnection.enabled",false);
user_pref("network.proxy.socks_remote_dns",true);
user_pref("network.http.sendRefererHeader",0);

La première préférence à rapport à WebRTC. Ce protocole sert à la communication directe entre deux navigateurs. C’est ce qui permet par exemple de jouer en réseau ou de faire de la conférence vidéo en web. Ici, WebRTC est désactivé de force car son implémentation actuelle expose les adresses IPs locales de l’ordinateur. N’importe quel site web est donc capable de récupérer la liste de vos IPs et est susceptible de contacter d’autres ordinateurs sur le réseau avec des appels AJAX depuis votre navigateur. (Il lui faut tout de même connaître les IPs de destination.) Les proxys et les VPN verront eux aussi leurs adresses exposées. Si vous n’utilisez pas WebRTC il est donc plus sûr de désactiver cette option. Le bug concernant cette faille est visible ici [meta] ICE candidate generation control and user authorization et les développements autour sont assez actifs.

À noter que Chrome y est également vulnérable car le problème provient d’un flou dans le standard WebRTC.

La seconde force Firefox à envoyer les requêtes DNS à travers le proxy si vous en utilisez un. Avec la valeur par défaut, les requêtes sont envoyées sur le résolveur DNS de l’ordinateur et le réseau que vous essayez de contourner à l’aide d’un proxy connait tous les domaines que vous visitez.

Finalement, la dernière bloque l’envoi du referer aux sites que vous visitez. Le referer est le site de provenance quand vous cliquez sur un lien. Par exemple si je visite le Shaarli de SebSauvage et que je clique sur un lien vers le blog de Kevin, ce dernier aura la possibilité de savoir que j’ai cliqué sur un lien chez Seb pour arriver chez lui. Ce n’est valable qu’en HTTP car en HTTPS le referer n’est jamais envoyé par Firefox.

Des requêtes en avance

user_pref("network.dns.disablePrefetch",true);
user_pref("network.http.speculative-parallel-limit",0);

Ces deux-là visent à améliorer le temps de réaction de Firefox au moment de cliquer sur un lien. Ainsi, le DNS Prefetch consite à lister les liens d’une page et de résoudre les noms de domaines associés pour s’épargner la durée de résolution au moment du clic. Ça fournit à votre résolveur DNS la liste des domaines liés sur une page et le désactiver augmente le temps de réponse de Firefox de quelques millisecondes (le temps de la résolution DNS). À la fin de la journée, le gain en vitesse cumulé est appréciable et le risque en terme de vie privée est pour le moins inexistant.

Activation de Firefox Hello

user_pref("loop.enabled",true);

Cette préférence active Firefox Hello, c’est la valeur par défaut donc on empêche sa désactivation. Ce qui ne mène à rien puisque Firefox Hello est basé sur WebRTC qui a été désactivé quelques lignes avant.

Les versions de TLS

user_pref("security.ssl3.dhe_rsa_aes_128_sha",false);
user_pref("security.ssl3.dhe_rsa_aes_256_sha",false);
user_pref("security.tls.version.max",3);
user_pref("security.tls.version.min",2);

Ces lignes concernent le protocole TLS qui définit la sécurité en HTTPS. La valeur de tls.version.min indique qu’on accepte au moins TLS1.1 et celle de tls.version.max indique qu’on accepte au plus TLS1.2 (la dernière en date). Les deux premières lignes ont rapport à SSLv3 et ne sont pas pertinentes puisque SSLv3 est antérieure à TLS1.0 et est donc désactivé.

Un bloqueur de traqueur intégré

user_pref("privacy.trackingprotection.enabled",false);

À partir de la version 35, Firefox intègre un bloqueur de traceurs basé sur la liste de Disconnect.me, il serait remarquablement efficace puisqu’une paire de chercheurs ont publié une étude à son sujet début 2015 indiquant une augmentation de 44% de la vitesse de chargement, une diminution de 39% du traffic réseau et une diminution de 66% du nombre de cookies. Cette fonction est désactivée par défaut et la valeur de cette préférence empêche ici son éventuelle activation (ce qui n’est pas très logique si notre but est d’améliorer la protection de notre vie privée avec Firefox).

La télémétrie : analyse des performances et des fonctions les plus utilisées de Firefox

user_pref("toolkit.telemetry.enabled",false);

La télémétrie permet à Mozilla de recueillir des informations importante sur le comportement de Firefox dans une vaste diversité d’environnements. Elle est désactivée par défaut dans Firefox Stable et ESR mais activée par défaut sur Beta, Developper et Aurora. La présence de cette préférence empêche son activation et on se retrouve donc à utiliser Firefox sans contribuer à son amélioration. Et c’est dommage.

Conclusion

S’il est tout à fait justifié de surveiller les usages réseaux de nos applications favorites pour veiller à ce qu’elles ne nous trahissent pas, chercher aveuglément à les bloquer est loin d’être une solution pertinente. Surtout quand cela amène à proposer une configuration à poser puis oublier présentée comme « Améliorant la vie privée » quand cette configuration mêle préférences personnelles, lignes obsolètes ou redondantes et valeurs exposant à plus de tracking ou de malwares, en dépit de quelques parties pertinentes.

Au vu du temps que m’a pris la simple recherche pour comprendre l’intérêt de ces options, je suis convaincu que la plupart des gens qui verront et appliqueront ce fichier ne feront que le survoler se retrouvant du coup avec un Firefox au fonctionnement modifié pouvant même être considéré comme défaillant (puisqu’il n’y a plus de WebRTC, plus de lecteur HTML5, plus d’optimisation du chargement de certaines pages) et j’estime qu’il y a une certaine responsabilité qui ne doit pas se limiter à une bête notice « Lisez le fichier avant de l’appliquer » quand on fournit une telle configuration sur internet. (Non, je n’aime pas trop la licence MIT non plus.)

Néanmoins, j’espère que cet article vous aura permis d’en apprendre plus sur le fonctionnement de Firefox et que vous mesurerez bien les tenants et les aboutissants des modifications de configuration que vous ferez à l’avenir.


Crédit photo: social network hub par Mathias Pastwa