Cómo Bromure frena el phishing antes de que llegue a tus padres
Una mirada paso a paso al sistema anti-phishing de Bromure — el barrido local, el modelo, el veredicto, y por qué tus padres, tus abuelos y el vecino del otro lado del pasillo son exactamente para quienes lo construimos.
Tus padres no necesitan otra charla sobre hacer clic con cuidado en los enlaces. Necesitan un navegador que vea la trampa en la que están a punto de caer — y que diga algo, a tiempo, con palabras que entiendan.
Algunos de ustedes ya han recibido la llamada. Esa en la que la voz de tu madre ya suena apagada, ya pequeña, y te dice creo que hice algo mal en la computadora. Otros están esperándola. El objetivo de este artículo es describir, en detalle, la maquinaria que construimos para que esa llamada ocurra menos seguido — y, cuando ocurra, para que el daño se quede en una advertencia en lugar de una cuenta vaciada.
La industria del ataque siempre ha cazado a las personas mayores.
El phishing nunca ha sido un juego de gente astuta. Es un juego probabilístico: una cadena de producción industrial que genera páginas de inicio de sesión falsas por miles, suplanta marcas conocidas, redacta mensajes con tono de urgencia y los lanza por correo, SMS, redes sociales y llamadas telefónicas. Al atacante solo le hace falta que una persona, un día, en un momento de distracción, escriba una contraseña en la casilla equivocada. Abuelos, padres, vecinas viudas, cualquiera que creció confiando en la carta que llegaba del banco — no son lentos, son confiados. Los atacantes lo saben, y lo explotan deliberadamente.
Los consejos de seguridad que se les dan a los abuelos siempre han sido variaciones de ten más cuidado. Revisa la URL. Pasa el cursor sobre el enlace. No confíes en el remitente. El problema no es que los abuelos sean descuidados. El problema es que la industria del ataque contrata profesionales cuyo trabajo a tiempo completo es derrotar el «ten más cuidado». El abismo entre quienes defienden y quienes atacan es, a estas alturas, vergonzoso.
Lo que construimos, de un vistazo.
Cuando una página se carga dentro de Bromure, un pequeño inspector se ejecuta dentro del navegador sellado en la VM. Vigila la página como un acomodador receloso en la puerta — mirando la URL, los formularios, el texto visible, los enlaces, cualquier código QR, incluso lo que la página intenta escribir en silencio en el portapapeles. Si algo no cuadra, los hallazgos del inspector viajan por un canal aislado hasta un modelo. El modelo lee las señales, decide un veredicto, escribe una explicación de una sola frase y la devuelve. Bromure pinta el veredicto como un banner sobre la página. Una página claramente de phishing se redirige a una advertencia de sitio bloqueado antes de que pueda engañar a nadie.
El resto de este artículo es el cómo. Es deliberadamente detallado. Si tus padres son la razón por la que estás leyendo esto, puedes saltar directamente a Dónde van realmente tus datos — y quédate tranquilo: la respuesta corta es que la función está desactivada por defecto, pide consentimiento y todo lo que hace está documentado más abajo.
Paso uno — el barrido local.
Antes de que nada salga de tu computadora, un content script se ejecuta dentro de la VM invitada. Inspecciona la página en varias pasadas independientes. Ninguna es costosa. Todas se ejecutan en el navegador, en tu propia computadora, dentro del mismo sandbox sellado que la propia página.
Campos de contraseña, en el instante en que aparecen
En el momento en que un <input type="password"> se engancha al DOM
—antes incluso de que lo hayas enfocado— el inspector ya ha anotado el
dominio y ha marcado si alguna vez habías introducido una contraseña
aquí antes. ¿Primera vez en un dominio nuevo? Solo eso ya es una señal.
Estructura del formulario
Páginas que solo contienen un inicio de sesión sin navegación. Formularios que hacen POST a un dominio distinto al de la barra de direcciones. Formularios que fingen ser una marca cuyo logo está enlazado desde otro host. Cada uno, por sí solo, es débil. Juntos, inclinan la balanza.
Desajuste de marca
Si la página dice «Apple ID» pero el dominio no es de Apple, o si el logo se sirve desde un host sospechoso, ese desajuste queda registrado. No hace falta ninguna petición de red — es simple coincidencia de patrones sobre lo que ya está en la página.
Dominios homoglifos
Dominios como аррӏе.com — que se ven igual que «apple.com» pero están
construidos con caracteres cirílicos que se parecen — son casi con
certeza phishing. El inspector los detecta comparando la forma
renderizada contra un conjunto de caracteres confundibles conocidos.
Vocabulario de estafa
«Confirma tu contraseña.» «Verifica tu cuenta.» «Has sido seleccionado.» «Haz clic aquí para reclamar tu premio.» Cada frase es una señal débil. Una página que contiene tres de ellas, dentro de un formulario de inicio de sesión, en un dominio del que nadie ha oído hablar, es otra historia.
Códigos QR y cargas útiles en el portapapeles
Un código QR que se decodifica como una URI de pago en cripto hacia una billetera que no tiene nada que ver. Una página que escribe en silencio un comando de shell en tu portapapeles mientras te dice que «pulses Win+R y pegues». Son patrones de ataque modernos que se saltan cualquier filtro tradicional.
Un pre-filtro local también se asegura de que el inspector no moleste al servidor con sitios por los que nadie necesita preocuparse. Los cien mil dominios más populares de la lista Tranco, más un conjunto curado de más de 30 proveedores SSO (Google, Microsoft, Okta, Apple, y demás), se ignoran en silencio mientras nada más parezca sospechoso. El banco real de tu madre, su farmacia real y su correo real nunca harán que se consulte al servidor.
Si tras el barrido local no hay nada interesante, la historia termina aquí. Ninguna petición sale de la computadora.
Paso dos — la segunda opinión.
Si el dossier sí es interesante — o si acaba de aparecer un campo de contraseña en un dominio desconocido — se envía un reporte estructurado para su evaluación. No una captura de pantalla. No el DOM completo. Un resumen acotado y saneado de señales.
El paquete incluye la URL, el dominio, el texto visible (limitado a unos 800 caracteres, sin caracteres de control), un resumen de cada formulario (tipos de campos, etiquetas de los botones y URL de acción), qué campos sensibles se detectaron, el título y los encabezados principales de la página, desde dónde se sirve la imagen del logo, marcas de desajuste de dominio y homoglifos, banderas rojas a nivel de URL (brand-in-subdomain, punycode, exceso de guiones), marcas estructurales (only-login-forms, autocompletado de contraseña desactivado, favicon en data-URI, iframes ocultos), el contenido de cualquier código QR que se haya decodificado y las cargas útiles de portapapeles que se hayan escrito en silencio. Todas las cadenas están limitadas a longitudes cortas; los arrays están acotados a pocos elementos; los caracteres de control no sobreviven.
En el servidor, el dossier se le entrega a Claude Haiku 4.5 — un modelo pequeño y rápido. El prompt del sistema le enseña al modelo a tratar todo lo que hay en el dossier como evidencia forense no confiable: a asumir que la página fue construida por alguien que sabía que el prompt existía y que la escribió para confundirlo. El prompt guía al modelo por nueve comprobaciones ordenadas (análisis de dominio, suplantación de marca, estructura de la página, captura de credenciales, enlaces sospechosos, contenido de estafa, códigos QR, cargas útiles en el portapapeles, síntesis final) y le exige emitir un único objeto JSON:
{
"verdict": "phishing" | "suspicious" | "safe",
"confidence": 0.0,
"reason": "una sola frase corta, en lenguaje sencillo"
}
Los umbrales están calibrados a propósito. Por encima de 0.85, el veredicto es phishing y el sitio se bloquea. Entre 0.4 y 0.84 es sospechoso y se muestra un banner de advertencia. Por debajo de 0.4 es seguro y no se muestra nada. Una sola señal débil — una palabra de estafa, un favicon desajustado — no supera el umbral por sí sola. Al modelo se le dice, de forma explícita, que un falso positivo sobre la farmacia de tu abuela es peor que dejar pasar una estafa mediocre.
Dos caminos rápidos se saltan el modelo por completo cuando la respuesta ya es obvia:
- Atajo por desajuste de marca — si la página afirma ser PayPal pero
el dominio es
paypai-secure.xyz, el servidor devuelve sospechoso de inmediato, sin llamada al LLM y sin coste. - Acierto de caché — los veredictos se indexan por
{domain, normalized path}y se almacenan en memcache durante una hora. Una segunda visita a la misma página no cuesta nada y responde en milisegundos.
Paso tres — el veredicto en la página.
El veredicto vuelve, y Bromure lo pinta en línea — en la propia página, sobre el contenido. Sin ventana emergente. Sin un modal que tus padres tengan que cerrar antes de poder ver a qué venían.
La línea de motivo siempre es una única frase, escrita para la persona que la lee, no para quien depura el código. «Este sitio está suplantando a PayPal. No introduzcas tus credenciales.» es lo que dice el banner — no una puntuación de confianza, no una traza de señales, no una lista de coincidencias de regex. El objetivo es que tu madre pueda leer el banner una vez y saber qué hacer.
Cada vez que se descarta un banner de sospecha, el descarte queda limitado a la sesión actual, o se promueve a la lista de confianza del perfil si ella hace clic en Conozco este sitio. La decisión de confiar es suya, no del modelo.
El cortafuegos entre dominios — una red de seguridad que no necesita veredicto.
Incluso antes de que llegue cualquier veredicto, Bromure aplica una regla
rígida: una contraseña nunca se envía a un dominio distinto al de la
barra de direcciones sin preguntar. Si un formulario en login.bank.com
está a punto de hacer POST a credentials.attacker.example, el envío se
intercepta y aparece un modal.
Una breve lista curada de proveedores de identidad conocidos — Google, Microsoft, Okta, Apple y unas cuantas decenas más — exime a los inicios de sesión federados legítimos de este cortafuegos. Todo lo demás recibe el modal, siempre. Esta única regla, por sí sola, atrapa una enorme cantidad de páginas de phishing de credenciales antes incluso de que el modelo haya devuelto un veredicto.
Dónde van realmente tus datos.
Dos restricciones guían el recorrido de los datos. La primera es el consentimiento. La segunda, el aislamiento.
Consentimiento. La función está desactivada en cada perfil nuevo.
Para activarla, el usuario abre Privacidad y seguridad y se encuentra
con un modal dedicado que describe, antes de que se toque cualquier
interruptor, exactamente qué se envía (URL, texto de la página,
estructura de formularios, señales de advertencia), a dónde va (un
servidor operado por Bromure en bromure.io), cuánto tiempo se conserva
(registros de corta duración, para prevención de abuso y mejora del
modelo) y cómo desactivarla. La función solo está disponible en perfiles
persistentes — no en sesiones efímeras y descartables — para que una
sesión de investigación anónima no filtre datos al servidor por accidente.
Si instalas Bromure en el Mac de tu abuela y le activas la función, el
banner que ella ve es la prueba de que la decisión se tomó a propósito,
en su nombre, por alguien en quien confía.
Aislamiento. El navegador no está conectado directamente a internet. El inspector tampoco. Todos los hallazgos viajan por un canal vsock desde la VM invitada hasta el host, por un puerto interno — no por la interfaz de red que ven las páginas web, ni a través de ningún proxy que la página pueda influenciar. El host relaya la petición a la API, recibe el veredicto y se lo devuelve al inspector. Ninguna página web del mundo puede llegar al puente vsock; ninguna página puede llegar al host directamente; ninguna página puede siquiera saber que el puente existe.
La URL de la página que se comprueba sí se registra brevemente en el servidor, para prevención de abuso. El texto visible se envía al modelo para su análisis y no se conserva después de la respuesta. Nada de lo que hayas escrito en un formulario está nunca en el paquete. Si desactivas la función, no se envía absolutamente ningún dato.
Rápido en las páginas que ya conoces.
Llamar a un modelo de lenguaje en cada carga de página haría que el navegador se sintiera pesado. Bromure cachea los veredictos de forma agresiva para que las páginas más visitadas de internet sean prácticamente gratis de evaluar después de la primera visita — y si el servidor llegara a estar inalcanzable, el barrido local sigue haciendo su trabajo.
Primero la caché, el modelo al final
Los veredictos se cachean por {domain, normalized path} durante
una hora. Una segunda visita a la misma página responde en
milisegundos, sin tocar el modelo. Los atajos por desajuste de marca
se saltan el modelo por completo.
El barrido local es el suelo mínimo
Si el servidor está inalcanzable o lento, el barrido local sigue funcionando. Los banners para los casos más obvios — contraseñas entre dominios, dominios homoglifos, cargas útiles de portapapeles — se producen íntegramente dentro de tu computadora, sin necesidad de red.
La promesa, cumplida.
Dijimos en el primer artículo que la defensa debería ser un segundo par de ojos que nunca parpadea. Esto es lo que ese par de ojos hace realmente, dentro de Bromure, ahora mismo.
Tu madre no debería tener que aprobar un examen de seguridad para leer las noticias. Tu padre no debería tener que saber qué es un homoglifo. Tu abuelo no debería tener que sentirse estúpido porque una voz educada por teléfono le dijo que instalara una cosa. El navegador debería ver la trampa, a tiempo, y decirlo — en una frase, no en jerga — antes de que una contraseña salga del teclado.
Para eso está el anti-phishing de Bromure. Por eso está desactivado por defecto, documentado antes de activarse, aislado de la página y barato de ejecutar a escala. Instálalo en el Mac de tus padres. Guíalos por el panel de Privacidad y seguridad. Activa la función. Y luego vete a cenar.