Malware Rilide: Cómo las extensiones de navegador están cambiando los ciberataques

La pantalla de un ordenador muestra una señal de advertencia de malware en forma de triángulo rojo

Introducción a Rilide

Rilide, también conocido como LumaC2 y CookieGenesis, es una sofisticada pieza de malware que se dirige a los navegadores basados en Chromium para secuestrar la actividad de los usuarios y robar datos confidenciales. Descubierto en 2023, Rilide funciona aprovechando las extensiones del navegador para llevar a cabo sus ataques. Rilide abusa de su componente de extensión del navegador para inyectar scripts maliciosos en páginas web. Además de sus capacidades de exfiltración de datos, también cuenta con capacidades avanzadas de robo de criptomonedas, con manipulación de autenticación de dos factores (2FA) para carteras populares y clientes de correo.

Desde principios de 2025, el laboratorio de investigación de Trusteer ha visto más de 50 000 sesiones de usuarios infectados, lo que indica la escala de la actividad de las amenazas. Rilide tiene una campaña mundial en curso detectada por el laboratorio Trusteer que ataca a Norteamérica, Sudamérica, Europa y Japón.

En esta publicación, exploraremos cómo Rilide opera dentro del navegador a través de su extensión y examinaremos las técnicas que utiliza para llevar a cabo sus ataques, particularmente su impacto en las plataformas financieras.

Las capacidades de Rilide ponen de manifiesto el cambio en el panorama de amenazas, pasando de las inyecciones web tradicionales que usan un único código JavaScript en la página a las extensiones de navegador. Las extensiones de navegador facilitan muchas funciones que son bastante difíciles de lograr sin ellas. El siguiente análisis muestra lo poderosa que es una extensión y por qué el malware moderno tiende a usarla.

Man-in-the-browser: antes vs. ahora

En el pasado, la mayoría de los ataques "man-in-the-browser" se ejecutaban mediante malware que escaneaba la memoria del navegador para identificar patrones HTML específicos e inyectaba una etiqueta <script> directamente en el contenido en memoria de la página. A pesar de la intención maliciosa, estos scripts seguían sujetos a los mecanismos de seguridad del navegador, como operar dentro de un entorno sandbox, adherirse a la política del mismo origen y estar vinculados al ciclo de vida de la página en la que se inyectaban.

Por ejemplo, los scripts inyectados no podían acceder a cookies o recursos de otros orígenes, ni podían persistir o ejecutarse una vez que se cerraba la página.

En cambio, los ataques modernos que utilizan extensiones maliciosas del navegador superan la mayoría de estas limitaciones. Las extensiones funcionan independientemente de cualquier página web específica, lo que les permite ejecutarse de forma persistente en segundo plano. También tienen privilegios elevados, lo que les permite saltarse las restricciones de mismo origen, acceder a recursos del navegador como cookies o almacenamiento y permanecer activos incluso cuando no hay páginas abiertas. Este cambio ha convertido a las extensiones del navegador en una poderosa herramienta para los atacantes, ya que proporcionan un nivel de persistencia y control muy superior a los métodos tradicionales de inyección web.

Las extensiones también introdujeron un cambio en el contexto de ejecución de JavaScript, que tiene sus propios beneficios maliciosos. Las inyecciones web tradicionales se ejecutaban en el mismo contexto que el código de la aplicación web, incluidas las herramientas de seguridad. Cualquier evidencia que quede (como elementos de script, peticiones de red, variables js, etc.) podría hacer que el malware sea detectable.

Ahora, hay dos entornos JavaScript diferentes además del contexto de la página:

  1. En primer lugar, está el contexto del script de contenido, que tiene acceso al documento de la página pero está parcialmente aislado del entorno de la página principal.
  2. Además, existe un contexto de código en segundo plano (un service worker), que no tiene acceso al script de contenido ni al entorno de la página principal.

Todas las comunicaciones entre esos contextos se producen a través de interfaces de navegador definidas que no son visibles para la página ni para sus desarrolladores. La mayoría del comportamiento y la evidencia de las extensiones están aislados por diseño, y la detección es especialmente difícil si no hay cambios en el documento principal.

Además de ofrecer una evasión mejorada, el desarrollo de extensiones de navegador también es sencillo, gracias a la amplia funcionalidad incorporada y a los permisos que proporcionan las modernas API de los navegadores. El siguiente análisis demuestra cómo las extensiones facilitan el desarrollo de ataques complejos.

Dado el mayor control, persistencia, capacidades de evasión y facilidad de desarrollo que brindan las extensiones, el cambio de las técnicas tradicionales de "man-in-the-browser" a ataques basados en extensiones no solo es comprensible, sino inevitable, en la evolución de las amenazas basadas en el navegador.

