Janeleiro: nuevo troyano bancario que apunta a usuarios corporativos en Brasil

Investigadores de ESET descubren una nueva amenaza dirigida a organizaciones que operan en varios sectores de Brasil.

Investigadores de ESET han estado rastreando un nuevo 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.

Figura 1. Ejemplo de correo electrónico malicioso que distribuye Janeleiro

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.

Figura 2. Descripción general y simplificada del ataque de Janeleiro

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.

Figura 3. Típica implementación del núcleo de los troyanos bancarios de América Latina

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.

Figura 4. Ventanas emergentes falsas utilizadas 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.

Figura 5. Lista de palabras clave que Janeleiro busca en los títulos de las ventanas

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.

Figura 6. Página de organización de GitHub con repositorios utilizados por los operadores de Janeleiro

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.

Figura 7. Rama principal con el archivo SLK para la versión 3 de Janeleiro.

En la Figura 8 se observa una captura de pantalla de una rama secundaria en el repositorio.

Figura 8. Rama SLK con el archivo SLK para la versión 2 de Janeleiro

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.

Figura 9. Procedimiento de descifrado implementado por la versión 0.0.3 de Janeleiro.

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.

Figura 10. Contenidos del archivo SLK en la rama principal.

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.

Figura 11. Valores de configuración utilizados por la versión 0.0.2A del año 2020

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.

Figura 12. Extraña línea de tiempo que muestra la evolución de Janeleiro, según los datos internos de la versión del malware

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.

Figura 13. Ejemplo del procesamiento del comando startinfo por la versión 0.0.2B

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 MSIL/Kryptik.TBD
0A5BBEC328FDD4E8B2379AF770DF8B180411B05D LoadDllMSI.dll loader MSIL/TrojanDownloader.Agent.FSC
0AA349050B7EF173BFA34B92687554E81EEB28FF System.Logins.Initial.dll MSIL/Agent.TIX
5B19E2D1950ADD701864D5F0F18A1111AAABEA28
186E590239083A5B54971CAB66A58301230164C2 System.Modules.Initial.dll
E1B2FD94F16237379E4CAD6832A6FCE7F543DC40 System.Modules.Initial.dll MSIL/Janeleiro.A
4061B2FBEB7F1026E54EE928867169D1B001B7A5

Versión 0.0.2A

SHA-1 Description ESET detection name
8674E61B421A905DA8B866A194680D08D27D77AE Main Trojan Loader MSIL/Agent.AAI
2E5F7D5F680152E738B8910E694651D48126382A 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
6F6FF405F6DA50B517E82FF9D1A546D8F13EC3F7 Main trojan
742E0AEDC8970D47F16F5549A6B61D839485DE3C

Versión 0.0.3

SHA-1 Description ESET detection name
455FAF2A741C28BA1EFCE8635AC0FCE935C080FF MSI file MSIL/Janeleiro.A
D71EB97FC1F5FE50D608518D2820CB96F2A3376F
158DA5AB85BFAC471DC2B2EE66FD99AEF7432DBB Main trojan
6BFAEFCC0930DA5A2BAEC19723C8C835A003D1EC

 

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.

Figura 14. La versión 0.0.4 intenta leer un archivo en un repositorio de GitHub que contiene la lista cifrada de servidores C&C

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.

Figura 15. La versión 0.0.2A intenta descargar una nueva lista de servidores C&C desde un repositorio en una página de organización 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.

Figura 16. Implementación del secuestro del portapapeles por parte de Janeleiro

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.

Figura 17. Procedimiento de la versión 0.0.2B para recuperar su lista de servidores de C&C. Hemos descifrado algunas strings para mayor claridad.

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.

Figura 18. Repositorio principal que contiene una lista cifrada de servidores C&C

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

Deja un comentario