Pesquisadores da ESET estão rastreando um novo trojan bancário que, desde 2019, tem como alvo usuários corporativos de diferentes setores no Brasil, afetando áreas como engenharia, saúde, varejo, manufatura, finanças, transporte e governo.

Essa nova ameaça, que batizamos de Janeleiro, tenta enganar suas vítimas por meio de pop-ups projetadas para se parecerem com as usadas pelos sites de alguns dos maiores bancos do Brasil. Esses pop-ups contêm formulários falsos, com o objetivo de induzir as vítimas do malware a inserir suas credenciais bancárias e informações pessoais. Esses dados são capturados e exfiltrados pelo malware para seus servidores C&C. Para a implementação central dessa técnica, o Janeleiro segue exatamente o mesmo modelo de algumas das famílias de malware mais proeminentes voltadas para a região da América Latina, como Casbaneiro, Grandoreiro, Mekotio, Amavaldo e Vadokrist, entre outras.

Ao contrário dessas famílias de malware, o Janeleiro é escrito em Visual Basic .NET, bem diferente da linguagem de programação favorita (Delphi) que outras famílias de trojans bancários direcionados à região têm usado há anos. O Janeleiro vem evoluindo com o objetivo de dar aos cibercriminosos bem mais controle para manipular e ajustar seus falsos pop-ups de acordo com o que precisam para realizar o ataque, enviar informações sobre os cliques de mouse, pressionamentos de tecla e registrar em tempo real as informações inseridas pelo usuário. A natureza desses tipos de ataques não é caracterizada por suas capacidades de automação, mas sim pela abordagem prática: em muitos casos, o cibercriminoso ajusta os pop-ups usando comandos em tempo real.

Os cibercriminosos usam o GitHub para armazenar seus módulos, gerenciar a página da organização e carregar novos repositórios todos os dias, nos quais armazenam arquivos com listas dos servidores C&C que os trojans bancários recuperam para se conectar com seus operadores. Tornar o malware dependente de uma única fonte é uma abordagem interessante, mas e se disséssemos que a versão mais nova do Janeleiro dura apenas um dia?

O alvo: Brasil

Com base em nossos dados de telemetria, podemos dizer que esse malware visa apenas usuários corporativos. Os e-mails maliciosos são enviados para empresas no Brasil e, embora não acreditemos que sejam ataques direcionados, eles parecem ser enviados em pequenos lotes. De acordo com nossa telemetria, os setores afetados são engenharia, saúde, varejo, manufatura, finanças, transporte e governo.

A Figura 1 mostra um exemplo dos e-mails de phishing usados ​​pelo Janeleiro: uma falsa notificação relacionada a uma fatura não paga. A mensagem contém um link que leva a um servidor comprometido. A página carregada simplesmente redireciona para o download de um arquivo ZIP hospedado no Azure. Alguns dos e-mails enviados pelos cibercriminosos não redirecionam por meio de um servidor comprometido, mas levam a vítima diretamente para o arquivo ZIP.

Figura 1. Exemplo de e-mail malicioso que propaga o Janeleiro.

As URLs dos servidores que hospedam esses arquivos ZIP com o Janeleiro têm a mesma convenção que outras URLs que foram usadas para distribuir outras famílias de trojans bancários (veja a seção Indicadores de Comprometimento). Em alguns casos, essas URLs são usadas para propagar tanto o Janeleiro quanto para outros trojans bancários escritos em Delphi. Isso sugere que diferentes grupos criminosos compartilham o mesmo provedor para enviar e-mails de spam e hospedar seu malware, ou que são o mesmo grupo. Ainda não determinamos qual hipótese é a correta.

Veja uma descrição geral do processo de ataque na Figura 2.

Figura 2. Descrição geral e simplificada do ataque do Janeleiro.

O arquivo ZIP contém um instalador MSI que carrega a DLL principal do trojan bancário. Na verdade, existem várias famílias de malware na região que preferem a técnica de usar um instalador MSI. O Janeleiro recupera o endereço IP público do computador afetado e usa um serviço da web para tentar localizá-lo geograficamente. Se o valor do código do país não corresponder a BR, o malware é encerrado. Se a verificação de geolocalização for aprovada, o Janeleiro coleta informações da máquina comprometida, incluindo:

  • Data e hora atuais
  • Nome da máquina e nome de usuário
  • Arquitetura e nome completo do SO
  • Versão do malware
  • Nome da região obtida na geolocalização do computador

