Los investigadores de ESET proporcionan información sobre cómo PlushDaemon realiza ataques de adversary-in-the-middle (AiM) utilizando un implante de red no documentado previamente que hemos denominado EdgeStepper, que redirige todas las consultas DNS a un nodo de secuestro externo, que redirige efectivamente el tráfico de la infraestructura legítima utilizada para las actualizaciones de software a la infraestructura controlada por el atacante.

Puntos clave de este blogpost:
  • Analizamos el implante de red EdgeStepper para entender cómo los atacantes PlushDaemon comprometen sus objetivos.
  • Proporcionamos un análisis de LittleDaemon y DaemonicLogistics, dos downloader que despliegan el backdoor SlowStepper de la firma del grupo en equipos Windows.

Perfil de PlushDaemon

PlushDaemon es un actor de amenazas alineado con China, activo desde al menos 2018, que se dedica a operaciones de espionaje contra individuos y entidades en China, Taiwán, Hong Kong, Camboya, Corea del Sur, Estados Unidos y Nueva Zelanda. PlushDaemon utiliza un backdoor personalizado que rastreamos como SlowStepper, y su principal técnica de acceso inicial es secuestrar actualizaciones legítimas redirigiendo el tráfico a servidores controlados por el atacante a través de un implante de red que llamamos EdgeStepper. Además, hemos observado que el grupo obtiene acceso a través de vulnerabilidades en servidores web, y en 2023 realizó un ataque a la cadena de suministro.

Resumen

En 2024, mientras investigábamos los grupos de actividad de PlushDaemon (incluido el compromiso de la cadena de suministro de un servicio VPN surcoreano), observamos que un archivo ELF enviado a VirusTotal contenía dos subdominios de la infraestructura de PlushDaemon. Ese archivo, llamado bioset, estaba alojado previamente en un servidor probablemente comprometido por múltiples actores de amenazas. Obsérvese que el mismo día del envío a VirusTotal, un investigador (@James_inthe_box) tuiteó sobre un directorio abierto en el servidor donde estaba alojado bioset, por lo que la muestra probablemente fue subida a VirusTotal por un investigador que estaba investigando el contenido del directorio.

Internamente llamado dns_cheat_v2 por sus desarrolladores - y con nombre en código EdgeStepper por nosotros - bioset es la herramienta adversary-in-the-middle de PlushDaemon, que reenvía el tráfico DNS de las máquinas en una red objetivo a un nodo DNS malicioso. Esto permite a los atacantes redirigir el tráfico de actualizaciones de software a un nodo secuestrador que sirve instrucciones al software legítimo para descargar una actualización maliciosa.

Victimología

La Figura 1 presenta la distribución geográfica de las víctimas de PlushDaemon que han sido comprometidas a través de actualizaciones maliciosas, desde 2019, según la telemetría de ESET.

Figure 1. Geographical distribution of victims
Figura 1. Distribución geográfica de las víctimas

PlushDaemon ha comprometido a individuos y organizaciones ubicados en las siguientes regiones:

  • Estados Unidos (2019)
  • Taiwán (2021, 2024)
  • China (2021-2024), incluida una universidad de Pekín y una empresa taiwanesa que fabrica productos electrónicos
  • Hong Kong (2023)
  • Nueva Zelanda (2023)
  • Camboya (2025), incluida una empresa del sector del automóvil y una sucursal de una empresa japonesa del sector manufacturero

Ataque adversary in the middle

En primer lugar, PlushDaemon compromete un dispositivo de red (por ejemplo, un router) al que su objetivo podría conectarse; el compromiso se logra probablemente explotando una vulnerabilidad en el software que se ejecuta en el dispositivo o a través de credenciales administrativas débiles y/o conocidas por defecto, lo que permite a los atacantes desplegar EdgeStepper (y posiblemente otras herramientas).

EdgeStepper comienza redirigiendo las consultas DNS a un nodo DNS malicioso que verifica si el dominio (por ejemplo, info.pinyin.sogou.com de Sogou Pinyin) en el mensaje de consulta DNS está relacionado con actualizaciones de software, y si es así, responde con la dirección IP del nodo secuestrador. Alternativamente, también hemos observado que algunos servidores son tanto el nodo DNS como el nodo secuestrador; en esos casos, el nodo DNS responde a las consultas DNS con su propia dirección IP.

Tenga en cuenta que, dado que hemos estudiado detenidamente las actualizaciones del software Sogou Pinyin secuestrado, seguiremos utilizándolo como ejemplo de aquí en adelante. Muchos otros títulos populares de software chino también tienen sus actualizaciones secuestradas de manera similar por PlushDaemon a través de EdgeStepper.

La Figura 2 ilustra las primeras etapas del despliegue de las capacidades de PlushDaemon.

Figure 2. Illustration of the first stages of the attack
Figura 2. Ilustración de las primeras etapas del ataque

