A finales de 2023 y durante la primera mitad de 2024, monitorizamos una campaña de ataques dirigida a varios de nuestros clientes en múltiples ubicaciones. Aunque los intentos de ataque lanzaron una carga útil de Cobalt Strike, que podría haber dado lugar a cualquier otra actividad, la información que pudimos recabar de nuestras detecciones nos lleva a evaluar con un nivel de confianza medio que la actividad podría remontarse a un único agente malicioso.
La campaña presentaba varias características dignas de mención:
- El objetivo inicial en Extremo Oriente se desplazó a Suecia.
- Uso de la DLL Minhook (Minhook es una biblioteca minimalista de enganches de API para Windows) para desviar las llamadas a la API de Windows.
- El cargador limpio no formaba parte del paquete de carga lateral, sino que se sustrajo del sistema infectado.
- Uso de una firma digital comprometida (aunque caducada) para los componentes.
- La carga útil final fue Cobalt Strike.
La investigación ya ha concluido y los conocimientos adquiridos siguen dando resultados. En este análisis en profundidad, no solo veremos lo que hemos aprendido, sino también cómo se desarrolló la caza.
Incidentes iniciales en China/Taiwán
Observamos dos escenarios de carga lateral diferentes en un mismo día en el mismo cliente. Más tarde identificamos un tercero en otro cliente. Pensamos que los incidentes podrían estar relacionados, ya que ambos utilizaban los mismos nombres de archivo para los archivos de carga útil cifrados y Cobalt Strike era la carga útil en ambos casos, pero no pudimos recuperar los archivos maliciosos en esos casos.
Al realizar una búsqueda retrospectiva, encontramos incidentes similares en varios de nuestros clientes de China y Taiwán; los primeros indicios de muestras e informes se observaron el 1 de diciembre de 2023. Durante la investigación de este pequeño grupo, observamos tres intentos de carga lateral independientes, como detallaremos a continuación.
Carga lateral de MiracastView
Se activó nuestra mitigación Shellcode/C2Interceptor y observamos una conexión C2 saliente a un servidor Cobalt Strike. El ejecutable utilizado para el cargador era un componente de Windows 10: el servicio de pantalla inalámbrica Miracast.
Identificamos los siguientes componentes:
Cargador limpio:
Path: appdata\\local\\microsoft\\windowsapps\\miracastview.exe Hash: 0bba1b25f7065118fbfd607a123b6c09d8b97ab5be4ca42b56a994188408f7a9
Cargador malicioso:
Path: appdata\\local\\microsoft\\windowsapps\\miracastview.dll Hash: 402be231f1c9258bb1510962b15c3ea5410e54f97e3269cd6cd4c355822798d1
Archivos de carga útil:
appdata\\local\\microsoft\\windowsapps\\syncres.dat appdata\\local\\microsoft\\windowsapps\\dsccorer.mui
Observamos conexiones C2 a las siguientes direcciones:
note.dnsrd[.]com/list note.googlestaic[.]com/list prdelb.dubya[.]net/list
Estos son servidores C2 de Cobalt Strike. El siguiente fragmento contiene la parte relevante de la configuración C2:
C2Server:note.googlestaic[.]com,/list,note.dnsrd[.]com,/list,prdelb.dubya[.]net,/list UserAgent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) CHrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.31 HTTP_Post_URI:/note
Desafortunadamente, no pudimos recuperar el cargador malicioso ni los archivos de carga útil. Sin embargo, basándonos en el nombre del archivo, encontramos la siguiente información en VirusTotal:
db7349a2cf678d5ddbbeb989f0893a146ae536c9169c3940c6caac9cafb3de62: SyncRes.dat
Además de tener el mismo nombre de archivo, también incluía la función exportada StartEngineData que buscaba el cargador malicioso del segundo caso, por lo que creemos que se trata del mismo componente creado por el mismo autor de la amenaza.
Carga lateral de PrintDialog
Encontramos esto después de investigar casos relacionados con el archivo de carga útil dsccorer.mui.
En este caso, nuestra telemetría mostró que la actividad de carga lateral se originó en un instalador aparentemente legítimo de la herramienta LetsTalkApplication (en la ruta correcta C:\Program Files (x86)\Letstalk\LetstalkApplication.exe”). Esto sugiere que la distribución inicial de este escenario se realizó a través de esta aplicación de chat, ofrecida por Letstalk Technology Limited, con sede en Taiwán. No hay más información.

