Los investigadores de ESET observaron varias campañas dirigidas a instituciones gubernamentales en Tailandia, a partir de 2023. Estos ataques aprovecharon versiones renovadas de componentes previamente atribuidos por otros investigadores al grupo de amenazas persistentes avanzadas (APT) Mustang Panda, alineado con China, y más tarde, un nuevo conjunto de herramientas que abusan de proveedores de servicios como Pastebin, Dropbox, OneDrive y GitHub para ejecutar comandos en equipos comprometidos y filtrar documentos confidenciales.

Basándonos en nuestros hallazgos, decidimos rastrear este grupo de actividades como el trabajo de un actor de amenazas independiente. Las numerosas apariciones de la cadena [Bb]ectrl en el código de las herramientas del grupo nos inspiraron para bautizarlo como CeranaKeeper; se trata de un juego de palabras entre apicultor (beekepper, en inglés) y la especie de abeja Apis Cerana, o abeja asiática de la miel.

Puntos clave de este blogpost:
  • Los investigadores de ESET descubrieron un nuevo actor de amenazas alineado con China, CeranaKeeper, dirigido a instituciones gubernamentales en Tailandia. Algunas de sus herramientas fueron atribuidas previamente a Mustang Panda por otros investigadores.
  • El grupo actualiza constantemente su backdoor para evadir la detección y diversifica sus métodos para ayudar a la exfiltración masiva de datos.
  • CeranaKeeper abusa de servicios en la nube y de intercambio de archivos populares y legítimos, como Dropbox y OneDrive, para implementar backdoors y herramientas de extracción personalizadas.
  • El grupo utiliza las funciones de solicitud de extracción y comentario de problemas de GitHub para crear un shell inverso sigiloso, aprovechando GitHub, una popular plataforma en línea para compartir y colaborar en código, como servidor de C&C.

CeranaKeeper ha estado activo al menos desde principios de 2022, dirigiéndose principalmente a entidades gubernamentales de países asiáticos como Tailandia, Myanmar, Filipinas, Japón y Taiwán; creemos que está alineado con los intereses de China. Destaca la incesante caza de datos del grupo, cuyos atacantes despliegan una amplia gama de herramientas destinadas a extraer la mayor cantidad de información posible de las redes comprometidas. En la operación que analizamos, el grupo convirtió las máquinas comprometidas en servidores de actualización, ideó una novedosa técnica que utilizaba las funciones de solicitud de extracción y comentario de incidencias de GitHub para crear un shell inverso sigiloso, y desplegó componentes de recolección de un solo uso al recopilar árboles de archivos enteros.

Presentamos brevemente a CeranaKeeper en el Informe de Actividad APT de ESET del cuarto trimestre de 2023 al primer trimestre de 2024, que se publicó en mayo de 2024. En este blogpost, describimos estas herramientas personalizadas, previamente no documentadas, desplegadas por CeranaKeeper y compartimos más de nuestros hallazgos sobre las operaciones de este actor de amenazas.

Presentamos algunos de nuestros hallazgos sobre CeranaKeeper y el compromiso en Tailandia en la conferencia de Virus Bulletin el 2 de octubre de 2024, y en nuestro libro blanco, que puede leer en su totalidad aquí. Este mes, Virus Bulletin también publicará nuestro libro blanco sobre este tema en su sitio web.

Atribución

Aunque algunas de las actividades de CeranaKeeper habían sido atribuidas anteriormente a Mustang Panda (también conocido como Earth Preta o Stately Taurus) por Talos, Trend Micro y la Unidad 42 de Palo Alto Networks, hemos decidido rastrear este grupo de actividades como obra de CeranaKeeper. Creemos que CeranaKeeper utiliza el conjunto de herramientas documentado públicamente llamado bespoke stagers (o TONESHELL), se basa en gran medida en la técnica de carga lateral y utiliza una secuencia específica de comandos para exfiltrar archivos desde una red comprometida. Además, consideramos que el uso de señuelos políticos y componentes PlugX es obra de MustangPanda. A pesar de algunas similitudes en sus actividades (objetivos de carga lateral similares, formato de archivo), observamos claras diferencias organizativas y técnicas entre los dos grupos, como diferencias en sus conjuntos de herramientas, infraestructura, prácticas operativas y campañas. También observamos diferencias en la forma en que ambos grupos llevan a cabo tareas similares.