As informações são enviadas para um site com a finalidade de rastrear ataques bem-sucedidos. Depois disso, o Janeleiro recupera os endereços IP dos servidores C&C de uma página de organização do GitHub aparentemente criada pelos criminosos. A partir daí, o malware está pronto para iniciar sua funcionalidade principal e aguardar os comandos de um operador.

Em 2020, a ESET publicou um white paper detalhando as descobertas sobre a conexão entre algumas das famílias de trojans bancários mais proeminentes na América Latina, incluindo Casbaneiro, Grandoreiro, Amavaldo, entre outras. As semelhanças descritas nesse documento estão na implementação central do trojan: notificar o operador quando há um pop-up ativo com um nome ou título interessante com base em uma lista de palavras-chave predefinidas e usando uma janela pop-up falsa para enganar as possíveis vítimas fazendo com que acreditem que estão inserindo informações confidenciais em um site legítimo. Este processo é ilustrado no fluxograma da Figura 3.

Figura 3. Implementação típica do kernel dos trojans bancários da América Latina.

O Janeleiro segue exatamente o mesmo modelo de implantação de kernel que onze outras famílias de malware que também têm como alvo o Brasil. Na Figura 4 podemos ver alguns dos pop-ups falsos criados pelo Janeleiro.

Figura 4. Pop-up falsos usados pelo Janeleiro.

Janeleiro em ação

O Janeleiro começa a listar pop-ups e revisar seus títulos tentando encontrar palavras-chave interessantes (como mostrado na Figura 5) que indiquem que o usuário está visitando o site de um banco de interesse, especialmente aqueles que são suportados pela sua implementação dos pop-ups falsos.

Figura 5. Lista de palavras-chave que o Janeleiro procura nos títulos dos pop-ups.

Quando uma das palavras-chave é encontrada, o Janeleiro tenta imediatamente recuperar os endereços de seus servidores C&C do GitHub e se conecta a eles. Esses pop-ups falsos são criados dinamicamente sob demanda e são controlados pelo cibercriminoso por meio de comandos enviados ao malware, pois passam por vários estágios para enganar o usuário enquanto o cibercriminoso, em tempo real, recebe capturas de tela, teclas registradas e informações que são inseridas nos formulários falsos.

O fato dos cibercriminosos utilizarem o GitHub não é uma novidade; entretanto, o Janeleiro acaba fazendo o mesmo de uma forma bastante interessante: os operadores criaram uma página de organização no GitHub na qual modificam seu nome todos os dias com o formato SLK<dd/mm/yyyy> no qual <dd/mm/yyyy> é a data atual.

A Figura 6 mostra uma captura de tela da página da organização do GitHub assim como estava em 15 de março de 2021.

Figura 6. Página da organização do GitHub com repositórios usados pelos operadores do Janeleiro.

Diariamente, o operador novodesktop1-alberto cria um novo repositório seguindo este formato de nomenclatura. O objetivo do repositório é conter um arquivo com a lista de endereços IP dos servidores C&C do Janeleiro aos quais se conecta para informar seus operadores, receber comandos e exfiltrar informações em tempo real.

Na Figura 7 você pode ver uma captura de tela mostrando um dos repositórios na página da organização do GitHub atribuído aos operadores do Janeleiro, incluindo o nome de usuário da conta que realiza os commits.

Figura 7. Branch principal com o arquivo SLK para a versão 3 do Janeleiro.

A Figura 8 mostra uma captura de tela de um branch secundário no repositório.

Figura 8. Branch SLK com o arquivo SLK para a versão 2 do Janeleiro.

Notificamos o GitHub sobre essa atividade, mas até o momento de produção deste artigo, nenhuma ação foi tomada contra a página da organização ou contra a conta que cria o repositório com novos endereços do servidor C&C.

Na versão mais recente do Janeleiro, a versão 0.0.3, os desenvolvedores introduziram um recurso interessante de criptografia/descriptografia usando uma biblioteca de código aberto chamada EncryptDecryptUtils. O novo procedimento de descriptografia pode ser visto na Figura 9.

Figura 9. Procedimento de descriptografia implementado pela versão 0.0.3 do Janeleiro.

Para descriptografar uma string, o Janeleiro criptografa a string resultante da data atual e o resultado é usado como uma frase de senha e um valor de salt para criar uma nova chave para a descriptografia. Isso tem um efeito extremamente importante: a última versão do Janeleiro só consegue decifrar suas strings em um dia programado. Esse dia pode ser o mesmo dia em que as strings foram criptografadas ou um dia depois. Se for feito em qualquer outro dia, a descriptografia falha.

