Hodur: nova variante do RAT Korplug usado pelo grupo Mustang Panda

Pesquisadores da ESET descobriram o Hodur, uma nova variante do RAT Korplug, propagado pelo grupo Mustang Panda e que usa como isca e-mails de phishing referentes a eventos atuais na Europa, inclusive a invasão na Ucrânia.

Pesquisadores da ESET descobriram o Hodur, uma nova variante do RAT Korplug, propagado pelo grupo Mustang Panda e que usa como isca e-mails de phishing referentes a eventos atuais na Europa, inclusive a invasão na Ucrânia.

Pesquisadores da ESET descobriram uma campanha ainda em andamento usando uma variante do malware Korplug até então desconhecida que eles batizaram como Hodur devido a sua semelhança com a variante THOR anteriormente documentada pela Unit 42 em 2020. Na mitologia norueguesa, o Hodur é o meio-irmão cego de Thor, que é enganado por Loki para matar seu meio-irmão Baldr.

Principais descobertas apresentadas neste artigo:

  • Em março de 2022, esta campanha ainda está em andamento e remonta, pelo menos, a agosto de 2021.
  • Entre as vítimas conhecidas estão instituições de pesquisa, provedores de serviços de internet e missões diplomáticas europeias.
  • A cadeia de comprometimento inclui documentos utilizados como isca frequentemente atualizados e estão relacionados a eventos na Europa.
  • A campanha usa um loader personalizado para executar uma nova variante do Korplug.
  • Cada etapa do processo de implantação usa técnicas antianálise e de ofuscação do controle de fluxo, o que a diferencia de outras campanhas.
  • Os pesquisadores da ESET fornecem uma análise profunda das capacidades e comandos desta nova variante.

As vítimas dessa campanha provavelmente são atraídas por documentos de phishing que se aproveitam dos últimos acontecimentos na Europa, como a invasão russa na Ucrânia. Isso resultou em mais de três milhões de residentes fugindo da guerra para países vizinhos, levando a uma crise sem precedentes nas fronteiras da Ucrânia. Um dos nomes dos arquivos relacionados a esta campanha é Situation at the EU borders with Ukraine.exe.

Outras iscas usadas por phishings mencionam restrições de viagem em relação à Covid-19, um mapa de ajuda regional aprovado para a Grécia e um Regulamento do Parlamento Europeu e do Conselho Europeu. O último é um documento real disponível no site do Conselho Europeu. Isso mostra que o grupo APT por trás dessa campanha está acompanhando os assuntos atuais e é capaz de reagir a eles com sucesso e rapidamente.

Figura 1. Países afetados pelo Mustang Panda nesta campanha.

Países afetados:

  • Mongólia
  • Vietnã
  • Mianmar
  • Grécia
  • Rússia
  • Chipre
  • Sul do Sudão
  • África do Sul

Organizações afetadas:

  • Missões diplomáticas
  • Instituições de pesquisa
  • Provedores de serviços de internet (ISPs)

Análise

Com base nas semelhanças de código e nas muitas semelhanças em Táticas, Técnicas e Procedimentos (TTPs), os pesquisadores da ESET atribuem esta campanha grupo ao Mustang Panda (também conhecido como TA416, RedDelta, ou PKPLUG). Trata-se de um grupo de ciberespionagem que visa principalmente a órgãos governamentais e ONGs. As vítimas desse grupo estão localizadas principalmente, mas não exclusivamente, no leste e sudeste da Ásia, especialmente na Mongólia. O grupo também é conhecido por uma campanha que foi direcionada ao Vaticano em 2020.

Embora não tenhamos sido capazes de identificar os mercados verticais de todas as vítimas, esta campanha parece ter os mesmos objetivos de direcionamento que outras campanhas do Mustang Panda. Seguindo a vitimologia típica deste grupo APT, a maioria das vítimas está localizada no leste e sudeste da Ásia, juntamente com algumas em países europeus e africanos. De acordo com a telemetria da ESET, a grande maioria dos alvos está localizada na Mongólia e Vietnã, seguida por Mianmar, com poucas vítimas nos outros países afetados.

As campanhas do grupo Mustang Panda normalmente usam loaders personalizados para malware compartilhado, incluindo Cobalt Strike, Poison Ivy e Korplug (também conhecido como PlugX). O grupo também é conhecido por criar suas próprias variantes do Korplug. Em comparação com outras campanhas que utilizam o Korplug, cada etapa do processo de implantação utiliza técnicas antianálise e de ofuscação de controle de fluxo.

Este artigo contém uma análise detalhada dessa variante do Korplug, desconhecida anteriormente, utilizada nessa campanha. Esta atividade faz parte da mesma campanha recentemente investigada pela Proofpoint, mas fornecemos informações históricas e de orientação adicional.