El software de actualización se comunica a través de HTTP con el nodo secuestrador en lugar de con la infraestructura legítima de Sogou; el nodo secuestrador responde con instrucciones para, por ejemplo, descargar un archivo DLL de http://ime.sogou.com/popup_4.2.0.2246.dll, como se muestra en la Figura 3.

Figure 3. Traffic capture of the update hijacking process
Figura 3: Captura de tráfico del proceso de secuestro de actualizaciones

El software envía una petición HTTP GET a ime.sogou.com para intentar obtener la DLL; sin embargo, la comunicación se redirige de nuevo al nodo secuestrador, que sirve popup_4.2.0.2246.dll que, en realidad, es la DLL de LittleDaemon . El proceso se ilustra en la Figura 4.

Figure 4. Illustration of the final stage of the update hijacking
Figura 4. Ilustración de la etapa final del secuestro de actualizaciones

La figura 5 muestra el nodo secuestrador que sirve a LittleDaemon.

Figure 5. Traffic capture of the update hijacking process
Figura 5:Traffic capture of the update hijacking process

EdgeStepper

Según los símbolos del binario, EdgeStepper se llamaba originalmente dns_cheat_v2. Fue desarrollado en Go utilizando el framework de código abierto GoFrame, y compilado como un archivo ELF para procesadores MIPS32. Es importante señalar que es poco probable que EdgeStepper sea el único componente desplegado en el dispositivo de red comprometido. Desafortunadamente, no tenemos muestras de otros componentes en la cadena de compromiso.

EdgeStepper comienza obteniendo y descifrando los datos de configuración de /etc/bioset.conf. Para el descifrado, utiliza AES CBC con la clave y el IV siendo la cadena I Love Go Frame, que se utiliza como IV por defecto en la implementación de la biblioteca GoFrame.

La configuración descifrada revela los datos mostrados en la Figura 6.

[cheat]
toPort = 1090
host = "ds20221202.dsc.wcsset[.]com"

Figura 6. Configuración desencriptada

El significado de los parámetros es el siguiente:

  • toPort especifica el puerto donde EdgeStepper escuchará, y
  • host especifica el dominio que se resuelve para obtener la(s) dirección(es) IP del nodo DNS al que se reenvían los paquetes de consulta DNS.

Además, hay un bloque de configuración (Figura 7) en el binario de EdgeStepper, que parece no estar referenciado en ninguna parte del código. El dominio en el campo host es test.dsc.wcsset[.]com, que se resuelve en 47.242.198[.]250. Observamos que esa dirección IP de 2021 a 2022 era la fuente de la actualización maliciosa: el nodo secuestrador. En el momento de escribir esto, el dominio se resuelve a esa dirección IP.

Figure 7. Unused configuration block in EdgeStepper
Figura 7.
Bloque de configuración no utilizado en EdgeStep
Bloque de configuración no utilizado en EdgeStepper

Tras cargar su configuración, EdgeStepper inicializa el sistema Distribuidor y el sistema Regidor.

Distribuidor

El distribuidor resuelve la(s) dirección(es) IP asociada(s) al valor del dominio en el campo host de la configuración e invoca al sistema Ruler. El flujo de trabajo del distribuidor se ilustra en la Figura 8.

Figure 8. EdgeStepper workflow
Figura 8. Flujo de trabajo de EdgeStepper
  1. A través del sistema Ruler, el distribuidor redirige el tráfico del puerto 53 al puerto 1090, estableciéndose como proxy DNS.
  2. Cuando recibe un mensaje DNS desde el dispositivo de una víctima potencial, comprueba si el mensaje es compatible con RFC (probablemente sólo para verificar que el paquete es realmente del protocolo DNS).
  3. A continuación, reenvía el paquete al nodo DNS malicioso.
  4. Por último, reenvía la respuesta del nodo DNS al dispositivo.

Regla

El sistema Ruler utiliza el comando iptables para emitir nuevas reglas, y para eliminarlas al concluir el ataque. En primer lugar, emite una regla para redirigir todo el tráfico UDP del puerto 53 del dispositivo al puerto especificado por toPort en la configuración:

iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-port <valor_de_aPuerto>

A continuación, emite un comando para aceptar los paquetes en ese puerto:

iptables -t filter -I INPUT -p udp --dport <valor_de_aPuerto> -j ACCEPT

Al terminar, elimina las reglas anteriores que estableció al emitir los comandos:

iptables -t nat -D PREROUTING *

iptables -t filter -D INPUT -p udp -dport <valor_de_aPuerto> -j ACCEPT

LittleDaemon

LittleDaemon es la primera etapa desplegada en la máquina de la víctima a través de actualizaciones secuestradas. Hemos observado versiones DLL y ejecutables, ambas PE de 32 bits. El objetivo principal de LittleDaemon es comunicarse con el nodo secuestrador para obtener el downloader que denominamos DaemonicLogistics. LittleDaemon no establece persistencia.