Identificamos los siguientes componentes:
Cargador limpio:
Path: appdata\\local\\microsoft\\windows\\printdialog.exe Hash: 138fla466c26675a16b4e9b8660873b89e5d7fc788ce3810bb357db7cb20aee9
Cargador malicioso:
Path: appdata\\local\\microsoft\\windows\\printdialog.dll Hash: 3f4cac516b8f2ccb6f10042100369c018d8671972fad360977fe522fd47e06c6
Archivos de carga útil:
Path: appdata\\local\\microsoft\\windows\\syncres.dat Path: appdata\\local\\microsoft\\windows\\dsccorer.mui
Carga lateral de SystemSettings
Al mismo tiempo que el caso de MiracastView, observamos otro escenario de carga lateral en el mismo cliente. Identificamos los siguientes componentes:
Cargador limpio:
Path: AppData\Local\Microsoft\Windows\SystemSettings.exe Hash: e768ff1f2f31178fe5930f261acd4b19464acc019fb0aa697d0b48686e59050c
Cargador malicioso:
Path: appdata\\local\\microsoft\\windows\\systemsettings.dll Hash: b72daf654fc83cd6ccccedbf57a102b48af42f410dbc48f69ec5c8c62545dc18
Archivos de carga útil:
appdata\\local\\microsoft\\windows\\wuapi.dat appdata\\local\\microsoft\\windows\\mprapi.dat
En este caso, recuperamos el cargador malicioso, por lo que sabemos que descomprime el contenido de wuapi.dat y mprapi.dat y, a continuación, llama a la exportación StartEngineData desde ambos.
También extrae el DLL Minhook de los recursos (SHA256: bddd6adaee8ab13eabaa7c73c97718cee1437db2054ca713ec7cc86e8002a300). El archivo DLL de este recurso es el mismo que el disponible en https://github[.]com/howmp/pyminhook/raw/master/minhook/MinHook.x64.dll .

Utiliza Minhook para enganchar las siguientes funciones API:
- GetProcAddress
- FreeLibrary
- LdrUnloadDll

Estos enganches se utilizan para cargar el archivo de carga útil mprapi.dat al activarse.
La conexión sueca
Utilizando la información extraída de las muestras recuperadas, configuramos una búsqueda en VirusTotal para encontrar nuevas muestras. Esperábamos encontrar más muestras relacionadas con regiones asiáticas. Para nuestra sorpresa, aunque apareció una nueva muestra, aparentemente estaba dirigida a víctimas suecas.
La nueva muestra era un instalador. Los componentes de carga lateral instalados utilizaban los mismos nombres de archivo para el cargador limpio y el cargador malicioso que en el caso de SystemSettings, pero los nombres de los archivos de carga útil proceden de los escenarios MiracastView/PrintDialog.
Otra característica común es el uso de la DLL Minhook; sin embargo, en este caso no la carga el cargador malicioso, sino el archivo de carga útil.
El hallazgo de esta muestra nos permitió no solo obtener y analizar todos los componentes, sino también establecer un vínculo adicional entre los tres escenarios anteriores.
Identificamos los siguientes componentes:
Cargador limpio:
Name: GoogleUpdateStepup.exe Hash: f87cb46cac1fa44c9f1430123fb23e179e3d653a0e4094e0c133fa48a924924f
Cargador malicioso:
Name: SystemSetting.dll Hash: fd93d7a9f884e0b63106e669a10b8faeaaafda49fac05a66d8581c9e9aa31ad3
Archivos de carga útil:
Name: DscCoreR.mui Hash: bc56676f0da4b0fba57aaa51d390732e40ef713909e5a70bb30264b724a65921 Name: SyncRes.dat Hash: 47f60c25ab5bb07dc3f65694302991a0796a29021b570a2335acda8196dd2b52
Instalador
El instalador proporcionó otra sorpresa: estaba firmado digitalmente. La firma pertenece a Gala Lab Corp., una empresa coreana desarrolladora de juegos en línea. Aunque la firma ha caducado, se comprueba como válida si el reloj del sistema se retrasa hasta antes de la fecha de caducidad, a principios de 2023.

En otras palabras, parece que los autores de la amenaza obtuvieron de alguna manera una firma digital comprometida de esta empresa. Sin embargo, no está claro por qué los atacantes utilizarían un certificado caducado, ya que se mostrará como no válido si el reloj del sistema es correcto.

