A maioria dos especialistas em engenharia reversa concordam que quase sempre é possível aprender algo novo. No entanto, não é todos os dias que você pode apreder uma receita para uma refeição deliciosa enquanto analisa um malware. Esta experiência única é proporcionada por uma família de malware que analisaremos nesta publicação e cujo nome é "Casbaneiro".

Características do Casbaneiro

Casbaneiro, também conhecido como Metamorfo, é um típico trojan bancário latino-americano que tem como alvo os bancos e os serviços de criptomoedas no Brasil e no México (Figura 1). Esse malware usa o mesmo método de engenharia social descrito em um post publicado anteriormente sobre os trojans bancários na América Latina, que consiste em exibir janelas pop-up falsas na tentativa de persuadir possíveis vítimas a inserir informações confidenciais. Caso o ataque ocorra de forma exitosa, essas informações são roubadas.

Figura 1. Países afetados pelo Casbaneiro, com Brasil e México entre os mais destacados.

As capacidades de backdoor desse malware são típicas dos trojans bancários latino-americanos. Ou seja, a ameaça pode tirar screenshots e enviá-las para o seu servidor C&C, simular ações de mouse e teclado, capturar teclas, baixar e instalar atualizações por conta própria, restringir o acesso a vários sites e baixar e executar outros executáveis.

Casbaneiro também coleta as seguintes informações de suas vítimas:

  • Lista de produtos antivírus instalados
  • Versão do sistema operacional (SO)
  • Nome de usuário
  • Nome do computador
  • Se algum dos seguintes softwares está instalado:
    • Diebold Warsaw GAS Technology (uma aplicação para proteger o acesso aos serviços bancários on-line)
    • Trusteer
    • Várias aplicativos bancárias latino-americanos

Embora pareça haver pelo menos quatro variantes diferentes desse malware, o núcleo de cada um deles é praticamente idêntico ao código presente nesse repositório do GitHub. No entanto, é praticamente impossível separá-los um do outro, principalmente porque algumas variantes que usam versões diferentes usam a mesma chave de decodificação de strings e os mesmos mecanismos são usados em variantes diferentes.

Além disso, as diferenças não são importantes do ponto de vista da funcionalidade. Portanto, vamos nos referir a todas essas variantes como Casbaneiro.

O Casbaneiro é fácil de identificar porque utiliza uma grande tabela de strings, com várias centenas de entradas. As strings são recuperadas acessando esta tabela por meio de um índice. Curiosamente, toda vez que o malware precisa obter uma string, toda a tabela de string é construída na memória a partir de fragmentos armazenados de texto criptografad - a string desejada é descriptografada e toda a tabela é descartada novamente. Você pode ver um exemplo na Figura 2.

Figura 2: Casbaneiro obtém uma string através do índice (0x205) e a descriptografa.

Há fortes indícios de que essa família de malware está intimamente relacionada com a família de trojans Amavaldo, que descrevemos em nossa primeira publicação desta série sobre trojans bancários na América Latina. Mencionaremos estas semelhanças mais adiante neste post.

Sequestro de dados da área de transferência

Casbaneiro também pode tentar roubar as criptomoedas da vítima. A ameaça faz isso monitorando o conteúdo da área de transferência e se os dados parecem ser uma carteira de crioptomoedas, ele as substitui pelas do atacante. Essa técnica não é nova - já foi usada por outro malware no passado. Até mesmo o trojan bancário BackSwap implementou essa técnica em seus estágios iniciais.

A carteira do atacante está hardcodeada no binário e apenas encontramos uma. Ao examiná-la, pudemos ver os pagamentos que haviam sido feitos antes da produção deste post.

Figura 3. Detalhe da carteira de bitcoin do atacante.

Criptografia

Casbaneiro utiliza vários algoritmos criptográficos, cada um dos quais protege um tipo diferente de dado. Falamos mais sobre isso logo a seguir.

Criptografia de comandos

Os comandos recebidos do servidor C&C são criptografados com AES-256 e a biblioteca SynCrypto Delphi é usada para isso. A chave AES é derivada através da SHA-256 de uma senha armazenada no binário. A senha não é armazenada como uma string, mas é concatenada a partir de partes separadas no runtime, como pode ser visto na Figura 4.