Conjunto de ferramentas

O grupo Mustang Panda é conhecido pela elaboração de loaders personalizadas e variantes do Korplug, e as amostras utilizadas nesta campanha mostram isso perfeitamente.

As cadeias de comprometimento vistas nesta campanha seguem o típico padrão do Korplug: um executável legítimo, validamente assinado e vulnerável a técnica conhecida como DLL search-order hijacking, uma DLL maliciosa e um arquivo do Korplug criptografado que são implantados na máquina da vítima. O executável é utilizado para carregar o módulo, que então descriptografa e executa o RAT Korplug. Em alguns casos, um downloader é usado primeiro para distribuir estes arquivos juntamente com um documento utilizado como isca. Este processo é ilustrado na Figura 2.

Figura 2. Visão geral do processo de implantação da variante do Korplug chamada Hodur.

O que diferencia esta campanha é o intenso uso de técnicas de ofuscação de controle de fluxo e antianálise em cada etapa do processo de implantação. As seções seguintes descrevem o comportamento de cada etapa e analisam mais profundamente as técnicas de evasão de defesa utilizadas em cada uma delas.

Acesso inicial

Não fomos capazes de observar o vetor utilizado para a implantação inicial, mas nossa análise aponta os ataques de phishing e de watering hole como prováveis vetores. Nos casos em que vimos um downloader, os nomes dos arquivos utilizados sugerem um documento com um assunto interessante para a vítima. Tais exemplos incluem:

  • COVID-19 travel restrictions EU reviews list of third countries.exe
  • State_aid__Commission_approves_2022-2027_regional_aid_map_for_Greece.exe
  • REGULATION OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL.exe
  • Situation at the EU borders with Ukraine.exe

Para fomentar a ilusão, estes binários baixam e abrem um documento que tem o mesmo nome, mas com uma extensão .doc ou .pdf. O conteúdo dessas iscas reflete com precisão o nome do arquivo. Como mostrado na Figura 3, pelo menos um deles é um documento legítimo do Parlamento Europeu, acessível publicamente.

Figura 3. Primeira página do documento utilizado como isca para o downloader REGULATION OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL.exe. É um documento real, disponível no site do Conselho Europeu.

Downloader

Embora sua complexidade tenha aumentado ao longo da campanha, o downloader é bastante simples. Este aumento na complexidade vem de técnicas antianálise adicionais, que abordamos a seguir.

Primeiro ele baixa quatro arquivos através do HTTPS: um documento isca, um executável legítimo, um módulo malicioso e um arquivo do Korplug criptografado. A combinação destes três últimos componentes para executar uma payload via DLL é às vezes referida como um tridente e é uma técnica comumente usada pelo Mustang Panda, e geralmente com os loaders do Korplug. Tanto os endereços dos servidores quanto os caminhos dos arquivos são codificados no executável do downloader. Uma vez que tudo é baixado, e o documento isca é aberto para distrair a vítima, o downloader usa a seguinte linha de comando para lançar o executável legítimo:

cmd /c ping 8.8.8.8 -n 70&&”%temp%\<legitimate executable>”

Este comando ping verifica a conectividade à internet e introduz um atraso (através da opção -n 70) antes de executar o executável legítimo baixado.

O downloader usa múltiplas técnicas antianálise, muitas das quais também são usadas no loader e no payload final. A ofuscação adicional foi adicionada a novas versões ao longo da campanha, sem alterar seu objetivo.

Nas primeiras versões do downloader se usava código lixo e previsões opacas para dificultar a análise, como mostrado na Figura 4, mas o servidor e os nomes dos arquivos são claramente visíveis no texto.

Figura 4. Ofuscação do controle de fluxo nas primeiras versões do downloader.

Em versões posteriores, os arquivos no servidor estão criptografados com RC4, usando como chave a representação da string em base 10 do tamanho do arquivo, e depois codificados com hexadecimal. Este processo é ilustrado no fragmento de Python logo abaixo. O downloader realiza as operações opostas do lado do cliente para recuperar os arquivos de texto simples. Isto provavelmente é feito para contornar as proteções a nível de rede.

from Crypto.cipher import ARC4
key = “%d” % len(plaintext)
rc4 = ARC4.new(key)
cipher_content = rc4.encrypt(plaintext).hex().upper()

Estas versões substituem o uso de strings de texto simples por pilhas de strings criptografadas. Elas ainda estão codificadas no arquivo, mas a ofuscação que as envolve, e o uso de chaves diferentes faz com que seja difícil descriptografá-las estaticamente de forma automatizada. Esta mesma técnica é muito utilizada nas etapas posteriores. As pilhas de strings criptografadas também são usadas para ofuscar chamadas às funções da API do Windows.

Primeiro, o nome da função alvo é descriptografada e passada para uma função. Esta função obtém um ponteiro para o campo InMemoryOrderModuleList do PEB (Process Environment Block). Em seguida, itera sobre os módulos carregados, passando cada identificador para GetProcAddress junto com o nome da função até que a função alvo seja resolvida com sucesso. Parte deste processo pode ser visto na Figura 5.

Figura 5. Obfuscao de chamadas à API do Windows no downloader. A captura de tela mostra uma chamada para o WriteFile, mas o mesmo padrão é usado para todas as funções da API.

Loader

Como é comum com o Korplug, o loader é uma DLL que explora uma vulnerabilidade de carga lateral em um executável legítimo e assinado. Observamos muitos aplicativos diferentes sendo abusados nesta campanha, por exemplo, um executável SmadAV vulnerável anteriormente visto pela Qurium em uma campanha atribuída ao grupo Mustang Panda que tinha como alvo a Myanmar.

O loader exporta múltiplas funções. A lista exata varia dependendo da aplicação explorada, mas em todos os casos, apenas uma delas faz algo importante. Em todos os loaders que observamos, esta é a função exportada com o endereço de carga mais alto. Todas as outras exportações, e o ponto de entrada da biblioteca retornam imediatamente ou executam algum código de lixo inútil. Muitas destas exportações têm nomes que consistem de letras minúsculas aleatórias e apontam para o mesmo endereço como mostrado na Tabela 1.

Tabela 1. Funções exportadas por um loader Hodur. A exportação createSystemFontsUsingEDL é a que carrega a etapa final do malware nesta versão.

NameOrdinalFunction RVA
CreatePotPlayerExW10x00007894
RunPotPlayer20x000166A5
createSystemFontsUsingEDL30x00016779
gGegcerhwyvxtkrtyawvugo40x00007894
liucigvyworf50x00007639
ojohjinbgdfqtcwxojeusoneslciyxtiyjuieaugadjpd60x000077CA
soeevhiywsypipesxfhgxboleahfwvlqcqp70x00007894
srkeqffanuhiuwahbmatdurggpffhbkcpukyxgxmosn80x00007894
thggvmrv90x00007701

A função do loader obtém o diretório a partir do qual se executa a DLL usando GetModuleFileNameA e tenta abrir o arquivo Korplug criptografado que ele contém. Esse nome de arquivo é codificado no loader. Ele lê o conteúdo do arquivo em um buffer alocado localmente e o descriptografa. O loader torna este buffer executável usando o VirtualProtect antes de chamá-lo no offset 0x00.

As chamadas de funções do API do Windows são ofuscadas com uma técnica diferente daquela utilizada no downloader. Ao contrário do loader, que contém os nomes de suas funções (como mostrado na Tabela 1 acima), somente os hashes de 64 bits das chamadas de funções do API do Windows estão presentes no binário. Para resolver essas funções, o loader usa as listas de exportação de todas as bibliotecas carregadas através do InMemoryOrderModuleList do PEB. O nome de cada exportação é codificada, depois comparada com o valor esperado. O algoritmo hash FNV-1a, recentemente trazido de volta pelo backdoor Sunburst, foi usado anteriormente pelo Mustang Panda, em loaders do Korplug documentados pelo XORHEX, para resolver o GetProcAddress e LoadLibraryA, embora não tenha sido identificado pelo nome nessa análise. Nesta versão, no entanto, todas as funções API são utilizadas.

Backdoor Korplug

O Korplug (também conhecido como PlugX) é um RAT usado por vários grupos APT. Apesar de ser tão amplamente utilizado, ou talvez por causa dele, poucos relatórios descrevem extensamente seus comandos e os dados que ele exfiltra. Sua funcionalidade não é constante entre variantes, mas parece existir uma sobreposição significativa na lista de comandos entre a versão que analisamos e outras fontes como o relatório Avira de janeiro de 2020 e o projeto plugxdecoder no GitHub.

Como mencionado anteriormente, a variante utilizada nesta campanha tem muitas semelhanças com a variante THOR, e é por isso que a chamamos de Hodur. As semelhanças incluem o uso da chave de registro do Software\CLASSES\M-pu, o mesmo formato para servidores C&C na configuração, e o uso da classe window Static.

Como esperado para os payloads do Korplug, o loader só descriptografa esta etapa na memória. Apenas a versão criptografada é escrita em disco em um arquivo com extensão .dat.

A menos que se indique o contrário, todas as strings codificadas discutidas nesta seção são armazenadas como cadeias de pilhas criptografadas.

Neste módulo, as funções do API do Windows são ofuscadas através de uma combinação dos métodos utilizados nas etapas anteriores. LoadLibraryA e GetProcAddress são resolvidos através da técnica de hashing FNV-1a e as cadeias de pilha são descriptografadas e passadas para obter a função do alvo.