En sus operaciones, CeranaKeeper despliega componentes conocidos como TONEINS, TONESHELL y PUBLOAD, que son exclusivos del grupo. El grupo destaca por su creatividad y adaptabilidad en sus ataques, como el uso de versiones renovadas de los componentes mencionados y nuevas herramientas que abusan de servicios como Pastebin, Dropbox, OneDrive y GitHub. Describimos estas herramientas en la sección Conjunto de herramientas de ayuda a la exfiltración masiva.

Además, el grupo dejó algunos metadatos en su código que nos proporcionaron información sobre su proceso de desarrollo, consolidando aún más nuestra separación de los dos grupos y nuestra atribución a CeranaKeeper. Ambos actores de la amenaza pueden depender de la misma tercera parte, como un proveedor de herramientas utilizadas en la fase de despliegue, lo que no es infrecuente entre los grupos alineados con China, o tener algún nivel de intercambio de información, lo que explicaría los vínculos que hemos observado. En nuestra opinión, esta es una explicación más probable que la de un único actor de amenazas que mantiene dos conjuntos completamente separados de herramientas, infraestructura, prácticas operativas y campañas.

Equipos comprometidas en la misma red

Aún no se han encontrado los vectores de compromiso que CeranaKeeper utilizó en el caso que analizamos. Cuando el grupo consiguió introducirse en la red de una institución gubernamental tailandesa, a mediados de 2023, una máquina comprometida realizó ataques de fuerza bruta contra un servidor controlador de dominio de la red de área local.

Tras obtener acceso privilegiado, los atacantes instalaron la backdoor TONESHELL, desplegaron una herramienta para volcar credenciales y utilizaron un controlador legítimo de Avast y una aplicación personalizada para desactivar los productos de seguridad de la máquina. Desde este servidor comprometido, utilizaron una consola de administración remota para desplegar y ejecutar su backdoor en otros ordenadores de la red. Además, CeranaKeeper utilizó el servidor comprometido para almacenar actualizaciones de TONESHELL, convirtiéndolo en un servidor de actualizaciones.

El grupo desplegó un nuevo script BAT a través de la red, extendiendo su alcance a otras máquinas en el mismo dominio mediante la explotación del controlador de dominio para obtener privilegios de administrador de dominio. Esto permitió a CeranaKeeper pasar a la siguiente fase de su operación y alcanzar el objetivo final: la recolección masiva de datos.

Conjunto de herramientas para la exfiltración masiva

Tras desplegar su backdoor TONESHELL y realizar algunos movimientos laterales, parece que los atacantes encontraron y seleccionaron unos cuantos ordenadores comprometidos de suficiente interés para desplegar herramientas personalizadas no documentadas previamente. Estas herramientas de apoyo se utilizaron no sólo para facilitar la exfiltración de documentos a servicios de almacenamiento públicos, sino también para actuar como puertas traseras alternativas. Las puertas traseras y herramientas de exfiltración que describimos se desplegaron únicamente en máquinas muy específicas.

WavyExfiller: Un uploader de Python que abusa de Dropbox y PixelDrain

El primero de una serie de componentes desconocidos que descubrimos en junio de 2023 es WavyExfiller, un paquete de Python empaquetado en un ejecutable mediante PyInstaller y una implementación directa en Python del método de exfiltración descrito por la Unidad 42. Llamamos a este componente WavyExfiller WavyExfiller. Llamamos a este componente WavyExfiller debido a la extensión .wav de un archivo local que contiene máscaras de búsqueda para identificar y comprimir documentos listos para su exportación. El ejecutable incluido en PyInstaller se llama SearchApp.exe (SHA-256: E7B6164B6EC7B7552C93713403507B531F625A8C64D36B60D660D66E82646696).

El módulo tiene tres funciones principales: recuperar un token cifrado de Dropbox desde una página de Pastebin (un servicio en línea para almacenar y compartir datos en texto plano), crear archivos protegidos por contraseña de documentos encontrados en los directorios de los usuarios y subir estos archivos a Dropbox.

