Os pesquisadores da ESET fornecem informações sobre como o PlushDaemon realiza ataques do tipo adversary-in-the-middle (AiM), utilizando um implante de rede até então não documentado, que foi denominado EdgeStepper. Esse implante redireciona todas as consultas DNS para um nó de sequestro externo, desviando efetivamente o tráfego da infraestrutura legítima usada para atualizações de software para uma infraestrutura controlada pelo cibercriminoso.
Pontos principais desta publicação:
- Foi analisado o implante de rede EdgeStepper para entender como os agentes do PlushDaemon comprometem seus alvos.
- Também foi realizado um estudo sobre LittleDaemon e DaemonicLogistics, dois downloaders que implantam o backdoor SlowStepper, associado ao grupo, em sistemas Windows.
Perfil do PlushDaemon
O PlushDaemon é um grupo cibercriminoso alinhado à China, ativo desde pelo menos 2018, dedicado a operações de espionagem contra indivíduos e instituições na China, Taiwan, Hong Kong, Camboja, Coreia do Sul, Estados Unidos e Nova Zelândia. O grupo utiliza um backdoor personalizado rastreado como SlowStepper, cuja principal técnica de acesso inicial envolve o sequestro de atualizações legítimas, redirecionando o tráfego para servidores controlados pelos atacantes por meio de um implante de rede chamado EdgeStepper. Além disso, o PlushDaemon obtém acesso explorando vulnerabilidades em servidores web e realizou um ataque à cadeia de suprimentos em 2023.
Resumo
Em 2024, durante a investigação das atividades do PlushDaemon (incluindo o comprometimento da cadeia de suprimentos de um serviço de VPN sul-coreano), foi observado que um arquivo ELF enviado ao VirusTotal continha dois subdomínios da infraestrutura do PlushDaemon. Esse arquivo, chamado bioset, estava hospedado anteriormente em um servidor provavelmente comprometido por múltiplos cibercriminosos. No mesmo dia do envio ao VirusTotal, um pesquisador (@James_inthe_box) tuitou sobre um diretório aberto no servidor onde o bioset estava alojado, sugerindo que a amostra foi enviada por um investigador analisando o conteúdo do diretório.
Chamado internamente de dns_cheat_v2 por seus desenvolvedores, e com nome em código EdgeStepper pela ESET, o bioset é a ferramenta adversary-in-the-middle do PlushDaemon, que encaminha o tráfego DNS de máquinas em uma rede alvo para um nó DNS malicioso. Isso permite que os atacantes redirecionem o tráfego de atualizações de software para um nó sequestrador, que instrui o software legítimo a baixar uma atualização maliciosa.
Vitimologia
A Figura 1 apresenta a distribuição geográfica das vítimas do PlushDaemon comprometidas por meio de atualizações maliciosas desde 2019, conforme a telemetria da ESET.
O PlushDaemon comprometeu indivíduos e organizações localizados nas seguintes regiões:
- Estados Unidos (2019);
- Taiwan (2021, 2024);
- China (2021-2024), incluindo uma universidade de Pequim e uma empresa taiwanesa que fabrica produtos eletrônicos;
- Hong Kong (2023);
- Nova Zelândia (2023);
- Camboja (2025), incluindo uma empresa do setor automotivo e uma filial de uma empresa japonesa do setor manufatureiro.
Ataque adversary-in-the-middle
Primeiramente, o PlushDaemon compromete um dispositivo de rede (como um roteador) ao qual seu alvo pode se conectar; o comprometimento ocorre provavelmente explorando uma vulnerabilidade no software executado no dispositivo ou por meio de credenciais administrativas fracas e/ou padrão conhecidas, permitindo que os cibercriminosos implantem o EdgeStepper (e possivelmente outras ferramentas).
O EdgeStepper inicia redirecionando as consultas DNS para um nó DNS malicioso que verifica se o domínio (por exemplo, info.pinyin.sogou.com do Sogou Pinyin) na mensagem de consulta DNS está relacionado a atualizações de software, respondendo, nesse caso, com o endereço IP do nó sequestrador. Alternativamente, alguns servidores atuam tanto como nó DNS quanto como nó sequestrador, respondendo às consultas DNS com seu próprio endereço IP.
Observe que, como o sequestro das atualizações do software Sogou Pinyin foi estudado em detalhes, ele será usado como exemplo daqui em diante; muitos outros softwares chineses populares têm suas atualizações sequestradas de forma similar pelo PlushDaemon via EdgeStepper.
A Figura 2 ilustra as primeiras etapas do implantação das capacidades do PlushDaemon.
O software de atualização se comunica via HTTP com o nó sequestrador em vez da infraestrutura legítima do Sogou; o nó sequestrador responde com instruções para, por exemplo, baixar um arquivo DLL de http://ime.sogou.com/popup_4.2.0.2246.dll, como mostrado na Figura 3.
O software envia uma requisição HTTP GET para ime.sogou.com para tentar obter a DLL; no entanto, a comunicação é redirecionada novamente para o nó sequestrador, que serve o popup_4.2.0.2246.dll, que na verdade é a DLL do LittleDaemon. O processo é ilustrado na Figura 4.
A Figura 5 mostra o nó sequestrador servindo o LittleDaemon.
EdgeStepper
De acordo com os símbolos do binário, o EdgeStepper era originalmente chamado dns_cheat_v2. Foi desenvolvido em Go utilizando o framework de código aberto GoFrame, e compilado como um arquivo ELF para processadores MIPS32. É importante notar que é improvável que o EdgeStepper seja o único componente implantado no dispositivo de rede comprometido; infelizmente, não há amostras de outros componentes na cadeia de compromisso.
O EdgeStepper inicia obtendo e descriptografando os dados de configuração de /etc/bioset.conf. Para a descriptografia, utiliza AES CBC com a chave e o IV sendo a string "I Love Go Frame!", que é usada como IV padrão na implementação da biblioteca GoFrame.
A configuração descriptografada revela os dados mostrados na Figura 6.
[cheat]
toPort = 1090
host = "ds20221202.dsc.wcsset[.]com"
Figura 6. Configuração descriptografada.
O significado dos parâmetros é o seguinte:
- toPort especifica a porta onde o EdgeStepper escutará.
- host especifica o domínio que é resolvido para obter o(s) endereço(s) IP do nó DNS para o qual os pacotes de consulta DNS são redirecionados.
Além disso, há um bloco de configuração (Figura 7) no binário do EdgeStepper que parece não ser referenciado em nenhuma parte do código. O domínio no campo host é test.dsc.wcsset[.]com, que resolve para 47.242.198[.]250; observou-se que esse IP foi fonte de atualizações maliciosas (nó sequestrador) de 2021 a 2022, e ainda resolve para esse endereço atualmente.
Após carregar sua configuração, o EdgeStepper inicializa o sistema Distribuidor e o sistema Regidor.
Distribuidor
O distribuidor resolve o(s) endereço(s) IP associado(s) ao valor do domínio no campo host da configuração e invoca o sistema Ruler. O fluxo de trabalho do distribuidor é ilustrado na Figura 8.
Por meio do sistema Ruler, o distribuidor redireciona o tráfego da porta 53 para a porta 1090, estabelecendo-se como proxy DNS.
Ao receber uma mensagem DNS de um dispositivo de vítima potencial, verifica se a mensagem é compatível com RFC (provavelmente apenas para confirmar que o pacote é realmente do protocolo DNS).
Em seguida, encaminha o pacote para o nó DNS malicioso.
Por último, retransmite a resposta do nó DNS para o dispositivo.
Regra (Ruler)
O sistema Ruler utiliza o comando iptables para emitir novas regras e removê-las ao final do ataque. Inicialmente, emite uma regra para redirecionar todo o tráfego UDP da porta 53 do dispositivo para a porta especificada por toPort na configuração:
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-port <value_from_toPort>
Em seguida, emite um comando para aceitar pacotes nessa porta:
iptables -t filter -I INPUT -p udp --dport <value_from_toPort> -j ACCEPT
Ao terminar, remove as regras com:
iptables -t nat -D PREROUTING *
iptables -t filter -D INPUT -p udp –dport <value_from_toPort> -j ACCEPT
LittleDaemon
O LittleDaemon é a primeira etapa implantada na máquina da vítima por meio de atualizações sequestradas, observado em versões DLL e executáveis PE de 32 bits. Seu objetivo principal é se comunicar com o nó sequestrador para obter o downloader chamado DaemonicLogistics. O LittleDaemon não estabelece persistência.
Primeiramente, verifica se o backdoor SlowStepper está em execução no sistema. Caso contrário, o LittleDaemon baixa o DaemonicLogistics emitindo uma solicitação HTTP GET a um servidor (normalmente o nó sequestrador), descriptografa-o com uma combinação de operações XOR e, em seguida, o executa.
A solicitação pode ser enviada a dois domínios legítimos (ime.sogou.com or mobads.baidu.com) ou ao endereço IP 119.136.153.0, com o caminho do recurso /update/updateInfo.bzp em todos os casos. No caso dos domínios legítimos, espera-se que o tráfego seja redirecionado ao nó sequestrador pelo EdgeStepper.
DaemonicLogistics
O DaemonicLogistics é um código independente da posição que o LittleDaemon baixa e executa em memória, com o propósito principal de baixar e implantar o implante SlowStepper.
Quando o DaemonicLogistics envia uma solicitação ao servidor (normalmente o nó sequestrador), este responde com um código de status HTTP que o DaemonicLogistics interpreta como um comando, executando as ações listadas na Tabela 1.
Tabela 1. Comandos suportados pelo DaemonicLogistics.
| Code | Action taken |
| 200 | Downloads SlowStepper without checking for the presence of a process named 360tray.exe (a component of the 360 Total Security antimalware solution). |
| 205 | |
| 206 | |
| 208 | |
| 203 | Downloads a file named plugin.exe and executes it (during our tests, the server did not request downloading this file). |
| 207 | Checks for the presence of a process named 360tray.exe and downloads SlowStepper if not present. |
| 202–300 | Default to execute command 200. These could be unimplemented commands. |
A solicitação HTTP GET inicial é enviada para: ime.sogou.com/update/latest/new_version?tp=2&c=0&s=<OS_ID_number>&mac=<identifier>
O significado dos parâmetros na URL é o seguinte:
- Os valores tp e c estão codificados por padrão como 2 e 0, respectivamente.
- O campo s tem um byte e é um número que identifica a versão do sistema operacional.
- O campo mac tem seis bytes e é o valor do endereço MAC do adaptador Ethernet ou Wi-Fi da máquina, ou gerado aleatoriamente se não conseguir obter nenhum; o valor é provavelmente usado como identificador pelo servidor.
Durante nossa análise, observamos que o servidor respondia com o código de status 207, ao que DaemonicLogistics reagia com outra solicitação para ime.sogou.com/update/latest/new_version?tp=1&g=15&c=0. Neste caso, a parte da URL tp=1&g=15&c=0 está codificada de forma fixa (hardcoded).
O servidor respondeu com o código de status 202. O DaemonicLogistics prosseguiu fazendo duas solicitações para baixar os arquivos do payload do SlowStepper: primeiro para ime.sogou.com/update/file6.bdat e depois para ime.sogou.com/update/file2.bdat.
Os dados do payload nas primeira e segunda respostas do servidor começavam com um valor mágico:
- Na resposta à primeira solicitação, o valor mágico em hexadecimal era 50 4B 03 04 0A 1B 2C 3D (PK\3\4\A\1B\2C\3C).
○ O DaemonicLogistics verifica ativamente se os oito primeiros bytes de dados recebidos do servidor coincidem com esse valor mágico. Se for o caso, escreve os dados em %PROGRAMDATA%\Tencent\QQUpdateMgr\UpdateFiles\logo.gif.
- Na resposta à segunda solicitação, o valor mágico em hexadecimal foi 47 49 46 38 39 61 10 10 (GIF89a\10\10).
○ O DaemonicLogistics não verifica especificamente esse valor mágico: quando a verificação do valor mágico anterior não coincide, processa os dados e os descriptografa por meio de uma combinação de operações XOR. Os dados contêm arquivos que são escritos no disco nas rotas especificadas nos dados descriptografados.
Durante a análise, observou-se que o servidor respondia com o código de status 207, ao qual o DaemonicLogistics respondia com outra solicitação para ime.sogou.com/update/latest/new_version?tp=1&g=15&c=0, onde a parte tp=1&g=15&c=0 está codificada diretamente no código.
O servidor respondia com o código 202. O DaemonicLogistics prosseguia fazendo duas solicitações para baixar os arquivos do payload do SlowStepper: primeiro para ime.sogou.com/update/file6.bdat e depois para ime.sogou.com/update/file2.bdat.
Conclusão
Foi analisado o implante de rede EdgeStepper, que habilita as capacidades do PlushDaemon como adversário no meio para sequestrar atualizações de máquinas em uma rede alvo. Também foram analisadas as ferramentas LittleDaemon e DaemonicLogistics, que juntas implantam o implante SlowStepper em máquinas Windows, dando ao PlushDaemon capacidade de comprometer alvos em qualquer parte do mundo.
Indicadores de Comprometimento
No repositório do GitHub da ESET, encontra-se uma lista completa de indicadores de compromisso (IoCs) e amostras.
Arquivos
| SHA-1 | Filename | ESET detection name | Description |
| 8F569641691ECB3888CD |
bioset | Linux/Agent.AEP | EdgeStepper. |
| 06177810D61A69F34091 |
bioset.conf | Win32/Rozena.BXX | EdgeStepper encrypted configuration. |
| 69974455D8C13C5D57C1 |
popup_4.2.0. |
Win32/Agent.AGXK | LittleDaemon. |
| 2857BC730952682D39F4 |
sogou_wubi_15.4. |
Win32/Agent.AFDT | LittleDaemon. |
Rede
| IP | Domain | Hosting provider | First seen | Details |
| 8.212.132[.]120 | ds20221202.dsc. |
Alibaba (US) Technology Co., Ltd. | 2024‑07‑12 | DNS/Hijacking node. |
| 47.242.198[.]250 | test.dsc.wcsset |
Alibaba Cloud LLC | 2024‑07‑12 | DNS/Hijacking node. |
Técnicas ATT&CK da MITRE
Esta tabela foi elaborada utilizando a versão 18 do framework MITRE ATT&CK.
| Tactic | ID | Name | Description |
| Resource Development | T1583.001 | Acquire Infrastructure: Domains | PlushDaemon uses EdgeStepper to redirect traffic to specific subdomains that are part of PlushDaemon’s infrastructure on wcsset[.]com. |
| T1583.002 | Acquire Infrastructure: DNS Server | Part of the PlushDaemon infrastructure is used to host its malicious DNS nodes. | |
| T1583.004 | Acquire Infrastructure: Server | PlushDaemon has acquired servers to host its DNS/hijacking nodes and C&C servers. | |
| T1608.001 | Stage Capabilities: Upload Malware | PlushDaemon hosts its payloads on DNS/hijacking servers. | |
| Initial Access | T1659 | Content Injection | Hijacking nodes from PlushDaemon process hijacked traffic and reply to legitimate software with instructions to download malware such as LittleDaemon. |
| Execution | T1106 | Native API | DaemonicLogistics executes the SlowStepper implant using the ShellExecute API. |
| Defense Evasion | T1070.004 | Indicator Removal: File Deletion | Some variants of LittleDaemon can remove themselves. |
| T1036.005 | Masquerading: Match Legitimate Name or Location | DaemonicLogistics creates a subdirectory named Tencent, where it stores its files. | |
| T1036.008 | Masquerading: Masquerade File Type | DaemonicLogistics and SlowStepper’s loader can decrypt files that masquerade as ZIP and GIF files. | |
| T1027.009 | Obfuscated Files or Information: Embedded Payloads | Files masquerading as ZIPs and GIF files contain embedded encrypted components. | |
| T1027.013 | Obfuscated Files or Information: Encrypted/Encoded File | Components of the SlowStepper implant are encrypted on disk. | |
| Discovery | T1518.001 | Software Discovery: Security Software Discovery | DaemonicLogistics checks for the presence of 360tray.exe – a component of 360 Total Security. |
| T1016 | System Network Configuration Discovery | DaemonicLogistics attempts to obtain the ethernet or Wi-Fi adapter’s MAC address. | |
| T1057 | Process Discovery | DaemonicLogistics lists processes. | |
| Command and Control | T1071.001 | Application Layer Protocol: Web Protocols | LittleDaemon and DaemonicLogistics use HTTP to communicate with their server. |
| T1573 | Encrypted Channel | LittleDaemon downloads via HTTP the encrypted DaemonicLogistics that downloads via HTTP the encrypted SlowStepper implant. | |
| T1665 | Hide Infrastructure | LittleDaemon and DaemonicLogistics make downloads by sending HTTP requests to legitimate domains. |