Loading

Uma vez descriptografado, o payload é uma DLL válida que exporta uma única função. Em quase todas as amostras observadas desta campanha, esta função é denominada StartProtect. Entretanto, lançá-la diretamente através desta exportação ou de seu ponto de entrada não executará o payload principal e o processo de carregamento é bastante complicado.

Como explicado na seção anterior, o loader descriptografa o arquivo na memória como um blob contínuo e a execução começa no offset 0x00. O cabeçalho PE contém um shellcode, mostrado na Figura 6, que chama um offset específico que corresponde à exportação única do módulo.

Figura 6. Shellcode no cabeçalho PE que chama a função exportada.

Esta função analisa o cabeçalho PE na memória e o mapeia manualmente como uma biblioteca em um buffer recentemente alocado. Isto inclui o mapeamento das várias seções, a resolução das importações e, finalmente, o uso da DLL_PROCESS_ATTACH para chamar o ponto de entrada da DLL. Mais uma vez, os predicados opacos e o código lixo são usados para ofuscar o propósito desta função.

O ponto de entrada da biblioteca devidamente carregada é então chamado com o valor não-padrão de 0x04 para o parâmetro fdwReason (somente valores de 0x00 a 0x03 são definidos atualmente). Este valor especial é necessário para que ele execute o payload principal. Esta simples verificação evita que o RAT seja executado diretamente com uma ferramenta genérica como o rundll32.exe.

O backdoor primeiro descriptografa sua configuração usando a string 123456789 como uma chave XOR repetitiva. Uma vez descriptografada, o bloco de configuração começa com ########. O layout da configuração varia ligeiramente entre as amostras, mas todas elas contêm pelo menos os seguintes campos:

  • Nome do diretório de instalação. Também usado como o nome da chave de registro criada para persistência. Este valor corresponde aproximadamente ao nome da aplicação utilizada com três letras aleatórias anexadas (por exemplo, FontEDLZeP ou AdobePhotosGQp);
  • Nome do mutex;
  • Um valor que é ou uma string da versão ou do ID;
  • Lista de servidores C&C. Cada entrada inclui endereço IP, número de porta e um número indicando o protocolo que deve ser usado com esse C&C.

O backdoor então verifica o caminho a partir do qual está sendo executado usando GetModuleFileNameW. Se isso corresponder a %userprofile%%<installation directory> ou %allusersprofile%<installation directory>, a funcionalidade RAT será executada. Caso contrário, ela passará pelo processo de instalação.

Instalação

Para se instalar, o malware cria o diretório acima mencionado no %allusersprofile%. Usando o SetFileAttributesW, ele é então marcado como hidden e system. O executável vulnerável, módulo carregador e arquivos criptografados do Korplug criptografados são copiados para o novo diretório.

A seguir, a persistência é estabelecida. Amostras anteriores conseguiram isso criando uma tarefa programada para ser executada na inicialização via schtasks.exe. Amostras mais recentes adicionam uma entrada de registro ao Software\Microsoft\Windows\CurrentVersion\Run, provando primeiro a seção HKLM e depois a HKCU. Esta entrada tem o mesmo nome do diretório de instalação com seu valor definido para o caminho do executável recém copiado.

Uma vez estabelecida a persistência, o malware lança o executável a partir de sua nova localização e sai.

RAT

A funcionalidade RAT da variante Hodur utilizada nesta campanha alinha-se em sua maioria com outras variantes do Korplug, com alguns comandos e características adicionais. Porém, como já destacamos anteriormente, as análises detalhadas dos comandos do Korplug são poucas e distantes, portanto, nosso objetivo é fornecer tal análise na esperança de ajudar os futuros analistas.

Quando neste modo, o backdoor faz iteração através da lista de servidores C&C em sua configuração até chegar ao final ou receber um comando de desinstalação. Para cada um desses servidores, ele processa comandos até receber um comando Stop ou encontrar um erro.

O handshake inicial do Hodur pode ser feito através do HTTPS ou TCP. Isso é determinado por um valor na configuração para aquele servidor C&C em particular. A comunicação posterior é sempre feita sobre o TCP usando um protocolo personalizado que descrevemos nesta seção, juntamente com os comandos que podem ser emitidos. O Hodur usa soquetes da API do Windows Sockets (Winsock) que suportam I/O sobrepostas.

