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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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:
- Um domínio de base (B) - um domínio utilizado para derivar outros domínios
- Uma lista de sufixos (LS) - uma lista de strings que serão usadas para derivar outros domínios do domínio base B
- 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 é:
- Gerar um domínio a partir do domínio base B e resolvê-lo para um endereço IP falso (FIP)
- Adicionar um número N ao endereço IP falso da FIP para obter o endereço IP real
- 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.
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.
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. |