Hombre mirando el ordenador

Refuerce su inteligencia de seguridad 


Manténgase a la vanguardia de las amenazas con noticias e información sobre seguridad, IA y mucho más, semanalmente en el boletín Think. 


Profundice en la extensión del navegador Rilide

Desglose del manifiesto

Comenzaremos nuestro análisis de Rilide con el archivo de manifiesto, un componente crucial que describe la funcionalidad y los niveles de acceso de la extensión, proporcionando las primeras pistas para comprender las capacidades maliciosas de Rilide.

Una de las variantes analizadas se presenta como una extensión de Google Drive:

Código para la descripción de la extensión del manifiesto
Figura 1: Descripción de la extensión del manifiesto

Más adelante, hay una lista de los permisos necesarios. La lista contiene múltiples funcionalidades críticas del navegador, que incluyen, entre otras:

  • "Scripting": permite inyectar y ejecutar código JavaScript en páginas web
  • "Cookies": permite leer, modificar o eliminar las cookies del navegador
  • "WebRequest": observación y modificación de las solicitudes de red realizadas por el navegador
  • "ClipboardRead/Write": lectura y modificación del contenido del portapapeles del usuario
  • "ActiveTab": accede temporalmente al contenido de la pestaña actualmente activa

En "host_permission", la extensión puede acceder e interactuar con <all_ urls>, es decir, cualquier esquema, dominio, ruta y puerto admitidos por el navegador.

Los "scripts de contenido" también están configurados para ejecutarse en todas las URL en document_start, lo que significa que se ejecutan tan pronto como el navegador comienza a cargar la página, antes de que el contenido se renderice por completo.

Código que muestra la configuración del script de manifiesto
Figura 2: Configuración del script de manifiesto

El script main.js incluye capacidades generales de robo de información, mientras que gmail.js se dirige a la página del cliente de correo de Gmail. No obstante, todos los scripts se inyectan en cada página.

En "declarative_net_request", la extensión configura reglas para eliminar múltiples encabezados de política de seguridad de contenido (CSP). Esto permite a Rilide eludir las restricciones de seguridad e inyectar contenido en línea.

En "background", se configura el service worker de la extensión. Aquí es donde el malware monitoriza los eventos del navegador y establece comunicación con el servidor C2. A continuación, profundizaremos en el análisis del script de fondo para comprender mejor cómo el malware escucha los eventos del navegador y ejecuta su estrategia de ataque.

Análisis de scripts de Background.js
Inicialización

Background.js contiene código de inicialización que está configurado para ejecutarse en el evento de instalación de la extensión. Obtiene la información del dispositivo, como detalles de CPU y almacenamiento, usando llamadas a chrome.system y los datos de las extensiones instaladas mediante chrome.mangement. El ID único se genera utilizando el módulo uuid de npm (importado a través de jspm) y se guarda en el almacenamiento local. Por último, todas las cookies se obtienen mediante chrome.cookies.getAll con un parámetro de filtro vacío.

Código de inicialización
Figura 3: Código de inicialización

Estos datos se envían al servidor C2, y la respuesta puede habilitar las capacidades proxy de la extensión. Las inyecciones, los comandos y la configuración del malware también se obtienen durante la inicialización de la extensión.

La parte final de la inicialización consiste en habilitar las reglas de eliminación del CSP, tras lo cual el malware está listo para configurar y supervisar los eventos del navegador. Una vez más, podemos ver claramente los beneficios de utilizar una extensión del navegador frente a las técnicas tradicionales de inyección en la web, ya que facilita la recopilación de toda esta información.

Nuevos métodos de extracción de dominios

Las versiones anteriores de Rilide tenían dominios C2 codificados directamente en los archivos JavaScript. Otras variantes extraían dominios recuperando los detalles de las transacciones de un monedero Bitcoin específico.

La nueva variante analizada aquí incluye código diseñado para obtener dominios de un bot de Telegram. Las llamadas periódicas para obtener los dominios se configuran para ejecutarse cada minuto utilizando las alarmas de Google Chrome.

Este enfoque permite que el malware cambie fácilmente de dominio si uno de ellos es detectado y bloqueado.

Aunque esta variante no contenía los tokens de Telegram, este método probablemente aparecerá en futuras versiones.

código para la extracción de dominios de un bot de Telegram
Figura 4: Extracción de dominios de bot de Telegram

Preparado para la exfiltración de datos

El script de contenido envía todos los valores de los elementos de entrada de la página utilizando chrome.runtime.sendMessage con el tipo de mensaje "new-grabber-info".

