Key Takeaways
- PeckBirdy é uma estrutura de comando e controle (C&C) baseada em JScript, utilizada por atores APT alinhados à China desde 2023, projetada para ser executada em vários ambientes, permitindo uma implantação flexível.
- Dois backdoors modulares, HOLODONUT e MKDOOR, ampliam as capacidades de ataque do PeckBirdy além de sua funcionalidade principal.
- Enquanto isso, as campanhas SHADOW-VOID-044 e SHADOW-EARTH-045 demonstram atividades coordenadas de grupos de ameaça alinhados à China que utilizam PeckBirdy em múltiplos vetores de ataque.
- Uma das campanhas utiliza certificados de assinatura de código roubados para cargas úteis do Cobalt Strike e explora (CVE-2020-16040) hospedados em vários domínios e endereços IP de C&C para manter acesso persistente.
- TrendAI Vision One™ detecta e bloqueia os indicadores de comprometimento (IOCs) descritos neste blog, e fornece aos clientes consultas de caça a ameaças personalizadas, insights sobre ameaças e relatórios de inteligência.
Introdução Desde 2023, temos observado campanhas de ameaças que empregam uma estrutura de comando e controle baseada em scripts (C&C) até então inédita, que denominamos PeckBirdy, sendo utilizada contra a indústria de jogos de azar chinesa, bem como atividades maliciosas direcionadas a entidades governamentais e organizações privadas asiáticas. Ao rastrear essa estrutura, identificamos pelo menos duas campanhas utilizando o PeckBirdy, as quais conseguimos vincular a diversos grupos de ameaças persistentes avançadas (APT) alinhados à China. Ressaltamos que já discutimos essas campanhas durante a conferência HitCon em agosto de 2025 e estamos publicando este artigo agora para compartilhar nossas descobertas com um público mais amplo. PeckBirdy é um framework baseado em scripts que, apesar de possuir recursos avançados, é implementado usando JScript , uma linguagem de script antiga. Isso garante que o framework possa ser executado em diferentes ambientes de execução por meio de LOLBins (Living off the land binaries). Essa flexibilidade nos permitiu observar o PeckBirdy em vários estágios da cadeia de ataque, incluindo seu uso como servidor de controle de watering hole durante a fase inicial do ataque, como servidor de shell reverso durante a fase de movimentação lateral e como servidor C&durante a fase de backdoor. Neste artigo, apresentaremos nossa análise detalhada do PeckBirdy, suas campanhas de ataque e um par de novas portas traseiras, “HOLODONUT” e “MKDOOR”, que descobrimos estarem sendo usadas em operações relacionadas. Além disso, discutiremos a atribuição da campanha correspondente. Atividades na natureza A partir de 2023, notamos que vários sites de jogos de azar chineses estavam sendo infectados com scripts maliciosos que apontavam para servidores remotos. Investigações adicionais sobre as injeções e os servidores nos levaram a descobrir o framework de scripts PeckBirdy. Quando as vítimas visitam esses sites de jogos de azar, os scripts injetados baixam e executam o script principal da rotina PeckBirdy, permitindo que os atacantes enviem e executem JavaScript remotamente. O objetivo principal dessa rotina é exibir páginas falsas de atualização de software para o Google Chrome, induzindo as vítimas a baixar e executar arquivos de atualização maliciosos, que são backdoors preparados pelos atacantes. Essa é a primeira campanha que identificamos e que estamos monitorando sob o nome SHADOW-VOID-044. Em julho de 2024, observamos outra campanha direcionada principalmente a entidades governamentais e organizações privadas asiáticas, que rastreamos sob o nome de campanha SHADOW-EARTH-045. Descobrimos que essa campanha insere links do PeckBirdy em sites governamentais, provavelmente para distribuir scripts de coleta de credenciais nesses sites. Em um dos casos, a injeção ocorreu na página de login de um sistema governamental, enquanto em outro incidente, observamos o atacante usando o MSHTA para executar o PeckBirdy como um canal de acesso remoto para movimentação lateral em uma organização privada. O agente malicioso por trás dos ataques também desenvolveu um executável .NET para iniciar o PeckBirdy com o ScriptControl. Essas descobertas demonstram a versatilidade do design do PeckBirdy, que permite que ele sirva a múltiplos propósitos. Análise da estrutura PeckBirdy O PeckBirdy pode ser executado em diversos ambientes, incluindo navegadores, MSHTA, WScript, ASP clássico, Node.js e .NET (ScriptControl) . Dependendo do ambiente, as funcionalidades e a finalidade do PeckBirdy podem variar. Por exemplo, em um ambiente de navegador, o PeckBirdy só pode operar dentro do escopo da página web devido aos mecanismos de sandbox. No entanto, em outros ambientes, como o MSHTA, o PeckBirdy pode executar mais ações diretamente em uma máquina local. O servidor PeckBirdy possui APIs definidas, que permitem aos clientes obter scripts de destino do servidor por meio de uma simples consulta HTTP(S). A tabela a seguir mostra as APIs do servidor PeckBirdy que observamos. Tabela 1. APIs do servidor PeckBirdy para obter scripts de aterrissagem Dependendo do valor de ATTACK_ID associado à consulta, cada script PeckBirdy gerado contém uma configuração incorporada (sendo o ATTACK_ID um valor predefinido composto por uma sequência aleatória de 32 caracteres). Os valores configurados são usados para controlar o comportamento do PeckBirdy durante a execução, incluindo os seguintes itens. Tabela 2. Configuração incorporada no script PeckBirdy Para ampliar as capacidades do PeckBirdy, seu desenvolvedor o implementou usando uma linguagem de script antiga conhecida como JScript (seguida pelo ECMAScript 3) e o projetou para suportar múltiplos protocolos de comunicação, garantindo compatibilidade em diversos ambientes. As funções integradas definidas no ECMAScript 5 , como JSON, também são utilizadas quando um ambiente mais recente é detectado. Caso contrário, o PeckBirdy utiliza outra versão das funções implementadas pelo próprio framework com JScript. Na execução inicial, o PeckBirdy busca objetos únicos que existem apenas em ambientes específicos para determinar o contexto de execução atual. Ele verifica o O objeto `window` em ambientes de navegador, o objeto `process` em ambientes NodeJS, o objeto `response` em ambientes ASP e a presença da tag `APPLICATION` no HTML em ambientes HTA. Após determinar o ambiente atual, o PeckBirdy gera um ID da vítima usando diferentes abordagens, dependendo do ambiente. Em um ambiente de host local, como o HTA, ele tenta recuperar informações de hardware da placa-mãe e do disco rígido das máquinas da vítima. Em seguida, combina essas informações com o MD5 para gerar um valor de hash que serve como ID da vítima. Se essa etapa falhar ou se ocorrer em outros ambientes que não conseguem recuperar informações de hardware, ele gera diretamente uma string aleatória de 32 caracteres como ID da vítima. Para preservar o ID da vítima em ambientes de navegador, o PeckBirdy adiciona o prefixo Hm_lvt_ (um prefixo de cookie conhecido, usado por um serviço legítimo) à string do ID da vítima e a grava em um cookie do navegador. Em outros casos, ele grava a string do ID da vítima em um arquivo chamado ___unique_id___ , que é colocado na pasta temporária do Windows. Isso permite que o PeckBirdy recupere o ID da vítima em execuções subsequentes. Após a inicialização, o PeckBirdy detecta os métodos de comunicação suportados no ambiente. O método padrão utiliza o protocolo WebSocket para se comunicar com o servidor PeckBirdy. Caso o WebSocket não seja suportado, ele tenta detectar a presença do Adobe Flash, criando em seguida um objeto ActiveX do Flash para estabelecer a comunicação via socket TCP (para compatibilidade com ambientes mais antigos, apesar do Flash ter sido descontinuado em 2020). Se nenhum desses métodos for suportado, o PeckBirdy pode utilizar os métodos Comet e LocalComet, que são baseados nos protocolos HTTP(S) e AJAX, respectivamente. Embora o Comet apresente menor eficiência, ele oferece ampla compatibilidade com diversos ambientes. Usando o WebSocket em um navegador como exemplo, o PeckBirdy envia inicialmente uma solicitação de inicialização ao servidor remoto para iniciar a comunicação. Essa solicitação inclui o domínio e a URL do site atual, bem como o ID da vítima mencionado anteriormente, o ID do ATAQUE , juntamente com um valor de ID de sessão recém-gerado (também uma string aleatória de 32 caracteres). O servidor responde com o script de segunda etapa do PeckBirdy, que inclui os procedimentos de execução do script e as rotinas de criptografia e descriptografia AES. A comunicação subsequente é criptografada usando AES e, em seguida, codificada em Base64, sendo a chave de criptografia AES o valor do ID do ataque (ATTACK ID) da configuração. Infelizmente, não conseguimos coletar muitos dos scripts enviados diretamente pelas comunicações do PeckBirdy com seu servidor. O único que recebemos foi um pequeno script para roubar os valores de cookies de sites injetados nos navegadores. Descobrimos também arquivos de script adicionais hospedados em um dos servidores do PeckBirdy (pertencente ao grupo SHADOW-VOID-044), que parecem ser entregues e executados por meio do PeckBirdy. Esses arquivos forneceram informações sobre como os agentes de ameaça usam o PeckBirdy para realizar seus ataques. Os scripts que encontramos incluíam: Script de exploração para a vulnerabilidade CVE-2020-16040 que afeta o Google Chrome. Scripts para pop-ups de engenharia social projetados para enganar as vítimas e levá-las a baixar e executar arquivos maliciosos. Scripts para distribuir backdoors adicionais que são executados via Electron JS. Scripts para estabelecer shells reversos via sockets TCP Análise de backdoor Com base na infraestrutura pertencente aos agentes da ameaça, identificamos duas portas traseiras modulares distintas, HOLODONUT e MKDOOR, vinculadas ao SHADOW-VOID-044. HOLODONUT HOLODONUT é um backdoor modular baseado em .NET que encontramos na infraestrutura do agente de ameaças. Para executar o HOLODONUT, os agentes implantaram um downloader simples personalizado para recuperar o payload do servidor remoto, que identificamos como NEXLOAD. A característica notável do NEXLOAD é que ele envia uma string em um formato específico, “ {string}#{string} ”, durante a primeira conexão. Em seguida, o payload recuperado é descriptografado por meio do algoritmo XOR e executado usando a função de retorno de chamada “EnumWindows()”. Para evasão de defesa, a carga útil utiliza múltiplas técnicas, incluindo a desativação do AMSI e do EtwEvent, bem como o uso do Donut , uma ferramenta de código aberto usada para executar assemblies .NET de forma furtiva. Como resultado, o HOLODONUT pode ser executado na memória do processo com menor visibilidade. Com base no código, podemos resumir os tipos de pacotes suportados e os comandos integrados da seguinte forma: O primeiro tipo de pacote está relacionado ao manipulador de plugins, usado para receber, executar ou descarregar plugins de servidores C&. Além dos pacotes relacionados a plugins, o programa fornece comandos internos para coleta de informações, suspensão e encerramento. Tabela 3. Tipos de pacotes HOLODONUT suportados MKDOOR Durante nosso monitoramento de longo prazo do SHADOW-VOID-044, encontramos uma página de phishing usada para atrair usuários a baixar um falso atualizador do Google Chrome. Após baixar e analisar o arquivo, identificamos outro backdoor com design modular, o MKDOOR, composto por dois módulos distintos: o downloader e o backdoor. Na primeira execução, o downloader se conecta ao servidor C&e baixa o módulo do backdoor. Para burlar as defesas, ele tenta contornar o Microsoft Defender adicionando-se à lista de exclusões e fazendo com que a URL de contato pareça uma página de suporte da Microsoft. Após a inicialização do módulo backdoor, ele recuperará a configuração de rede incorporada no módulo de download e estabelecerá outra conexão com o servidor C&. O caminho da URL usado pelo módulo backdoor é disfarçado de forma semelhante, como se estivesse relacionado à ativação do Windows. Como um backdoor modular, as capacidades do MKDOOR dependem dos módulos recebidos do servidor C&C. Infelizmente, não conseguimos coletar o módulo do servidor durante nossa investigação. Portanto, podemos apenas fornecer os comandos suportados pelo malware, que são mostrados na tabela a seguir: Tabela 4. Comandos suportados pelo MKDOOR Atribuição da campanha Descobrimos duas campanhas de ameaças que utilizaram o PeckBirdy em suas operações. Com base na vitimologia e nas ferramentas, táticas e procedimentos (TTPs) empregados nas respectivas campanhas, classificamos ambas em dois conjuntos de intrusão temporária: SHADOW-VOID-044 e SHADOW-EARTH-045. Nossa investigação revelou que essas duas campanhas podem estar ligadas a diferentes grupos APT alinhados à China. No caso do SHADOW-VOID-044, notamos que o backdoor GRAYRABBIT (anteriormente relatado como sendo utilizado pelo UNC3569 ) estava hospedado em um servidor ( 47[.]238[.]219[.]111 ) operado por essa campanha. A amostra do GRAYRABBIT que observamos era ligeiramente diferente, utilizando uma técnica de sideloading de DLL combinada com a função UuidFromStringA do PowerShell para ler, decodificar e executar o payload do backdoor. Apesar dos diferentes métodos de execução, o domínio C&C server center[.]myrnicrosoft[.]com era o mesmo que o domínio C&C usado pelo UNC3569. Além disso, tanto o SHADOW-VOID-044 quanto o UNC3569 tinham como alvo a indústria de jogos de azar chinesa. Essas descobertas nos dão um nível de confiança moderado a alto para atribuir essa campanha ao UNC3569. Descobrimos também que o SHADOW-VOID-044 usou o backdoor HOLODONUT, que provavelmente está ligado a outro backdoor, o WizardNet, anteriormente relatado como sendo usado por um grupo APT chamado TheWizard . Curiosamente, algumas das amostras do HOLODONUT usadas pelo SHADOW-VOID-044 se conectavam ao mesmo servidor C&( mkdmcdn[.]com ), o mesmo usado pelo TheWizard. Embora não tenhamos encontrado outras conexões entre o Campaign Alpha e o TheWizard, vale ressaltar que o TheWizard também usou o backdoor DarkNimbus, desenvolvido pelo grupo de ameaças Earth Minotaur, que discutimos em uma publicação anterior do blog. Outra descoberta durante nossa pesquisa foi uma amostra do Cobalt Strike (SHA256: 162cc325ab7b6e70edb6f4d0bc0e52130c56903f) hospedada no servidor SHADOW-VOID-044 oss-cdn[.]com . Descobrimos que essa amostra foi assinada usando um certificado (impressão digital, SHA1: bbd2b9b87f968ed88210d4261a1fe30711e8365b) roubado de uma empresa de jogos sul-coreana. Esse certificado também foi usado na campanha do RAT BIOPASS , sobre a qual também relatamos. Com base em nossas descobertas, tanto o BIOPASS RAT quanto o MKDOOR empregam a mesma técnica: abrir um servidor HTTP em uma porta de número alto no host local para escutar. Isso permite que um script de ataque de watering hole verifique a presença da porta no host local e determine se a vítima foi infectada com o backdoor. A campanha BIOPASS RAT está ligada a outro grupo de ameaças, Earth Lusca . Para o SHADOW-EARTH-045, observamos atividades maliciosas direcionadas a uma instituição educacional filipina em julho de 2024. O agente malicioso executou um comando MSHTA conectando-se a github[.]githubassets[.]net para iniciar o PeckBirdy em um servidor IIS (Internet Information Services) comprometido. O agente também baixou arquivos simultaneamente do endereço IP 47[.]238[.]184[.]9 , previamente associado à Earth Baxia . Observe que a atribuição do SHADOW-EARTH-045 à Earth Baxia permanece com baixa confiança por enquanto. No entanto, vale ressaltar que o mesmo domínio do PeckBirdy e o endereço IP utilizado também foram mencionados em outro relatório sobre ataques contra uma organização de TI governamental africana. Conclusão Este relatório descreve duas campanhas que destacam a crescente sofisticação e adaptabilidade dos atuais agentes de ameaças alinhados à China. Essas campanhas utilizam um framework JavaScript dinâmico, o PickBirdy, para explorar binários "living-off-the-land" e distribuir backdoors modulares como o MKDOOR e o HOLODONUT. A detecção de frameworks JavaScript maliciosos continua sendo um desafio significativo devido ao uso de código gerado dinamicamente e injetado em tempo de execução, além da ausência de artefatos de arquivo persistentes, o que lhes permite burlar os controles tradicionais de segurança de endpoints. Nesse ambiente, a adaptabilidade e o aprimoramento contínuo das estratégias de defesa deixaram de ser opcionais e se tornaram fundamentais para manter a integridade operacional em um cenário digital cada vez mais hostil. Segurança proativa com TrendAI Vision One™ O TrendAI Vision One™ é a plataforma de cibersegurança com IA líder do setor, que centraliza a gestão da exposição ao risco cibernético, as operações de segurança e a proteção robusta em camadas. Central de Inteligência de Ameaças Vision One™ da TrendAI O TrendAI Vision One™ Threat Intelligence Hub fornece as informações mais recentes sobre ameaças emergentes e agentes de ameaças, relatórios estratégicos exclusivos da TrendAI™ Research e o feed de inteligência de ameaças do TrendAI Vision One™ na plataforma TrendAI Vision One™. Ameaças emergentes: PeckBirdy: Uma estrutura de script versátil para exploração de LOLBins usada por grupos de ameaças alinhados à China. Relatórios de Inteligência TrendAI Vision One™ (Análise de Comprometimento do Operador) PeckBirdy: Uma estrutura de script versátil para exploração de LOLBins usada por grupos de ameaças alinhados à China. Perfis dos agentes de ameaça: SOMBRA-VOID-044 SOMBRA-TERRA-045 Terra Baxia Minotauro da Terra Terra Lusca Perguntas de caça malName: (*MKDOOR* OU *HOLODONUT* OU *GRAYRABBIT* OU *PECKBIRDY*) E eventName: MALWARE_DETECTION Aplicativo de busca TrendAI Vision One™ Os clientes do TrendAI Vision One™ podem usar o aplicativo de busca para encontrar ou localizar os indicadores maliciosos mencionados nesta postagem do blog com base nos dados de seu ambiente. Mais consultas de busca estão disponíveis para o TrendAI Vision One™ com a autorização do Threat Intelligence Hub ativada. Indicadores de Compromisso (IoCs) Os indicadores de compromisso para esta entrada podem ser encontrados aqui .
Since 2023, we have been observing threat campaigns employing a previously unseen script-based command-and-control (C&C) framework which we named PeckBirdy, being used against Chinese gambling industries, as well as malicious activities targeting Asian government entities and private organizations. While tracking this framework, we identified at least two campaigns using PeckBirdy, which we were able to link to several China-aligned advanced persistent threat (APT) actors. Note that we’ve previously discussed these campaigns during the HitCon conference last August 2025, and are now publishing this entry to share our findings to a wider audience.
PeckBirdy is a script-based framework which, while possessing advanced capabilities, is implemented using JScript, an old script language. This is to ensure that the framework could be launched across different execution environments via LOLBins (Living off the land binaries). This flexibility allowed us to observe PeckBirdy in various kill chain stages, including being used as a watering-hole control server during the initial attack phase, as a reverse shell server during the lateral movement phase, and as a C&C server during the backdoor phase.
In this entry, we will provide our detailed analysis of PeckBirdy, its attack campaigns, and a pair of new backdoors, “HOLODONUT” and “MKDOOR” which we found being used in related operations. In addition, we will also discuss the attribution of the corresponding campaign.
In-the-wild activities
Beginning in 2023, we noticed multiple Chinese gambling websites being injected with malicious scripts with links to remote servers. Further investigation into the injections and servers led us to discover the PeckBirdy script framework. When victims visit these gambling websites, the injected scripts download and execute the main script of the PeckBirdy routine, allowing attackers to remotely deliver and execute JavaScript.
The primary goal of this routine is to display fake software update webpages for Google Chrome to entice victims into downloading and executing malicious update files, which are backdoors prepared by the attackers. This constitutes the first campaign we identified, which we are tracking under the name SHADOW-VOID-044.

