O Vadokrist é um trojan bancário que a ESET acompanha desde 2018 e que está ativo quase exclusivamente no Brasil. Nesta edição de nossa série, examinamos seus principais recursos e algumas conexões com outras famílias de trojans bancários presentas na América Latina.

O Vadokrist compartilha vários recursos com outras famílias de trojans bancários, como Amavaldo, Casbaneiro, Grandoreiro e Mekotio, que descrevemos anteriormente. Recentemente, também publicamos um white paper que destaca as semelhanças entre essas ameaças na América Latina.

Caracterísitcas do Vadokrist

O Vadokrist é escrito em Delphi. Uma das principais características ​​é a desproporcional quantidade de código nos binários que não é usada. Após uma análise mais aprofundada, acreditamos que essa seja uma estratégia para evitar a detecção e impedir ou retardar a sua análise. Conseguimos vincular parte do código a projetos do Delphi, como o QuickReport.

O Vadokrist armazena strings em tabelas. A ameaça costumava conter uma implementação de uma tabela de strings idêntica ao Casbaneiro (ver Figura 1). No entanto, algumas versões recentes desse trojan bancário passaram a usar várias tabelas de string, cada uma com uma finalidade diferente (lista de alvos de ataque, configurações gerais, nomes de comandos de backdoor, etc.).

Figura 1. Implementação da tabela de strings nos binários do Vadokrist.

Aos serem executados pela primeira vez, a grande maioria dos trojans bancários na América Latina coletam informações da máquina das vítimas (geralmente o nome do computador e a versão do sistema operacional Windows). No entanto, a única informação que o Vadokrist coleta é o nome de usuário das vítimas e, ao contrário da maioria dos outros trojans que realizam essa ação no momento de serem instalados, esse processo é realizado apenas após iniciar um ataque a uma instituição financeira.

Para garantir a persistência, o Vadokrist usa uma Run key ou cria um arquivo LNK na pasta de inicialização.

Seus recursos de backdoor são os típicos desse tipo de malware, sendo capaz de manipular o mouse, simular e gravar pressionamentos de tecla, fazer capturas de tela e reiniciar a máquina. O Vadokrist também pode impedir o acesso a alguns sites, o que é feito de uma forma bastante desajeitada, encerrando o processo do navegador quando a vítima tenta visitar esses sites. Acreditamos que essa técnica seja usada para evitar que as vítimas acessem suas contas bancárias comprometidas, o que faz com que os atacantes possam continuar tendo o controle de cada uma delas.

Criptografia

A maioria dos binários do Vadokrist implementam um algoritmo criptográfico que vimos em outros trojans bancários latino-americanos (Amavaldo e Casbaneiro) que chamamos de TripleKey. O Vadokrist usa este algoritmo para proteger suas strings e, ocasionalmente, também os payloads e as configurações remotas (veremos isso logo a seguir). Para entender um pouco melhor, implementamos o algoritmo em Python, como pode ser visto na Figura 2.

def decrypt_payload(data_enc, key1, key2, key3):
    data_dec = str()

    for c in data_enc:
		x = data_enc[i] ^ (key3 >> 8) & 0xFF
		data_dec += chr(x)
		key3 = ((x + key3) & 0xFF) * key1 + key2

    return data_dec

def decrypt_string(data_enc, key1, key2, key3):
    data_dec = str()

    for c in data_enc:
		x = data_enc[i] ^ (key3 >> 8) & 0xFF
		data_dec += chr(x)
		key3 = ((data_enc[i] + key3) & 0xFFFF) * key1 + key2

    return data_dec

Figura 2. Esquema de criptografia TripleKey usado pelo Vadokrist para proteger strings, payloads e configurações remotas.

Além disso, vimos o Vadokrist usando RC4 em alguns de seus binários mais recentes e, no passado, também o TwoFish. Isso é muito incomum entre os trojans bancários na América Latina, pois a maioria deles nunca usa algoritmos criptográficos conhecidos.

Distribuição

“MSI overload”

Os e-mails de spam que propagam o Vadokrist contêm dois arquivos ZIP aninhados que contêm dois arquivos: um instalador MSI e um arquivo CAB. Caso uma vítima execute o instalador MSI, ele irá localizar o arquivo CAB e extrair seu conteúdo (um carregador MSI) para o disco. Em seguida, o arquivo CAB executa um arquivo JavaScript incorporado que adiciona uma entrada de Run key, garantindo que o loader MSI seja executado na inicialização do sistema. Finalmente, o script reinicia a máquina. Na inicialização, o loader MSI executa uma DLL embutida: o trojan bancário Vadokrist. Esse processo é ilustrado na Figura 3. Observe que não existe um downloader instalado - o trojan bancário é distribuído diretamente via e-mails de spam.

