Dolphin: un nuevo y sofisticado backdoor para espiar utilizado por el grupo ScarCruft

Investigadores de ESET descubren Dolphin, un sofisticado backdoor que amplía el arsenal de herramientas maliciosas que utiliza el grupo de APT ScarCruft.

Investigadores de ESET descubren Dolphin, un sofisticado backdoor que amplía el arsenal de herramientas maliciosas que utiliza el grupo de APT ScarCruft.

El equipo de investigación de ESET analizó un backdoor que no había sido reportado anteriormente y que ha estado siendo utilizando por el grupo de APT ScarCruft. Este backdoor, al cual hemos llamado Dolphin, cuenta con múltiples capacidades para el espionaje que incluyen: la posibilidad de monitorear unidades y dispositivos portátiles, la exfiltración de archivos de interés, el registro de las pulsaciones de teclado (keylogging), la capacidad para realizar captura de pantallas del equipo de la víctima, y el robo de credenciales del navegador. Las funcionalidades han sido desplegadas en blancos de ataque específicos y previamente seleccionados por los actores de amenazas, en los cuales se despliega el backdoor después de comprometer inicialmente el equipo víctima utilizando un malware menos avanzado. En línea con otras herramientas utilizadas por ScarCruft, el backdoor Dolphin abusa de los servicios de almacenamiento en la nube, específicamente Google Drive, para la comunicación con el servidor de C&C.

Durante nuestra investigación hemos visto un desarrollo continuo del backdoor y una búsqueda de los autores de malware de evadir la detección. Una característica destacadas de las primeras versiones que analizamos de Dolphin es su capacidad para modificar la configuración de las cuentas de Google y Gmail de las víctimas para reducir su seguridad, muy probablemente para mantener el acceso a las bandejas de entrada de correo electrónico de las víctimas.

En esta publicación compartimos un análisis técnico de este backdoor llamado Dolphin y explicamos su vínculo con el grupo ScarCruft. Los hallazgos de esta nueva adición al conjunto de herramientas de ScarCruft fueron también presentados en la conferencia AVAR 2022.

Puntos clave en esta publicación:

 

  • Los investigadores de ESET analizaron Dolphin, un backdoor que no había sido reportado anteriormente y que ha sido utilizado por el grupo de APT ScarCruft.
  • Dolphin es desplegado solo en objetivos seleccionados. Su objetivo es buscar archivos interesantes en las unidades de los sistemas comprometidos y exfiltrarlos vía  Google Drive.
  • El backdoor fue utilizado a principios de 2021como el payload (carga útil) final de un ataque compuesto por varias etapas. En esa ocasión el ataque involucró: un ataque de watering hole a un periódico en línea de Corea del Sur, un exploit de Internet Explorer y otro backdoor de ScarCruft llamado BLUELIGHT.
  • Desde el descubrimiento de Dolphin en abril de 2021, los investigadores de ESET han observado múltiples versiones del backdoor en las cuales los actores de amenazas mejoraron sus capacidades e intentaron evadir la detección.
  • Una característica notable que observamos en las primeras versiones de Dolphin es su capacidad para modificar la configuración de las cuentas de Google y Gmail de las víctimas para reducir su seguridad.

Perfil de ScarCruft

ScarCruft, también conocido como APT37 o Reaper, es un grupo de espionaje que ha estado operando desde al menos 2012. Sus ataques se han enfocado principalmente en Corea del Sur, pero otros países asiáticos también han sido atacados. ScarCruft parece estar interesado principalmente en organizaciones gubernamentales y militares, así como en empresas de diversas industrias vinculadas a los intereses de Corea del Norte.

Descripción de Dolphin

En 2021, ScarCruft realizó un ataque de watering hole en un periódico en línea de Corea del Sur enfocado en Corea del Norte. El ataque constaba de varios componentes, incluido un exploit de Internet Explorer y una shellcode que conducía a un backdoor denominado BLUELIGHT, informó Volexity y Kaspersky.