During July 2024, we observed another campaign primarily targeting Asian government entities and private organizations, which we tracked under the campaign name SHADOW-EARTH-045. We discovered that this campaign injects PeckBirdy links into government websites, likely to deliver scripts for credential harvesting on the website.
In one case, the injection was on a login page of a government’s system, while in another incident, we noticed the attacker using MSHTA to execute PeckBirdy as a remote access channel for lateral movement in a private organization. The threat actor behind the attacks also developed a .NET executable to launch PeckBirdy with ScriptControl. These findings demonstrate the versatility of PeckBirdy’s design, which enables it to serve multiple purposes.
Analysis of the PeckBirdy framework
PeckBirdy can be executed in various environments, including browsers, MSHTA, WScript, Classic ASP, Node JS, and .NET (ScriptControl). Depending on the environment, PeckBirdy’s capabilities and purpose can vary.
For example, in a browser environment, PeckBirdy can only operate within the scope of the webpage due to sandboxing mechanisms. However, in other environments such as MSHTA, PeckBirdy can execute more actions directly on a local machine. The PeckBirdy server has defined APIs, which allows clients to obtain landing scripts from the server via a simple HTTP(S) query. The following table shows the PeckBirdy server APIs that we observed.
| API | Description |
|---|---|
| https://{domain}/{ATTACK_ID} | Downloads the main PeckBirdy script |
| https://{domain}/{ATTACK_ID}/hta | Downloads the landing script for MSHTA |
| https://{domain}/{ATTACK_ID}/html | Downloads the landing script for MTML |
| https://{domain}/{ATTACK_ID}/wscript | Downloads the landing script for WScript |
Table 1. The PeckBirdy server APIs to obtain landing scripts
Depending on the ATTACK_ID value attached in the query, each generated PeckBirdy script contains an embedded configuration (with the ATTACK_ID being a predefined value composed of a random string with 32 characters). The configured values are used for controlling the behavior of PeckBirdy during execution, which includes the following items.
| Configuration | Description |
|---|---|
| $HOST | The PeckBirdy server domain |
| $PORT | The port numbers connected by supported protocols |
| $ATTACK_ID | A 32-character random string produced by the framework |
| $RETRY | The waiting time between retries |
| $RETRY_TIME | The number of retry attempts |
| $HEARTBEAT | The waiting time between heartbeats |
Table 2. The configuration embedded in the PeckBirdy script