Este também é o caso para o conteúdo do arquivo SLK na ramificação principal: a lista criptografada e codificada em base 64 de servidores C&C, conforme mostrado na Figura 10.

Figura 10. Conteúdos do arquivo SLK na ramificação principal.

Os conteúdos são criptografados com o mesmo procedimento: quando o Janeleiro descriptografa o conteúdo do arquivo, a ameaça deve realizar esse processo em uma data específica (a data atual) para que funcione conforme o esperado.

Evolução do Janeleiro

O Janeleiro tem um valor de versão interno (conforme mostrado na Figura 11) que os cibercriminosos podem usar para identificar qual versão do malware comprometeu uma máquina com sucesso. Em março de 2021, identificamos quatro versões, mas duas delas compartilham o mesmo número de versão (internamente).

Figura 11. Valores de configuração usados pela versão 0.0.2A do ano 2020.

Em 2021 vimos as versões 0.0.2 e 0.0.3 e estávamos interessados ​​em encontrar uma peça-chave que faltava na evolução do Janeleiro: a versão 0.0.1, que deve ter existido no final de 2019 ou início de 2020. Para nossa surpresa, em vez disso encontramos exemplos da versão 0.0.4 datadas de 2019. Esses novos exemplos do trojan bancário foram implementados por um componente carregador de DLL junto com um ladrão de senhas, o que significa que o grupo por trás do Janeleiro tem outras ferramentas em seu arsenal.

Na Figura 12 podemos ver uma descrição geral das versões do Janeleiro de 2019 a 2021.

Figura 12. Estranha linha do tempo mostrando a evolução do Janeleiro, de acordo com os dados internos da versão do malware.

A inconsistência da linha do tempo em relação à versão interna do malware sugere duas coisas. Por um lado, que estava em desenvolvimento desde 2018, e por outro, que em 2020 decidiram mudar para uma versão anterior do código para melhorar essa versão e refinar o processamento dos comandos para que o operador tenha um melhor controle do trojan bancário durante o ataque.

Características que diferenciam o Janeleiro de outros trojans

Embora o Janeleiro siga o mesmo modelo de outras famílias de malware que a ESET documentou na região para a implementação central de seus pop-ups falsos, a ameaça se distingue dessas famílias de malware de várias maneiras:

  • Está escrito em Visual Basic .NET: O caso curioso do Brasil é que geralmente os trojans bancários que visam os usuários deste país são desenvolvidos em Delphi, a linguagem de programação escolhida por vários cibercriminosos que aparentemente trabalham juntos compartilhando ferramentas e infraestrutura. A preferência do Janeleiro pelo VB.NET é um desvio notável do que parece ser a norma para a região.
  • Sem ofuscação binária: embora o Janeleiro use ofuscação moderada ao gerar nomes aleatórios para suas classes, módulos, nomes de métodos, parâmetros e criptografia de strings, a ameaça não usa wrappers para dificultar a detecção e a análise. Outros trojans bancários como Grandoreiro, Mekotio, Ousaban, Vadokrist e Guildma fazem uso pesado de Themida e de técnicas binárias de preenchimento.
  • Sem algoritmos de criptografia personalizados: os desenvolvedores do Janeleiro contam com as funções criptográficas fornecidas pelo .NET Framework, bem como com projetos de código aberto para criptografia/descriptografia de strings, com preferência por algoritmos AES e RSA. Trojans como Casbaneiro, Grandoreiro, Amavaldo, Mispadu e Guildma, entre outros, usam algoritmos de criptografia personalizados, incluindo técnicas de ofuscação através de tabelas de string.
  • Método de execução simples: o instalador MSI não implementa outros componentes além da DLL principal do trojan bancário, nem executa instruções além de carregar e executar uma das exportações da DLL que instala no sistema. Não encontramos amostras de um instalador MSI executando scripts ofuscados, ferramentas de descompactação ou componentes para carregamento lateral de DLL, que é bastante comum em outras famílias de malware direcionadas à região.
  • Sem defesa contra softwares de segurança: alguns dos maiores bancos do Brasil solicitam que seus clientes instalem um módulo de segurança antes de permitir o acesso às suas contas bancárias on-line; por exemplo, o software antifraude de Warsaw. Os trojans bancários da América Latina costumam tentar descobrir se esse software está instalado na máquina comprometida e relatá-lo aos criminosos. Algumas famílias de malware como Grandoreiro e Guildma tentam desabilitá-lo no Firewall do Windows ou desabilitar seu driver.
  • Utiliza código NjRAT: o Janeleiro está longe de ser mais uma encarnação do conhecido NjRAT, mas utiliza as funções de captura SocketClient e Remote Desktop do NjRAT, entre outras funções. O NjRAT não é comumente usado, pelo menos por trojans bancários da América Latin, talvez devido à preferência pelo uso de ameaças personalizados em Delphi. No entanto, entre outros códigos maliciosos, o NjRAT foi usado na Operação Spalax, uma campanha que visa especificamente a Colômbia.