El siguiente agente de escucha está configurado en background.js para pasar los datos al servidor C2.

código para el oyente de datos de entrada
Figura 5: Oyente de datos de entrada

Además, el fondo está esperando mensajes de "set-screenshot-result".

Estos mensajes activan la captura de pantalla con chrome.tabs.captureVisibleTab y envían los datos de vuelta al C2.

código para hacer una captura de pantalla y reenviar los datos
Figura 6: Hacer una captura de pantalla y reenviar los datos

Mediante el empleo de estos métodos, si el usuario se conecta a un sitio bancario, se pueden robar una serie de datos sensibles. Esto incluye nombres de usuario y contraseñas, números de cuenta, códigos PIN, detalles de tarjetas de crédito, respuestas a preguntas de seguridad e información del destinatario de la transferencia.

En la última parte de los scripts en segundo plano, las llamadas periódicas para la obtención de comandos y las comprobaciones de proxy se establecen mediante "chrome.alarms". Las alarmas de comandos obtienen una lista de comandos del C2 y los ejecutan uno a uno.

La alarma de verificación de proxy verifica el estado de la conexión del proxy e inicia una nueva si es necesario. Una vez configurados los oyentes, finaliza la ejecución síncrona del script en segundo plano.

cmds.js, ¿qué puede hacer el malware?

cmds.js contiene código que facilita la recepción de un comando (de una lista predefinida) junto con parámetros del C2 y el envío de cualquier resultado, si corresponde.

Algunos comandos interesantes incluyen:

  • "Extensión": habilita una extensión basada en un ID determinado
  • “Push”: crea una notificación del navegador con el contenido obtenido y abre una nueva pestaña al hacer clic en la notificación
  • "Captura de pantalla": captura el contenido de la pestaña visible utilizando "chrome.tab.captureVisibleTab"
  • “Historial”: regresa al historial de navegación
  • “Cookies”: recupera todas las cookies del navegador, igual que en el código de inicialización
  • “URL”: abre una nueva pestaña con la URL indicada

Otros comandos permiten cambiar la configuración de la extensión, obtener información del dispositivo, la URL actual, etc. Este conjunto de comandos permite cambios dinámicos en el flujo de trabajo y la ejecución del malware, lo que lo hace más capaz de atraer la interacción del usuario. La mayoría de estos comandos utilizan funciones de extensión de Chrome integradas, lo que facilita el desarrollo a los autores de malware.

Script de contenido main.js: inyecciones personalizadas y robo de datos

El script de contenido main.js comienza con la biblioteca jQuery inicializada en una función anónima, incrustada completamente en línea sin importaciones externas. A esto le sigue un código ofuscado que ejecuta funciones maliciosas.

La arquitectura de extensiones Chromium permite que las extensiones separen las responsabilidades de inyección y dificulten su detección. El trabajador del servicio descarga y almacena las inyecciones durante el paso de inicialización, mientras que el script de contenido las lee y ejecuta. No se enviaron solicitudes web en el contexto de la página, lo que ayuda a mantener el malware sin detectar. main.js itera todas las inyecciones obtenidas, y si la URL actual coincide con la URL de la inyección, la inyecta.

Rilide utiliza una forma inteligente de inyectar scripts en el DOM.

código para inyección de script
Figura 7: Inyección de scripts

Crea un atributo de documento "onreset" con la inyección como controlador de eventos. Luego envía inmediatamente un evento “reset” personalizado, que ejecuta la inyección y finalmente elimina el atributo.

Este atributo se establece en un momento específico entre la llamada "setAttribute" y la llamada "removeAttribute", lo que lo hace difícil de detectar por parte de las herramientas de seguridad.

La última llamada a la función configura el oyente genérico del ladrón de datos.

Oyente de entrada de scripts de contenido (después de deofuscar y cambiar el nombre de las variables)
Figura 8: Oyente de entrada de scripts de contenido (tras la desofuscación y el cambio de nombre de las variables)

Con un selector jQuery, se seleccionan todos los elementos de entrada y se establece el oyente de eventos "cambiar".

El evento de "cambio" se produce cada vez que se cambia el valor de un campo de entrada y pierde el foco (el usuario hace clic en otro elemento). Por ejemplo, cuando una víctima inicia sesión en su cuenta bancaria, su nombre de usuario se recopila cuando hace clic en el campo de contraseña, y la entrada de contraseña se roba cuando el usuario envía el formulario. Los datos se envían al trabajador del servicio a través de chrome.runtime.sendMessage, que luego lo reenvía a los servidores C2.

Script de contenido gmail.js: ocultar el robo de criptomonedas
 