To extend PeckBirdy’s capability, its developer implemented it using an old script language known as JScript (followed by ECMAScript 3), and designed it to support multiple communication protocols to ensure compatibility in various environments. The built-in functions defined in ECMAScript 5, such as JSON, are also used when a newer environment is detected. Otherwise, PeckBirdy uses another version of functions implemented by the framework itself with JScript.
Upon initial execution, PeckBirdy searches for unique objects that exist only in specific environments to determine the current execution context. It checks for the window object in browser environments, the process object in NodeJS environment, the response object in ASP environment, and the presence of the APPLICATION tag within the HTML in HTA environments.

After determining the current environment, PeckBirdy generates a victim ID using different approaches based on the environment. In a local host environment such as HTA, it attempts to retrieve hardware information from the motherboard and hard drive on the victim’s machines. It then combines this information with MD5 to generate a hash value which serves as the victim ID. If this step fails or if it occurs in other environments that are unable to retrieve hardware information, it directly generates a 32-character random string as a victim ID instead.
To preserve the victim ID in browser environments, PeckBirdy adds a prefix Hm_lvt_ (a known cookie prefix used by a legitimate service) to the victim ID string and writes it into a browser cookie. In other cases, it writes the victim ID string to a file called ___unique_id___, which is placed in the temporary folder of Windows. This allows PeckBirdy to retrieve the victim ID on subsequent executions.