Depois do protocolo de link inicial, as comunicações do Hodur envolvem mensagens TCP que consistem em um cabeçalho, com a estrutura descrita na Tabela 2, seguido por um corpo de mensagem que normalmente é comprimido usando LZNT1 e sempre se criptografa com RC4. As mensagens cujo campo do cabeçalho do número de comando tem o conjunto de 0x10000000 bits (aquelas que contêm conteúdo de arquivo para os comandos ReadFile e WriteFile, descritos na Tabela 3) têm corpos de mensagem criptografados mas não comprimidos. Todos os corpos de mensagens criptografados usam a chave hardcoded sV!e@T#L$PH% com um nonce aleatório de quatro bytes (o valor em offset 0x00 no cabeçalho) anexado.

Tabela 2. Formato de cabeçalho utilizado para a comunicação entre a C&C e o backdoor.

OffsetFieldDescription
0x00NonceRandom nonce appended to the RC4 key.
0x04Command numberThis field indicates the command to run or the command that caused this response to be sent.
0x08Length of bodyLength of the message body. It seems that this field isn’t checked by the client for messages from the C&C server.
0x0CCommand exit statusThe return or error value of the command that was run. This field is not checked by the client in messages received from the C&C server.

Os cabeçalhos das mensagens do C&C do Hodur são transmitidos sem criptografia, seguidos por corpos de mensagens de tamanho variável (o valor em offset 0x08 do cabeçalho). O formato do corpo da mensagem varia segundo o comando, mas uma vez descriptografados e descomprimidos, os valores de comprimento variável (como strings) estão sempre no final do corpo da mensagem e seu offset no corpo é armazenado como um número inteiro no campo de mensagem correspondente.

Como a versão descrita pela Avira, o Hodur tem dois grupos de comandos – 0x1001 e 0x1002 – cada um com seu próprio controlador. O servidor C&C pode definir qual grupo ouvir enviando a identificação correspondente como o número de comando quando um cliente ainda não está em um dos dois modos. Ele continuará escutando para o mesmo grupo até receber o comando Stop ou caso ocorra um erro (incluindo o recebimento de uma mensagem com um número de comando inválido em seu cabeçalho).

O primeiro grupo, 0x1001, contém comandos para gerenciar a execução do backdoor e fazer o reconhecimento inicial em um host recém-comprometido. Como estes comandos não levam argumentos, as mensagens enviadas pelo servidor C&C consistem apenas nos cabeçalhos. A tabela 3 contém uma lista desses comandos. O comando GetSystemInfo é descrito com mais detalhes abaixo. Observe que nenhum nome de comando está presente no RAT; eles foram retirados de análises anteriores ou fornecidos por nós.

Tabela 3. Comandos no grupo 0x1001.

IDNameDescriptionData in client response
0x1000PingSent by the client when it starts listening for commands from this group.Between 0 and 64 random bytes
0x1001GetSystemInfoGet information about the system.See Table 4
0x1002ListenThreadStart a new thread that listens for group 0x1002 commands.None
0x1004ResetConnectionTerminate with WSAECONNRESET.N/A
0x1005UninstallDelete persistence registry keys, remove itself and created folders.None
0x1007StopSet registry key System\CurrentControlSet\Control\‌Network\allow to 1 and exit.N/A

O comando GetSystemInfo coleta extensas informações sobre o sistema, conforme detalhado na Tabela 4. Se ele ainda não existir, a chave de registro do Software\CLASSES\Pu\CLSID é definida para a marca de tempo atual, tentando primeiro com o HKLM e depois com o HKCU. O valor desta chave é então enviado na resposta.

Tabela 4. Formato do corpo de resposta para a resposta GetSystemInfo.

OffsetValueOffsetValue
0x00Magic bytes 0x201903010x38Suite mask
0x04Client IP address of the C&C socket0x3AProduct type
0x08Server IP address of the C&C socket0x3C0x01 if the process is running as WOW64
0x0CRAM in KB0x40System time – year
0x10CPU clock rate in MHz0x42System time – month
0x14Display width in pixels0x44Timestamp of first run (offset)
0x18Display height in pixels0x46Service pack version string (offset)
0x1CDefault locale0x48Unknown
0x20Current tick count0x4AUsername (offset)
0x24OS major version0x4CComputer name (offset)
0x28OS minor version0x4EMutex name (offset)
0x2COS build number0x50Unknown
0x30OS platform ID0x52List of machine IP addresses (offset)
0x34Service pack major version0x54Always two 0x00 bytes
0x36Service pack minor version

O grupo 0x1002 contém comandos que fornecem a funcionalidade do RAT, como detalhado na Tabela 5. Alguns destes tomam parâmetros fornecidos no corpo de mensagens do comando. O comando FindFiles é descrito com mais detalhes abaixo. Novamente, observe que nenhum nome de comando está presente no RAT; eles foram retirados de análises anteriores ou fornecidos por nós.

Tabela 5. Comandos no grupo 0x1002.