Figura 3. Cadeia de execução recentemente usada pelo Vadokrist.

Vale a pena mencionar o arquivo JavaScript debido a sua ofuscação. Ele aproveita a forma como o operador de vírgula (,) funciona em JavaScript e abusa dele para reduzir a legibilidade e possivelmente ignorar a emulação. Esse arquivo ofusca as condições usando o operador lógico AND (&&) de maneira semelhante. Veja um exemplo na Figura 4.

Figura 4. Instalador de JavaScript usado pelo Vadokrist. A parte inferior mostra o script com operadores transformados para melhor legibilidade.

Técnicas de distribuição e execução mais antigas

Observamos o Vadokrist, como a maioria dos outros trojans bancários latino-americanos, usando várias implementações da cadeia de distribuição típica. Não analisaremos todas elas, mas vale a pena mencionar duas delas. Vimos o Vadokrist compartilhando um downloader em Delphi com o Grandoreiro e uma cadeia de distribuição completa com o Mekotio - na verdade, aquela marcada como Cadeia 1 em nosso artigo sobre o Mekotio.

O Vadokrist ocasionalmente depende do carregamento lateral do DLL com um injetor específico para descriptografar e executar o trojan bancário. Esse injetor é idêntico ao usado pelo Amavaldo e implementa o algoritmo mencionado anteriormente, TripleKey, para a descriptografia de dados.

Configuração remota

O Vadokrist utiliza configuração remota tanto em downloaders quanto no próprio trojan bancário, geralmente hospedado em serviços de armazenamento público como o GitHub.

O arquivo de configuração geralmente é criptografado por TripleKey ou RC4. Na Figura 5, podemos ver que em ambos os casos os dados podem ser descriptografados sem nenhum conhecimento adicional - no caso do método TripleKey, foi possível extrair as três chaves do final da string, e no caso do RC4, derivamos a chave da senha. No caso da última, os dados criptografados também são codificados em base64.

O delimitador também é alterado de vez em quando. Até agora, vimos três caracteres diferentes usados: “|”, “!” e “/”.

Figura 5. Arquivos de configuração remota criptografados e usados por Vadokrist.

Agora que sabemos como descriptografar o arquivo de configuração, vamos examinar seu conteúdo. No caso do trojan bancário, o resultado é fácil de entender, pois é o endereço IP de um servidor C&C. Para os downloaders, o formato é um pouco mais complexo, conforme ilustrado na Figura 6.

Figura 6. Diferentes formatos de configuração remota usados pelos downloaders do Vadokrist.

Para simplificar, reconhecemos uma configuração com um ID opcional e seis campos:

  • [obrigatório] A URL para baixar o trojan bancário
  • [opcional] Pasta especial (primeira parte do caminho de instalação)
  • [opcional] Sinalizador de instalação (descrito a seguir)
  • [opcional] Caminho (segunda parte do caminho de instalação)
  • [opcional] Nome do arquivo (terceira e última parte do caminho de instalação)
  • [obrigatório] URL de notificação

Dois desses campos podem exigir mais explicações. Se o sinalizador de instalação for definido como “T”, todas as três partes do caminho de instalação serão usadas - caso contrário, o primeiro será ignorado. Apenas se envia para a URL de notificação se um aplicativo Core.exe estiver sendo executado - uma verificação bem semelhante à de outros trojans bancários latino-americanos que tentam detectar a presença do software antifraude Warsaw GAS Tecnologia.

Podemos ver que a primeira variante usa todos os campos, a segunda não usa o ID e a terceira usa apenas os dois campos obrigatórios de URL. O uso do delimitador nesse caso é um pouco mais complexo, já que um delimitador é usado para separar entradas diferentes e outro para separar os campos de uma entrada. Além disso, podemos ver que os delimitadores também mudam nesse momento.

A mudança dinâmica do formato do arquivo de configuração indica que o Vadokrist está em desenvolvimento ativo e contínuo.

Conclusão

Nesta publicação, analisamos o Vadokrist, um trojan bancário latino-americano direcionado ao Brasil. Mostramos que a ameaça possui recursos típicos dos trojans bancários latino-americano - é escrito em Delphi, conta com funcionalidade de backdoor e visa a instituições financeiras. O fato do Vadokrist não coletar informações sobre as vítimas logo após o comprometimento das máquinas marca a diferença na implementação típica em relação aos outros trojans bancários na América Latina.