After initialization, PeckBirdy detects the communication methods supported in the environment. The default method uses the WebSocket protocol to communicate with the PeckBirdy server. If WebSocket is not supported, it attempts to detect the presence of Adobe Flash, after which it will create a Flash ActiveX object to establish TCP socket communication (for compatibility in older environments, despite Flash itself being discontinued in 2020). If neither of these methods are supported, PeckBirdy can use the Comet and LocalComet methods, which are based on HTTP(S) and AJAX protocols. While Comet has lower efficiency, it offers broad compatibility across environments.

Using WebSocket in a browser as an example, PeckBirdy initially sends an init request to the remote server to initiate communication. This request includes the current website’s domain and URL, as well as the previously mentioned victim ID, the ATTACK ID, along with a newly generated session ID value (also a 32-character random string).
The server responds with the second-stage script of PeckBirdy, which includes the script execution procedures and AES encryption and decryption routines. The subsequent communication is encrypted using AES and then encoded with Base64, with the AES encryption key being the ATTACK ID value from the configuration.
Unfortunately, we could not collect many of the scripts delivered directly from PeckBirdy’s communications with its server. The only one we received was a short script for stealing the cookie values of injected websites on browsers.



We also discovered additional script files hosted on one of PeckBirdy’s server (belonging to SHADOW-VOID-044) which appear to be delivered and executed through PeckBirdy. These provided insight into how the threat actors use PeckBirdy to carry out their attacks.
The scripts we found included:
- The exploitation script for the CVE-2020-16040 vulnerability affecting Google Chrome
- Scripts for social engineering pop-ups designed to deceive victims into downloading and executing malicious files.
- Scripts for delivering additional backdoors that are executed via Electron JS
- Scripts to establish reverse shells via TCP sockets
Backdoor analysis
Based on the infrastructure owned by the threat actors, we identified two distinct modular backdoors, HOLODONUT and MKDOOR, linked to SHADOW-VOID-044.
HOLODONUT
HOLODONUT is a .NET-based modular backdoor we found within the threat actor’s infrastructure. To execute HOLODONUT, the threat actors deployed a customized simple downloader used to retrieve the payload from the remote server downloader that we tracked as NEXLOAD. The noteworthy feature of NEXLOAD is that it will send a string in a specific format, “{string}#{string}” during the first connection. Next, the retrieved payload is decrypted via the XOR algorithm and executed by using the callback function, ”EnumWindows()”.
For defense evasion, the payload uses multiple techniques, including disabling AMSI and EtwEvent, as well as the use of Donut, an open-source tool used to stealthily execute .NET assemblies. As a result, HOLODONUT can be executed in process memory with less visibility.

