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.
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:
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.
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:
Más adelante, hay una lista de los permisos necesarios. La lista contiene múltiples funcionalidades críticas del navegador, que incluyen, entre otras:
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.
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.
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.
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.
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.
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.
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.
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 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:
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.
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.
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.
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.
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.
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".
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:
Después de la inyección:
El cuerpo del correo electrónico en sí se encuentra de la siguiente manera:
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.
Por último, el contenido HTML del correo electrónico se sobrescribe con contenido codificado.
Contenido original:
Contenido nuevo:
Este mecanismo permite al actor de amenazas retirar criptomonedas sin alertar al usuario sobre las retiradas.
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:
Ejemplo de código 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.
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.
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