Figura 4: Construção da senha "ze102030ca" utilizada para derivar a chave AES.

Ciprografia de strings

O algoritmo usado para criptografar strings vem deste livro e também é usado em outros trojans bancários latino-americanos. O pseudocódigo do algoritmo de decodificação pode ser visto na Figura 5. A mesma chave é usada para todas as strings. Semelhante à criptografia de comando, a chave é novamente concatenada a partir de partes no runtime, só que desta vez ela consiste em muitas partes mais (veja a Figura 6). Note como as strings com espaços em branco também são adicionadas, mas são recortadas mais tarde, portanto, não têm qualquer impacto.

def decrypt_string(data_enc, key):
	data_dec = str()

	data_enc = unhexlify(data_enc)
	prev = data_enc[0]

	for i, c in enumerate(data_enc[1:]):
		x = c ^ key[i % len(key)]

		if x < prev:
			x = x + 255 - prev
		else:
			x -= prev

		prev = c
		data_dec += chr(x)

	return data_dec

Figura 5: Pseudocódigo descriptografia de strings.

Figura 6 - Parte do código que concatena a chave de descriptografia de string mostrada na Figura 5. As partes chave válidas estão marcadas em vermelho. As ofuscação através de strings com espaços em branco estão marcadas em roxo.

Criptografia do payload

Em algumas campanhas do Casbaneiro, o trojan é criptografado e associado a um injetor. O algoritmo utilizado para descriptografar o payload binário principal nestes casos é exactamente o mesmo utilizado pelo injetor do Amavaldo. O pseudocódigo é encontrado na Figura 7.

Criptografia de dados de configuração remota

Finalmente, um quarto algoritmo é usado para descriptografar os dados de configuração não armazenados no arquivo binário, mas que são obtidos remotamente. Exemplos:

Pode-se ver claramente nas Figuras 7 e 8 que ambos os algoritmos são quase idênticos, apenas que um usa texto simples e o outro texto criptografado para atualizar a chave. Temos fortes suspeitas de que o autor reescreveu o código manualmente da mesma fonte e cometeu um erro em um dos casos.

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

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

	return data_dec

Figura 7: Algoritmo de descriptografia da payload.

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

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

	return data_dec

Figura 8: Algoritmo de descriptografia de dados remotos.

Distribuição

Acreditamos que as cadeias de distribuição do Casbaneiro geralmente começam com um e-mail malicioso. Algumas campanhas foram descritas por FireEye, Cisco e enSilo. Se você leu nosso post anterior, poderá notar que a campanha descrita pelo Cisco usa um script PowerShell muito similar ao usado pelo Amavaldo. Embora algumas partes sejam diferentes, ambos os scripts claramente têm origem de uma fonte comum e usam os mesmos métodos de ofuscação.

Ao escrevermos este post, identificamos uma nova campanha que utilizava uma técnica semelhante à descrita pelo enSilo, com apenas algumas alterações. O executável Avast não é mais abusado e o payload principal, jesus.dmp, não é mais criptografada e, portanto, não está associada a um injetor. Finalmente, a pasta de instalação foi alterada para %APPDATA%\Sun\Javar\%RANDOM%\. Como essa recente campanha do Casbaneiro utiliza o encurtador de URL bit.ly, conseguimos obter mais informações (ver Figura 9).

Figura 9. Estatísticas do Bit.ly para a última campanha do Casbaneiro.

Além disso, durante nossa pesquisa, identificamos outras duas campanhas anteriores.

Campanha 1: Atualização de Software Financeiro

Nesta campanha, a vítima é persuadida a baixar e instalar o que pode parecer uma atualização de um software financeiro legítimo (ver Figura 10). Em vez disso, o instalador:

  • Baixa um arquivo que contém:
    • Casbaneiro disfarçado de Spotify.exe
    • outras DLL legítimas
  • Extrai o conteúdo do arquivo para %APPDATA%\Spotify\
  • Configura a persistência usando HKCU\Software\Microsoft\Windows\CurrentVersion\Run, Spotify = %APPDATA%\Spotify\Spotify.exe