En esos informes, el backdoor BLUELIGHT se describió como el payload final del ataque. Sin embargo, al analizar el ataque, descubrimos a través de la telemetría de ESET un segundo backdoor más sofisticado, desplegado a través de BLUELIGHT en víctimas seleccionadas. Llamamos a este segundo backdoor Dolphin en función de una ruta PDB que se encuentra en el ejecutable.

Mientras que el backdoor BLUELIGHT después de la explotación realiza un reconocimiento básico y una evaluación de la máquina comprometida, Dolphin es más sofisticado y se despliega manualmente solo en algunas víctimas seleccionadas. Ambos backdoors son capaces de exfiltrar archivos de una ruta especificada en un comando, pero Dolphin también busca activamente en las unidades y exfiltra automáticamente los archivos con extensiones de interés para los operadores de ScarCruft.

La Figura 1 proporciona una descripción general de los componentes del ataque que conducen a la ejecución del backdoor Dolphin.

Figura 1. Descripción general de los componentes que conducen a la ejecución del backdoor Dolphin

Análisis de Dolphin

En la siguiente sección analizamos los componentes de Dolphin y sus capacidades.

El análisis se basa en la primera versión (1.9) que encontramos del backdoor (basada en una string en el código) y en los cambios introducidos en las versiones más recientes.

Instalador de Dolphin

Las siguientes secciones describimos el instalador y loader, que son los componentes responsables de la ejecución del backdoor Dolphin en el escenario de ataque analizado.

Vale la pena señalar que el instalador y el loader desplegado no son exclusivos de Dolphin, ya que anteriormente fueron utilizados por ScarCruft con otro malware.

El instalador sigue estos objetivos principales:

  • Descargar y desplegar un intérprete de Python
  • Generar y desplegar una cadena de carga con su payload
  • Asegurar la persistencia de la cadena de carga

El instalador descarga un archivo CAB de OneDrive, que contiene un intérprete legítimo de Python 2.7. El CAB es descomprimido en %APPDATA% y, según la arquitectura, el intérprete termina en uno de los siguientes directorios:

  • %appdata%\Python27(32)\
  • %appdata%\Python27(64)\

El instalador genera dos rutas de archivos para los componentes de la cadena de carga, loader_step_1> y <loader_encrypted_step_2>, con el formato <base_dir>\<inf_name>\<dll_name>.

<base_dir> es seleccionada de forma aleatoria desde:

  • %PROGRAMDATA%
  • %PUBLIC%
  • %APPDATA%\Microsoft
  • %APPDATA%\Microsoft\Windows
  • %LOCALAPPDATA%
  • %LOCALAPPDATA%\Microsoft
  • %LOCALAPPDATA%\Microsoft\Windows

<inf_name> y <dll_name>  se seleccionan aleatoriamente de los nombres de archivo existentes (sin extensión) en %windir%\inf\*.inf y en %windir%\system32\*.dll.

Para generar el Paso 1 del Loader utiliza una plantilla de script que es completada con nombres generados aleatoriamente (variables, funciones). La plantilla con un ejemplo generado se muestra en la Figura 2.

Figura 2. Plantilla del paso 1 y ejemplo generado

Luego, el script se escribe en <loader_step_1>.

El paso 2 (embebido en el instalador) que contiene el resto de la cadena de carga, incluido el payload, se cifra con una clave XOR de un byte derivada de la hora actual y se escribe en <loader_encrypted_step_2>.

Para persistir el inicio de la cadena de carga, el instalador establece un valor de registro Run:

HKCU\Software\Microsoft\Windows\CurrentVersion\Run\<random_run_name>\”%appdata%\Python27({32|64})\pythonw.exe” “<loader_step_1>” “<loader_encrypted_step_2>”

La <random_run_name> se selecciona aleatoriamente de los nombres de archivo existentes que coincidan con %WINDIR%\inf\*.inf y se descarta la extensión .inf.

Para iniciar la cadena de carga después de la instalación, crea una tarea programada única.

Loader de Dolphin

El loader de Dolphin consta de un script de Python y una shellcode.

El paso 1, el script de Python, lee un archivo específico, descifra su contenido y ejecuta la shellcode resultante.

El paso 2, la shellcode crea un proceso de host (ejecutable CLI aleatorio de %WINDIR%\System32\*.exe), descifra la shellcode adicional que lleva dentro y la inyecta en el proceso creado.

