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.
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.
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.
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.
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.
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.
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.
A Figura 8 mostra uma captura de tela de um branch secundário no repositório.
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.
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.
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).
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.
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.
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. |