El objetivo de este script es reemplazar la solicitud de autorización de 2FA de retirada por una solicitud de autorización de nuevo dispositivo. Suponemos que este enfoque evita que los clientes se den cuenta de los retiros no autorizados, ya que es más probable que consideren la autorización de un nuevo dispositivo menos sospechosa que los retiros.

El script comienza con una inicialización en línea de la biblioteca jQuery y una comprobación de que la ubicación actual contiene "mail.google" antes de iniciar la ejecución. La inyección comprueba periódicamente los correos electrónicos de las carteras de criptomonedas más populares y, si se detecta, invoca la función de monedero correspondiente.

Código para buscar correos electrónicos de billeteras de criptomonedas
Figura 9: Búsqueda de correos electrónicos de billeteras de criptomonedas

Los selectores de jQuery son bastante simples y utilizan "divs" que contienen los nombres de las carteras en texto.

Demostraremos la inyección personalizada de un proveedor específico, aunque todos actúan de forma similar.

El código busca cualquier elemento que contenga el texto "Solicitud de retirada" y lo sustituye por "Autorizar nuevo dispositivo".

código para cambiar el texto de la notificación de retirada
Figura 10: Cambio del texto de notificación de retirada

También busca elementos span que contengan el texto “retirada” para reemplazar el contenido de la vista previa del correo electrónico.

Antes de la inyección:

Correo electrónico original de notificación de retirada
Figura 11: Correo electrónico original de notificación de retirada

Después de la inyección:

Correo electrónico de notificación de nuevo dispositivo
Figura 12: Correo electrónico de notificación de nuevo dispositivo

El cuerpo del correo electrónico en sí se encuentra de la siguiente manera:

código para cambiar el contenido del cuerpo del correo electrónico
Figura 13: Cambio del contenido del cuerpo del correo electrónico

En pocas palabras, el script encuentra todos los elementos con la clase CSS "ii" que tienen un elemento descendiente "div" con el texto "verifique la dirección cuidadosamente". También extrae el código de autorización basándose en el elemento y el estilo del texto del código de autorización. Este método para identificar elementos no es muy estable, ya que pequeños cambios en el estilo, el texto o la estructura pueden romperlo.

HTML de correo electrónico de retirada
Figura 14: HTML de correo electrónico de retirada

Por último, el contenido HTML del correo electrónico se sobrescribe con contenido codificado.

Contenido original:

notificación de retirada original redactada
Figura 15: Notificación original de retirada

Contenido nuevo:

nuevo contenido de correo electrónico inyectado
Figura 16: Contenido de correo electrónico inyectado

Este mecanismo permite al actor de amenazas retirar criptomonedas sin alertar al usuario sobre las retiradas.

Código proxy: de la prueba de concepto al malware del mundo real

Otra característica destacada que se implementa sin esfuerzo a través de extensiones es la capacidad de proxy. Rilide permite convertir el navegador de la víctima en un proxy HTTP, reenviando todas las solicitudes mientras utiliza las credenciales y los datos de la víctima.

Esta capacidad es especialmente peligrosa para el fraude financiero, ya que los atacantes pueden acceder a portales bancarios, cuentas comerciales y plataformas de pago sin activar comprobaciones de autenticación adicionales. Pueden iniciar transacciones, modificar la configuración de la cuenta o desviar fondos bajo la apariencia de una actividad legítima del usuario, eludiendo las medidas de seguridad tradicionales, como el seguimiento de la dirección IP. Al hacerse pasar eficazmente por la víctima, los atacantes pueden explotar los mecanismos basados en la confianza para cometer fraudes sin problemas.

Esta funcionalidad fue sorprendentemente sencilla de implementar, ya que se copió directamente de CursedChrome, un proyecto educativo que demostraba una prueba de concepto para este tipo de ataque.

El proxy funciona utilizando el trabajador del servicio de extensiones para configurar una conexión WebSocket con el servidor C2 del atacante. Esta conexión permite al trabajador del servicio recibir comandos enviados por el atacante. Estos comandos dictan las acciones del proxy, como realizar solicitudes o navegar por sitios web. Las solicitudes se realizan utilizando las cookies recopiladas por la víctima y las respuestas se envían de vuelta al C2.

Ejemplo de código CursedChrome:

Código de la función de inicialización de CursedChrome
Figura 17: Código de la función de inicialización de CursedChrome

Ejemplo de código Rilide:

Código de función startProxy de Rilide
Figura 18: Código de la función startProxy de Rilide

Aparte de algunas diferencias de nombres y la ubicación de la definición de la función, el código es el mismo. Este proyecto incluso viene con código backend y una interfaz de usuario (IU) de gestión, lo que facilita la vida de los atacantes.