Based on the code, we can summarize the supported packet types and built-in commands as follows:
The first packet type is related to the plugin handler, which is used to receive, execute, or unload plugins from C&C servers. In addition to plugin-related packets, the program provides built-in commands for information collection, sleep, and exit.
| Packet type | Plugin objects (assembly name, assembly bytes, Methodinfo, type, ClientID) |
|---|---|
| “plugin” | Add and load the received plugin (.NET assembly) |
| “execplugin” | Execute the received plugin (.NET assembly) |
| “Unloadplugin” | Remove the received plugin (.NET assembly) based on the specific “ClientID” and “Assembly name” |
| “UnloadClientIDplugin” | Remove the installed plugin based on the “ClientID” |
Table 3. Supported HOLODONUT packet types
MKDOOR
During our long-term monitoring of SHADOW-VOID-044, we found a phishing webpage used to lure users into download a fake Google Chrome updater. After downloading and analyzing the file, we identified another modularly-designed backdoor, MKDOOR, which is composed of two different modules: the downloader and the backdoor. During the first initiation, the downloader will connect to the C&C server and download the backdoor module. For defense evasion, it will try to bypass Microsoft Defender by adding itself to the exclusion list and make its contacted URL appear like a Microsoft support page.
https://{C&C address}/en-us/howtotell/default[.]aspxAfter the backdoor module is initiated, it will retrieve the network configuration embedded in the downloader module and launch another connection to the C&C server. The URL path used by the backdoor module is similarly disguised as being related to Windows activation.
https://{C&C address}/en-us/windows/activate-windows-c39005d4-95ee-b91e-b399-2820fda32227As a modular backdoor, the capabilities of MKDOOR depend on the modules received from the C&C server. Unfortunately, we were unable to collect the module from the server during our investigation. Hence, we can only provide the malware’s supported commands, which are shown in the following table:
| Commands | Description |
|---|---|
| INSTALL | Install the received module |
| UNINSTALL | Uninstall the received module |
| EXECUTE | Execute the received module |
| SHOW | Status feedback |
| SLEEP | Sleep (Sleeping time depends on the time received from the attacker) |
| EXIT | Exit |
| UNDATE | No function defined (in this case) |
Table 4. The supported commands of MKDOOR