Comandos

Comandos com parâmetros são recebidos do servidor C&C criptografados com o mesmo algoritmo usado para criptografar strings (veja a seção Apêndice A). Um formato de comando típico é o seguinte: %CommandName%%PredefinedSeparatorKeyword%%Parameters%.

Após a descriptografia, o comando é dividido em uma matriz de strings; cada parte do comando é separada por uma palavra-chave predefinida hardcodeada na configuração do malware - todas as versões que analisamos usam |‘meio’|, que separa o nome do comando e cada parâmetro.

A Figura 13 mostra como o Janeleiro verifica o nome do comando e executa a ação solicitada.

Figura 13. Exemplo de processamento do comando startinfo na versão 0.0.2B.

Quando o Janeleiro envia dados ao operador, ele faz isso através de um formato semelhante: %CommandName%%PredefinedSeparatorKeyword%%Encodeddata%.

A maioria dos comandos do Janeleiro são para controlar pop-ups, o mouse e o teclado, e seus pop-ups falsos. Conforme o desenvolvimento evoluiu da versão 0.0.2A para 0.0.3, foram adicionados mais comandos que deram ao operador um controle mais refinado:

  • Comandos para controlar um pop-up específico
  • Listar e enviar informações sobre pop-ups (título, classe, identificador)
  • Ajustar o tamanho específico do pop-up, minimizar, maximizar
  • Dimensões da tela
  • Eliminar todos os processos do chrome.exe e reiniciar o chrome.exe com os argumentos –disable-gpu
  • Capturas de tela em tempo real
  • Registrar as teclas digitadas em tempo real
  • Enviar cliques do mouse
  • Mostrar ou fechar um falso pop-up específico
  • Comandos adicionais, como enviar data e hora, desconectar o plugue, encerrar seu próprio processo

Conclusão

O caráter experimental do Janeleiro, indo e voltando entre as diferentes versões, representa uma ameaça que ainda está tentando encontrar a melhor forma de cumprir seu objetivo, mas isso não significa que tenha menos experiência do que a concorrência: o Janeleiro segue o mesmo modelo para a implementação central de falsos pop-ups como muitos trojans bancários da América Latina, isso não parece ser uma coincidência ou inspiração: esses cibercriminosos empregam e distribuem o Janeleiro compartilhando a mesma infraestrutura de algumas das famílias de malware ativas mais proeminentes. À medida que continuemos acompanhando as atividades dessa ameaça, o tempo nos dirá quais novos desenvolvimentos aparecerão no futuro.

Em caso de dúvidas ou para enviar amostras relacionadas ao assunto, entre em contato conosco pelo e-mail threatintel@eset.com.

Um agradecimento especial a Johnatan Camargo Zacarias, do Banco Itaú, pela ajuda na pesquisa.

Indicadores de Comprometimento (IoCs)

Você pode encontrar uma lista completa de indicadores de comprometimento (IoC) e exemplos em nosso repositório GitHub.

Hashes SHA-1

Versão 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#

Versão 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

Versão 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#

Versão 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

No seguinte <NNNNNNNNNNN> há um número aleatório entre 10000000000 e 90000000000.

Baixando apenas o 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>

Baixando o Janeleiro e outros trojans bancários em 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>

Baixando trojans bancários em 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

Estes são os endereços IP dos servidores C&C nos quais o Janeleiro se conecta para relatar, receber comandos e enviar dados:

  • 52.204.58[.]11
  • 35.174.60[.]172

Estas são as URLs de rastreamento para as quais o Janeleiro envia informações sobre o sistema comprometido durante a instalação:

  • 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 são as URLs usadas ​​por System.Logins.dll para exfiltrar os dados coletados:

  • http://comunicador.duckdns[.]org/catalista/emails/checkuser.php
  • http://comunicador.duckdns[.]org/catalista/lixo/index.php

IPs associados ao domínio:

  • 178.79.178[.]203
  • 138.197.101[.]4

Técnicas de MITRE ATT&CK

Nota: Esta tabela foi criada usando a versão 8 do framework MITER 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.