En octubre de 2023, observamos una variante (SHA-256: 451EE465675E674CEBE3C42ED41356AE2C972703E1DC7800A187426A6B34EFDC) almacenada bajo el nombre oneDrive.exe. A pesar de su nombre, esta versión utiliza el servicio de intercambio de archivos PixelDrain para filtrar los archivos comprimidos. Al igual que SearchApp.ex e mencionado anteriormente, esta variante comprueba la unidad C, que normalmente contiene el sistema operativo, los programas instalados y los documentos de los usuarios locales. Además, oneDrive.exe intenta recopilar archivos de las unidades asignadas, si las hay, que van de la letra D a la N (excepto la L), como se ilustra en la figura 1, que pueden representar dispositivos de almacenamiento externos conectados, como USB y discos duros, unidades en red en un entorno de oficina o unidades virtuales creadas por un software específico. Esto demuestra que CeranaKeeper aumentó su nivel de avaricia e intentó llegar a otras fuentes de información potenciales o conocidas. Sin embargo, no está claro si la operación de exfiltración tuvo éxito, ya que la comprobación de los archivos cargados en PixelDrain no es posible a través de la API expuesta.

Figura 1. Recorriendo y recopilando archivos de una lista de unidades

DropboxFlop: Una backdoor Python que abusa de Dropbox

En octubre de 2023, más o menos al mismo tiempo que encontramos la variante de PixelDrain, descubrimos un nuevo ejecutable incluido en PyInstaller con hash SHA-256 DAFAD19900FFF383C2790E017C958A1E92E84F7BB159A2A7136923B715A4C94F. Parece que CeranaKeeper lo creó basándose en un proyecto disponible públicamente llamado Dropflop, que es un shell inverso con capacidades de carga y descarga. El archivo Python compilado se llama dropboxflop.pyc. El backdoor recupera un token cifrado de Dropbox y depende de los archivos presentes en el repositorio remoto de Dropbox para ejecutar comandos en la máquina. Crea una carpeta única localmente y genera un "latido" actualizando el archivo remoto llamado lasttime cada 15 segundos. También busca un archivo llamado tasks que, si lo encuentra, es descargado y analizado como un archivo JSON. Hay dos tipos de tareas implementadas: ejecución de comandos y carga de archivos. Una vez completadas, la backdoor envía los resultados actualizando el contenido del archivo de salida.

OneDoor: Un backdoor C++ que abusa de OneDrive

Pocos días después de desplegar el backdoor Python DropboxFlop, CeranaKeeper volvió con un backdoor C/C++ enlazado estáticamente que abusa de OneDrive y que hemos denominado OneDoor. La muestra (SHA-256: 3F81D1E70D9EE39C83B582AC3BCC1CDFE038F5DA31331CDBCD4FF1A2D15BB7C8) se llama OneDrive.exe. El archivo imita al ejecutable legítimo de Microsoft, como se muestra en la vista de propiedades de la Figura 2.

Figura 2. Propiedades del archivo OneDoor

OneDoor se comporta de forma similar al backdoor DropboxFlop, pero utiliza la API REST de OneDrive de la API Graph de Microsoft para recibir comandos y filtrar archivos.

OneDoor crea un archivo de registro e intenta acceder a un archivo llamado config.ini. Si no está presente, OneDoor utiliza un búfer codificado. El archivo o búfer comienza con una clave y un vector de inicialización, que se utilizan para descifrar el resto de los datos utilizando AES-128 en modo CBC. El texto sin formato contiene una URL, que el malware utiliza en una solicitud HTTP GET. La respuesta contiene un token de OneDrive, que se utiliza en posteriores solicitudes a Microsoft OneDrive.

OneDoor también recupera el ID de una carpeta llamada approot, que se utiliza para almacenar datos de la aplicación.

De forma similar al archivo config.ini, el malware intenta acceder a un archivo llamado errors.log. Si el archivo no existe, utiliza un búfer codificado. El contenido del archivo o búfer se descifra; los datos en texto plano contienen una clave pública RSA de 1024 bits. Se genera un par clave-IV, cifrado con RSA, y se carga en la carpeta approot remota. Este par se utiliza para cifrar y descifrar los datos.

Por último, el malware recupera listas de archivos de dos carpetas ubicadas en OneDrive, E y F. Se inicia un hilo para cada lista, que descarga y descifra los archivos. Los archivos almacenados en la carpeta E contienen comandos que deben ejecutarse, mientras que los almacenados en la carpeta F contienen una lista de archivos que deben cargarse. Los resultados de estas operaciones se cifran y almacenan en una tercera carpeta de OneDrive, D. A continuación, los archivos originales se eliminan de OneDrive.

BingoShell: Una backdoor Python que abusa de GitHub