Paso 3, otra shellcode, descifra un archivo PE embebido (el backdoor Dolphin), y lo carga y ejecuta usando un loader PE personalizado.

Backdoor Dolphin

Dolphin es un backdoor que recopila información y ejecuta comandos emitidos por sus operadores. El backdoor es un ejecutable normal de Windows, escrito en C++. Se comunica con el servicio de almacenamiento en la nube Google Drive, que es utilizado como su servidor de C&C.

Nombramos al backdoor Dolphin en función de una ruta PDB que se encuentra en el ejecutable:

D:\Development\BACKDOOR\Dolphin\x64\Release\Dolphin.pdb

Persistencia

El backdoor verifica periódicamente y crea su propia persistencia asegurándose de que el Paso 1 del loader se ejecute cada vez que se inicia el sistema, a través de un valor del registro Run, de la misma manera que en el instalador:

HKCU\Software\Microsoft\Windows\CurrentVersion\Run\<random_run_name>\”%appdata%\Python27({32|64})\pythonw.exe” “<loader_step_1>” “<loader_encrypted_step_2>”

Capacidades

Se recopila la siguiente información básica sobre la computadora y sobre el backdoor:

  • Configuración actual del backdoor
  • Nombre de usuario
  • Nombre de la computadora
  • Dirección IP local y externa
  • Lista de productos de seguridad instalados
  • Tamaño y uso de RAM
  • Resultado de la búsqueda de un debugger y otras herramientas de inspección (como Wireshark)
  • versión del sistema operativo
  • Tiempo actual
  • Versión de malware

Dolphin descarga comandos que son emitidos por sus operadores desde Google Drive y los ejecuta. Después de la ejecución, el output o salida de los comandos se carga. La mayoría de las capacidades de Dolphin son controladas a través de comandos.

Las capacidades más relevantes se describen a continuación.

Exfiltración de archivos

De forma predeterminada, Dolphin busca en todas las unidades no fijas (USB), crea listas de directorios y exfiltra los archivos por extensión. Esta búsqueda se puede extender a unidades fijas (HDD), a través de comandos dedicados.

Las siguientes extensiones de archivo de interés, específicas para medios, documentos, correos electrónicos y certificados, son especificadas en la configuración predeterminada:

jpg, doc, xls, ppt, hwp, url, csv, pdf, show, cell, eml, odt, rtf, nxl, amr, 3gp, m4a, txt, msg, key, der, cer, docx, xlsx, pptx, pfx, mp3

Además de esta búsqueda automática, se pueden exfiltrar archivos específicos.

En las versiones más nuevas, la búsqueda predeterminada se amplió a unidades fijas. Se mejoró el comando para obtener archivos específicos almacenándolo en la configuración hasta que se complete.

Dispositivos portables

Entre las unidades regulares, Dolphin también busca dispositivos portátiles, como smartphones, utilizando la API de dispositivos portátiles de Windows (WPD). Crea listas de directorios y exfiltra archivos. Esta funcionalidad parecía estar en desarrollo en la primera versión que encontramos, por varias razones:

  • Confiar en una ruta hardcodeada con un nombre de usuario que probablemente no exista en la computadora de la víctima
  • Falta de variable de inicialización: se supone que algunas variables se inicializaron en cero o se desreferenciaron, como punteros sin inicialización
  • Falta de filtrado de extensiones

El código se basa en gran medida en la muestra de código de la API COM de dispositivos portátiles de Microsoft.

Además de la búsqueda automática, los operadores pueden especificar archivos individuales para exfiltrarlos de dispositivos portátiles.

En las versiones más recientes, esta capacidad se completó y mejoró al agregar el filtrado de extensiones. Por razones desconocidas, se eliminó el comando para recuperar archivos específicos de dispositivos portátiles.

Capturas de pantalla y keylogging

Dolphin registra las pulsaciones de teclado en ventanas con títulos que contienen substrings especificadas en su configuración. Los valores predeterminados son chrome e internet explore (sic). Esto se hace a través de la API GetAsyncKeyState, y las pulsaciones del teclado se registran junto con el nombre de la ventana y la hora actual. Las capturas de pantalla también se toman en un intervalo configurable; el valor predeterminado es una vez cada 30 segundos.