Também encontramos casos em que o payload se faz passar pelo OneDrive ou WhatsApp. Nesses casos, o nome da pasta é alterado.

Figura 10: Falso Instalador de Upgrade.

Campanha 2: Um ativador do Windows

Esta campanha é muito semelhante à descrita pelo enSilo - usa um instalador MSI com um downloader JavaScript incorporado. Só que desta vez o instalador está incluído com a ferramenta de cracking Re-Loader que permite a ativação não oficial do Windows ou Microsoft Office. Quando corre, primeiro faz o download e e corre em segredo o Casbaneiro e, em segundo lugar, o Re-Loader.

Este método não é muito comum nos trojans bancários latino-americanos. É mais perigoso para as possíveis vítimas, pois provavelmente terão menos motivos para suspeitar que algo saiu errado.

Figura 11. Ferramenta de Re-Loader de cracker instalado junto ao Casbaneiro.

Maneiras de ocultar o domínio e a porta do servidor C&C

Os operadores do Casbaneiro têm feito um grande esforço para ocultar a porta e domínio atual do servidor C&C, e esta é uma das características mais interessantes do Casbaneiro. Vamos explorar onde os servidores C&C foram escondidos...

1) Armazenado e criptografado no binário

A criptografia é definitivamente o método mais simples para esconder o servidor C&C. O domínio é criptografado com uma chave hardcodeada e a porta é apenas hardcodeada. Encontramos casos em que a porta foi armazenada na seção de dados, nos dados do formulário em Delphi ou escolhida aleatoriamente a partir de um intervalo.

2) Embebidos em um documento

Um método mais avançado é armazenar os dados em algum lugar on-line, neste caso no Google Docs. Uma maneira que o Casbaneiro usa esse método pode ser vista na Figura 12, onde o documento está cheio de lixo eletrônico. O domínio criptografado está codificado em hexadecimal e depois armazenado entre delimitadores "!". A criptografia usada é a mesma para todas as outras strings e a porta é hardcodeada no binário.

Figura 12. Domínio do servidor C&C (destacado em vermelho) criptografado e codificado em hexadecimal, oculto dentro de um documento on-line.

Outra forma em que este método é usado envolve o uso de múltiplos delimitadores. Um exemplo pode ser visto na Figura 13, em que diferentes delimitadores são usados para a porta C&C, o domínio C&C e a URL usada para enviar informações sobre as vítimas. Inicialmente, este método era usado para armazenar apenas a porta - outros dados de configuração foram adicionados em variantes posteriores.

Figura 13. A porta do servidor C&C ("thedoor"), o domínio ("sundski") e a URL para envio de informações das vítimas ("contict") criptografadas e armazenadas em um documento on-line.

3) Embebido em um site especialmente projetado

Para essa estratégia, os operadores criaram um site falso (ver Figura 14) que imita esse site legítimo que mostra o horário oficial do Brasil. O verdadeiro domínio C&C está escondido dentro dos metadados da página web, como pode ser visto na Figura 15, e a porta está hardcodeada no binário. Encontramos pelo menos três websites idênticos com URLs diferentes.

Figura 14: Website criado pelo atacante imitando o site legítimo horariodebrasilia.org.

Figura 15. Comparação de metadados de sites legítimos (esquerda) e falsos (direita). A etiqueta de verificação do Google Site contém o domínio C&C criptografado.

Uma diferença importante em relação ao método anterior é que os dados são criptografados de forma diferente de todas as outras strings, usando o algoritmo para descriptografar dados de configuração remota descritos acima. As três chaves necessárias são os primeiros 12 bytes da string, cada um com 4 bytes.

4) Embebido dentro de um site legítimo

Casbaneiro começou a utilizar o YouTube para armazenar seus domínios de servidor C&C. Identificamos duas contas diferentes utilizadas para esta finalidade por parte dos operadores da ameaça: uma centrada em receitas e a outra em futebol.

