Los desarrolladores de malware troyano bancario están siempre buscando formas ingeniosas de distribuir sus implantes e infectar a las víctimas. En una investigación reciente, encontramos un nuevo malware que apunta a los usuarios de más de 60 instituciones bancarias, sobre todo de Brasil. Lo que nos llamó la atención fue la sofisticada cadena de infección, que utiliza varias tecnologías avanzadas que lo diferencian de los troyanos bancarios conocidos.
El malware utiliza el instalador Squirrel para distribuirse, aprovechando NodeJS y un lenguaje de programación multiplataforma relativamente nuevo llamado Nim como cargador para perpetrar la infección. Hemos llamado “Coyote” a este troyano recién descubierto por el papel de los coyotes como depredadores naturales de las ardillas. El lenguaje Nim se define a sí mismo como un “lenguaje de programación de sistemas compilados estáticamente tipado que combina conceptos exitosos de lenguajes maduros como Python, Ada y Modula”. En nuestro Crimeware y ciberamenazas financieras para 2024 identificamos la tendencia de adoptar lenguajes menos populares o multiplataforma por parte de los ciberdelincuentes.
En este artículo, analizaremos el funcionamiento de la cadena de infección y exploraremos las capacidades de este troyano.
Olvídate de los viejos Delphi y MSI
En el panorama de los troyanos bancarios, el uso del lenguaje Delphi o de instaladores MSI es una tendencia recurrente entre los creadores de malware. La comunidad de ciberseguridad sabe muy bien que este método es un vector de infección inicial que se utiliza con mucha frecuencia.
Coyote hace las cosas de una manera un poco diferente. En lugar de seguir el camino habitual de los instaladores MSI, ha optado por un instrumento relativamente nuevo para instalar y actualizar aplicaciones de escritorio de Windows: Squirrel. Como explican los autores, “Squirrel utiliza paquetes NuGet para crear paquetes de instalación y actualización, lo que significa que quizá ya conozcas casi todo lo que necesitas para crear un instalador.”
Utilizando este instrumento, Coyote oculta su cargador de etapa inicial presentándolo como un empaquetador de actualizaciones.
El script cargador escrito en Node.js
Cuando se ejecuta Squirrel, acaba ejecutando una aplicación NodeJS compilada con Electron. Esta aplicación ejecuta un código JavaScript ofuscado(preload.js), cuya función principal es copiar todos los ejecutables que se encuentran en una carpeta local llamada temp a la carpeta de capturas del usuario dentro de la carpeta Videos. A continuación, ejecuta una aplicación firmada desde ese directorio.
Se han identificado varios de los ejecutables que usa, entre ellos los asociados a Chrome y OBS Studio. El troyano bancario se carga de forma lateral junto a una DLL de una dependencia de estos ejecutables. En todos los casos analizados por nuestro equipo, la carga lateral junto a la DLL se produce en la biblioteca libcef.dll.
El cargador Nim
Un elemento intrigante de la cadena de infección es el uso de Nim, un lenguaje de programación relativamente nuevo, para cargar la etapa final. El objetivo del cargador es desempaquetar un ejecutable .NET y ejecutarlo en memoria utilizando el CLR. Esto implica que el cargador pretende cargar el ejecutable y ejecutarlo dentro de su proceso, lo que recuerda al funcionamiento de Donut.
Vale la pena señalar que el mismo punto de entrada, obs-browser-page.exe, se utiliza para cada reinicio de la máquina, sirviendo como un medio de persistencia.
Y por último (aunque no por ello menos importante), el troyano bancario Coyote
Después de todos estos pasos, el troyano logra ejecutarse. Coyote no implementa ninguna ofuscación de código y sólo ofusca las cadenas con cifrado AES.
Para recuperar determinada cadena, llama a un método de descifrado con el índice de la cadena como parámetro. El método de descifrado se basa en la creación de una tabla de datos codificados en base64. Los primeros 16 bytes de cada dato descifrado sirven como IV (Initial Vector, vector inicial), mientras que el resto son los datos cifrados que después se utilizan en la rutina de descifrado AES.
Cada ejecutable genera una clave al azar, y el algoritmo de descifrado AES utiliza las interfaces de cifrado oficiales de .Net. Con este enfoque, para cada acceso a la cadena que Coyote necesita, busca dentro de la tabla y descifra cada cadena con un IV personalizado.
Persistencia y objetivos
Coyote consigue la persistencia abusando de los scripts de inicio de sesión de Windows; primero comprueba si HKCU\Environment\UserInitMprLogonScript existe, y si es así, inserta el valor del registro como la ruta completa a la aplicación firmada, en este caso, obs-browser-page.exe.
El objetivo del troyano Coyote es coherente con el comportamiento típico de los troyanos bancarios. Supervisa todas las aplicaciones abiertas en el sistema de la víctima y espera a que se acceda a la aplicación bancaria o sitio web específicos.
En nuestro análisis hemos identificado al menos 61 solicitudes relacionadas, todas ellas procedentes de Brasil. Esto es un indicio claro de que Coyote es un troyano bancario brasileño, que muestra un comportamiento similar al que reportamos en nuestra entrada del blog acerca de Tetrade.
Comunicación y control con el servidor C2
Cuando se ejecuta y utiliza cualquier aplicación relacionada con la banca, el Coyote bancario se pone en contacto con el C2 con esta información. A continuación, el C2 responde con diversas acciones a realizar en el equipo, que van desde el registro de teclas hasta la toma de capturas de pantalla. La comunicación con el servidor atacante se explicará en las secciones siguientes.
El troyano establece comunicación con su servidor de mando y control utilizando canales SSL con un esquema de autenticación mutua. Esto implica que el troyano posee un certificado del servidor controlado por el atacante y lo utiliza durante el proceso de conexión.
El certificado se almacena como un recurso en un formato cifrado que se descifrada mediante la biblioteca X509 de .Net. Una vez que el malware constata que se ha establecido conexión con el atacante, procede a enviar al servidor la información recopilada de la máquina infectada y de las aplicaciones bancarias. La información que se transmite incluye estos datos:
- Nombre de la máquina
- GUID generado aleatoriamente
- Aplicación bancaria utilizada
Con esta información, el atacante envía un paquete de respuesta que contiene acciones específicas. Para procesar estas acciones, el atacante transmite una cadena con un delimitador aleatorio. A continuación, cada posición de la cadena se convierte en una lista, en la que la primera entrada representa el tipo de comando.
Para determinar el comando deseado, comprueba la longitud de la cadena en el primer parámetro, que es una cadena aleatoria. En otras palabras, la única diferencia entre comandos es el tamaño de la cadena.
Los comandos disponibles más importantes son:
Longitud | Descripción |
---|---|
12 | Hacer una captura de pantalla |
14 | Superponer en la pantalla la ventana de la aplicación bancaria falsa |
15 | Mostrar una ventana en primer plano |
17 | Eliminar un proceso |
18 | Mostrar una superposición a pantalla completa |
21 | Apagar el equipo |
27 | Bloquear el equipo con una imagen bancaria falsa mostrando: “Trabajando con las actualizaciones…” |
31 | Activar un keylogger |
32 | Mover el cursor del ratón a una posición X, Y específica |
El troyano también puede solicitar contraseñas específicas de tarjetas bancarias y crear una ventana de phishing que se superpone a las demás para capturar las credenciales del usuario.
Conclusión
Coyote marca un cambio notable en los troyanos bancarios brasileños. A diferencia de sus homólogos, que suelen utilizar lenguajes más antiguos como Delphi, los desarrolladores de Coyote dominan tecnologías modernas como Node.js, .NET y técnicas avanzadas de empaquetado.
La adición de Nim como cargador añade complejidad al diseño del troyano. Esta evolución pone de manifiesto la creciente sofisticación de las amenazas y muestra cómo sus autores se adaptan y utilizan los lenguajes e i nstrumentos más recientes en sus campañas maliciosas.
Nuestros datos telemétricos revelan que hasta el 90% de las infecciones proceden de Brasil. Todos los productos de Kaspersky detectan la amenaza como HEUR:Trojan-Banker.MSIL.Coyote.gen.
Los clientes de nuestros informes privados de Threat Intelligence Reports pueden acceder a un análisis más detallado de las últimas versiones de Coyote. Para más información, póngase en contacto con crimewareintel@kaspersky.com.
IoC de referencia (indicadores de compromiso)
Basado en host (hash MD5)
03 eacccb664d517772a33255dff96020
071b6efd6d3ace1ad23ee0d6d3eead76
276f14d432601003b6bf0caa8cd82fec
5134e6925ff1397fdda0f3b48afec87b
bf9c9cc94056bcdae6e579e724e8dbbd
Lista de dominios C2
atendesolucao[.]com
servicoasso[.]com
dowfinanceiro[.]com
centralsolucao[.]com
traktinves[.]com
diadaacaodegraca[.]com
segurancasys[.]com
Coyote: un troyano bancario multietapa que abusa del instalador Squirrel