Observamos el último espécimen del conjunto de herramientas de exfiltración del grupo en febrero de 2024 y lo denominamos BingoShell por la cadena bingo# utilizada en el título de un pull request (PR) de GitHub que crea. La muestra analizada (SHA-256: 24E12B8B1255DF4E6619ED1A6AE1C75B17341EEF7418450E661B74B144570017) es un archivo llamado Update.exe que utiliza un logotipo de Microsoft Office como icono, tal y como se observa en la figura 3. Según su marca de tiempo de compilación PE, aparentemente se creó a finales de enero de 2024.

Figura 3. El backdoor BingoShell imita la aplicación Microsoft Office

BingoShell es un backdoor escrito en Python que utiliza GitHub para controlar máquinas comprometidas. Una vez ejecutado, utiliza un token codificado para acceder a un repositorio privado de GitHub. Según el commit inicial de la rama principal, el repositorio se creó probablemente el 24 de enero de 2024. BingoShell crea una nueva rama en el repositorio y el correspondiente pull request. El backdoor lee los comentarios en el PR recién creado para recibir comandos a ejecutar en la máquina comprometida, como se ilustra en la Figura 4.

Figura 4. Código recuperando comandos almacenados en los comentarios de la incidencia

Esto demuestra una nueva técnica encubierta para aprovechar GitHub como servidor de comando y control (C&C), mostrando la sofisticación de los atacantes, que limpiaron después de sí mismos cerrando pull requests y eliminando comentarios del repositorio.

Cada nueva rama creada por BingoShell en el repositorio privado de GitHub debería representar un acceso a una máquina comprometida. Dado que descubrimos 25 pull requests cerradas (mostradas en la Figura 5), pudimos deducir que CeranaKeeper tenía acceso, a través de BingoShell, a 25 máquinas comprometidas.

Figura 5. Enumeración de pull requests cerradas

Conclusión

CeranaKeeper, el actor de la amenaza que está detrás de los ataques al gobierno tailandés, parece especialmente implacable, ya que la plétora de herramientas y técnicas que utiliza el grupo sigue evolucionando a gran velocidad. Los operadores escriben y reescriben su conjunto de herramientas según las necesidades de sus operaciones y reaccionan con bastante rapidez para seguir evitando ser detectados. El objetivo de este grupo es cosechar tantos archivos como sea posible y para ello desarrolla componentes específicos. CeranaKeeper utiliza la nube y servicios de intercambio de archivos para la exfiltración y probablemente se basa en el hecho de que el tráfico a estos servicios populares en su mayoría parecería legítimo y sería más difícil de bloquear cuando se identifica.

A lo largo de nuestra investigación, pudimos establecer fuertes conexiones entre los conjuntos de herramientas previamente documentados y los nuevos y un actor de amenazas común. La revisión de las tácticas, técnicas y procedimientos (TTP), el código y las discrepancias de infraestructura nos llevan a creer que es necesario rastrear CeranaKeeper y MustangPanda como dos entidades separadas. Sin embargo, ambos grupos alineados con China podrían estar compartiendo información y un subconjunto de herramientas por un interés común o a través del mismo tercero.

La campaña selectiva que investigamos nos proporcionó información sobre las operaciones de CeranaKeeper y es probable que futuras campañas nos revelen más, ya que la búsqueda de datos sensibles por parte del grupo continúa.

Para un análisis más detallado de las herramientas desplegadas por CeranaKeeper, puede acceder al informe completo de ESET Research aquí.

Para cualquier consulta sobre nuestra investigación publicada en WeLiveSecurity, por favor contáctenos en threatintel@eset.com.
ESET Research ofrece informes privados de inteligencia APT y feeds de datos. Para cualquier consulta sobre este servicio, visite la página de ESET Threat Intelligence.

IoCs

Puede encontrar una lista completa de indicadores de compromiso (IoCs) y muestras en nuestro repositorio GitHub.

Archivos

SHA-256

Filename

Detection

Description

B25C79BA507A256C9CA12A9BD34DEF6A
33F9C087578C03D083D7863C708ECA21

EACore.dll

Win32/Agent.VJO

YK0130 reverse shell.

E7B6164B6EC7B7552C93713403507B53
1F625A8C64D36B60D660D66E82646696

SearchApp.exe

Python/Agent.AGT

WavyExfiller.

3F81D1E70D9EE39C83B582AC3BCC1CDF
E038F5DA31331CDBCD4FF1A2D15BB7C8

OneDrive.exe

Win32/Agent.VKV

OneDoor.

DAFAD19900FFF383C2790E017C958A1E
92E84F7BB159A2A7136923B715A4C94F

