Retour à tous les articles
Publié le · par Renaud Deraison

Comment Bromure bloque les publicités avant même que la page ne les voie

La plupart des bloqueurs de publicités sont des extensions de navigateur, et la plupart des extensions de navigateur s'exécutent dans le même processus que la page dont elles cherchent à vous protéger. Bromure procède autrement. Voici comment, et pourquoi cela compte.

Un bloqueur de publicités qui vit à l'intérieur du navigateur tente d'arbitrer un combat depuis l'intérieur du ring. Bromure déplace l'arbitre vers le réseau lui-même, là où aucune page ne peut l'atteindre, aucun script ne peut le toucher, et aucune bannière « anti-bloqueur » ne peut lui tenir tête.

Le blocage des publicités est la fonctionnalité de navigateur la plus populaire qui ne soit pas livrée avec le navigateur. Des centaines de millions de personnes installent une extension tierce dès le premier jour parce que le web moderne est véritablement inutilisable sans. Cela, en soi, est déjà un signal que quelque chose cloche dans la conception. Mais la manière dont fonctionne presque chaque bloqueur de publicités mérite qu'on s'y attarde, car l'architecture se révèle déterminante — à la fois pour l'efficacité réelle du blocage, et pour ce qui se passe quand la page tente activement de le contrer.

Ce billet retrace le fonctionnement habituel d'un bloqueur de publicités, pourquoi cette forme a de véritables limites, et comment Bromure adopte une approche différente qui emprunte son idée centrale à un outil dont vous avez peut-être entendu parler, installé sur un Raspberry Pi dans la cave de quelqu'un.

Les publicités ne sont pas qu'agaçantes. Elles sont un problème de chargement, de vie privée, et un vecteur d'attaque.

Il est facile d'oublier, après quelques années de blocage des publicités, à quoi ressemble réellement le web brut. Un article d'actualité populaire, chargé sans aucun filtrage, va typiquement récupérer des ressources depuis 30 à 80 domaines tiers. La plupart sont des outils d'analyse, des pixels de traçage et des points de terminaison d'enchères en temps réel. Ils alourdissent la page, ajoutent de la latence, déposent des cookies pour le compte d'entreprises dont vous n'avez jamais entendu parler, et — comme expliqué dans le billet sur les rançongiciels publié plus tôt ce mois-ci — ils sont l'un des vecteurs discrets de diffusion des maliciels, parce que les régies publicitaires se font occasionnellement berner et servent des créations malveillantes sur des sites légitimes.

news.example.comun articledoubleclick.netgoogletagmanager.comfacebook.netadnxs.comscorecardresearch.comcriteo.nethotjar.comsegment.comchartbeat.compubmatic.comrubiconproject.comliveramp.comtaboola.comoutbrain.comnewrelic.comamplitude.commixpanel.com… 40 de plusChaque logo est un nouveau domaine, un nouveau DNS, un nouveau TLS, un nouveau jeu de cookies. Rien de ce que vous avez demandé.
Ce qu'une simple visite de page récupère réellement, en 2026, sans aucun filtrage. L'article que vous lisez est généralement la plus petite requête de la page. Tout le reste, c'est la machinerie dans laquelle l'article a été emballé.

Bloquer ces requêtes n'est donc pas une question cosmétique. C'est un gain de performance, un gain de vie privée, et — parce que les régies publicitaires sont un canal régulier de distribution de maliciels — un véritable gain de sécurité. La seule question est comment les bloquer.

Comment une extension de navigateur typique bloque les publicités.

Presque tous les bloqueurs de publicités grand public, y compris les plus populaires que vous avez probablement installés, sont des extensions de navigateur. Ce qui signifie qu'architecturalement, ils vivent à l'intérieur du navigateur — ils exécutent du JavaScript dans le processus du navigateur, enregistrent des rappels auprès des API réseau du navigateur (webRequest, declarativeNetRequest), et inspectent chaque requête que le navigateur s'apprête à faire.