Las muestras se compilaron mucho después de esa fecha de caducidad de 2023. Las marcas de tiempo indican que, de hecho, se compilaron el 11 de enero de 2024, es decir, después de los rastros que encontramos de la infección anterior el 1 de diciembre de 2023.
Durante el proceso de ataque, los componentes se almacenan en los recursos, como se muestra a continuación:

Coloca los componentes de carga lateral en %AppData%\Roaming\xwreg\:
bc56676f0da4b0fba57aaa51d390732e40ef713909e5a70bb30264b724a65921 *DscCoreR.mui 47f60c25ab5bb07dc3f65694302991a0796a29021b570a2335acda8196dd2b52 *SyncRes.dat fd93d7a9f884e0b63106e669a10b8faeaaafda49fac05a66d8581c9e9aa31ad3 *SystemSettings.dll 880dea11f75380e300bfd5c8054a655eacb2aa0da2c0d89fef3c32666df9a533 *SystemSettings.exe
Los archivos de carga lateral se almacenan en dos recursos comprimidos (zlib inflate):
UMRDPRDAT (resource ID: 129 extracted to SyncRes.dat) VAULTSVCD (resource ID: 130 extracted to DscCoreR.mui)
El archivo SystemSetting.dll no se encuentra en el recurso, sino en la sección .data (también zlib inflate):

Curiosamente, el cargador limpio (SystemSettings.exe) no forma parte del paquete de instalación. En cambio, al ser un componente estándar, se puede obtener de su ubicación legítima (%WINDOWS%\ImmersiveControlPanel) y copiar junto con los componentes maliciosos de carga lateral.

Se trata de un enfoque bastante inusual. Aunque los LOLbins están ganando popularidad (como ya hemos comentado en otra ocasión), normalmente a los autores de amenazas de este tipo les gusta asegurarse de que entregan todos los componentes necesarios para la operación.
El recurso TELEMETRY que se ve en la figura 6 es probablemente el instalador falso de Google Update Setup, como se muestra a continuación.
7b952d83286157163b655917188b2eaf92a50fe3058922810d47b25eaf6eb9fc: legit GoogleUpdateSetup.exe
Cargador limpio
Cargador malicioso
El cargador malicioso carga (y descomprime en cierta medida) DscCoreR.mui y salta al punto de entrada 0x1020 en el volcado, que es la exportación SetUserProcessPriorityBoost.
La cadena de ejecución de los componentes de carga lateral es la siguiente:
SystemSettings.exe -> carga lateral SystemSettings.dll -> descomprime, carga y llama a la exportación SetUserProcessPriorityBoost DscCoreR.mui -> descomprime, carga y llama a la exportación StartEngineData SyncRes.dat
DscCoreR.mui
El nombre interno de este componente es StartRun.dll . Exporta la función SetUserProcessPriorityBoost.
El volcado de memoria contiene dos imágenes comprimidas; cuando se descomprimen, una es una DLL Minhook y la otra es una baliza Cobalt Strike. Carga SyncRes.dat (véase la siguiente sección) y, a continuación, localiza y llama a la exportación StartEngineData. Después de cargar la DLL Minhook, la utilizará para enganchar las siguientes funciones API:
VirtualAlloc Sleep

A partir de este punto, las funciones API enganchadas se desviarán al código malicioso de DscCoreR.mui.

(Las funciones de desvío no parecen hacer nada). Si los enganches tienen éxito, descomprime la baliza Cobalt Strike y la ejecuta.

Datos de configuración:
C2Server - bostik.cmsnet.se,/claim/data/jquery-3.3.1.min.aspx HttpPostUri - /claim/data/jquery-3.3.2.min.aspx
SyncRes.dat
El nombre interno de este componente es Behavior.dll . Exporta la función StartEngineData.
Contiene un PE comprimido incrustado al que parece faltarle un encabezado MZ.
Conclusión
En última instancia, no observamos actividad continuada tras el grupo de casos que documentamos a principios de 2024. No se puede extraer ninguna conclusión de ello, pero el salto geográfico que dio este ataque, además de su clara remezcla de componentes de otros intentos de ataque, apuntan a que un agente malicioso está explorando nuevas formas de lograr uno o varios objetivos. Puede que no sea fácil analizar de forma continuada un grupo de eventos tan llamativos como este en el ajetreo diario por diseñar y ofrecer protecciones, pero siempre es útil echar la vista atrás a momentos más pequeños como estos para ver qué se puede aprender de ellos.