IDNameDescriptionData in C&C requestData in client response
0x1002PingSent by the client when it starts listening for commands from this group.N/ANone
0x3000ListDrivesList all mapped drives (A: to Z:) and their properties.

All 26 entries are sent back in one message body. Drives that aren’t present have all fields set to 0x00.
None· Drive type
· Total size
· Space available to user
· Free space
· Volume name (offset)
· File system name (offset)
0x3001ListDirectoryList the contents of the specified directory. The client sends one response message per entry.Directory path· Is a directory?
· File attributes
· File size
· Creation time
· Last write time
· Filename (offset)
· 8.3 filename (offset)
0x3002Sent by the client when it has finished executing the ListDirectory command.N/ANone
0x3004ReadFileRead a file in chunks of 0x4000 bytes. · Creation time
· Last access time
· Last write time
· Has offset
· Offset in file
· File size
· File path
0x10003005Chunk of read file data.N/ARead data
0x10003006Sent by the client when it has finished executing the ReadFile command.N/ANone
0x3007WriteFileWrite to a file and restore previous timestamp.

Creates parent directories if they don’t exist.
· Creation time
· Last access time
· Last write time
· Has offset
· Offset in file
· File path (offset)
None
0x10003008Sent by the server with data to write to the file.Data to writeN/A
0x10003009Sent by the server when the WriteFile operation is complete.NoneN/A
0x300ACreateDirectoryCreate a directory.Directory pathNone
0x300BCanReadFileTry to open a file with read permissions.File pathNone
0x300CDesktopExecuteExecute a command on a hidden desktop.Command line to executePROCESS_INFORMATION structure for the created process.
0x300DFileOperationPerform a file operation using SHFileOperation.· wFunc
· fFlags
· pFrom (offset)
· pTo (offset)
None
0x300EGetEnvValueGet the value of an environment variable.Environment variableEnvironment variable value.
0x300FCreateProgramDataDirCreates the directory %SYSTEM%\ProgramData, optionally with a subdirectory.Subdirectory relative path (optional)None
0x3102FindFilesRecursively search a directory for files matching a given pattern.· Starting directory
· Search pattern
See response body format in Table 6.
0x7002RemoteShellStart an interactive remote cmd.exe session.NoneNone
0x7003Result of the last command run.N/ACommand output

Comando FindFiles

A partir do diretório fornecido, este comando procura por arquivos cujos nomes correspondem ao padrão dado. Este padrão suporta os mesmos caracteres curinga que a API FindFirstFile do Windows. Para cada arquivo correspondente, o cliente envia uma mensagem de resposta com seu corpo no formato descrito na Tabela 6.

Tabela 6. Formato do corpo de resposta para o comando FindFiles.

OffsetValueOffsetValue
0x00File attributes0x24Folder path (offset)
0x04File size in bytes0x26Filename (offset)
0x0CCreation time0x288.3 filename (offset)
0x1CLast write time

Uma mensagem de resposta com um corpo vazio é enviada assim que a busca é concluída.

Conclusão

As iscas usadas nesta campanha mostram mais uma vez quão rapidamente o Mustang Panda é capaz de reagir aos acontecimentos mundiais. Por exemplo, um regulamento da UE sobre a Covid-19 foi usado como isca apenas duas semanas após sua divulgação, e documentos sobre a guerra na Ucrânia começaram a ser usados nos dias posteriores ao início da invasão. Este grupo também demonstra uma capacidade de melhorar iterativamente suas ferramentas, incluindo o uso de downloaders tridentes para implantar o Korplug.

Para quaisquer perguntas sobre nossas pesquisas publicadas no WeLiveSecurity, por favor, entre em contato conosco através do e-mail threatintel@eset.com.

A equipe do ESET Research agora também oferece relatórios privados de inteligência de APT e feeds de dados. Para quaisquer perguntas sobre este serviço, visite a página ESET Threat Intelligence/wls_update]

Indicadores de Comprometimento