PROCESSUS DU NAVIGATEURPagese charge, exécute des scripts,demande des ressourcesExtension bloqueur de publicitésinspecte chaque requête,autorise ou bloqueRéseauTCP / TLSvers le site(bloquée)L'extension est du code chargé par le navigateur.Un moteur de rendu compromis ou une permission révoquée peut l'éliminer.Une page hostile peut voir si elle est installée, et refuser de se charger.Internetserveur publicitaire · traqueur · outil d'analyse
Comment fonctionne typiquement un bloqueur de publicités fondé sur une extension. L'extension vit à l'intérieur du navigateur. Chaque requête sortante lui est soumise pour approbation ; elle bloque celles dont les URL correspondent à ses règles. La page et l'extension partagent le même processus et, dans la plupart des cas, les mêmes permissions.

Cette forme fonctionne — c'est, après tout, ce sur quoi la plupart des gens s'appuient chaque jour — mais elle comporte de véritables limites structurelles :

La page peut s'en rendre compte

Puisque l'extension vit dans le même processus que la page, le JavaScript de la page peut la sonder : « ma requête est-elle vraiment partie ? cette variable est-elle bien définie ? » Des sites entiers (et la plupart des grands titres de presse payants) détectent les requêtes manquantes et refusent de se charger sans elles, exigeant que l'utilisateur « désactive son bloqueur de publicités ».

La page est dans la même zone de confiance

L'extension et la page hostile qu'elle cherche à filtrer partagent un processus de navigateur, un moteur de rendu, parfois un jeu de permissions. Une faille de navigateur suffisamment grave exploitée dans la page désactive l'extension avec le reste. Les extensions sont du code ; elles sont aussi une surface d'attaque.

La requête est déjà née