Onde está o servidor C&C escondido? Cada vídeo nestes canais contém uma descrição. No final desta descrição, há um link para uma URL falsa do Facebook ou Instagram (ver Figura 17). O domínio do servidor C&C é armazenado neste link, utilizando o mesmo esquema de criptografia que no caso anterior: a chave é armazenada no início dos dados criptografados. A porta está, mais uma vez, hardcodeada no binário.

Figura 16. Um dos canais do YouTube usados pelo atacante.

Figura 17. Descrição de um dos vídeos que o atacante publicou. Na parte inferior, o domínio criptografado do C&C está incorporado em um link falso do Facebook (vermelho).

O que torna esta técnica perigosa é que não gera muitas suspeitas sem contexto. Conectar-se ao YouTube não é considerado incomum e mesmo que você examine o vídeo, o link no final da descrição do vídeo pode facilmente passar despercebido.

5) Usando uma entrada DNS falsa

A ideia geral deste método é registrar um domínio e associá-lo a um endereço IP falso para que o endereço IP real possa ser derivado dele. O algoritmo utiliza três valores de entrada:

  1. Um domínio de base (B) - um domínio utilizado para derivar outros domínios
  2. Uma lista de sufixos (LS) - uma lista de strings que serão usadas para derivar outros domínios do domínio base B
  3. Um número (N) - um número usado para transformar um endereço IP falso no real

Um domínio base diferente é usado para o domínio e a porta do C&C. Fornecemos pseudocódigo na Figura 18. A lógica básica do algoritmo é:

  1. Gerar um domínio a partir do domínio base B e resolvê-lo para um endereço IP falso (FIP)
  2. Adicionar um número N ao endereço IP falso da FIP para obter o endereço IP real
  3. Obter a porta, adicionar os bytes do endereço IP atual e multiplicar por 7
def get_real_ip(base_domain, suffix, n):
	items = base_domain.split(".", 1)
	items[0] += suffix
	generated_domain = '.'.join(items)

	if is_registered(generated_domain):
		fake_ip = resolve(generated_domain)
		return fake_ip + n
	else:
		return 0

def get_real_domain(base_domain, strings_list, n):
	# First, try to resolve the base domain without suffix
	real_ip = get_real_ip(base_domain, "", n)
	if not real_ip:

		# If that fails, try the suffixes one by one
		for suffix in string_list:
			real_ip = get_real_ip(base_domain, suffix, n)
			if real_ip:
				break

	return real_ip

def get_real_port(base_domain, strings_list, n):
	# Do all the steps as when getting the domain
	ip = get_real_domain(base_domain, strings_list, n)	

	# Get the octets of the ip, sum them and multiply by 7
	octets = str(ip).split('.')
	return sum(octets) * 7

Figura 18. Pseudocódigo do algoritmo usado para gerar o domínio e porta C&C usando uma entrada DNS falsa.

Recurso de Download & Execução

A maioria dos trojans bancários na América Latina, incluindo o Casbaneiro, tem uma maneira de baixar e executar outros executáveis que normalmente é através de um comando backdoor. No entanto, o Casbaneiro realiza uma implementação diferente desta funcionalidade. Inicialmente pensamos que era um mecanismo de atualização porque as novas versões do trojan bancário foram distribuídas por ele, mas, como descobrimos mais tarde, não exclusivamente. São utilizados dois mecanismos diferentes, que iremos analisar logo a seguir.

Via documento XML

Uma maneira de usar essa funcionalidade é baixar um documento XML. Os dados armazenados neste documento entre as tags <xmlUpdate> ## y ## </xmlUpdate> são criptografados usando o algoritmo de dados remoto que vimos na Figura 8.

Uma vez descriptografados, os dados podem conter os seguintes tags:

  • <newdns> – novo domínio de servidor C&C
  • <newport> – nova porta do servidor C&C
  • <downexec> – uma URL para baixar e executar um arquivo

Através de um arquivo de configuração especial

