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

Una pantalla de computadora que muestra una señal de advertencia de triángulo rojo para malware

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 del usuario y robar datos confidenciales. Descubierto en 2023, Rilide opera 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 billeteras 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 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 resaltan el cambio en el escenario de amenazas desde las inyecciones web tradicionales que utilizan un único código JavaScript en la página hacia las extensiones del navegador. Las extensiones del navegador facilitan muchas funciones que son bastante difíciles de lograr sin ellas. El siguiente análisis muestra cuán poderosa es una extensión y por qué el malware moderno tiende a usarla.

Ataques de intermediario: antes frente a ahora

En el pasado, la mayoría de los ataques de "hombre en el navegador" se ejecutaban mediante el escaneo de la memoria del navegador para identificar patrones HTML específicos e inyectar 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 de espacio aislado, adherirse a la política del mismo origen y estar vinculados al ciclo de vida de la página en la que se inyectaron.

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.

Por el contrario, los ataques modernos que utilizan extensiones de navegador maliciosas 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 eludir las restricciones del mismo origen, acceder a recursos de todo el navegador, como cookies o almacenamiento, y permanecer activos incluso cuando no hay páginas abiertas. Este cambio ha convertido a las extensiones de navegador en una herramienta poderosa para los atacantes, ya que proporcionan un nivel de persistencia y control mucho mayor que 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, solicitudes 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, hay un contexto de código en segundo plano (un trabajador de servicio), que no tiene acceso al script de contenido ni al entorno de la página principal.

Todas las comunicaciones entre esos contextos ocurren 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 mayor evasión, desarrollar extensiones para navegadores también es sencillo, gracias a la amplia funcionalidad y los permisos integrados que proporcionan las API de los navegadores modernos. 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 "hombre en el navegador" a ataques basados en extensiones no solo es comprensible, sino inevitable, en la evolución de las amenazas basadas en el navegador.

Hombre mirando una computadora

Fortalezca su inteligencia de seguridad 


Adelántese cada semana a las amenazas con novedades e información sobre seguridad, IA y más con 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 Manifest

Más adelante, hay una lista de 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”: observar y modificar 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 admitido 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 cualquier contenido se represente 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 la Política de seguridad de contenido (CSP). Esto permite a Rilide eludir las restricciones de seguridad e inyectar contenido en línea.

En "fondo", se configura el service worker de la extensión. Aquí es donde el malware monitorea los eventos del navegador y establece comunicación con el servidor C2. A continuación, profundizaremos en el análisis del script en segundo plano 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 los detalles de la CPU y el almacenamiento, mediante llamadas a chrome.system y los datos de las extensiones instaladas mediante chrome.mangement. El ID único se genera mediante el módulo npm uuid (importado a través de jspm) y se guarda en el almacenamiento local. Finalmente, 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 de 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 configurarse 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 web, lo 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 una cartera de Bitcoin específica.

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 están configuradas para ejecutarse cada minuto mediante 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 tokens de Telegram, es probable que este método aparezca en futuras versiones.

Código para la extracción de dominios de un bot de Telegram
Figura 4: Extracción de dominio del bot de Telegram

Listo para la exfiltración de datos

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

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: Escucha 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 enviar 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

Al emplear estos métodos, si el usuario inicia sesión en un sitio bancario, se puede robar una serie de datos confidenciales. 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 comando obtienen una lista de comandos del C2 y los ejecutan uno por 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 que se establecen 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”: habilite una extensión basada en un ID determinado
  • “Push”: cree una notificación del navegador con el contenido obtenido y abra una nueva pestaña en el clic de notificación
  • “Captura de pantalla”: capture el contenido de la pestaña visible con “chrome.tab.captureVisibleTab”
  • “Historial”: devuelve el historial de navegación
  • “Cookies”: obtenga todas las cookies del navegador, igual que en el código de inicialización
  • “URL”: abre una nueva pestaña con la URL dada

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 para 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 dentro de 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 de Chromium permite que las extensiones separen las responsabilidades de inyección y lo hacen más difícil de detectar. El service worker 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 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 dificulta su detección por parte de las herramientas de seguridad.

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

Escuchador de entrada de scripts de contenido (tras la desofuscación y el cambio de nombre de variables)
Figura 8: Escucha de entrada de script de contenido (después de 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 detector de eventos "cambiar".

El evento “cambio” ocurre 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 se roba cuando el usuario envía el formulario. Los datos se envían al service worker mediante 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 retiro por una nueva solicitud de autorización de dispositivo. Especulamos que este enfoque mantiene a los clientes inconscientes de los retiros no autorizados, ya que es más probable que perciban la autorización del nuevo dispositivo como menos sospechosa que los retiros.

El script comienza con una inicialización en línea de la biblioteca jQuery y una verificación de que la ubicación actual contiene “mail.google” antes de iniciar la ejecución. La inyección revisa periódicamente los correos electrónicos de monederos de criptomonedas populares y, si se detecta, invoca la función correspondiente de la cartera.

código para buscar correos electrónicos de billeteras criptográficas
Figura 9: Búsqueda de correos electrónicos de billeteras criptográficas

Los selectores de jQuery son bastante simples y utilizan "divs" que contienen los nombres de las billeteras 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 retiro" y lo reemplaza por "Autorizar nuevo dispositivo".

Código para cambiar el texto de notificación de retirada
Figura 10: Cambio del texto de notificación de retiro

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

Antes de la inyección:

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

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

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

Contenido original:

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

Nuevo contenido:

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

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 verificaciones de autenticación adicionales. Pueden iniciar transacciones, modificar la configuración de la cuenta o desviar fondos bajo la apariencia de actividad legítima del usuario, sin pasar por las medidas de seguridad tradicionales como el seguimiento de direcciones IP. Al suplantar eficazmente a la víctima, los atacantes pueden explotar los mecanismos basados en la confianza para cometer fraude 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 service worker 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 de 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 función de inicialización de CursedChrome

Ejemplo de código Rilide:

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

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

Mantenerse seguro con las extensiones
.

Rilide ejemplifica cómo las extensiones de navegador han transformado el escenario de amenazas para los ataques de hombre en el navegador. 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 destaca la creciente necesidad de vigilancia y defensas sólidas, ya que la simplicidad y el poder de los ataques basados en extensiones los convierten en un vector atractivo para los delincuentes cibernéticos.

Para protegerse, los usuarios deben revisar regularmente sus extensiones de navegador instaladas, eliminando rápidamente las desconocidas o sospechosas.

Además, es fundamental vigilar las cuentas de email 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 cauteloso 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 proteger los recorridos digitales de sus clientes y apoyar 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

aplicación.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

Decodificación de 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 revuelo de la IA para ofrecerle las últimas noticias e insights 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 violació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 fortalecer su seguridad y acelerar la detección de amenazas.

Explorar 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 violación y experimente una respuesta rápida a los incidentes de ciberseguridad

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