Au moment où l'extension voit une requête, le navigateur a déjà décidé de la faire, a analysé l'URL et (selon l'API) effectué la résolution DNS. Bloquer à ce stade relève du filtrage, pas de la prévention.

L'API de filtrage s'affaiblit sans cesse

La refonte Manifest v3 de Chrome a contraint ce que peuvent faire les extensions de filtrage, principalement en plafonnant le nombre de règles et en remplaçant le webRequest dynamique par declarativeNetRequest. L'architecture de l'API d'extension est définie par l'éditeur du navigateur, pas par vous.

Comment Bromure s'y prend : le mur n'est pas l'extension.

Le bloqueur de publicités de Bromure n'est pas une extension. Le navigateur lui-même ne contient absolument aucun code de blocage des publicités. À la place, c'est la pile réseau de la VM Linux jetable dans laquelle s'exécute le navigateur qui fait office de bloqueur de publicités — et du point de vue du navigateur, les domaines publicitaires ne résolvent tout simplement pas.

VM INVITÉE · réseau du profilNavigateuraucune extension deblocage installéeProxy Squid:3128 · HTTP/HTTPSrésout via le DNS localdnsmasqrésolveur DNS localsinkhole les correspondancesLISTE DE BLOCAGEgravity.list100k+ domainesrenvoyés vers 0.0.0.0Internetnews.example.comdoubleclick.netadnxs.comBLOQUÉNi la page ni ses scripts ne peuvent voir au-delà du proxy. Depuis l'intérieur du navigateur, les domaines publicitaires n'existent tout simplement pas.
À l'intérieur de la VM d'un profil Bromure, chaque connexion sortante du navigateur est acheminée via un proxy HTTP local. Ce proxy résout chaque domaine via un serveur DNS local dont la liste de « non » est une liste de blocage. Si le domaine est sur la liste, le navigateur reçoit une adresse injoignable et n'ouvre jamais la connexion — scripts de la page compris.

Mécaniquement, deux petits logiciels sans histoire font le travail :

Un proxy HTTP local (Squid)

Chaque requête sortante du navigateur est acheminée de façon transparente via un proxy Squid qui tourne sur localhost:3128 à l'intérieur de la VM. Squid, c'est la tuyauterie : il ne décide pas de ce qui est une publicité, il se contente de faire la résolution DNS et le relais pour le navigateur.

Un résolveur DNS local (dnsmasq)

Squid est configuré pour résoudre chaque domaine via une instance locale de dnsmasq sur 127.0.0.1. La configuration de dnsmasq inclut une liste de blocage d'environ 100 000 domaines — régies publicitaires, traqueurs, outils d'analyse, hôtes connus pour être malveillants. Tout ce qui figure sur la liste est résolu vers 0.0.0.0, qui ne mène nulle part.

Le résultat est un réseau qui, du point de vue du navigateur, a la forme d'internet à ceci près que les domaines publicitaires et de traçage n'ont aucun enregistrement DNS. Le navigateur demande doubleclick.net, reçoit « aucune route », et passe à autre chose. Aucune connexion n'est ouverte. Aucune poignée de main TLS n'est tentée. Aucun cookie ne part nulle part, parce qu'il n'y a pas de nulle part où l'envoyer.

La même idée qui tourne dans les caves depuis des années.

Si vous avez déjà configuré pi-hole, le petit sinkhole DNS que beaucoup de gens font tourner sur un Raspberry Pi pour filtrer les publicités sur tout leur réseau domestique, l'architecture de Bromure vous semblera profondément familière. La liste de blocage sous-jacente est le fichier hosts unifié de Steven Black, le même que celui qu'utilisent ces installations domestiques depuis des années. Le mouvement conceptuel est identique : ne pas essayer de retirer les publicités de la page, mais simplement refuser d'indiquer au navigateur comment trouver le serveur de la publicité en premier lieu.

La différence importante tient à l'endroit vit le sinkhole DNS. Un sinkhole à l'échelle du foyer protège chaque appareil du réseau domestique ; un sinkhole Bromure protège exactement un profil de navigateur. Activez-le pour le profil que vous utilisez pour lire les actualités ; laissez-le désactivé pour le profil où votre banque préfère que vous ne passiez pas par un intergiciel inhabituel.

Ce que cela vous apporte concrètement.

L'extension la bloqueLe navigateur analyse l'URL de la publicité.Une résolution DNS du domaine publicitaire est effectuée.Une tentative de connexion peut démarrer.L'extension oppose son veto au dernier moment.La page peut détecter la requête manquante.CE QUE LE SERVEUR PUBLICITAIRE APPREND« quelqu'un a tenté de nous joindre,depuis l'IP X, puis a renoncé. »Bromure ne demande jamaisLe navigateur interroge le DNS local pour le domaine.dnsmasq répond 0.0.0.0.Aucune connexion réseau n'est ouverte.Pas de TLS, pas de SNI, pas de requête HTTP.La page ne peut pas distinguer cela d'un échec DNS.CE QUE LE SERVEUR PUBLICITAIRE APPRENDrien.Aucune connexion à observer.
Même visite de page, architectures différentes. L'extension laisse la requête commencer et la filtre au tout dernier moment. Bromure refuse la question avant même qu'elle ne soit posée. Le serveur publicitaire ne sait rien de l'utilisateur de Bromure — pas même qu'il a essayé.

Les gains concrets s'accumulent :

Ne peut pas être désactivé par une page compromise

La liste de blocage n'est pas du code chargé par le navigateur ; c'est le réseau du navigateur. Une faille du moteur de rendu, un script hostile, une bibliothèque tierce qui déraille — aucun d'eux ne peut atteindre la configuration de dnsmasq, parce qu'aucun d'eux ne peut sortir du processus du navigateur pour atteindre la pile réseau de la VM.

Les pages ne peuvent pas la contourner du regard

Le JavaScript de la page peut examiner les propriétés de navigator tant qu'il veut ; il ne peut pas voir la configuration DNS du réseau sur lequel il se trouve, parce que ce n'est pas une chose que JavaScript est autorisé à connaître. Pour la page, une publicité bloquée ressemble exactement à un domaine publicitaire tombé en panne pendant une minute.

Aucune surface d'attaque liée à l'extension

Les extensions de blocage des publicités ont, à plus d'une occasion, été compromises — par le magasin d'extensions, par un rachat, ou par une mise à jour malveillante. Il n'y a pas d'extension de ce genre à compromettre dans Bromure, parce qu'il n'y a pas d'extension du tout.

Par profil, activable comme n'importe quelle autre option

Le blocage des publicités est un paramètre par profil (« Bloquer les publicités » dans Confidentialité & sécurité), désactivé par défaut, activé dans les profils que vous choisissez. Votre profil bancaire reste non filtré ; votre profil de lecture quotidienne est propre.

Les limites honnêtes.

Rien dans ce domaine n'est gratuit. Voici quelques choses que l'approche au niveau réseau ne fait délibérément pas, et que vous devez savoir d'avance :

Pas de filtrage cosmétique

Une extension classique peut masquer la case vide à l'emplacement où se trouvait une bannière. Bromure ne réécrit pas la page, donc si l'éditeur a réservé un bloc 728×90, le bloc reste là, vide. C'est un petit désagrément cosmétique sur une poignée de sites, et la contrepartie, c'est qu'il n'y a rien dans la page qu'un script puisse remarquer.

Les publicités en première partie survivent

Si un site sert ses propres publicités depuis son propre domaine (comme le font désormais certaines grandes plateformes technologiques), un blocage au niveau du domaine ne peut pas distinguer « article » de « publicité » — toutes deux vivent sous le même nom d'hôte. C'est une véritable faille ; la réponse, là où cela compte, consiste à ajouter une couche de script de contenu par-dessus, un chantier sur lequel nous nous penchons.

Les murs anti-bloqueur détectent toujours l'absence

Certains sites n'ont pas besoin de trouver le bloqueur de publicités. Ils vérifient simplement si un script précis s'est chargé, et refusent d'afficher l'article si ce n'est pas le cas. Pour ces sites, tout bloqueur — extension ou réseau — sera repéré. C'est un débat de politique éditoriale avec l'éditeur, pas un débat technique avec le bloqueur.

La liste de blocage est livrée avec Bromure

Le fichier gravity.list est intégré au moment de la construction de l'image et se met à jour quand vous mettez Bromure à jour. Il ne va pas chercher les règles les plus récentes toutes les heures comme peut le faire un sinkhole domestique dédié et toujours allumé. Pour une liste fondée sur des noms d'hôte, cela convient généralement — les domaines publicitaires ne changent pas aussi vite que, disons, les domaines de maliciels — mais mieux vaut le savoir.

La forme de la chose.

Le point plus large n'est pas que le bloqueur de publicités de Bromure serait magiquement meilleur qu'uBlock Origin pour faire correspondre des règles. Le moteur de règles d'uBlock est, de fait, plus sophistiqué. Le point concerne l'endroit où a lieu le blocage. Une extension est un arbitre poli qui demande au navigateur de bien vouloir ne pas charger cette chose. Bromure, c'est la route qu'aurait empruntée la requête, discrètement fermée à l'entrée de l'autoroute, avant même que le conducteur ne soit monté dans la voiture.

Le blocage des publicités dans une VM scellée n'est pas une nouvelle fonctionnalité de Bromure ; c'est une conséquence de l'architecture présente depuis le premier jour. La couche réseau de chaque profil est son propre petit monde. Ce monde peut contenir WARP. Il peut contenir un VPN payant. Il peut contenir un transport Tor. Et il peut contenir, gratuitement, le même sinkhole DNS qui filtre discrètement les publicités dans les caves depuis des années — installé, configuré, et limité précisément à la session de navigateur que vous voulez.

Si vous voulez la version longue, la liste de blocage est un fichier texte brut livré à l'intérieur de l'image de la VM — vous pouvez l'inspecter directement à la prochaine version et lire chacun des cent mille domaines qui cesseront discrètement d'exister pour votre navigateur. Si vous voulez juste la version courte, ouvrez Confidentialité & sécurité sur n'importe quel profil Bromure et activez « Bloquer les publicités ». La route est déjà fermée. Il ne vous reste plus qu'à conduire.