Investigadores de ESET han estado rastreando un troyano bancario que desde 2019 ha estado apuntando a usuarios corporativos de distintas industrias en Brasil, afectando a sectores como ingeniería, salud, retail, manufactura, finanzas, transporte y gobierno.
Esta nueva amenaza, a la que hemos llamado Janeleiro, intenta engañar a sus víctimas utilizando ventanas emergentes diseñadas para parecerse a las que utilizan los sitios web de algunos de los bancos más grandes de Brasil. Estas ventanas emergentes contienen formularios falsos, con el objetivo de engañar a las víctimas del malware para que ingresen sus credenciales bancarias e información personal. Esta información es capturada y exfiltrada por el malware a sus servidores de C&C. Para la implementación del núcleo de esta técnica, Janeleiro sigue exactamente el mismo modelo que algunas de las familias de malware más destacadas que se dirigen a la región de América Latina, como Casbaneiro, Grandoreiro, Mekotio, Amavaldo y Vadokrist, entre otros.
A diferencia de esas conocidas familias de malware, Janeleiro está escrito en Visual Basic .NET, una gran desviación con respecto al lenguaje de programación favorito (Delphi) que otras familias de troyanos bancarios que apuntan a la región han estado usando durante años. Janeleiro ha estado evolucionando con el objetivo de brindar a los operadores más control para manipular y ajustar sus falsas ventanas emergentes en función de lo que necesitan para realizar el ataque, enviar información de los clics del mouse y de las pulsaciones del teclado, y grabar en tiempo real la pantalla y la información ingresada por el usuario. La naturaleza de estos tipos de ataques no se caracteriza por sus capacidades de automatización, sino más bien por el enfoque práctico: en muchos casos, el operador debe ajustar las ventanas mediante comandos en tiempo real.
Los operadores parecen cómodos usando GitHub para almacenar sus módulos, administrando su página de organización y cargando nuevos repositorios todos los días en los cuales almacenan los archivos con las listas de los servidores de C&C que los troyanos recuperan para conectarse con sus operadores. Hacer que el malware dependa de una sola fuente es un enfoque interesante, pero ¿y si le dijéramos que la versión más nueva de Janeleiro solo vive un día?
El blanco: Brasil
Basándonos en nuestros datos de telemetría, podemos afirmar que este malware apunta solo a usuarios corporativos. Los correos electrónicos maliciosos son enviados a empresas en Brasil, y pese a que no creemos que se trate de ataques dirigidos, parece que se envían en pequeños lotes. Según nuestra telemetría, los sectores afectados son ingeniería, salud, retail, manufactura, finanzas, transporte y gobierno.
En la Figura 1 se muestra un ejemplo de los correos de phishing que utiliza Janeleiro: una falsa notificación relacionada con una factura impaga. Contiene un enlace que lleva a un servidor comprometido. La página cargada simplemente redirige a la descarga de un archivo ZIP alojado en Azure. Algunos de los correos enviados por los atacantes no llevan adelante una redirección a través de un servidor comprometido, sino que conducen directamente al archivo ZIP.
La URL de los servidores que alojan estos archivos ZIP con Janeleiro presentan la misma convención que otras URL que hemos visto utilizar para distribuir otras familias de troyanos bancarios (consulte la sección Indicadores de Compromiso). En algunos casos, a través de estas URL se ha distribuido en diferentes momentos tanto a Janeleiro como a otros troyanos bancarios escritos en Delphi. Esto sugiere que los distintos grupos criminales comparten el mismo proveedor para enviar correos de spam y para alojar su malware, o que son el mismo grupo. Aún no hemos determinado qué hipótesis es la correcta.
En la Figura 2 se muestra una descripción general del proceso de ataque.
El archivo ZIP contiene un instalador MSI que carga la DLL principal del troyano. De hecho, son varias las familias de malware en la región que prefieren la técnica de utilizar un instalador MSI. Janeleiro recupera la dirección IP pública de la computadora afectada y usa un servicio web para intentar geolocalizarla. Si el valor del código de país devuelto no coincide con BR, el malware se cierra. Si la verificación de geolocalización es aprobada, Janeleiro recopila información de la máquina comprometida, lo cual incluye:
- Fecha y hora actual
- Nombre de la máquina y nombre de usuario
- Arquitectura y nombre completo del SO
- Versión de malware
- Nombre de la región obtenida al geolocalizar la computadora
La información se carga en un sitio web con el propósito de rastrear los ataques exitosos. Después de eso, Janeleiro recupera las direcciones IP de los servidores de C&C de una página de organización de GitHub aparentemente creada por los criminales. A partir de ahí está listo para iniciar su núcleo de funcionalidades y esperar los comandos de un operador.
En 2020, ESET publicó un whitepaper que detalla los hallazgos sobre la conexión existente entre algunas de las familias de troyanos bancarios más prominentes en América Latina, incluidas Casbaneiro, Grandoreiro, Amavaldo, entre otras. Las similitudes descritas en ese documento están en la implementación del núcleo del troyano: notificar al operador cuando hay una ventana activa con un nombre o título interesante basado en una lista de palabras clave predefinidas, y usar una ventana emergente falsa para engañar a las potenciales víctimas haciéndoles creer que están ingresando información sensible en un sitio web legítimo. Este proceso se ilustra en el diagrama de flujo de la Figura 3.
Janeleiro sigue exactamente el mismo modelo de implementación del núcleo que otras once familias de malware que también tienen como objetivo Brasil. En la Figura 4 podemos ver algunas de las falsas ventanas emergentes creadas por Janeleiro.
Janeleiro en acción
Janeleiro comienza a enumerar ventanas y a revisar sus títulos intentando encontrar palabras clave interesantes (como se muestra en la Figura 5) que indicarían que el usuario está visitando el sitio web de una entidad bancaria de interés, especialmente aquellas que son soportadas por su implementación de las falsas ventanas emergentes.
Cuando se encuentra una de las palabras clave, Janeleiro intenta inmediatamente recuperar las direcciones de sus servidores de C&C de GitHub y se conecta a ellos. Estas falsas ventanas emergentes se crean de forma dinámica bajo demanda y son controladas por el atacante a través de comandos enviados al malware, ya que pasan por varias etapas para engañar al usuario mientras el atacante, en tiempo real, recibe capturas de pantalla, las pulsaciones de teclado registradas e información que se ingresa en los formularios falsos.
El hecho de que los actores de amenazas abusen de GitHub no es nada nuevo; sin embargo, Janeleiro lo hace de formas bastante interesantes: los operadores han creado una página de organización de GitHub a la cual modifican su nombre todos los días con el formato SLK<dd/mm/yyyy> donde <dd/mm/yyyy> es la fecha actual.
En la Figura 6 se muestra una captura de pantalla de la página de organización de GitHub tal como se veía el 15 de marzo de 2021.
Diariamente, el operador novoescritorio1-alberto crea un nuevo repositorio siguiendo este formato de nombres. El repositorio tiene como finalidad contener un archivo con la lista de direcciones IP de los servidores de C&C de Janeleiro a los cuales se conecta para informar a sus operadores, recibir comandos y exfiltrar información en tiempo real.
En la Figura 7 puede observarse una captura de pantalla que muestra uno de los repositorios en la página de organización de GitHub atribuida a los operadores de Janeleiro, incluido el nombre de usuario de la cuenta que realiza los commits.
En la Figura 8 se observa una captura de pantalla de una rama secundaria en el repositorio.
Hemos notificado a GitHub de esta actividad, pero al momento de escribir esta publicación no se han realizado acciones contra la página de la organización ni contra la cuenta que crea el repositorio con nuevas direcciones del servidor de C&C.
En la versión más reciente de Janeleiro, la versión 0.0.3, los desarrolladores introdujeron una característica de cifrado/descifrado interesante utilizando una biblioteca de código abierto llamada EncryptDecryptUtils. El nuevo procedimiento de descifrado se muestra en la Figura 9.
Para descifrar una string, Janeleiro cifra la string resultante de la fecha actual y el resultado se utiliza como una frase de contraseña y un valor salt para crear una nueva clave para el descifrado. Esto tiene un efecto extremadamente importante: la versión más reciente de Janeleiro solo puede descifrar sus strings en un día previsto. Ese día podría ser el mismo en que se cifraron las strings o un día próximo. Si se realiza cualquier otro día el descifrado falla.
Esto también es así para los contenidos del archivo SLK en la rama principal: la lista cifrada y codificada en base 64 de servidores de C&C, tal como se aprecia en la Figura 10.
Los contenidos son cifrados con el mismo procedimiento: cuando Janeleiro descifra el contenido del archivo debe hacerlo en una fecha específica (la fecha actual) para que funcione como se espera.
Evolución de Janeleiro
Janeleiro tiene un valor de versión interno (como se muestra en la Figura 11) que los atacantes pueden usar para identificar qué versión de su malware comprometió exitosamente una máquina. Para marzo de 2021 habíamos identificado cuatro versiones, pero dos de ellas comparten el mismo número de versión interno.
Si bien en 2021 hemos visto las versiones 0.0.2 y 0.0.3, estábamos interesados en encontrar una pieza clave faltante en la evolución de Janeleiro: la versión 0.0.1, que debería haber existido a fines de 2019 o principios de 2020. Para sorpresa nuestra, encontramos en su lugar muestras de la versión 0.0.4 que datan de 2019. Estas nuevas muestras del troyano fueron implementadas por un componente loader de DLL junto con un ladrón de contraseñas, lo que significa que el grupo detrás de Janeleiro cuenta con otras herramientas en su arsenal.
En la Figura 12 puede observarse una descripción general de las versiones de Janeleiro desde 2019 hasta 2021.
La inconsistencia en la línea de tiempo con respecto a la versión interna del malware sugiere dos cosas. Por un lado, que estaba en desarrollo desde 2018, y por el otro, que en 2020 decidieron cambiar a una versión anterior del código para mejorar esa versión y refinar el procesamiento de comandos para que el operador tenga un mejor control del troyano durante el ataque.
Características que diferencian a Janeleiro de otros troyanos
Si bien Janeleiro sigue el mismo modelo que otras familias de malware que ESET ha documentado en la región para la implementación del núcleo de sus falsas ventanas emergentes, se distingue de esas familias de malware de varias maneras:
- Está escrito en Visual Basic .NET: El caso curioso de Brasil es que generalmente los troyanos bancarios que apuntan a usuarios de este país son desarrollados en Delphi, el lenguaje de programación elegido por varios actores de amenazas que aparentemente trabajan juntos compartiendo herramientas e infraestructura. La preferencia de Janeleiro por VB.NET es una desviación notable de lo que parece ser la norma para la región.
- Sin ofuscación del binario: si bien Janeleiro hace uso de una leve ofuscación al generar nombres aleatorios para sus clases, módulos, nombres de métodos, parámetros y cifrado de strings, no emplea empaquetadores para dificultar la detección y el análisis. Otros troyanos como Grandoreiro, Mekotio, Ousaban, Vadokrist y Guildma hacen un uso intensivo de Themida y de técnicas de relleno de binario.
- Sin algoritmos de cifrado personalizados: los desarrolladores de Janeleiro confían en las funciones criptográficas proporcionadas por .NET Framework, así como en proyectos de código abierto para el cifrado/descifrado de strings, con preferencia por los algoritmos AES y RSA. Troyanos como Casbaneiro, Grandoreiro, Amavaldo, Mispadu y Guildma, entre otros, utilizan algoritmos de cifrado personalizados, incluidas técnicas de ofuscación utilizando tablas de strings.
- Método de ejecución simple: el instalador MSI no implementa otros componentes además de la DLL principal del troyano ni ejecuta otras instrucciones que no sean cargar y ejecutar una de las exportaciones de la DLL que instala en el sistema. No hemos encontrado muestras de un instalador MSI que ejecute scripts ofuscados, herramientas de desempaquetado o componentes para la carga lateral de DLL, lo cual es popular en otras familias de malware que apuntan a la región.
- Sin defensa contra el software de seguridad: algunos de los bancos más grandes de Brasil solicitan a sus clientes que instalen un módulo de seguridad antes de permitirles el acceso a sus cuentas bancarias en línea; por ejemplo, el software antifraude Warsaw. A menudo, los troyanos bancarios de LATAM intentan averiguar si dicho software está instalado en la máquina comprometida e informan a los atacantes. Algunas familias de malware como Grandoreiro y Guildma intentan deshabilitarlo en el Firewall de Windows o deshabilitar su controlador.
- Utiliza código de NjRAT: Janeleiro está lejos de ser otra encarnación del conocido NjRAT, pero utiliza las funciones de captura SocketClient y Remote Desktop de NjRAT, así como otras funciones. NjRAT no se usa comúnmente, al menos por los troyanos bancarios de LATAM, tal vez debido a la preferencia por usar troyanos personalizados en Delphi. Sin embargo, entre otros códigos maliciosos, NjRAT se ha utilizado en la Operación Spalax, una campaña que apunta específicamente a Colombia.
Comandos
Los comandos con parámetros son recibidos desde el servidor C&C cifrados con el mismo algoritmo usado para cifrar strings (ver sección Apéndice A). Un formato de comando típico es el siguiente: %CommandName%%PredefinedSeparatorKeyword%%Parameters%.
Después del descifrado, el comando se divide en un array de strings; cada parte del comando está separada por una palabra clave predefinida hardcodeada en la configuración del malware —todas las versiones que analizamos usan |'meio'|, que separa el nombre del comando y cada parámetro.
La Figura 13 muestra cómo Janeleiro verifica el nombre del comando y ejecuta la acción solicitada.
Cuando Janeleiro envía datos al operador lo hace a través de un formato similar: %CommandName%%PredefinedSeparatorKeyword%%Encoded data%.
La mayoría de los comandos de Janeleiro son para controlar ventanas, el mouse y el teclado, y sus falsas ventanas emergentes. A medida que el desarrollo evolucionó de la versión 0.0.2A a la 0.0.3, se agregaron más comandos que ofrecían al operador un control más refinado:
- Comandos para controlar una ventana específica
- Enumerar y enviar información sobre ventanas (título, clase, identificador)
- Ajustar el tamaño específico de la ventana, minimizar, maximizar
- Dimensiones de la pantalla
- Eliminar todos los procesos de chrome.exe y reiniciar chrome.exe con los argumentos --disable-gpu
- Capturas de pantalla en tiempo real
- Registrar las pulsaciones de teclado en tiempo real
- Enviar clics del mouse
- Mostrar o cerrar una ventana emergente falsa en particular
- Comandos adicionales, tales como enviar fecha y hora, desconectar el enchufe, terminar su propio proceso
Conclusión
La naturaleza experimental de Janeleiro, yendo y viniendo entre diferentes versiones, nos habla de un actor que todavía está tratando de encontrar la mejor manera de llevar adelante su objetivo, pero esto no quiere decir que tiene menos experiencia que la competencia: Janeleiro sigue el mismo modelo para la implementación del núcleo de las ventanas emergentes falsas como muchos troyanos bancarios de LATAM, esto no parece ser una coincidencia o inspiración: este actor emplea y distribuye Janeleiro compartiendo la misma infraestructura que algunas de las familias de malware activas más prominentes. A medida que continuamos rastreando las actividades de este actor, el tiempo dirá con qué nuevos desarrollos aparecerán en el futuro.
Por cualquier consulta o para realizar el envío de muestras relacionadas con el tema, contáctenos a través de threatintel@eset.com.
Un agradecimiento especial a Johnatan Camargo Zacarias del banco Itaú, por su ayuda con la investigación.
Indicadores de Compromiso (IoCs)
Puede encontrar una lista completa de indicadores de compromiso (IoC) y muestras en nuestro repositorio de GitHub.
Hashes SHA-1
Versión 0.0.4
SHA-1 | Description | ESET detection name |
---|---|---|
CF117E5CA26594F497E0F15106518FEE52B88D8D | MSI file | MSIL/TrojanDownloader.Agent.FSC |
D16AC192499192F06A3903192A4AA57A28CCCA5A | Console.exe loader | MSIL/TrojanDownloader.Agent.FSC |
462D6AD77860D3D523D2CAFBC227F012952E513C | #rowspan# | MSIL/Kryptik.TBD |
0A5BBEC328FDD4E8B2379AF770DF8B180411B05D | LoadDllMSI.dll loader | MSIL/TrojanDownloader.Agent.FSC |
0AA349050B7EF173BFA34B92687554E81EEB28FF | System.Logins.Initial.dll | MSIL/Agent.TIX |
5B19E2D1950ADD701864D5F0F18A1111AAABEA28 | #rowspan# | #rowspan# |
186E590239083A5B54971CAB66A58301230164C2 | System.Modules.Initial.dll | #rowspan# |
E1B2FD94F16237379E4CAD6832A6FCE7F543DC40 | System.Modules.Initial.dll | MSIL/Janeleiro.A |
4061B2FBEB7F1026E54EE928867169D1B001B7A5 | #rowspan# | #rowspan# |
Versión 0.0.2A
SHA-1 | Description | ESET detection name |
---|---|---|
8674E61B421A905DA8B866A194680D08D27D77AE | Main Trojan Loader | MSIL/Agent.AAI |
2E5F7D5F680152E738B8910E694651D48126382A | #rowspan# | MSIL/Janeleiro.A |
06E4F11A2A6EF8284C6AAC5A924D186410257650 | Main Trojan | MSIL/Agent.AAI |
Versión 0.0.2B
SHA-1 | Description | ESET detection name |
---|---|---|
291A5F0DF18CC68FA0DA1B7F401EAD17C9FBDD7F | MSI file | MSIL/Janeleiro.A |
FB246A5A1105B83DFA8032394759DBC23AB81529 | #rowspan# | #rowspan# |
6F6FF405F6DA50B517E82FF9D1A546D8F13EC3F7 | Main trojan | #rowspan# |
742E0AEDC8970D47F16F5549A6B61D839485DE3C | #rowspan# | #rowspan# |
Versión 0.0.3
SHA-1 | Description | ESET detection name |
---|---|---|
455FAF2A741C28BA1EFCE8635AC0FCE935C080FF | MSI file | MSIL/Janeleiro.A |
D71EB97FC1F5FE50D608518D2820CB96F2A3376F | #rowspan# | #rowspan# |
158DA5AB85BFAC471DC2B2EE66FD99AEF7432DBB | Main trojan | #rowspan# |
6BFAEFCC0930DA5A2BAEC19723C8C835A003D1EC | #rowspan# | #rowspan# |
URL de descarga
En el siguiente <NNNNNNNNNNN> hay un número aleatorio entre 10000000000 y 90000000000.
Descargando solo Janeleiro
- https://recuperaglobaldanfeonline.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNNN>
- https://protocolo-faturamento-servico.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://acessoriapremierfantasiafaturas.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
Descargando Janeleiro y otros troyanos bancarios en Delphi
- https://portalrotulosfechamento.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://servicosemitidosglobalnfe.southcentralus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://emissaocomprovanteatrasado.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
Descargando bankers en Delphi
- https://emitidasfaturasfevereiro.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://dinamicoscontratosvencidos.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://arquivosemitidoscomsucesso.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://fatura-digital-arquiv-lo.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://nota-eletronica-servicos.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://eletronicadanfe.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
Servidores C&C
Estas son las direcciones IP de los servidores de C&C donde Janeleiro se conecta para reportar, recibir comandos y enviar datos:
- 52.204.58[.]11
- 35.174.60[.]172
Estas son las URL de seguimiento a las que Janeleiro envía información sobre el sistema comprometido durante la instalación:
- http://tasoofile.us-east-1.elasticbeanstalk[.]com/count
- http://slkvemnemim.us-east-1.elasticbeanstalk[.]com/count
- http://checa-env.cf3tefmhmr.eu-north-1.elasticbeanstalk[.]com/cnt/
Estas son las URL utilizadas por System.Logins.dll para exfiltrar los datos recolectados:
- http://comunicador.duckdns[.]org/catalista/emails/checkuser.php
- http://comunicador.duckdns[.]org/catalista/lixo/index.php
IP asociadas al dominio:
- 178.79.178[.]203
- 138.197.101[.]4
Técnicas de MITRE ATT&CK
Nota: Esta tabla se creó utilizando la versión 8 del framework MITRE ATT & CK.
Tactic | ID | Name | Description |
---|---|---|---|
Resource Development | T1584.004 | Compromise Infrastructure: Server | In some cases, malicious emails sent to targets contain links to a compromised server that redirects to the download of Janeleiro. |
Initial Access | T1566.002 | Phishing: Spearphishing Link | Attackers send malicious emails that have a download link for Janeleiro malware. |
Execution | T1204.001 | User Execution: Malicious Link | Phishing emails sent by the attackers contain a link to download a ZIP archive that holds an MSI installer with Janeleiro malware. |
Persistence | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | Janeleiro achieves persistence by adding itself to the Run registry key (in v0.0.3 of the malware). |
T1547.009 | Boot or Logon Autostart Execution: Shortcut Modification | Janeleiro creates a LNK file for persistence (in v0.0.4, v0.0.2A and v0.0.2B of the malware). | |
Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | Janeleiro v0.0.2B is obfuscated and its strings are RSA-encrypted. Version 0.0.3 uses AES for string encryption. |
Credential Access | T1555.003 | Credentials from Password Stores: Credentials from Web Browsers | Janeleiro v0.0.4 can download a DLL that steals passwords from Chrome, Firefox and Opera browsers. |
T1552.001 | Unsecured Credentials: Credentials In Files | Janeleiro v0.0.4 can download a DLL that obtains passwords stored in files from several applications such as FileZilla, Pidgin and Thunderbird. | |
Discovery | T1087.003 | Account Discovery: Email Account | Janeleiro v0.0.4 can download a DLL that collects Gmail addresses. |
T1010 | Application Window Discovery | Janeleiro collects information about open windows so the attacker can decide to inject pop-ups. | |
T1082 | System Information Discovery | Janeleiro collects information from the victim’s machine, such as username, OS and architecture. | |
T1033 | System Owner/User Discovery | Janeleiro collects the username from the victim’s machine. | |
T1124 | System Time Discovery | Janeleiro collects current date and time when the victim is compromised. | |
Collection | T1115 | Clipboard Data | Janeleiro uses a clipboard event handler to access clipboard data. |
T1056.001 | Input Capture: Keylogging | Janeleiro can perform keylogging. | |
T1113 | Screen Capture | Janeleiro can capture screenshots of the victim’s desktop. | |
T1056.002 | Input Capture: GUI Input Capture | Janeleiro displays fake forms on top of banking sites to intercept credentials from victims. | |
Command and Control | T1095 | Non-Application Layer Protocol | Janeleiro uses TCP for C&C communications. |
T1102.001 | Web Service: Dead Drop Resolver | Janeleiro uses GitHub repositories to store C&C information. | |
Exfiltration | T1041 | Exfiltration Over C2 Channel | Janeleiro exfiltrates data over the same channel used for C&C. |
Apéndice A: Resumen de la familia de malware Janeleiro
Aquí está cada encarnación que hemos descubierto de Janeleiro desde 2019 hasta marzo de 2021.
Versión 0.0.4
- Periodo de actividad: 2019 - Posiblemente todavía activo.
- La primera versión de Janeleiro (que conocemos) vino en la forma de un instalador MSI y al menos dos variantes:
-
- Variante 1: instalador MSI carga una DLL llamada internamente LoadDllMSI.dll
- Variante 2: el instalador MSI ejecuta Console.exe, que verifica los privilegios y carga un assembly DLL embebido llamado LoadSystem.dll.
-
Tanto LoadDllMSI.dll como LoadSystem.dll realizan las mismas tareas:
- Crear una carpeta de instalación
- Descargar y almacenar dos módulos: Logins.Initial.dll y System.Modules.Initial.dll. Los dos módulos se descargan de una cuenta de GitHub que, al momento de escribir este artículo, la misma fue cerrada.
- Crear varios Shortcuts en lugares estratégicos
- Registrar el compromiso exitoso del sistema en un sitio web de seguimiento
System.Logins: es un ladrón de contraseñas para Google Chrome, FileZilla, Mozilla Firefox, Opera, Pidgin y Mozilla Thunderbird. Además, recolecta información del correo electrónico de Gmail. Toda la información es exfiltrada a dos sitios web. La versión 0.0.4 es la única que implementa esta herramienta maliciosa.
System.Modules: es el troyano principal de Janeleiro, implementado como una aplicación de Windows Forms compilada como DLL. Esta versión tenía la capacidad de crear dinámicamente ventanas emergentes falsas utilizando varios Formularios para varias entidades bancarias, incluidos bancos que operan en México, aunque se desconoce si esta versión se distribuyó en México en algún momento.
Esta versión utilizó dos páginas de organización de GitHub para descargar las direcciones IP de sus servidores de C&C: los nombres de las páginas son generados cifrando la fecha actual con SLK como sufijo, tal como se muestra en la Figura 14.
Al momento de escribir este artículo creemos que los operadores han abandonado esta versión del malware. No pudimos encontrar ninguna página activa de GitHub siguiendo el algoritmo de generación de nombres utilizado por Janeleiro.
Muchos comandos para el troyano quedaron sin implementar, algunos se implementaron y otros se descartaron en versiones más recientes utilizadas en 2020 y 2021.
Versión 0.0.2A
- Periodo de actividad: 2020 - Desconocido.
- Versión interna del malware: 0.0.2
El instalador MSI carga una DLL que toma prestado de LoadSystem los procedimientos de instalación y persistencia, pero descomprime la DLL principal del troyano de sus recursos. El troyano principal se implementó como una aplicación de Windows Forms compilada como DLL.
Esta versión de Janeleiro solo usa un Formulario para crear las ventanas emergentes falsas con más comandos soportados por el operador, pero con menos objetivos: las entidades bancarias mexicanas fueron descartadas. Todas las imágenes que se usaron para cubrir la pantalla y engañar al usuario corresponden a bancos brasileños.
Esta versión también parece haber sido abandonada y no puede contactar a sus servidores de C&C recuperando las listas de IP de una página de GitHub. Utiliza el mismo algoritmo que la Versión 0.0.4 con la misma clave vhpjzqqtpo, lo que sugiere que los operadores estaban usando la misma página de GitHub que para la Versión 0.0.4. La Figura 15 muestra el código que intenta recuperar la lista de GitHub.
Versión 0.0.2B
- Periodo de actividad: 2021 - Todavía activo.
- Versión interna del malware: 0.0.2
Nuevas características de esta versión:
- Implementado como una aplicación de Windows Presentation Foundation
- Gran reestructuración del código combinando el código del loader con el troyano principal
- Geolocalización de la máquina comprometida
- Implementación del secuestro del portapapeles para reemplazar direcciones de bitcoin
- Conjunto ampliado de comandos compatibles
- Strings cifradas/descifradas con el algoritmo RSA
La Figura 16 muestra la implementación del secuestro de portapapeles por Janeleiro; cuando se encuentra una dirección de bitcoin, elige aleatoriamente una de su propia lista de direcciones de bitcoin y la reemplaza.
En esta versión se implementó un procedimiento simplificado para recuperar las direcciones de sus servidores de C&C desde una página de organización de GitHub; el esquema de nombre esta vez es una simple concatenación de SLK con la fecha y hora actual sin las barras, como se muestra en la Figura 17.
El código intenta descargar el contenido de un archivo en una rama secundaria. El archivo contiene, en texto plano, la lista de direcciones IP y puertos de C&C. Al momento de escribir este artículo, las páginas de organización de GitHub se pueden encontrar utilizando el procedimiento ya que continúan operando con esta versión reciente de Janeleiro.
Versión 0.0.3
- Periodo de actividad: Desde marzo de 2021 - Todavía activo.
- Versión interna del malware: 0.0.3
Nuevas características de esta versión:
- Implementado como una aplicación de Windows Forms
- Una combinación de las técnicas de implementación y código de las versiones 0.0.2A y 0.0.2B
- Nuevo método de persistencia usando Windows Registry Run Key
- Conjunto ampliado de comandos compatibles
- Utiliza el algoritmo AES para cifrar/descifrar sus strings
Esta versión usa el mismo procedimiento que la Versión 0.0.2B para obtener los servidores de C&C de la página de organización de GitHub, con la diferencia de que usa la rama principal dentro del repositorio y la lista está cifrada y codificada con base64 como se muestra en la Figura 18.
Este procedimiento también se utiliza al descifrar la lista de servidores C&C, por lo que debe existir un repositorio que contenga el archivo en la rama principal, con la lista cifrada destinada a ese día. De lo contrario, esta versión no puede contactar a los operadores ya que el descifrado fallará.
Apéndice B: Herramientas de terceros utilizadas por Janeleiro
Janeleiro utiliza varias bibliotecas de código abierto de terceros para diversos fines:
Herramienta | Descripción | Usadas por |
---|---|---|
Fody | Usada para cargar cualquier otra herramienta de terceros o componentes del troyano, como LoadSystem en la versión 0.0.4. | Todas las versiones, incluyendo System.Logins |
Mimekit, Mailkit, Xnet, BouncyCastle, uPREC | Usada para recolectar correos electrónicos y credenciales de acceso. | System.Logins |
SharpClipboard | Usada para el secuestro del portapapeles: cuando el usuario copia la dirección de una billetera de bitcoin, Janeleiro la reemplaza por otra seleccionada de manera aleatoria de una lista propia.
Curiosamente, los desarrolladores de Janeleiro no parecen haber descargado el código fuente de SharpClipboard para compilar su propia versión: obtuvieron una copia compilada de otro repositorio de GitHub. Vale aclarar que no creemos que ese usuario pueda estar relacionado de alguna manera con el desarrollo de esta amenaza. |
Versión 0.0.2B Versión 0.0.3 |
SharpVectors | Usada para cargar imágenes SVG contenidas en recursos. Estas imágenes son logos de varias entidades bancarias utilizados para las falsas ventanas emergentes. | Versión 0.0.2B Versión 0.0.3 |
Newtonsoft JSON | Usada para parsear los datos que devuelve el servicio web geoPlugin. | Versión 0.0.2B Versión 0.0.3 |
EncryptDecryptUtils | Usada para cifrar y descifrar sus strings. Las funciones fueron modificadas para contener la llave, por lo que no está presente en el código del troyano. | Versión 0.0.3 |