dropbox.exe

Python/Agent.AQN

PyInstaller DropFlop.

24E12B8B1255DF4E6619ED1A6AE1C75B
17341EEF7418450E661B74B144570017

Update.exe

Python/Agent.AJJ

BingoShell.

451EE465675E674CEBE3C42ED41356AE
2C972703E1DC7800A187426A6B34EFDC

oneDrive.exe

Python/Agent.AGP

WavyExfiller PixelDrain variant.

E6AB24B826C034A6D9E152673B911592
01577A3A9D626776F95222F01B7C21DB

MsOcrRes.orp

Win32/Agent.AFWW

TONESHELL type B.

6655C5686B9B0292CF5121FC6346341B
B888704B421A85A15011456A9A2C192A

avk.dll

Win32/Agent.VJQ

TONESHELL variant.

B15BA83681C4D2C2716602615288B7E6
4A1D4A9F4805779CEBDF5E6C2399AFB5

TurboActivate.dll

Win32/Agent.AFWX

TONESHELL loader.

Red

IP  Domain  Hosting provider  First seen  Details 
104.21.81[.]233 
172.67.165[.]197 
www.toptipvideo[.]com  CLOUDFLARENET (AS13335)  2023‑08‑14  C&C server for the YK0130 reverse shell. 
103.245.165[.]237  dljmp2p[.]com 
inly5sf[.]com 
Bangmod Enterprise administrator (AS58955)  2023‑04‑21  C&C servers for TONESHELL variants. 
103.27.202[.]185  www.dl6yfsl[.]com  Bangmod Enterprise administrator (AS58955)  2023‑08‑10  C&C server for TONEINS variant. 
103.27.202[.]185  www.uvfr4ep[.]com  Bangmod Enterprise administrator (AS58955)  2023‑09‑22  C&C server for TONEINS variant. 

Técnicas ATT&CK de MITRE

Esta tabla se ha elaborado utilizando la versión 15 del marco MITRE ATT&CK.

Tactic  ID  Name  Description 
Resource Development  T1583.001  Acquire Infrastructure: Domains  CeranaKeeper acquired domains for some of its C&C servers. 
T1583.003  Acquire Infrastructure: Virtual Private Server  CeranaKeeper acquired access to a VPS to serve as a C&C server. 
T1587.001  Develop Capabilities: Malware  CeranaKeeper develops its own components. 
T1585.003  Establish Accounts: Cloud Accounts  CeranaKeeper acquired cloud accounts for exfiltration purposes. 
Execution  T1072  Software Deployment Tools  CeranaKeeper abuses the ESET Remote Administration console to perform lateral movement. 
Persistence  T1547.001  Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder  The YK0130 reverse shell establishes persistence via the registry Run key. 
T1574.002  Hijack Execution Flow: DLL Side-Loading  Most components come as side-loaded libraries along with the legitimate program. 
Defense Evasion  T1140  Deobfuscate/Decode Files or Information  Configuration files used by the OneDrive backdoor are encrypted. 
T1036.005  Masquerading: Match Legitimate Name or Location  CeranaKeeper uses legitimate library names to blend in. 
Collection  T1560.001  Archive Collected Data: Archive via Utility  WavyExfiller uses WinRAR to compress collected data. 
T1005  Data from Local System  WavyExfiller collects data from the local drive (C:). 
T1039  Data from Network Shared Drive  WavyExfiller collects data from network shares. 
T1074.001  Data Staged: Local Data Staging  Collected data is archived in a special folder before being uploaded. 
Command and Control  T1071.001  Application Layer Protocol: Web Protocols  The different backdoors communicate using HTTP/S. 
T1132.002  Data Encoding: Non-Standard Encoding  The network protocol used by the YK0130 reverse shell employs custom, XOR-based encoding. 
T1573.001  Encrypted Channel: Symmetric Cryptography  AES-128 mode CBC is used by the OneDrive backdoor to encrypt network communication. 
T1573.002  Encrypted Channel: Asymmetric Cryptography  The generated key and IV for the OneDrive backdoor are encrypted via RSA. 
T1090.001  Proxy: Internal Proxy  One of the variants of the YK0130 reverse shell implements a reverse proxy. 
T1102.002  Web Service: Bidirectional Communication  OneDrive and Dropbox are used as C&C servers. 
Exfiltration  T1567.002  Exfiltration Over Web Service: Exfiltration to Cloud Storage  Collected data are exfiltrated via cloud services.