Campaign attribution
We discovered two threat campaigns that used PeckBirdy in their operations. Based on victimology and the tools, tactics, and procedures (TTPs) used in the respective campaigns, we attributed them under two temporary intrusion sets: SHADOW-VOID-044 and SHADOW-EARTH-045. Our investigation revealed that these two campaigns could be linked to different China-aligned APT actors.
In the case of SHADOW-VOID-044, we noticed the GRAYRABBIT backdoor (previously reported to be utilized by UNC3569) was hosted on a server (47[.]238[.]219[.]111) operated by this campaign. The GRAYRABBIT sample we observed was slightly different, using a DLL sideloading technique combined with the UuidFromStringA function of PowerShell to read, decode, and execute the backdoor payload. Despite the different execution methods, the C&C server center[.]myrnicrosoft[.]com was the same as the C&C domain used by UNC3569. In addition, both SHADOW-VOID-044 and UNC3569 targeted the Chinese gambling industry. These findings give us a moderate to high level of confidence to attribute this campaign to UNC3569.
We also discovered that SHADOW-VOID-044 used the HOLODONUT backdoor, which is likely linked to another backdoor, WizardNet, previously reported being used by an APT group called TheWizard. Interestingly, some of the HOLODONUT samples used by SHADOW-VOID-044 connected to the same C&C server (mkdmcdn[.]com), which is the same used by TheWizard. While we didn’t see any additional connections between Campaign Alpha and TheWizard, it’s worth noting that TheWizard also used the DarkNimbus backdoor which was developed by the Earth Minotaur threat actor we discussed in a previous blog entry.
Another discovery during our research was a Cobalt Strike sample (SHA256: 162cc325ab7b6e70edb6f4d0bc0e52130c56903f) hosted on the SHADOW-VOID-044 server oss-cdn[.]com. We discovered that this sample was signed using a certificate (thumbprint, SHA1: bbd2b9b87f968ed88210d4261a1fe30711e8365b) stolen from a South Korean gaming company. This certificate was also used in the BIOPASS RAT campaign that we also reported on.
Based on our findings, both BIOPASS RAT and MKDOOR employ the same technique: opening an HTTP server on a high-numbered port on the local host to listen. This is to allow a watering hole attack script to scan for the presence of the port on the local host and determine whether the victim has been infected with the backdoor. The BIOPASS RAT campaign is linked to another threat actor, Earth Lusca.
For SHADOW-EARTH-045, we observed malicious activities targeting a Philippine educational institution in July 2024. The threat actor executed an MSHTA command connecting to github[.]githubassets[.]net to launch PeckBirdy on a compromised Internet Information Services (IIS) server. The threat actor also simultaneously downloaded files from 47[.]238[.]184[.]9, an IP address has been previously linked to Earth Baxia. Note that the attribution linking SHADOW-EARTH-045 to Earth Baxia remains low confidence for now. However, it’s worth noting that the same PeckBirdy domain and the IP address used was also mentioned in another report on attacks against an African government IT organization.
Conclusion
This report outlines two campaigns that highlight the growing sophistication and adaptability of current China-align threat actors. These campaigns make use of a dynamic JavaScript framework, PickBirdy, to abuse living-off-the-land binaries and deliver modular backdoors such as MKDOOR and HOLODONUT. Detecting malicious JavaScript frameworks remains a significant challenge due to their use of dynamically generated, runtime-injected code and the absence of persistent file artifacts, enabling them to evade traditional endpoint security controls. In this environment, adaptability and continuous refinement of defensive strategies are no longer optional, but fundamental to maintaining operational integrity in an increasingly hostile digital landscape.
Proactive security with TrendAI Vision One™
TrendAI Vision One™ is the industry-leading AI cybersecurity platform that centralizes cyber risk exposure management, security operations, and robust layered protection.
TrendAI Vision One™ Threat Intelligence Hub
TrendAI Vision One™ Threat Intelligence Hub provides the latest insights on emerging threats and threat actors, exclusive strategic reports from TrendAI™ Research, and TrendAI Vision One™ Threat Intelligence Feed in the TrendAI Vision One™ platform.
Emerging Threats:
PeckBirdy: A Versatile Script Framework for LOLBins Exploitation Used by China-aligned Threat Groups
TrendAI Vision One™ Intelligence Reports (IOC Sweeping)
PeckBirdy: A Versatile Script Framework for LOLBins Exploitation Used by China-aligned Threat Groups
Threat actor profiles:
Hunting Queries
malName: (*MKDOOR* OR *HOLODONUT* OR *GRAYRABBIT* OR *PECKBIRDY*) AND eventName: MALWARE_DETECTION
TrendAI Vision One™ Search App
TrendAI Vision One™ customers can use the Search App to match or hunt the malicious indicators mentioned in this blog post with data in their environment.
More hunting queries are available for TrendAI Vision One™ with Threat Intelligence Hub entitlement enabled.
Indicators of Compromise (IoCs)
The indicators of compromise for this entry can be found here.