Acreditamos que esta abordagem é usada em (provavelmente um subconjunto de) amostras do Casbaneiro que são vendidas a outros cibercriminosos. Neste método, um arquivo de configuração é baixado (como mostrado na Figura 19). Consiste em várias linhas, cada uma das quais contém:

  • Identificação do comprador
  • Nome do arquivo do payload
  • URL principal em que o arquivo está localizado
  • URL de backup em que o arquivo está localizado
  • Versão (não utilizada)
  • Um número (não utilizado)
  • Data (não utilizada)

Os últimos três valores parecem ser completamente ignorados. A data "05/07/2018", por exemplo, é usada mesmo nos arquivos de configuração mais recentes no momento da escrita.

Figura 19. Arquivo de configuração obtido pelo Casbaneiro.

Toda amostra do Casbaneiro que utiliza este método tem em seus dados a identificação hardcodeada do comprador. Quando descarrega este arquivo de configuração, analisa e encontra a linha destinada à identificação específica do comprador e descarrega e executa o payload.

Como mostrado na Figura 19, o payload é quase o mesmo para todos os compradores. No entanto, nos deparamos com uma situação em que uma amostra baixou tal arquivo de configuração e o ID do comprador não estava presente. Esta forma de distribuir payloads adicionais dá ao "principal autor" (provavelmente o vendedor) a capacidade de excluir alguns compradores.

Além das atualizações do Casbaneiro, vimos mais dois payloads distribuídos por este método que analisaremos a seguir.

Ferramenta de e-mail

Uma ferramenta escrita em c# registra automaticamente um grande número de novas contas de e-mail usando a plataforma de e-mail Brazil On-line (BOL) e envia as credenciais para o atacante. Se você leu nosso post anterior, poderá estar familiarizado com isso. Isto é porque, quando se trata de funcionalidade, esta ferramenta faz exatamente a mesma coisa. É também uma variante da ferramenta de spam descrita pela Cisco.

Ladrão de senhas

Outro payload que vimos que foi distribuído por esta funcionalidade é um simples ladrão de senhas do Outlook. Este malware, uma vez executado, mostra primeiro uma caixa de mensagem, em português, que indica que existe um problema com a conta do Outlook da vítima. Depois disso, ele exibe uma página de login falsa da Microsoft solicitando credenciais do Outlook.

Figura 20: Mensagem exibida pelo ladrão de senhas.

Figura 21. Janela exibida pelo ladrão da senha para tentar obter as credenciais do Outlook da vítima.

Conclusão

Nesta publicação falamos do Casbaneiro, outro trojan bancário latino-americano. Mostramos que ele compartilha as características comuns desse tipo de malware, como o uso de janelas pop-up falsas e funcionalidade backdoor. Em algumas campanhas, ele divide sua funcionalidade em um injetor e o verdadeiro trojan bancário. Também está disfarçado como um aplicativo legítimo na maioria das campanhas e destina-se principalmente ao Brasil e ao México.

Apresentamos também fortes indicadores que nos levam a acreditar que Casbaneiro está intimamente relacionado com Amavaldo. Ambos os malwares usam o mesmo algoritmo criptográfico raro no componente do injetor, usaram um script PowerShell muito semelhante em uma de suas campanhas e foram vistos distribuindo uma ferramenta de e-mail muito semelhante.

Descrevemos várias técnicas que o Casbaneiro utiliza para ocultar o endereço de seu servidor C&C. Isso inclui o uso de documentos armazenados remotamente, sites legítimos e falsos e entradas falsas de DNS.

Finalmente, descrevemos duas técnicas utilizadas pelo Casbaneiro para atualizar ou baixar e executar payloads adicionais.

Indicadores de Comprometimento (IoCs)

Hashes

Campanha 1

SHA-1 Description ESET detection name
F07932D8A36F3E36F2552DADEDAD3E22EFA7AAE1 MSI installer Win32/TrojanDownloader.Banload.YJD trojan
BCDF0DDF98E3AA7D5C67063B9926C5D1C0CA6F3A Downloaded payload Win32/Spy.Casbaneiro.AJ trojan

Campanha 2