Las capturas de pantalla y el registro de las pulsaciones de teclado están habilitadas de forma predeterminada y se pueden alternar mediante un comando.

Shellcode

Dolphin puede recibir shellcode para su ejecución. La shellcode se almacena en el registro, bajo una de las siguientes claves:

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Classic\<random_number>
  • HKCU\Software\Microsoft\OneDrive\Update\<random_number>
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\HttpsSoftware\Microsoft\Internet Explorer\Zone\<random_number> (dos subclaves como una, probablemente un error a la hora de escribir el código)

Se puede ejecutar localmente o en un proceso separado específico que se crea e inyecta.

En las versiones más nuevas, la shellcode se almacena en archivos en lugar del registro, y la shellcode almacenada se carga y ejecuta en el inicio de Dolphin, lo que no era el caso en la versión 1.9 (la versión original que analizamos).

Comandos de Shell 

Dolphin puede ejecutar comandos de shell; esto se hace a través de la API popen y la recuperación de la información de salida (output).

Robo de credenciales

Dolphin puede recuperar las credenciales almacenadas en los navegadores en forma de contraseñas y de cookies guardadas. Esto es posible en los siguientes navegadores:

  • Chrome
  • Edge
  • Internet Explorer

En la versión 2.2 esta capacidad se eliminó, presumiblemente para evitar la detección. Posteriormente se restauró en la versión 3.0, pero de forma diferente. Ahora se recibe dinámicamente desde el C&C en forma de shellcode.

Cuenta de Google

Otro de los comandos de Dolphin modifica la configuración de la cuenta de Google a la que está conectada en ese momento, reduciendo la seguridad a través de modificaciones en la configuración predeterminada. Roba del navegador la cookie de la cuenta iniciada y elabora solicitudes que modifican la configuración.

En primer lugar, permite el acceso a Gmail a través del protocolo IMAP mediante el envío de una solicitud HTTP POST a:

  • https://mail.google.com/mail/u/0/?ik=<GM_ID_KEY>&at=<GM_ACTION_TOKEN>&view=up&act=prefs

Luego, habilita el “acceso a aplicaciones menos seguro” al enviar una solicitud RPC no documentada a través de HTTP POST a:

  • https://myaccount.google.com/_/AccountSettingsUi/data/batchexecute

Estas modificaciones se denominan “thunder access” en el backdoor, y probablemente se trate de una referencia al cliente de correo electrónico Thunderbird. Acceder a la bandeja de entrada de las víctimas mediante un cliente de terceros a través de IMAP probablemente ayude a los operadores de ScarCruft a mantener el acceso a los correos electrónicos de las víctimas después de robar las credenciales, lo que puede no ser suficiente por sí solo debido a la detección de intentos de inicio de sesión sospechosos por parte de Google.

Esta característica se encontró en las versiones 1.9 y 2.0 del backdoor, pero no está presente en las versiones 2.2 o 3.0.

Almacenamiento de datos

Dolphin exfiltra los datos al almacenamiento de Google Drive y los guarda en archivos ZIP cifrados antes de cargarlos. El backdoor también mantiene una lista de archivos en forma de hash MD5 para evitar cargar el mismo archivo varias veces. Esta lista se puede restablecer a través de un comando dedicado.

Configuración

El backdoor contiene una configuración predeterminada inicial que persiste en la primera ejecución y se carga en las ejecuciones posteriores. Se almacena en el archivo %ProgramData%\<variable_cfg_name>.inf, donde <variable_cfg_name> se selecciona aleatoriamente a partir nombres de archivo existentes que coinciden con %windir%\inf\*.inf. El contenido se cifra mediante AES CBC con claves aleatorias de 16 bytes y IV, que se almacenan al principio del archivo. La configuración utiliza el formato JSON, con claves tipo hash. En la Figura 3 se muestra un ejemplo de una configuración descifrada.

Figura 3. Configuración del backdoor Dolphin

