Cómo Bromure bloquea los anuncios antes de que la página llegue a verlos
La mayoría de los bloqueadores de anuncios son extensiones del navegador, y la mayoría de las extensiones del navegador se ejecutan dentro del mismo proceso que la página de la que intentan protegerte. Bromure lo hace de otra manera. Aquí te contamos cómo, y por qué importa.
Un bloqueador de anuncios que vive dentro del navegador está intentando arbitrar una pelea desde dentro del propio ring. Bromure traslada al árbitro a la red misma, donde ninguna página puede alcanzarlo, ningún script puede tocarlo y ningún banner «anti-bloqueadores» puede discutir con él.
El bloqueo de anuncios es la función más popular de los navegadores que, sin embargo, no viene incluida en ellos. Cientos de millones de personas instalan una extensión de terceros el primer día porque la web moderna es sencillamente inutilizable sin una. Eso, en sí mismo, ya es un mal olor de diseño. Pero la manera en que casi todos los bloqueadores de anuncios funcionan merece atención, porque la arquitectura resulta importar muchísimo —tanto para lo bien que funcionan como para lo que ocurre cuando la página intenta activamente pelear contra ellos.
Este artículo repasa cómo suele funcionar un bloqueador de anuncios, por qué esa forma tiene límites reales y cómo Bromure adopta un enfoque distinto que toma prestada su idea central de una herramienta que quizá hayas oído correr en una Raspberry Pi en el sótano de algún conocido.
Los anuncios no son solo molestos. Son un problema de carga, un problema de privacidad y un vector de ataque.
Es fácil olvidar, después de unos años usando un bloqueador de anuncios, cómo es la web en crudo. Un artículo de noticias popular, cargado sin ningún filtrado, suele pedir recursos a entre 30 y 80 dominios de terceros. La mayoría son analíticas, píxeles de seguimiento y puntos finales de pujas en tiempo real. Añaden peso, añaden latencia, dejan cookies en nombre de empresas de las que nunca has oído hablar y —como se comentaba en el artículo sobre ransomware de principios de este mes— son uno de los vehículos silenciosos de distribución de malware, porque a las redes publicitarias se las engaña de vez en cuando para que sirvan creatividades maliciosas en sitios legítimos.
Bloquear esas peticiones no es, por tanto, un problema cosmético. Es una victoria en rendimiento, una victoria en privacidad y —porque las redes publicitarias son un canal habitual de distribución de malware— una auténtica victoria en seguridad. La única pregunta es cómo las bloqueas.
Cómo bloquea los anuncios una extensión de navegador típica.
Casi todos los bloqueadores de anuncios del mercado, incluidos los más
populares que probablemente tengas instalados, son extensiones del
navegador. Lo que significa que, arquitectónicamente, viven dentro del
navegador —ejecutan JavaScript dentro del proceso del navegador, registran
callbacks contra las APIs de red del navegador (webRequest,
declarativeNetRequest) e inspeccionan cada petición que el navegador
está a punto de hacer.
Esa forma funciona —al fin y al cabo, es en lo que confía la mayoría de la gente todos los días— pero tiene límites estructurales reales:
La página se entera
Como la extensión vive en el mismo proceso que la página, el propio JavaScript de la página puede sondearla: «¿salió realmente mi petición?, ¿acabó definiéndose esta variable?». Sitios enteros (y la mayoría de los medios con muro de pago) detectan las peticiones que faltan y se niegan a cargar sin ellas, exigiendo al usuario que «desactive su bloqueador de anuncios».
La página está en la misma zona de confianza
La extensión y la página hostil que intenta filtrar comparten un proceso del navegador, un renderizador y a veces un conjunto de permisos. Un exploit del navegador suficientemente malo desde la página desactiva la extensión junto con todo lo demás. Las extensiones son código; también son superficie de ataque.
La petición ya ha nacido
Cuando la extensión ve una petición, el navegador ya ha decidido hacerla, ha analizado la URL y (según la API) ha realizado la búsqueda DNS. Bloquear en esa fase es filtrar, no prevenir.
La API de filtrado cada vez da menos margen
La reescritura Manifest v3 de Chrome restringió lo que las
extensiones de filtrado pueden hacer, principalmente poniendo un
tope al número de reglas y reemplazando el webRequest dinámico
por declarativeNetRequest. La arquitectura de la API de
extensiones la decide el fabricante del navegador, no tú.
Cómo lo hace Bromure: el muro no es la extensión.
El bloqueador de anuncios de Bromure no es una extensión. El propio navegador no tiene ningún código de bloqueo de anuncios. En su lugar, la pila de red de la VM Linux desechable dentro de la que se ejecuta el navegador es el bloqueador de anuncios —y, desde el punto de vista del navegador, los dominios de anuncios simplemente no se resuelven.
En términos mecánicos, dos pequeñas y aburridas piezas de software hacen el trabajo:
Un proxy HTTP local (Squid)
Cada petición saliente del navegador se enruta de forma transparente
a través de un proxy Squid que corre en localhost:3128 dentro de
la VM. Squid es la fontanería: no decide qué es un anuncio, solo se
encarga de la resolución DNS y del reenvío para el navegador.
Un resolutor DNS local (dnsmasq)
Se le indica a Squid que resuelva cada dominio a través de una
instancia local de dnsmasq en 127.0.0.1. La configuración de
dnsmasq incluye una lista de bloqueo de unos 100 000 dominios
—redes publicitarias, rastreadores, analíticas, hosts conocidos por
ser maliciosos—. Todo lo que está en la lista se resuelve a
0.0.0.0, que no va a ninguna parte.
El resultado es una red que, desde la perspectiva del navegador, tiene
forma de internet, salvo que los dominios de anuncios y de seguimiento no
tienen ningún registro DNS. El navegador pide doubleclick.net, recibe
un «no hay ruta» y sigue adelante. No se abre ninguna conexión. No se
intenta ningún handshake TLS. Ninguna cookie va a ninguna parte, porque
no hay ninguna parte a la que enviarla.
La misma idea que lleva años corriendo en sótanos.
Si alguna vez has montado pi-hole, el pequeño sinkhole DNS que mucha gente ejecuta en una Raspberry Pi para filtrar los anuncios de toda su red doméstica, la arquitectura de Bromure te resultará profundamente familiar. La lista de bloqueo subyacente es el archivo hosts unificado de Steven Black, el mismo que esas instalaciones caseras llevan años usando. El movimiento conceptual es idéntico: no intentes quitar los anuncios de la página, simplemente niégate a decirle al navegador cómo encontrar el servidor del anuncio en primer lugar.
La diferencia importante es dónde vive el sinkhole. Un sinkhole a nivel de hogar protege todos los dispositivos de la red doméstica; un sinkhole de Bromure protege exactamente un perfil del navegador. Actívalo en el perfil que usas para leer noticias; déjalo apagado en el perfil donde tu banco preferiría que no enrutaras a través de ningún middleware inusual.
Lo que realmente te aporta esto.
Las ventajas prácticas se acumulan:
No la puede desactivar una página comprometida
La lista de bloqueo no es código cargado por el navegador; es la propia red del navegador. Un exploit del renderizador, un script hostil, una biblioteca de terceros que se comporta mal —ninguno de ellos puede alcanzar la configuración de dnsmasq, porque ninguno puede salir del proceso del navegador hasta la pila de red de la VM.
Las páginas no pueden ver alrededor
El JavaScript de la página puede comprobar las propiedades de
navigator todo el día; no puede ver la configuración DNS de la
red en la que está, porque eso no es algo que JavaScript tenga
permitido saber. Para la página, un anuncio bloqueado parece
exactamente un dominio de anuncios que se cayó durante un minuto.
Sin superficie de ataque por extensiones
Las extensiones de bloqueo de anuncios se han visto comprometidas en más de una ocasión —por la tienda de extensiones, por una adquisición o por una actualización maliciosa—. En Bromure no hay tal extensión que comprometer, porque no hay extensión.
Por perfil, se activa como cualquier otra función
El bloqueo de anuncios es un ajuste por perfil («Bloquear anuncios» en Privacidad y Seguridad), desactivado por defecto, activado en los perfiles que tú elijas. Tu perfil de banca se queda sin filtrar; tu perfil de lectura diaria queda limpio.
Los límites honestos.
Nada en este terreno sale gratis. Algunas cosas que el enfoque a nivel de red deliberadamente no hace, y que deberías conocer desde el principio:
Sin filtrado cosmético
Una extensión clásica puede ocultar el hueco vacío donde antes había un banner. Bromure no reescribe la página, así que si el editor reservó un bloque de 728×90, el bloque se queda ahí, en blanco. Es una pequeña molestia estética en unos pocos sitios, y la contrapartida es que no queda nada en la página que un script pueda detectar.
Los anuncios de primera parte sobreviven
Si un sitio sirve sus propios anuncios desde su propio dominio (como hacen ahora algunas grandes plataformas tecnológicas), el bloqueo a nivel de dominio no puede distinguir «artículo» de «anuncio» —ambos viven en el mismo hostname—. Es una brecha real; la respuesta, donde importa, es una capa de content scripts por encima, algo en lo que estamos trabajando.
Los muros anti-bloqueadores siguen detectando la ausencia
Algunos sitios no necesitan encontrar el bloqueador. Simplemente comprueban si se cargó un script concreto y se niegan a mostrar el artículo si no. Para esos sitios, cualquier bloqueador —ya sea extensión o red— quedará atrapado. Esa es una discusión de política con el editor, no una cuestión técnica con el bloqueador.
La lista de bloqueo viene con Bromure
gravity.list se integra en el momento de compilar la imagen y se
actualiza cuando actualizas Bromure. No descarga las reglas más
recientes cada hora como sí puede hacer un sinkhole doméstico
dedicado y siempre encendido. Para una lista basada en hostnames,
esto suele ser suficiente —los dominios de anuncios no rotan tan
rápido como, por ejemplo, los dominios de malware— pero conviene
saberlo.
La forma del asunto.
El punto más amplio no es que el bloqueador de anuncios de Bromure sea mágicamente mejor emparejando reglas que uBlock Origin. El motor de reglas de uBlock es, de hecho, más sofisticado. El punto es dónde sucede el bloqueo. Una extensión es un árbitro educado pidiéndole al navegador que, por favor, no cargue esa cosa. Bromure es la carretera por la que la petición habría viajado, cerrada silenciosamente a la entrada de la autopista, antes de que el conductor se subiera al coche.
El bloqueo de anuncios en una VM sellada no es una función nueva de Bromure; es una consecuencia de la arquitectura que estuvo ahí desde el primer día. La capa de red de cada perfil es su propio pequeño mundo. Ese mundo puede llevar WARP dentro. Puede llevar una VPN de pago. Puede llevar un transporte Tor. Y puede llevar, gratis, el mismo sinkhole DNS que lleva años filtrando anuncios silenciosamente en los sótanos de mucha gente —instalado, configurado y limitado exactamente a la sesión de navegador en la que lo quieres.
Si quieres la versión larga, la lista de bloqueo es un archivo de texto plano incluido dentro de la imagen de la VM —puedes inspeccionarla directamente en la próxima versión y leer cada uno de los cien mil dominios que van a dejar de existir silenciosamente para tu navegador. Si solo quieres la versión corta, abre Privacidad y Seguridad en cualquier perfil de Bromure y activa «Bloquear anuncios». La carretera ya está cerrada. Solo tienes que conducir.