SHA-1 Description ESET detection name
8745197972071EDE08AA9F7FBEC029BED56151C2 MSI installer JS/TrojanDownloader.Agent.TNX trojan
BC909B76858402B3CBB5EFD6858FD5954A5E3FD8 Re-Loader MSIL/HackTool.WinActivator.J potentially unsafe application

Campanha 3

SHA-1 Description ESET detection name
DD2799C10954293C8E7D75CD4BE2686ADD9AC2D4 MSI installer JS/TrojanDownloader.Agent.TNX trojan
9DFFEB147D89ED58C98252B54C07FAE7D5F9FEA7 Downloaded payload Win32/Spy.Casbaneiro.AJ trojan

Arquivos distribuídos usando a função Download & Executar

SHA-1 Description ESET detection name
C873ED94E582D24FAAE6403A17BF2DF497BE04EB Email tool MSIL/SpamTool.Agent.O trojan
B3630A866802D6F3C1FA2EC487A6795A21833418 Password stealer Win32/PSW.Agent.OGH trojan

Nomes de arquivo

  • %APPDATA%\Spotify\Spotify.exe
  • %APPDATA%\OneDrive\OneDrive.exe
  • %APPDATA%\WhatsApp\WhatsApp.exe
  • %APPDATA%\Sun\Javar\%RANDOM%\%RANDOM%.exe
  • %APPDATA%\DMCache\%RANDOM%\%RANDOM%.exe

Chaves e valores de registro

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • Spotify = %APPDATA%\Spotify\Spotify.exe
  • OneDrive = %APPDATA%\OneDrive\OneDrive.exe
  • WhatsApp = %APPDATA%\WhatsApp\WhatsApp.exe
  • %Random% = %APPDATA%\Sun\Javar\%RANDOM%\%RANDOM%.exe
  • %Random% = %APPDATA%\DMCache\%RANDOM%\%RANDOM%.exe

Servidores C&C

  • hostsize.sytes[.]net:7880
  • agosto2019.servepics[.]com:2456
  • noturnis.zapto[.]org
  • 4d9p5678.myvnc[.]com
  • seradessavez.ddns[.]net:14875

Carteira de Bitcoin

  • 18sn7w8ktbBNgsX8LeeeLMqKS84xMG54si

Técnicas de MITRE ATT&CK 

Tactic ID Name Description
Initial Access T1192 Spearphishing Link Some Casbaneiro campaigns start with a malicious link in an email.
T1193 Spearphishing Attachment Some Casbaneiro campaigns start with a malicious email attachment.
Execution T1073 DLL Side-Loading Some campaigns bundle a legitimate executable so as to use this technique in order to execute Casbaneiro.
T1086 PowerShell One distribution chain uses an obfuscated PowerShell script.
Persistence T1060 Registry Run Keys / Startup Folder Casbaneiro downloaders set up persistence via Run key.
Defense Evasion T1140 Deobfuscate/Decode Files or Information Casbaneiro uses encrypted remote configuration data and its commands are encrypted too.
T1036 Masquerading Casbaneiro sometimes masquerades as or is bundled with a legitimate application.
T1064 Scripting PowerShell and JavaScript are used in Casbaneiro distribution chains.
Credential Access T1056 Input Capture Casbaneiro contains a command to execute a keylogger. It also steals contents from fake windows it displays.
Discovery T1083 File and Directory Discovery Casbaneiro searches for various filesystem paths in order to determine what applications are installed on the victim's machine.
T1057 Process Discovery Casbaneiro searches for various process names in order to determine what applications are running on the victim's machine.
T1063 Security Software Discovery Casbaneiro scans the system for installed security software.
T1082 System Information Discovery Casbaneiro extracts the version of the operating system.
Collection T1115 Clipboard Data Casbaneiro captures and replaces bitcoin wallets in clipboard.
T1113 Screen Capture Casbaneiro contains a command to take screenshots.
Command and Control T1024 Custom Cryptographic Protocol Casbaneiro uses three different custom cryptographic protocols.
T1032 Standard Cryptographic Protocol Casbaneiro encrypts its commands using the standard AES protocol.
Exfiltration T1041 Exfiltration Over Command and Control Channel Casbaneiro sends the data it collects to its C&C server.