En primer lugar, verifica si el backdoor SlowStepper se está ejecutando en el sistema. Si no es así, LittleDaemon descarga DaemonicLogistics emitiendo una solicitud HTTP GET a un servidor (normalmente, el nodo secuestrador), lo descifra con una combinación de operaciones XOR y, a continuación, lo ejecuta.

La petición puede enviarse a dos dominios legítimos(ime.sogou.com o mobads.baidu.com) o a la dirección IP 119.136.153.0. La ruta del recurso es /update/updateInfo.bzp para los tres. En el caso de los dominios legítimos, se espera que el tráfico sea redirigido al nodo secuestrador por EdgeStepper.

DaemonicLogistics

DaemonicLogistics es un código independiente de la posición que LittleDaemon descarga y ejecuta en memoria. Su propósito principal es descargar y desplegar el implante SlowStepper.

Cuando DaemonicLogistics envía una petición al servidor (normalmente, el nodo secuestrador), éste responde con un código de estado HTTP, que DaemonicLogistics interpreta como un comando, y realiza las acciones enumeradas en la Tabla 1.

Tabla 1. Comandos soportados por DaemonicLogistics Comandos soportados por 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.

La solicitud inicial HTTP GET es enviada a:

ime.sogou.com/update/latest/new_version?tp=2&c=0&s=<número_ID_OS>&mac=<identificador>

El significado de los parámetros en la URL es el siguiente:

  • Los valores tp y c están codificados por defecto en 2 y 0, respectivamente.
  • El campo s es de un byte y es un número que identifica la versión del sistema operativo.
  • El campo mac es de seis bytes y es el valor de la dirección MAC del adaptador ethernet o Wi-Fi de la máquina, o generado aleatoriamente si no consigue obtener ninguna; el valor es probablemente utilizado como identificador por el servidor.

Durante nuestro análisis observamos que el servidor respondía con el código de estado 207, a lo que DaemonicLogistics respondía con otra petición a ime.sogou.com/update/latest/new_version?tp=1&g=15&c=0. En este caso, la parte de la URL tp=1&g=15&c=0 está hardcodeada.

El servidor respondió con el código de estado 202. DaemonicLogistics procedió a hacer dos peticiones para descargar los archivos del payload de SlowStepper, primero a ime . sogou .com/update/file6.bdat, y luego a ime.sogou.com/update/file2.bdat.

Los datos del payload en la primera y segunda respuestas del servidor comenzaban con un valor mágico:

  • En respuesta a la primera petición, el valor mágico en hexadecimal era 50 4B 03 04 0A 1B 2C 3D(PK\3\4\A\1B\2C\3C)

    DaemonicLogistics comprueba activamente que los ocho primeros bytes de datos recibidos del servidor coinciden con este valor mágico. Si es cierto, escribe los datos a %PROGRAMDATA%\Tencent\QQUpdateMgr\UpdateFiles\logo.gif.

  • En respuesta a la segunda petición, el valor mágico en hexadecimal fue 47 49 46 38 39 61 10 10(GIF89a\10\10)

    DaemonicLogistics no comprueba específicamente este valor mágico: cuando la comprobación del valor mágico anterior no coincide, procesa los datos y los descifra mediante una combinación de operaciones XOR. Los datos contienen archivos que se escriben en el disco en las rutas especificadas en los datos descifrados..

Conclusión

Hemos analizado el implante de red EdgeStepper, que habilita las capacidades de PlushDaemon como adversario en el medio para secuestrar actualizaciones de máquinas en una red objetivo. También analizamos las herramientas LittleDaemon y DaemonicLogistics que, juntas, despliegan el implante SlowStepper en máquinas Windows. Estos implantes dan a PlushDaemon la capacidad de comprometer objetivos en cualquier parte del mundo.

IoCs

En nuestro repositorio de GitHub se puede encontrar una lista completa de indicadores de compromiso y muestras.

Archivos

SHA-1 Filename ESET detection name Description
8F569641691ECB3888CD4C11932A5B8E13F04B07 bioset Linux/Agent.AEP EdgeStepper.
06177810D61A69F34091CC9689B813740D4C260F bioset.conf Win32/Rozena.BXX EdgeStepper encrypted configuration.
69974455D8C13C5D57C1EE91E147FF9AED49AEBC popup_4.2.0.2246.dll Win32/Agent.AGXK LittleDaemon.
2857BC730952682D39F426D185769938E839A125 sogou_wubi_15.4.0.2508_0000.exe Win32/Agent.AFDT LittleDaemon.

Red

IP Domain Hosting provider First seen Details
8.212.132[.]120 ds20221202.dsc.wcsset[.]com Alibaba (US) Technology Co., Ltd. 2024‑07‑12 DNS/Hijacking node.
47.242.198[.]250 test.dsc.wcsset[.]com Alibaba Cloud LLC 2024‑07‑12 DNS/Hijacking node.

Técnicas ATT&CK de MITRE

Esta tabla se ha elaborado utilizando la versión 18 del marco 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.