La configuración se puede modificar mediante comandos que contienen, entre otros, lo siguiente:

  • Claves de cifrado
  • Credenciales para el acceso a la API de Google Drive
  • Títulos de ventana para registro de las pulsaciones de teclado
  • Lista de extensiones de archivo para exfiltrar

Evolución de Dolphin

Desde el descubrimiento inicial de Dolphin en abril de 2021, hemos observado múltiples versiones de este backdoor en las que los actores de amenazas mejoraron las capacidades del backdoor e intentaron mejorar los mecanismos para evadir la detección. La Figura 4 resume las versiones que hemos observado. A continuación se proporciona una descripción más detallada de los cambios en cada versión.

Figura 4. Cronología de la evolución de Dolphin

Noviembre 2021 – versión 2.0

En la versión 2.0 introdujo los siguientes cambios respecto de la versión encontrada en abril de 2021:

  • Resolución dinámica de API sospechosas en lugar de importaciones estáticas (por ejemplo, GetAsyncKeyState)
  • Capacidad de Shellcode terminada y mejorada
    • Shellcode persistente almacenada en archivos en lugar del registro
    • Shellcode persistente cargada y ejecutada en el inicio de Dolphin (anteriormente faltaba)
  • Capacidad de exfiltración de archivos de dispositivos portátiles terminada y mejorada
    • Añadió exfiltración por extensiones
    • Añadió reconocimiento de memoria interna y tarjetas SD (desde el ID del dispositivo)
  • Detección de dispositivos/unidades y exfiltración de archivos mejorada
    • Dolphin ahora crea incondicionalmente listados de directorios y exfiltra archivos por extensión cada 30 minutos para todas las unidades y dispositivos (unidades fijas, unidades extraíbles, dispositivos portátiles). Anteriormente, era solo para unidades extraíbles. Las unidades fijas estaban deshabilitadas de forma predeterminada y el código utilizado para acceder a los dispositivos portátiles tenía bugs y estaba roto.

Diciembre de 2021 – version 2.2

Los cambios introducidos en la versión 2.2 se centraron principalmente en la evasión de detección. Se eliminó la capacidad de robo de credenciales y los comandos relacionados con ella (los comandos de robo de credenciales y cuenta de Google). La mayoría de las strings en esta versión están cifradas en base64.

Enero de 2022 – version 3.0