Abordamos seus esquemas de criptografia, métodos de distribuição, execução e formatos de configuração remota. O Vadokrist aparentemente está conectado ao Amavaldo, Casbaneiro, Grandoreiro e Mekotio, outros trojans que estão presentes na America Latina e que já foram descritos anteriormente em nossa série.

Para qualquer dúvida, entre em contato conosco através do e-mail fearintel@eset.com. Os Indicadores de Comprometimento também podem ser encontrados em nosso repositório GitHub.

Indicadores de Comprometimento (IoCs)

Hashes

Campanha “MSI overload”

SHA-1 Description ESET detection name
D8C6DDACC42645DF0F760489C5A4C3AA686998A1 MSI installer JS/TrojanDownloader.Banload.ABD
01ECACF490F303891118893242F5600EF9154184 MSI loader Win32/Spy.Vadokrist.T
F81A58C11AF26BDAFAC1EB2DD1D468C5A80F8F28 Vadokrist banking trojan Win32/Spy.Vadokrist.T

Outro

SHA-1 Description ESET detection name
8D7E133530E4CCECE9CD4FD8C544E0913D26FE4B Vadokrist banking trojan Win32/Spy.Vadokrist.AF
AD4289E61642A4A724C9F44356540DF76A35B741 Vadokrist banking trojan Win32/Spy.Vadokrist.T
BD71A9D09F7E445BE5ACDF412657C8CFCE0F717D Vadokrist banking trojan Win32/Spy.Vadokrist.AD
06C0A039DEDBEF4B9013F8A35AACD7F33CD47524 Downloader (MSI/JS) JS/TrojanDownloader.Banload.AAO
FADA4C27B78DDE798F1E917F82226B983C5B74D8 Downloader (Delphi) Win32/Spy.Vadokrist.Y
525FCAA13E3867B58E442B4B1B612664AFB5A5C0 Injector shared with Amavaldo Win32/Spy.Amavaldo.L

Servidores C&C recentes

  • 104.41.26[.]216
  • 104.41.41[.]216
  • 104.41.47[.]53
  • 191.232.212[.]242
  • 191.232.243[.]100
  • 191.235.78[.]249
  • 191.237.255[.]155
  • 191.239.244[.]141
  • 191.239.245[.]87
  • 191.239.255[.]102

Técnicas de MITRE ATT&CK

Nota: Esta tabela foi criada usando a versão 8 do framework do MITER ATT & CK.

Tactic ID Name Description
Resource Development T1583.001 Acquire Infrastructure: Domains Vadokrist registers its own domains to be used as C&C servers.
T1587.001 Develop Capabilities: Malware Vadokrist is operated by the same group that develops it.
Initial Access T1566.001 Phishing: Spearphishing Attachment Vadokrist is distributed as a spam attachment.
Execution T1059.001 Command and Scripting Interpreter: PowerShell Vadokrist uses PowerShell in some distribution chains.
T1059.005 Command and Scripting Interpreter: Visual Basic Vadokrist uses VBScript in some distribution chains.
T1059.007 Command and Scripting Interpreter: JavaScript/JScript Vadokrist uses JavaScript in its recent distribution chains.
T1204.002 User Execution: Malicious File Vadokrist relies on the user to execute the malicious binary.
Persistence T1547.001 Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder Vadokrist ensures persistence via Run key or LNK file in the startup folder.
Defense Evasion T1140 Deobfuscate/Decode Files or Information Vadokrist is often distributed encrypted and encrypts its remote configuration.
T1574.002 Hijack Execution Flow: DLL Side-Loading Vadokrist is sometimes executed by this technique.
T1036.005 Masquerading: Match Legitimate Name or Location Vadokrist masquerades as legitimate software.
T1218.007 Signed Binary Proxy Execution: Msiexec Vadokrist uses the MSI format for execution.
Credential Access T1056.001 Input Capture: Keylogging Vadokrist can capture keystrokes.
Discovery T1010 Application Window Discovery Vadokrist looks for bank-related windows based on their names.
T1057 Process Discovery Vadokrist tries to discover anti-fraud software by process name.
T1082 System Information Discovery Vadokrist discovers victim’s username.
T1113 Screen Capture Vadokrist can take screenshots.
Command and Control T1132.002 Data Encoding: Non-Standard Encoding Vadokrist communicates via a custom protocol encrypted with the TripleKey algorithm.
Exfiltration T1041 Exfiltration Over C2 Channel Vadokrist exfiltrates data via C&C server.