Volver a todas las publicaciones
Publicado el · por Renaud Deraison

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.

«Entrega de paquete»«Reembolso de Hacienda»«Soporte de Microsoft»«Banco bloqueado»«Abuela, soy yo»«Verifica tu cuenta»Tu padre o madrea una contraseña de distanciaNinguna cantidad de formación del tipo «detecta la errata» va a arreglar esto.
Una sola persona mayor, sentada en casa, recibe todo el peso de una industria de ataque global — SMS, correo, llamadas, mensajes sociales, avisos falsos de envíos, estafas de reembolsos. Los consejos anti-phishing asumen que puede clasificar todo eso a mano. No puede.

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.

DENTRO DEL SANDBOX (VM)La página cargael content scriptse enganchaBarrido localformularios · URL · marcaQR · portapapelesPre-filtroomite sitios populares,de confianza, SSOPinta el banner del veredictoseguro · sospechoso · phishingvsock · port 5950EN LA API DE BROMURECaché{domain, path}TTL de 1 hClaude Haikuveredicto JSONestructuradoVeredicto JSONveredicto · confianza · motivo
El pipeline completo. Los pasos en la zona azul se ejecutan dentro de la VM sandbox del invitado. Los pasos en la zona naranja se ejecutan en el servidor de Bromure. La barra amarilla es un canal vsock — no la red — que transporta los hallazgos entre ambos.

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 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.

LO QUE VE EL USUARIOpaypai-secure.xyz/loginPayPalInicia sesión en tu cuentaVerifica tu cuenta ahora, por favor.Correo electrónicoContraseñaIniciar sesiónLO QUE VE EL MODELO{"domain": "paypai-secure.xyz","urlSuspicion": ["brand-in-subdomain"],"brandSignals": {"title": "Inicia sesión en tu cuenta","logoDomain": "i.imgur.com"},"domainMismatch": {"claimed": "paypal","actual": "paypai-secure.xyz"},"sensitiveFields": ["password"],"pageStructure": ["only-login-forms","minimal-navigation", "data-uri-favicon"],"contentIndicators": ["urgency-language"]}
Lo que el modelo ve realmente. A la izquierda, la página puede parecer perfecta hasta el último píxel para un humano; a la derecha, el modelo trabaja sobre un pequeño dossier estructurado de señales — no sobre los píxeles renderizados.

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.

SEGURO · no se muestra nada(sin banner — la página simplemente carga)SOSPECHOSO · banner ámbar, descartable!Página sospechosaEsta página te está pidiendo tu contraseña, pero es la primera vez que visitas este dominio.Conozco este sitio×PHISHING · intersticial rojo, la acción por defecto es volver atrásPhishing detectadoEste sitio está suplantando a PayPal. No introduzcas tus credenciales.paypai-secure.xyzVolver a un lugar seguroContinuar de todos modos
Los tres banners posibles. Silencio cuando es seguro. Un aviso ámbar descartable si es sospechoso, con una salida «Conozco este sitio». Un intersticial rojo si es phishing, donde la acción por defecto es volver atrás.

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.

PÁGINAlogin.bank.comcontraseña: ••••••••INTERCEPCIÓN!La contraseña va a otro sitioEsta página está a punto de enviartu contraseña a otro dominio.CancelarContinuarla acción por defecto es CancelarDESTINO DEL FORMULARIOcreds.attacker.exampledominio distintono está en la allowlist SSObloqueado hasta que se confirme
El cortafuegos de contraseña entre dominios. Antes de cualquier veredicto del servidor, cualquier envío de formulario cuyo destino de la contraseña no coincida con el dominio de la página se detiene con una confirmación explícita — nombrando ambos dominios en lenguaje claro.

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.

VM INVITADA (navegador)Página webphishing-guardcontent scriptworker en segundo planovsock :5950HOST macOSPhishingAnalysisBridgerelaya los hallazgos del invitadoúnica ruta hacia la APIHTTPSAPI DE BROMUREbromure.io/v1/analyzememcacheTTL de 1 hHaiku 4.5veredicto JSONLa página web no tiene acceso a ninguno de estos saltos.
El recorrido de los datos. Los hallazgos van desde la extensión del invitado, por vsock al puente del host, y luego por HTTPS a la API. La página web nunca toca ninguno de estos saltos directamente.

La URL de la página que se comprueba 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.