SHA-1FilenameESET detection nameDescription
69AB6B9906F8DCE03B43BEBB7A07189A69DC507Bcoreclr.dllWin32/Agent.ADMWKorplug loader.
10AE4784D0FFBC9CD5FD85B150830AEA3334A1DEN/AWin32/Korplug.TCDecrypted Korplug (dumped from memory).
69AB6B9906F8DCE03B43BEBB7A07189A69DC507Bcoreclr.dllWin32/Agent.ADMWKorplug loader.
4EBFC035179CD72D323F0AB357537C094A276E6DPowerDVD18.exeWin32/Delf.UTNKorplug loader.
FDBB16B8BA7724659BAB5B2E1385CFD476F10607N/AWin32/Korplug.TBDecrypted Korplug (dumped from memory).
7E059258CF963B95BDE479D1C374A4C300624986N/AWin32/Korplug.TCDecrypted Korplug (dumped from memory).
7992729769760ECAB37F2AA32DE4E61E77828547SHELLSEL.ocxWin32/Agent.ADMWKorplug loader.
F05E89D031D051159778A79D81685B62AFF4E3F9SymHp.exeWin32/Delf.UTNKorplug loader.
AB01E099872A094DC779890171A11764DE8B4360BoomerangLib.dllWin32/Korplug.THKorplug loader.
CDB15B1ED97985D944F883AF05483990E02A49F7PotPlayer.dllWin32/Agent.ADYOKorplug loader.
908F55D21CCC2E14D4FF65A7A38E26593A0D9A70SmadHook32.dllWin32/Agent.ADMWKorplug loader.
477A1CE31353E8C26A8F4E02C1D378295B302C9EN/AWin32/Agent.ADMWKorplug loader.
52288C2CDB5926ECC970B2166943C9D4453F5E92SmadHook32c.dllWin32/Agent.ADMWKorplug loader.
CBD875EE456C84F9E87EC392750D69A75FB6B23ASHELLSEL.ocxWin32/Agent.ADMWKorplug loader.
2CF4BAFE062D38FAF4772A7D1067B80339C2CE82Adobe_Caps.dllWin32/Agent.ADMWKorplug loader.
97C92ADD7145CF9386ABD5527A8BCD6FABF9A148DocConvDll.dllWin32/Agent.ADYOKorplug loader.
39863CECA1B0F54F5C063B3015B776CDB05971F3N/AWin32/Korplug.TDDecrypted Korplug (dumped from memory).
0D5348B5C9A66C743615E819AEF152FB5B0DAB97FontEDL.execleanVulnerable legitimate Font File Generator executable.
C8F5825499315EAF4B5046FF79AC9553E71AD1C0Silverlight.Configuration.execleanVulnerable legitimate Microsoft Silverlight Configuration Utility executable.
D4FFE4A4F2BD2C19FF26139800C18339087E39CDPowerDVDLP.execleanVulnerable legitimate PowerDVD executable.
65898ACA030DCEFDA7C970D3A311E8EA7FFC844ASymantec.execleanVulnerable legitimate Symantec AntiVirus executable.
7DDB61872830F4A0E6BF96FAF665337D01F164FCAdobe Stock Photos CS3.execleanVulnerable legitimate Adobe Stock Photos executable.
C13D0D669365DFAFF9C472E615A611E058EBF596COVID-19 travel restrictions EU reviews list of third countries.exeWin32/Agent_AGen.NJDownloader.
062473912692F7A3FAB8485101D4FCF6D704ED23REGULATION OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL.exeWin32/TrojanDownloader.Agent.GDLDownloader.
2B5D6BB5188895DA4928DD310C7C897F51AAA050log.dllWin32/Agent.ACYWKorplug loader.
511DA645A7282FB84FF18C33398E67D7661FD6632.exeWin32/Agent.ADPLKorplug loader.
59002E1A58065D7248CD9D7DD62C3F865813EEE6log.dllWin32/Agent.ADXEKorplug loader.
F67C553678B7857D1BBC488040EA90E6C52946B3KINGSTON.exeWin32/Agent.ADXZKorplug Loader.
58B6B5FD3F2BFD182622F547A93222A4AFDF4E76PotPlayer.execleanVulnerable legitimate executable.

Rede

DomainIPFirst seenNotes
103.56.53[.]1202021‑06‑15Korplug C&C
154.204.27[.]1812020‑10‑05Korplug C&C.
43.254.218[.]422021‑02‑09Download server.
45.131.179[.]1792020‑10‑05Korplug C&C.
176.113.69[.]912021-04-19Korplug C&C.
upespr[.]com45.154.14[.]2352022-01-17Download server.
urmsec[.]com156.226.173[.]232022‑02‑23Download server.
101.36.125[.]2032021-06-01Korplug C&C.
185.207.153[.]2082022‑02‑03Download server.
154.204.27[.]1302021-12-14Korplug C&C.
92.118.188[.]782022-01-27Korplug C&C.
zyber-i[.]com107.178.71[.]2112022-03-01Download server.
locvnpt[.]com103.79.120[.]662021-05-21Download server. This domain was previously used in a 2020 campaign documented by Recorded Future.

Técnicas do MITRE ATT&CK

Esta tabela foi criada utilizando a versão 10 do framework do MITRE ATT&CK.