Mantenerse seguro con extensiones
 

Rilide ejemplifica cómo las extensiones de navegador han transformado el panorama de amenazas para los ataques de man-in-the-browser. Al aprovechar las capacidades inherentes de las extensiones, los atacantes obtienen un control sin precedentes sobre el navegador, lo que permite una explotación sofisticada y persistente que supera con creces las limitaciones de las inyecciones web tradicionales en la página. Este cambio pone de manifiesto la creciente necesidad de vigilancia y de defensas sólidas, ya que la sencillez y la potencia de los ataques basados en extensiones los convierten en un vector atractivo para los ciberdelincuentes.

Para protegerse, los usuarios deben revisar periódicamente las extensiones de navegador instaladas y eliminar rápidamente las que no conozcan o sospechosas.

Además, es fundamental vigilar las cuentas de correo electrónico para detectar actividades inusuales, como intentos de inicio de sesión inesperados, y vigilar de cerca las carteras de criptomonedas para detectar transacciones no autorizadas o acciones desconocidas. Mantenerse proactivo y precavido puede ayudar a mitigar los riesgos que plantea este paradigma de ataque en evolución.

IBM Trusteer le ayuda a detectar fraudes y malware, autenticar usuarios y establecer confianza de identidad en todo el recorrido omnicanal del cliente. Más de 500 organizaciones líderes confían en Trusteer para ayudar a asegurar la experiencia digital de sus clientes y favorecer el crecimiento del negocio.

Indicadores de compromiso

Archivos

historytab.js

 2b72cc2c0c53321a472471c5189fdb56

notif.js

 8679a34885a02e94189c8fec5132245a

config.js

 408d8fa7eade661e9a02b6065b792fca

ico.png

 40de419c81de274c26c63e0f23d91a3f

scrrule.js

 9db73e9a3a24070de075da13fdea01ab

exts.js

 868eb23af363b5790d16103d2dd94178

rules.json

 6c1f6ab3492a615404a70161303de746

manifest.json

 fd7d90a5e31cd19bbc65095d722c1525

utils.js

 bd14616118af50f6e0b886bd90144845

content-scripts-register-polyfill.4.0.0.js

 5bf61a91e003afb1e169e3e3be336cac

app.html

 08785f3794a7ae9aab6b3fa669646794

background.js

 1de94fff2cb80f44d82d69f816139974

main.js

 6c19e1bf9a7eac2c9b44f5e5c0b76d39

gmail.js

 49c851c025506d0a570d75bc00c7605a

csp.js

 15606d8d8d6ca797c2c98c20114619b4

exchangeSettings.js

 2dcf7f099c08f9d074994a0a4f996720

screen.js

 7d0defc1a08d5a58d95f5ca38509c8ef

domain.js

 bb0bc698eb64447a3ab581517273487b

inj.js

 3d67fa8a26390e8819d6bd36a2c5959f

set.js

 8049e7bd36a88f7a393b7ff0746a04db

proxing.js

 b4b2510d7ec41711ef29ddddd4cab09a

cmds.js

 0ebb9b78c38ae45884b85632fe087e49

machine.js

 c43644bed7d94e3ec880af3195e4c906

extFiles.zip

 3113c21eee9704b14437edb5c6f29634

Dominio:
statbrwsr.digital 

Mixture of Experts | 12 de diciembre, episodio 85

Descifrar la IA: resumen semanal de noticias

Únase a nuestro panel de ingenieros, investigadores, responsables de producto y otros profesionales de talla mundial que se abren paso entre el bullicio de la IA para ofrecerle las últimas noticias y conocimientos al respecto.

Soluciones relacionadas
Servicios de respuesta a incidentes

Mejore el programa de respuesta ante incidentes de su organización, minimice el impacto de una vulneración y experimente una respuesta rápida a los incidentes de ciberseguridad

Explore los servicios de respuesta a incidentes
Soluciones de detección y respuesta a amenazas

Utilice las soluciones de detección y respuesta a amenazas de IBM para reforzar su seguridad y acelerar la detección de amenazas.

Explore las soluciones de detección de amenazas
IBM QRadar SOAR Solutions

Optimice los procesos de toma de decisiones, mejore la eficiencia de los SOC y acelere la respuesta ante incidentes con una solución de orquestación y automatización inteligente.

Explore QRadar SOAR
Dé el siguiente paso

Mejore el programa de respuesta ante incidentes de su organización, minimice el impacto de una vulneración y experimente una respuesta rápida a los incidentes de ciberseguridad

  1. Explore los servicios de respuesta a incidentes
  2. Más información sobre IBM X-Force