En la versión 3.0, el código se reorganizó y las clases se renombraron, y las capacidades permanecieron sin cambios. Las strings cifradas en base64 en esta versión estaban de nuevo en texto sin formato. Observamos los siguientes cambios adicionales:

  • Comando para robar credenciales restauradas en una forma diferente; ahora ejecuta la shellcode desde el C&C
  • Comando para obtener archivos de los dispositivos portátiles eliminado
  • El comando para obtener archivos de las unidades ahora se almacena en la configuración hasta que se complete. Si se interrumpe (por ejemplo, por el apagado de la computadora), se realiza en la próxima ejecución. Esto también es útil en el caso de unidades extraíbles que pueden no estar conectadas cuando se emite el comando.
  • Se añade comprobación de conexión a Internet (https://www.microsoft.com); no se ejecuta ningún código malicioso si no hay conexión

Las diferencias entre las versiones 2.2 y 3.0, especialmente la discrepancia en la codificación de strings, sugieren que es probable que diferentes personas hayan trabajado de forma paralela en el desarrollo de las versiones.

Conclusión

Dolphin es la nueva incorporación al ya extenso arsenal de backdoors del grupo ScarCruft que abusan de los servicios de almacenamiento en la nube. Después de desplegarse en objetivos especialmente seleccionadas, busca archivos interesantes en las unidades de los sistemas comprometidos y los exfiltra a Google Drive. Una capacidad inusual que se encuentra en las primeras versiones de este backdoor es la capacidad de modificar la configuración de las cuentas de Google y Gmail de las víctimas para reducir su seguridad, presumiblemente para mantener el acceso a la cuenta para los atacantes. Durante nuestro análisis de las múltiples versiones de Dolphin, observamos un desarrollo continuo y una clara intención de evadir la detección.

Por cualquier consulta sobre la investigación publicada en WeLiveSecurity, contáctenos a threatintel@eset.com.

Indicadores de Compromiso

SHA-1FilenameESET detection nameDescription
F9F6C0184CEE9C1E4E15C2A73E56D7B927EA685BN/AWin64/Agent.MSDolphin backdoor version 1.9 (x64)
5B70453AB58824A65ED0B6175C903AA022A87D6AN/AWin32/Spy.Agent.QETDolphin backdoor version 2.0 (x86)
21CA0287EC5EAEE8FB2F5D0542E378267D6CA0A6N/AWin64/Agent.MSDolphin backdoor version 2.0 (x64)
D9A369E328EA4F1B8304B6E11B50275F798E9D6BN/AWin32/Agent.UYODolphin backdoor version 3.0 (x86)
2C6CC71B7E7E4B28C2C176B504BC5BDB687C4D41N/AWin64/Agent.MSDolphin backdoor version 3.0 (x64)

Técnicas de MITRE ATT&CK

Esta table fue creada utilizando la versión 12 del framework MITRE ATT&CK.

TacticIDNameDescription
Initial AccessT1189Drive-by CompromiseScarCruft uses watering-hole attacks to compromise victims.
ExecutionT1059.006Command and Scripting Interpreter: PythonThe Dolphin loader a uses Python script.
T1059.007Command and Scripting Interpreter: JavaScriptScarCruft used malicious JavaScript for a watering-hole attack.
T1203Exploitation for Client ExecutionScarCruft exploits CVE-2020-1380 to compromise victims.
T1106Native APIDolphin uses Windows API functions to execute files and inject processes.
PersistenceT1053.005Scheduled Task/Job: Scheduled TaskDolphin uses a temporary scheduled task to start after installation.
T1547.001Boot or Logon Autostart Execution: Registry Run Keys / Startup FolderDolphin uses Run keys for persistence of its loader.
Defense EvasionT1055.002Process Injection: Portable Executable InjectionDolphin can inject into other processes.
T1027Obfuscated Files or InformationDolphin has encrypted components.
Credential AccessT1555.003Credentials from Password Stores: Credentials from Web BrowsersDolphin can obtain saved passwords from browsers.
T1539Steal Web Session CookieDolphin can obtain cookies from browsers.
DiscoveryT1010Application Window DiscoveryDolphin captures the title of the active window.
T1083File and Directory DiscoveryDolphin can obtain file and directory listings.
T1518.001Software Discovery: Security Software DiscoveryDolphin obtains a list of installed security software.
T1082System Information DiscoveryDolphin obtains various system information including OS version, computer name and RAM size.
T1016System Network Configuration DiscoveryDolphin obtains the device’s local and external IP address.
T1016.001System Network Configuration Discovery: Internet Connection DiscoveryDolphin checks internet connectivity.
T1033System Owner/User DiscoveryDolphin obtains the victim’s username.
T1124System Time DiscoveryDolphin obtains the victim’s current time.
CollectionT1056.001Input Capture: KeyloggingDolphin can log keystrokes.
T1560.002Archive Collected Data: Archive via LibraryUsing the Zipper library, Dolphin compresses and encrypts collected data before exfiltration.
T1119Automated CollectionDolphin periodically collects files with certain extensions from drives.
T1005Data from Local SystemDolphin can collect files from local drives.
T1025Data from Removable MediaDolphin can collect files from removable drives.
T1074.001Data Staged: Local Data StagingDolphin stages collected data in a directory before exfiltration.
T1113Screen CaptureDolphin can capture screenshots.
Command and ControlT1071.001Application Layer Protocol: Web ProtocolsDolphin uses HTTPS to communicate with Google Drive.
T1102.002Web Service: Bidirectional CommunicationDolphin communicates with Google Drive to download commands and exfiltrate data.
ExfiltrationT1020Automated ExfiltrationDolphin periodically exfiltrates collected data.
T1567.002Exfiltration Over Web Service: Exfiltration to Cloud StorageDolphin exfiltrates data to Google Drive.

Suscríbase aquí para recibir actualizaciones sobre cualquier artículo nuevo en la sección crisis en Ucrania.

Newsletter

Discusión