TacticIDNameDescription
Resource DevelopmentT1583.001Acquire Infrastructure: DomainsMustang Panda has registered domains for use as download servers.
T1583.003Acquire Infrastructure: Virtual Private ServerSome download servers used by Mustang Panda appear to be on shared hosting.
T1583.004Acquire Infrastructure: ServerMustang Panda uses servers that appear to be exclusive to the group.
T1587.001Develop Capabilities: MalwareMustang Panda has developed custom loader and Korplug versions.
T1588.006Obtain Capabilities: VulnerabilitiesMultiple DLL hijacking vulnerabilities are used in the deployment process.
T1608.001Stage Capabilities: Upload MalwareMalicious payloads are hosted on the download servers.
ExecutionT1059.003Command and Scripting Interpreter: Windows Command ShellWindows command shell is used to execute commands sent by the C&C server.
T1106Native APIMustang Panda uses CreateProcess and ShellExecute for execution.
T1129Shared ModulesMustang Panda uses LoadLibrary to load additional DLLs at runtime. The loader and RAT are DLLs.
T1204.002User Execution: Malicious FileMustang Panda relies on the user executing the initial downloader.
T1574.002Hijack Execution Flow: DLL Side-LoadingThe downloader obtains and launches a vulnerable application so it loads and executes the malicious DLL that contains the second stage.
PersistenceT1547.001Boot or Logon Autostart Execution: Registry Run Keys / Startup FolderKorplug can persist via registry Run keys.
T1053.005Scheduled Task/Job: Scheduled TaskKorplug can persist by creating a scheduled task that runs on startup.
Defense EvasionT1140Deobfuscate/Decode Files or InformationThe Korplug file is encrypted and only decrypted at runtime, and its configuration data is encrypted with XOR.
T1564.001Hide Artifacts: Hidden Files and DirectoriesDirectories created during the installation process are set as hidden system directories.
T1564.003Hide Artifacts: Hidden WindowKorplug can run commands on a hidden desktop. Multiple hidden windows are used during the deployment process.
T1070Indicator Removal on HostKorplug’s uninstall command deletes registry keys that store data and provide persistence.
T1070.004Indicator Removal on Host: File DeletionKorplug can remove itself and all created directories.
T1070.006Indicator Removal on Host: TimestompWhen writing to a file, Korplug sets the file’s timestamps to their previous values.
T1036.004Masquerading: Masquerade Task or ServiceScheduled tasks created for persistence use legitimate-looking names.
T1036.005Masquerading: Match Legitimate Name or LocationFile and directory names match expected values for the legitimate app that is abused by the loader.
T1112Modify RegistryKorplug can create, modify, and remove registry keys.
T1027Obfuscated Files or InformationSome downloaded files are encrypted and stored as hexadecimal strings.
T1027.005Obfuscated Files or Information: Indicator Removal from ToolsImports are hidden by dynamic resolution of API function names.
T1055.001Process Injection: Dynamic-link Library InjectionSome versions of the Korplug loader inject the Korplug DLL into a newly launched process.
T1620Reflective Code LoadingKorplug parses and loads itself into memory.
DiscoveryT1083File and Directory DiscoveryKorplug can list files and directories along with their attributes and content.
T1082System Information DiscoveryKorplug collects extensive information about the system including uptime, Windows version, CPU clock rate, amount of RAM and display resolution.
T1614System Location DiscoveryKorplug retrieves the system locale using GetSystemDefaultLCID.
T1016System Network Configuration DiscoveryKorplug collects the system hostname and IP addresses.
T1016.001System Network Configuration Discovery: Internet Connection DiscoveryThe downloader pings Google’s DNS server to check internet connectivity.
T1033System Owner/User DiscoveryKorplug obtains the current user’s username.
T1124System Time DiscoveryKorplug uses GetSystemTime to retrieve the current system time.
CollectionT1005Data from Local SystemKorplug collects extensive data about the system it’s running on.
T1025Data from Removable MediaKorplug can collect metadata and content from all mapped drives.
T1039Data from Network Shared DriveKorplug can collect metadata and content from all mapped drives.
Command and ControlT1071.001Application Layer Protocol: Web ProtocolsKorplug can make the initial handshake over HTTPS.
T1095Non-Application Layer ProtocolC&C communication is done over a custom TCP-based protocol.
T1573.001Encrypted Channel: Symmetric CryptographyC&C communication is encrypted using RC4.
T1008Fallback ChannelsThe Korplug configuration contains fallback C&C servers.
T1105Ingress Tool TransferKorplug can download additional files from the C&C server.
T1571Non-Standard PortWhen Hodur performs its initial handshake over HTTPS, it uses the same port (specified in the configuration) as for the rest of the communication.
T1132.001Data Encoding: Standard EncodingKorplug compresses transferred data using LZNT1.
ExfiltrationT1041Exfiltration Over C2 ChannelData exfiltration is done via the same custom protocol used to send and receive commands.

Cadastre-se para receber por e-mail todas as atualizações sobre novos artigos que publicamos em nossa seção referente à Crise na Ucrânia.

Newsletter

Discussão