Desde el laboratorio de investigación de ESET Latinoamérica, hemos encontrado un código malicioso que afecta a los sistemas operativos Windows y se hace pasar por una extensión de seguridad para Google Chrome. Es detectado por las soluciones de ESET como JS/Spy.Banker.CV y se trata de un infostealer con capacidades de robar información sensible.
Este malware se propaga en la región, principalmente por México, mediante archivos adjuntos comprimidos en correos electrónicos que aparentar ser de instituciones financieras reconocidas. En su código se observan palabras nombres de variables y reemplazos en portugués, lo que evidencia que este tipo de amenazas trascienden fronteras.
Esta amenaza tiene la capacidad de detectar que el usuario se encuentra en una página financiera -hallando patrones comunes en este tipo de sitios- y cuando lo hace, puede modificar el DOM (Document Object Model) cambiando cómo se ve y funciona la página, sin que el usuario lo note. De esta forma, presenta formularios apócrifos con la apariencia real. Toda información ingresada en esos formularios es desviada a un servidor controlado por los cibercriminales.
Además, este malware tiene la capacidad de sustituir datos de billeteras de criptomonedas y bancarios del usuario por los de los cibercriminales, lo que habilitaría el desvío de fondos hacia los atacantes.
A continuación, procederemos a explicar el comportamiento de las funciones más importantes de este código malicioso.
Análisis
Durante la etapa de análisis, hemos visto que esta muestra se propaga sobre México mediante archivos adjuntos comprimidos enviados por correo electrónico. También hemos encontrado dentro de la extensión maliciosa dos archivos JavaScript con capacidades para robar datos sensibles, manipular visualmente sitios web y exfiltrar información a servidores de Comando y Control (C2).
La Figura 1 muestra los archivos de la extensión maliciosa persistida en la máquina de una víctima.
En la Figura 2 se puede ver el nombre con el que se instala la aplicación en el navegador, y en la Figura 3 la descripción en portugués de la extensión, haciéndose pasar por una herramienta de seguridad.
Tipos de ofuscación detectados
Las piezas de código malicioso utilizan técnicas de ofuscación para evitar que su código pueda ser legible o incluso evadir tecnologías de detección, algo que es frecuente en muchas campañas vistas en la región.
Durante el análisis de esta campaña, se destaca el uso de técnicas como la fragmentación de cadenas (ej.: "ep\xF3s" + "it") el uso de arrays y funciones indexadas para construir comandos dinámicamente y la inserción de funciones anónimas que se ejecutan asincrónicamente, todas técnicas comunes dentro las utilizadas por cibercriminales, pero que en su conjunto complican el análisis.
Manipulación visual de sitios bancarios
Del análisis del archivo GJJeSS.js detectado como JS./Sp y.Banker.CU (SHA1: 66722C6A38E60EA9557696BB9EDA028171241689) se encuentra que detecta patrones comunes en páginas relacionadas con bancos o pagos, como "CPF", "CNPJ", "valor", y modifica el DOM para engañar al usuario. Esto incluye el reemplazo de datos reales por datos controlados por los atacantes.
A continuación, procederemos a explicar el comportamiento de las funciones más importantes de este código malicioso.
Comportamiento de la función movedep()
Se ejecuta sobre el contenido del <body> de la página buscando patrones de texto relacionados con depósitos bancarios (por ejemplo “epósito”, “CPF”, “Valor”). Si detecta que la página contiene términos como “depósito”, “CPF/CNPJ” y “alor” (probablemente parte de “Valor”), procede a inyectar lógica maliciosa.
-Primero solicita datos remotos de un servidor de comando y control (dracolateama.info) usando peticiones $.get con distintos parámetros (?i=x , ? c=x , ?a=x , ?u=x).
-Tras un retraso (setTimeout), modifica el contenido de la página reemplazando textos bancarios comunes (por ejemplo, cambia “Ag:” por “Agência:”, homogeneiza “Conta Corrente:”), e inserta etiquetas como “(Nosso Parceiro)” en ciertos números de cuenta (Figura 4).
-Además, sustituye nombres de bancos conocidos y sus códigos.
Este comportamiento sugiere que el script redirige valores de cuentas o números bancarios hacia cuentas del atacante al modificar el HTML de depósitos del banco.
Ejemplo de código de reemplazo en movedep()
Comportamiento de la función movewes()
Diseñada para buscar en la página referencias a pagos o direcciones de Bitcoin (Figura 5). Si detecta palabras clave como “QR” y “bitcoin”, ejecuta una expresión regular para identificar direcciones Bitcoin de 34 caracteres. Reemplaza cualquier coincidencia con una dirección fija del atacante, de modo que los pagos en criptomoneda podrían desviarse al monedero del atacante. Este reemplazo se ejecuta al detectar una dirección Bitcoin presente en el contenido HTML de la página, no al interceptar el portapapeles
El engaño utilizado en la función movedep consiste en hacer pasar información bancaria o direcciones de pago falsas como legítimas. Por ejemplo, reemplazando el nombre de la entidad bancaria y cambiando los códigos de institución, el atacante busca desviar depósitos a cuentas que controla. En el caso de criptomonedas, como se ve en el código (Figura 5) sustituye automáticamente cualquier dirección de wallet reconocida por una propia.
Comportamiento de la función mgrtj4j4333dess():
-Recorre todos los formularios de la página (busca inputs de tipo “password” y otros campos textuales).
-A cada formulario con campo de contraseña le añade un listener submit para capturar credenciales al enviar el formulario (Figura 6).
-Al ocurrir el envío, recopila el valor de la contraseña y de otros campos de texto/email/teléfono, así como los textos de los <select> .
-Luego envía estos datos codificados (encodeURIComponent) por $.post a un servidor de exfiltración (appsalve.click/jjavascript/log3.php?logins=1).
-El payload enviado incluye el password (pass1), el usuario o correo (user1), la URL actual (href1), el host (host1), un encadenamiento de todos los campos (enc1) y un identificador id1 = "-" .
Tras definir estas funciones, el script las invoca periódicamente (por ejemplo, tras 3.1 segundos ejecuta mgrtj4j4333dess() y movewes() para asegurar el seguimiento continuo de las acciones del usuario.
Captura de Datos por Medio de Formularios
El otro archivo, whvLon.js, SHA1: 8EE5BCA8E671587940B89D4CDC22BEEDA2EDE958 inspecciona todos los campos <input> de las páginas visitadas en el navegador en busca de aquellos que contengan datos sensibles como contraseñas, correos electrónicos y teléfonos. En el caso de encontrar este tipo de campos (Figura 7) y una vez que el usuario los ha completado, los datos son codificados mediante la función encodeURIComponent (una codificación URL estándar)
A su vez, se recolecta información adicional proveniente de menús desplegables (Figura 8)
Estos datos recolectados se envían mediante una solicitud POST, a un servidor (C2 - appsalve.click) controlado por los ciberatacantes (Figura 9).
Persistencia y Evasión
Durante el análisis hemos notado que la extensión maliciosa de Internet Google Chrome, persiste en la maquina victima sobre la ruta C: \Users\<NOMBRE_USUARIO>\Chrome\1.9.6., Las muestras que contienen la extensión operan de manera sincronizada. Mientras una recolecta datos sensibles, la otra manipula el entorno visual del usuario para inducir a errores o desviar transferencias. Todas las interacciones son canalizadas a dominios maliciosos comunes:
- https[:]//appsalve.click/jjavascript/log3.php
- https[:]//dracolateama.info/test/index.php?[i|c|a|u]=x
Es importante mencionar que esta persistencia actúa sobre el navegador afectado, puntualmente el malware se va a ejecutar cada vez que el mismo este en uso por la víctima.
Aunque el concepto tradicional de persistencia implica la supervivencia a reinicios o sesiones (como en malware instalado en el sistema), en este caso se refiere a una persistencia dentro de la sesión del navegador. El código detectado reinserta dinámicamente eventos maliciosos tras actualizaciones del DOM causadas por navegación dinámica o recargas parciales. Esto asegura que la funcionalidad maliciosa continúe activa mientras el usuario interactúa con la página web afectada que vuelve a insertar los eventos incluso tras actualizaciones parciales del DOM.
Análisis Dinámico
Para el análisis dinámico, ingresamos datos falsos dentro de uno de los sitios afectados para observar efectivamente la captura de datos
Al intentar loguearnos en uno de los sitios que la extensión maliciosa se propone comprometer, y más tarde seguir su actividad, podemos ver cómo se efectúa la exfiltración de datos al dominio (C2) perteneciente a los atacantes.
Conclusión y Recomendaciones
El análisis precedente surge estamos ante un infostealer que posee capacidades para robar información sensible de una víctima cuando completa un formulario en una página de internet. Con capacidad de modificar la wallet y otros datos de pagos de la víctima es una clara demostración de los cibercriminales buscan un rédito financiero.
El uso de capacidades avanzadas de manipulación visual, dirigidas principalmente a usuarios en entornos financieros, así como su arquitectura modular y las técnicas de evasión que obligan a implementar medidas específicas para lograr su detección.
Estamos ante una amenaza que trasciende fronteras y aprovecha la reputación de instituciones financieras en toda la región.
Ante el contexto de este tipo de amenazas es importante verificar las extensiones instaladas en los sistemas y también que las fuentes sean confiables antes de instalar cualquier aplicación.
Indicadores de compromiso (IoC):
Dominios: appsalve.click, dracolateama.info
Wallet BTC: bc1q53usjwlwwpt40mwqtzldxj69gs8qsqsqfz49at
ID fijo en exfiltración: 123461125631441562314
GJJeSS.js - JS/Spy.Banker.CU - 66722C6A38E60EA9557696BB9EDA028171241689
whvLon.js - JS/Spy.Banker.CV - 8EE5BCA8E671587940B89D4CDC22BEEDA2EDE958
Técnicas de MITRE ATT&CK
| Táctica | ID | Nombre | Descripción |
| Initial access | T1056.001 | Phishing - Link | Los atacantes pueden enviar correos electrónicos de phishing selectivo con un enlace malicioso para intentar acceder a los sistemas de las víctimas |
| Credential access | TA0006 | Credentials in file or input forms | Los adversarios pueden buscar archivos con contraseñas en sistemas de archivos locales y recursos compartidos remotos |
| Modify Authentication Process (opcional) | T1556 | Credential Access (si aplica) | Los adversarios pueden modificar los mecanismos y procesos de autenticación para acceder a las credenciales de los usuarios o permitir un acceso no autorizado a las cuentas |
| Obfuscated Files or Information | T1027 | Defense Evasion | Los adversarios pueden intentar hacer que un archivo o archivo ejecutable sea difícil de descubrir o analizar, cifrando, codificando u ofuscando de otro modo su contenido en el sistema o en tránsito |
| Masquerading | T1036 | Defense Evasion | Los adversarios pueden intentar manipular las características de sus artefactos para hacerlos parecer legítimos o benignos para los usuarios y/o las herramientas de seguridad |
| Deobfuscate/Decode Files or Info | T1140 | Defense Evasion | Los adversarios pueden usar archivos o información ofuscados para ocultar del análisis los artefactos de una intrusión |







