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.
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:
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.
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 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 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.
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.
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.
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.
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.
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.
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.
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 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 para los autores de malware.
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.
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.
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.
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.
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".
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:
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:
Nuevo contenido:
Este mecanismo permite al actor de amenazas retirar criptomonedas sin alertar al usuario sobre los retiros.
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:
Ejemplo de código Rilide:
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.
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.
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