Preámbulo
Elastic Security Labs identificó un conjunto de intrusiones que incorpora varios módulos maliciosos y aprovecha los controladores vulnerables para desactivar soluciones de seguridad conocidas (EDR) para la minería de criptomonedas. Además, el equipo descubrió capacidades para establecer persistencia, instalar una puerta trasera previamente no documentada y ejecutar un criptominero. Nos referimos a este conjunto de intrusiones como REF4578 y a la carga útil principal como GHOSTENGINE (la investigación tangental realizada por el equipo de Antiy nombró partes de este conjunto de intrusiones HIDDENSHOVEL).
Conclusiones clave
- Los autores de malware incorporaron muchos mecanismos de contingencia y duplicación
- GHOSTENGINE aprovecha los controladores vulnerables para terminar y eliminar agentes EDR conocidos que probablemente interferirían con el minero de monedas implementado y conocido
- Esta campaña implicó una cantidad poco común de complejidad para garantizar tanto la instalación como la persistencia del minero XMRIG
Análisis de código
On May 6, 2024, at 14:08:33 UTC, the execution of a PE file named Tiworker.exe
(masquerading as the legitimate Windows TiWorker.exe
file) signified the beginning of the REF4578 intrusion. The following alerts were captured in telemetry, indicating a known vulnerable driver was deployed.
Tras la ejecución, este archivo descarga y ejecuta un script de PowerShell que orquesta todo el flujo de ejecución de la intrusión. El análisis reveló que este binario ejecuta una línea de comandos de PowerShell codificada de forma rígida para recuperar un script ofuscado, get.png,
que se usa para descargar más herramientas, módulos y configuraciones del atacante C2, como se muestra en la captura de pantalla a continuación.
GHOSTENGINE
GHOSTENGINE se encarga de recuperar y ejecutar módulos en la máquina. Emplea principalmente HTTP para descargar archivos de un dominio configurado, con una IP de respaldo en caso de que los dominios no estén disponibles. Además, emplea FTP como protocolo secundario con credenciales integradas. A continuación se muestra un resumen del flujo de ejecución:
Este script descarga y ejecuta clearn.png
, un componente diseñado para purgar el sistema de restos de infecciones anteriores pertenecientes a la misma familia pero a diferentes campañas; Elimina los archivos maliciosos de C:\Program Files\Common Files\System\ado
y C:\PROGRA~1\COMMON~1\System\ado\
y elimina las siguientes tareas programadas por nombre:
Microsoft Assist Job
System Help Center Job
SystemFlushDns
SystemFlashDnsSrv
La evidencia de esos artefactos de tareas programadas puede ser indicadores de una infección previa.
Durante la ejecución, intenta deshabilitar Windows Defender y limpiar los siguientes canales de registro de eventos de Windows:
Application
Security
Setup
System
Forwarded Events
Microsoft-Windows-Diagnostics-Performance
Microsoft-Windows-AppModel-Runtime/Operational
Microsoft-Windows-Winlogon/Operational
get.png
deshabilita Windows Defender, habilita los servicios remotos y borra el contenido de:
C:\Windows\Temp\
C:\Windows\Logs\
C:\$Recycle.Bin\
C:\windows\ZAM.krnl.trace
get.png
también verifica que el volumen C:\
tenga al menos 10 MB de espacio libre para descargar archivos, almacenándolos en C:\Windows\Fonts
. De lo contrario, intentará eliminar archivos grandes del sistema antes de buscar otro volumen adecuado con suficiente espacio y crear una carpeta en $RECYCLE.BIN\Fonts
.
Para obtener la resolución DNS actual de los nombres de dominio C2, GHOSTENGINE emplea una lista codificada de servidores DNS, 1.1.1.1
y 8.8.8.8
.
A continuación, para establecer la persistencia, get.png
crea las siguientes tareas programadas como SYSTEM
:
- OneDriveCloudSync usando
msdtc
para ejecutar el servicio malicioso DLLC:\Windows\System32\oci.dll
cada 20 minutos (se describe más adelante) - DefaultBrowserUpdate para ejecutar
C:\Users\Public\run.bat,
que descarga el scriptget.png
y lo ejecuta cada 60 minutos - OneDriveCloudBackup para ejecutar
C:\Windows\Fonts\smartsscreen.exe
cada 40 minutos
get.png
finaliza todos los procesos curl.exe
y cualquier proceso de PowerShell con *get.png*
en su línea de comandos, excluyendo el proceso actual. Esta es una forma de terminar cualquier instancia del malware que se ejecute simultáneamente.
A continuación, este script descarga config.txt
, un archivo JSON que contiene los hashes de los archivos PE que recuperó. Este archivo verifica si se van a descargar archivos binarios actualizados comprobando los hashes de los archivos descargados anteriormente de cualquier infección pasada.
Por último, get.png
descarga todos sus módulos y varios archivos PE. A continuación se muestra una tabla que contiene una descripción de cada archivo descargado:
camino | Tipo | Descripción |
---|---|---|
C:\Windows\System32\drivers\aswArPots.sys | Controlador del kernel | Controlador vulnerable de Avast |
C:\Windows\System32\drivers\IObitUnlockers.sys | Controlador del kernel | Controlador vulnerable de IObit |
C:\Windows\Fonts\curl.exe | Ejecutable de PE | Se emplea para descargar archivos a través de cURL |
C:\Windows\Fonts\smartsscreen.exe | Ejecutable de PE | Core payload (GHOSTENGINE), su objetivo principal es desactivar la instrumentación de seguridad, completar la infección inicial y ejecutar el minero. |
C:\Windows\System32\oci.dll | DLL de servicio | Persistence/updates module |
backup.png | Script de Powershell | Backdoor module |
kill.png | Script de Powershell | Un script de PowerShell que inyecta y ejecuta un archivo PE responsable de matar los sensores de seguridad |
Módulos GHOSTENGINE
GHOSTENGINE despliega varios módulos que pueden manipular las herramientas de seguridad, crear una puerta trasera y buscar actualizaciones de software.
Controlador de agente EDR y módulo minero: smartsscreen.exe
Este módulo finaliza principalmente cualquier proceso activo del agente EDR antes de descargar e instalar un criptominero.
El malware escanea y compara todos los procesos en ejecución con una lista codificada de agentes EDR conocidos. Si hay coincidencias, primero finaliza el agente de seguridad aprovechando el archivo Avast Anti-Rootkit Driver aswArPots.sys
con el 0x7299C004
IOCTL para finalizar el proceso mediante PID.
smartscreen.exe
A continuación, se emplea para eliminar el binario del agente de seguridad con otro controlador vulnerable, iobitunlockers.sys
de IObit, con el 0x222124
IOCTL .
smartscreen.exe
A continuación, descarga el programa de minería del cliente XMRig (WinRing0x64.png
) del servidor C2 como taskhostw.png
. Finalmente, ejecuta XMRig, sus controladores y el archivo de configuración config.json
, iniciando el proceso de minería.
Update/Persistence module: oci.dll
El script de PowerShell crea un archivo DLL de servicio (oci.dll
), un archivo DLL fantasma cargado por msdtc
. La arquitectura de la DLL varía en función de la máquina; Puede ser de 32 bits o de 64 bits. Su función principal es crear persistencia del sistema y descargar cualquier actualización de los servidores C2 descargando el script get.png
del C2 y ejecutándolo.
Cada vez que se inicie el servicio msdtc
, se cargará oci.dll
para generar la línea de PowerShell que ejecuta get.png
:
Módulo de terminación del agente EDR: kill.png
kill.png
es un script de PowerShell que inyecta shellcode en el proceso actual, descifrando y cargando un archivo PE en la memoria.
Este módulo está escrito en C++, y los autores integraron la redundancia en su funcionamiento. Esta redundancia es evidente en la replicación de la técnica empleada en smartsscreen.exe
para terminar y eliminar binarios de agentes EDR; Escanea continuamente en busca de nuevos procesos.
Módulo de puerta trasera de Powershell: backup.png
El script de PowerShell funciona como una puerta trasera, lo que permite la ejecución remota de comandos en el sistema. Envía continuamente un objeto JSON codificado en Base64 que contiene un ID único, derivado de la hora actual y el nombre del equipo mientras espera comandos codificados en base64. A continuación, se devuelven los resultados de esos comandos.
En este ejemplo eyJpZCI6IjE3MTU2ODYyNDA3MjYyNiIsImhvc3QiOiJhbmFseXNpcyJ9
es el objeto JSON codificado en Base64:
$ echo "eyJpZCI6IjE3MTU2ODYyNDA3MjYyNiIsImhvc3QiOiJhbmFseXNpcyJ9" | base64 -D
{"id":"171568624072626","host":"analysis"}
Configuración del minero
XMRig es un minero de criptomonedas legítimo, y documentaron el uso y los elementos del archivo de configuración aquí. Como se señaló al principio de esta publicación, el objetivo final del conjunto de intrusión REF4578 era obtener acceso a un entorno y desplegar un minero de criptomonedas Monero persistente, XMRig.
Extrajeron el archivo de configuración del minero, que fue tremendamente valioso, ya que nos permitió informar sobre el ID de pago de Monero y realizar un seguimiento de las estadísticas del trabajador y del grupo, la criptomoneda minada, los ID de transacciones y los retiros.
A continuación se muestra un extracto del archivo de configuración de XMRig REF4578:
{
"autosave": false,
"background": true,
"colors": true,
...truncated...
"donate-level": 0,
"donate-over-proxy": 0,
"pools": [
{
"algo": "rx/0",
"coin": "monero",
"url": "pool.supportxmr[.]com:443",
"user": "468ED2Qcchk4shLbD8bhbC3qz2GFXqjAUWPY3VGbmSM2jfJw8JpSDDXP5xpkMAHG98FHLmgvSM6ZfUqa9gvArUWP59tEd3f",
"keepalive": true,
"tls": true
...truncated...
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
"verbose": 0,
"watch": true,
"pause-on-battery": false,
"pause-on-active": false
}
ID de pago de Monero
Monero es una criptomoneda blockchain que se centra en la ofuscación y la fungibilidad para garantizar el anonimato y la privacidad. El ID de pago es un archivo adjunto de transacción arbitrario y opcional que consta de 32 bytes (64 caracteres hexadecimales) o 8 bytes (en el caso de direcciones integradas).
Usando el ID de pago del extracto de configuración anterior (468ED2Qcchk4shLbD8bhbC3qz2GFXqjAUWPY3VGbmSM2jfJw8JpSDDXP5xpkMAHG98FHLmgvSM6ZfUqa9gvArUWP59tEd3f
) podemos ver las estadísticas del trabajador y del grupo en uno de los sitios del grupo de minería de Moneroenumerados en la configuración.
Además, podemos ver los hashes de las transacciones, que podemos consultar en el explorador de blockchain de Monero. Tenga en cuenta que, si bien las transacciones se remontan a cuatro meses atrás, esto solo indica la ganancia monetaria potencial de este trabajador y cuenta específicos.
Usando el Explorador de Blockchain y uno de los hashes de transacción que obtuvimos del ID de pago, podemos ver la clave pública, el monto que se retira y cuándo. Tenga en cuenta que estas claves públicas se emplean con direcciones de un solo uso, o direcciones ocultas con las que el adversario emplearía una clave privada para desbloquear los fondos.
In the above example for transaction 7c106041de7cc4c86cb9412a43cb7fc0a6ad2c76cfdb0e03a8ef98dd9e744442
we can see that there was a withdrawal of 0.109900000000
XMR (the abbreviation for Monero) totaling $14.86 USD. The Monerao Mining Pool site shows four transactions of approximately the same amount of XMR, totaling approximately $60.70 USD (January - March 2024).
A partir de la publicación de esta investigación, todavía hay mineros activos conectados al ID de pago REF4578.
Si bien este ID de pago específico no parece ser una gran fuente de ingresos, es evidente que REF4578 podría operar este conjunto de intrusiones con éxito. Otras víctimas de esta campaña podrían tener diferentes ID de pago empleados para rastrear intrusiones, que podrían combinar para obtener un botín general mayor.
Malware y MITRE ATT&CK
Elastic usa el marco MITRE ATT&CK para documentar tácticas, técnicas y procedimientos comunes que las amenazas emplean contra las redes empresariales.
Táctica
La táctica representa el porqué de una técnica o subtécnica. Es el objetivo táctico del adversario: la razón para realizar una acción.
Técnicas
Las técnicas representan cómo un adversario logra un objetivo táctico mediante la realización de una acción.
- Intérprete de comandos y scripting: PowerShell
- Intérprete de comandos y scripting: Shell de comandos de Windows
- Tarea/Trabajo programado: Tarea programada
- Eliminación del indicador: Borrar registros de eventos de Windows
- Enmascaramiento
- Inyección de proceso
- Descubrimiento de procesos
- Exfiltración a través del canal C2
- Codificación de datos
- Secuestro de recursos
- Atajada de servicio
Mitigación de GHOSTENGINE
Detección
El primer objetivo del malware GHOSTENGINE es incapacitar las soluciones de seguridad de endpoints y deshabilitar registros de eventos específicos de Windows, como los registros de seguridad y del sistema, que registran la creación de procesos y el registro de servicios. Por lo tanto, es crucial priorizar la detección y prevención de estas acciones iniciales:
- Ejecución sospechosa de PowerShell
- Ejecución desde directorios inusuales
- Elevar los privilegios a la integridad del sistema
- Implementación de controladores vulnerables y establecimiento de servicios de modo kernel asociados.
Una vez que se cargan los controladores vulnerables, las oportunidades de detección disminuyen significativamente y las organizaciones deben encontrar puntos de conexión comprometidos que dejen de transmitir registros a su SIEM.
El tráfico de red puede generar y ser identificable si las búsquedas de registros DNS apuntan a dominios de grupos de minería conocidos a través de puertos conocidos como HTTP (80
) y HTTPS (443
). Stratum también es otro protocolo de red popular para los mineros, de forma predeterminada, a través del puerto 4444
.
El análisis de este conjunto de intrusiones reveló las siguientes reglas de detección y eventos de prevención de comportamiento:
- Descargas sospechosas de PowerShell
- Control de servicio generado a través de un intérprete de scripts
- Creación de tareas programadas locales
- Ejecución de procesos desde un directorio inusual
- Svchost desovando Cmd
- Relación inusual entre padre e hijo
- Borrar registros de eventos de Windows
- Manipulación de Microsoft Windows Defender
- Posible escalada de privilegios a través de la DLL faltante
- Enmascaramiento binario a través de una ruta que no es de confianza
Prevención
Prevención de archivos maliciosos:
Prevención de inyección de shellcode:
Prevención de creación de archivos de controladores vulnerables (Windows.VulnDriver.ArPot y Windows.VulnDriver.IoBitUnlocker )
YARA
Elastic Security creó reglas YARA para identificar esta actividad.
Observaciones
Todos los observables también están disponibles para su descarga tanto en formato ECS como en STIX.
En esta investigación se discutieron los siguientes observables.
Observable | Tipo | Nombre | Referencia |
---|---|---|---|
2fe78941d74d35f721556697491a438bf3573094d7ac091b42e4f59ecbd25753 | SHA-256 | C:\Windows\Fonts\smartsscreen.exe | Módulo controlador GHOSTENGINE EDR |
4b5229b3250c8c08b98cb710d6c056144271de099a57ae09f5d2097fc41bd4f1 | SHA-256 | C:\Windows\System32\drivers\aswArPots.sys | Controlador vulnerable de Avast |
2b33df9aff7cb99a782b252e8eb65ca49874a112986a1c49cd9971210597a8ae | SHA-256 | C:\Windows\System32\drivers\IObitUnlockers.sys | Controlador vulnerable de Iobit |
3ced0552b9ecf3dfecd14cbcc3a0d246b10595d5048d7f0d4690e26ecccc1150 | SHA-256 | C:\Windows\System32\oci.dll | Módulo de actualización/persistencia (64 bits) |
3b2724f3350cb5f017db361bd7aae49a8dbc6faa7506de6a4b8992ef3fd9d7ab | SHA-256 | C:\Windows\System32\oci.dll | Módulo de actualización/persistencia (32 bits) |
35eb368c14ad25e3b1c58579ebaeae71bdd8ef7f9ccecfc00474aa066b32a03f | SHA-256 | C:\Windows\Fonts\taskhostw.exe | Cliente minero |
786591953336594473d171e269c3617d7449876993b508daa9b96eedc12ea1ca | SHA-256 | C:\Windows\Fonts\config.json | Archivo de configuración del minero |
11bd2c9f9e2397c9a16e0990e4ed2cf0679498fe0fd418a3dfdac60b5c160ee5 | SHA-256 | C:\Windows\Fonts\WinRing0x64.sys | Conductor minero |
aac7f8e174ba66d62620bd07613bac1947f996bb96b9627b42910a1db3d3e22b | SHA-256 | C:\ProgramData\Microsoft\DeviceSync\SystemSync\Tiworker.exe | Etapa inicial |
6f3e913c93887a58e64da5070d96dc34d3265f456034446be89167584a0b347e | SHA-256 | backup.png | Módulo de puerta trasera GHOSTENGINE |
7c242a08ee2dfd5da8a4c6bc86231985e2c26c7b9931ad0b3ea4723e49ceb1c1 | SHA-256 | get.png | Cargador GHOSTENGINE |
cc4384510576131c126db3caca027c5d159d032d33ef90ef30db0daa2a0c4104 | SHA-256 | kill.png | Módulo de terminación GHOSTENGINE EDR |
download.yrnvtklot[.]com | dominio | Servidor C2 | |
111.90.158[.]40 | IPv4-ADDR | Servidor C2 | |
ftp.yrnvtklot[.]com | dominio | Servidor C2 | |
93.95.225[.]137 | IPv4-ADDR | Servidor C2 | |
online.yrnvtklot[.]com | dominio | Servidor C2 |
Referencias
A lo largo de la investigación anterior se hizo referencia a lo siguiente: