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.
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.
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.
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.
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.
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 |
EACore.dll |
Win32/Agent.VJO |
YK0130 reverse shell. |
E7B6164B6EC7B7552C93713403507B53 |
SearchApp.exe |
Python/Agent.AGT |
WavyExfiller. |
3F81D1E70D9EE39C83B582AC3BCC1CDF |
OneDrive.exe |
Win32/Agent.VKV |
OneDoor. |
DAFAD19900FFF383C2790E017C958A1E |
dropbox.exe |
Python/Agent.AQN |
PyInstaller DropFlop. |
24E12B8B1255DF4E6619ED1A6AE1C75B |
Update.exe |
Python/Agent.AJJ |
BingoShell. |
451EE465675E674CEBE3C42ED41356AE |
oneDrive.exe |
Python/Agent.AGP |
WavyExfiller PixelDrain variant. |
E6AB24B826C034A6D9E152673B911592 |
MsOcrRes.orp |
Win32/Agent.AFWW |
TONESHELL type B. |
6655C5686B9B0292CF5121FC6346341B |
avk.dll |
Win32/Agent.VJQ |
TONESHELL variant. |
B15BA83681C4D2C2716602615288B7E6 |
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. |