Operación Dragon Weave utiliza Azure Cloud C2 para atacar la República Checa y Taiwán
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Una operación de espionaje dirigida rastreada como Operación Dragon Weave utiliza archivos de acceso directo LNK maliciosos junto con un ejecutable basado en Rust para lanzar un cargador de múltiples etapas que finalmente despliega el agente de comando y control Adaptix AZUREVEIL. Los operadores abusan de Azure Blob Storage de Microsoft como un mecanismo de buzón muerto para las comunicaciones C2. La campaña se centra en el personal del gobierno e investigadores en la República Checa y Taiwán.
Investigación
La investigación siguió toda la cadena de infección desde el archivo ZIP inicial a través de la ejecución de VBScript, el descifrado basado en PowerShell, la carga lateral de DLL y un cargador Rust personalizado que utilizó RC4, Base64 y SM4 para descifrar la carga final. El malware de la última etapa, AZUREVEIL, fue identificado como una DLL Adaptix de 64 bits que se comunica solo a través de Azure Blob Storage y admite la ejecución de archivos de objeto Beacon en memoria.
Mitigación
Los defensores deben bloquear la ejecución de archivos LNK inesperados y binarios sin firmar, aplicar controles estrictos sobre la ejecución de scripts y macros, y monitorear el tráfico inusual de Azure Blob Storage. El uso de PowerShell con omisión de la política de ejecución debe restringirse o vigilarse de cerca, y los equipos de seguridad deben detectar la creación de archivos sospechosos en %LOCALAPPDATA% and %TEMP%. También se recomienda una higiene estricta de credenciales para cuentas de Azure y la rotación regular de tokens SAS.
Respuesta
Los equipos de seguridad deben detectar y aislar los hosts afectados, recolectar memoria volátil para recuperar cualquier carga útil en memoria, bloquear el dominio de almacenamiento de Azure identificado, y buscar los artefactos de archivos reportados y patrones de procesos. También se debe realizar una investigación forense completa para identificar cualquier componente adicional descargado y eliminar mecanismos de persistencia.
graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ddffdd classDef process fill:#ffeb99 classDef operator fill:#ff9900 %% Nodes attack_phishing[«<b>Acción</b> – <b>T1566.001 Adjunto de Spearphishing</b><br/>El adversario envía por correo electrónico un archivo ZIP malicioso a las víctimas.»] class attack_phishing action file_zip[«<b>Archivo</b> – malicious.zip<br/>Contiene un acceso directo .lnk y un ejecutable dropper .exe compilado en Rust.»] class file_zip file action_user_exec[«<b>Acción</b> – <b>T1204.001 Ejecución por el Usuario</b><br/>La víctima abre el archivo .lnk o ejecuta el .exe, iniciando la cadena de ejecución del dropper.»] class action_user_exec action file_lnk[«<b>Archivo</b> – payload.pdf.lnk<br/>El acceso directo utiliza una doble extensión y el icono de Edge para parecer legítimo.»] class file_lnk file tool_wscript[«<b>Herramienta</b> – wscript.exe<br/>Ejecuta la carga útil VBScript.»] class tool_wscript tool file_vbs[«<b>Archivo</b> – empty.vbs<br/>VBScript mínimo que inicia PowerShell.»] class file_vbs file action_vbscript[«<b>Acción</b> – <b>T1059.005 Visual Basic</b><br/>El VBScript se ejecuta mediante wscript para iniciar PowerShell.»] class action_vbscript action action_powershell[«<b>Acción</b> – <b>T1059.001 PowerShell</b><br/>Profile.ps1 se ejecuta con bypass de la política de ejecución y descifra la siguiente etapa.»] class action_powershell action file_dat[«<b>Archivo</b> – 1.dat<br/>Contenedor cifrado con XOR que contiene RuntimeBroker_update.exe.»] class file_dat file process_runtime[«<b>Proceso</b> – RuntimeBroker_update.exe<br/>Descifrado desde 1.dat; carga la DLL maliciosa UnityPlayer.dll mediante DLL side-loading.»] class process_runtime process file_dll[«<b>Archivo</b> – UnityPlayer.dll<br/>DLL maliciosa colocada junto a RuntimeBroker_update.exe.»] class file_dll file action_dll_sideload[«<b>Acción</b> – <b>T1546.009 DLL AppCert</b><br/>El DLL side-loading proporciona ejecución de código.»] class action_dll_sideload action tool_rustloader[«<b>Herramienta</b> – Cargador Rust (RUSTCLOAK)<br/>Asigna memoria, escribe el PE AZUREVEIL descifrado y lo ejecuta mediante Windows Fibers.»] class tool_rustloader tool action_process_injection[«<b>Acción</b> – <b>T1055.002 Inyección en Procesos</b><br/>Inyección de PE utilizando Windows Fibers.»] class action_process_injection action file_azureveil[«<b>Archivo</b> – AZUREVEIL.exe<br/>Carga útil descifrada ejecutada después de la inyección.»] class file_azureveil file action_discovery[«<b>Acción</b> – <b>T1083 Descubrimiento de Archivos y Directorios</b><br/>El cargador enumera archivos y los mueve a %TEMP%.»] class action_discovery action action_network_discovery[«<b>Acción</b> – <b>T1016 Descubrimiento de la Configuración de Red del Sistema</b><br/>Recopila información MAC e IP para proxy y movimiento lateral.»] class action_network_discovery action action_c2[«<b>Acción</b> – <b>T1102 Servicio Web</b><br/>Se comunica con Azure Blob Storage mediante HTTPS.»] class action_c2 action action_dead_drop[«<b>Acción</b> – <b>T1102.003 Comunicación Unidireccional</b><br/>Carga un beacon blob y recupera comandos desde el mismo contenedor.»] class action_dead_drop action action_encrypted_channel[«<b>Acción</b> – <b>T1573.001 Canal Cifrado</b><br/>Los datos de beacon y comandos están cifrados con RC4 personalizado y SM4-CBC.»] class action_encrypted_channel action action_exfil[«<b>Acción</b> – <b>T1567.002 Exfiltración a Través de un Servicio Web</b><br/>Carga datos cifrados a un endpoint de Azure Blob.»] class action_exfil action action_persistence[«<b>Acción</b> – <b>T1547.009 Modificación de Accesos Directos</b><br/>Coloca un archivo .lnk malicioso en ubicaciones de inicio para mantener la persistencia.»] class action_persistence action %% Edges attack_phishing –>|entrega| file_zip file_zip –>|activa| action_user_exec action_user_exec –>|abre| file_lnk file_lnk –>|ejecuta| tool_wscript tool_wscript –>|ejecuta| file_vbs file_vbs –>|inicia| action_vbscript action_vbscript –>|inicia| action_powershell action_powershell –>|descifra| file_dat file_dat –>|produce| process_runtime process_runtime –>|carga| file_dll file_dll –>|utilizado por| action_dll_sideload process_runtime –>|realiza| action_process_injection action_process_injection –>|utiliza| tool_rustloader tool_rustloader –>|carga| file_azureveil file_azureveil –>|realiza| action_discovery action_discovery –>|también realiza| action_network_discovery action_network_discovery –>|envía datos a| action_c2 action_c2 –>|utiliza| action_dead_drop action_dead_drop –>|depende de| action_encrypted_channel action_encrypted_channel –>|habilita| action_exfil action_exfil –>|puede desencadenar| action_persistence file_lnk –>|establece| action_persistence %% Class Assignments class attack_phishing action class file_zip file class action_user_exec action class file_lnk file class tool_wscript tool class file_vbs file class action_vbscript action class action_powershell action class file_dat file class process_runtime process class file_dll file class action_dll_sideload action class tool_rustloader tool class action_process_injection action class file_azureveil file class action_discovery action class action_network_discovery action class action_c2 action class action_dead_drop action class action_encrypted_channel action class action_exfil action class action_persistence action
Flujo de Ataque
Detecciones
LOLBAS WScript / CScript (a través de process_creation)
Ver
La Posibilidad de Ejecución a Través de Líneas de Comando Ocultas de PowerShell (a través de cmdline)
Ver
Llamar Métodos .NET Sospechosos desde Powershell (a través de powershell)
Ver
Posibles Indicadores de Ofuscación en PowerShell (a través de powershell)
Ver
IOCs (HashSha256) para detectar: Operación Dragon Weave : Descubriendo una campaña vinculada a China que apunta a República Checa y Taiwán utilizando Azure Cloud C2
Ver
Detección de Ejecución Maliciosa de wscript.exe y Uso de CreateFiberEx [Creación de Procesos en Windows]
Ver
Ejecución de Profile.ps1 con Omisión de PowerShell [PowerShell en Windows]
Ver
Archivo LNK Malicioso y Carga Lateral de DLL para la Ejecución de RUSTCLOAK [Evento de Archivo en Windows]
Ver
Ejecución de Simulación
Pre-requisito: El chequeo de Telemetría y Línea Base debe haber pasado.
Narrativa del Ataque y Comandos
- Entrega: El atacante envía un correo electrónico de phishing con un archivo adjunto llamado
計畫申請審查結果通知單.pdf.lnk. La doble extensión oculta la naturaleza del acceso directo. El LNK apunta aC:Tempevil.vbs. - Ejecución (VBScript): Cuando la víctima hace doble clic en el LNK,
wscript.exelanzaevil.vbs. El script dejaRuntimeBroker_update.exeto%APPDATA%MicrosoftWindowsStart MenuProgramsRuntimeBroker_update.exey copia unUnityPlayer.dll(que contiene el cargador basado en Rust) malicioso en el mismo directorio. - Carga Lateral de DLL: El atacante ejecuta
RuntimeBroker_update.exe. Debido a que el ejecutable está firmado (o imita un binario legítimo), Windows carga elUnityPlayer.dllcercano, que ejecuta la carga de Rust incrustada (RUSTCLOAK) y establece un canal C2 a Azure. - Postejecución: La carga útil realiza un descubrimiento de sistema (T1016, T1082) y comienza la exfiltración (T1041) a través de un canal encriptado (T1573).
Script de Prueba de Regresión
<#
Script de simulación para la detección de carga lateral maliciosa de LNK + DLL.
Prerrequisitos:
- Sysmon con ProcessCreate (ID 1) e ImageLoad (ID 7) habilitados.
- Permiso de escritura en $env:APPDATAMicrosoftWindowsStart MenuPrograms
#>
# 1. Preparar VBScript malicioso
$vbPath = "$env:TEMPevil.vbs"
@'
Set objShell = CreateObject("WScript.Shell")
'objShell.Run """$env:APPDATAMicrosoftWindowsStart MenuProgramsRuntimeBroker_update.exe""", 0, False
'@ | Set-Content -Path $vbPath -Encoding Unicode
# 2. Desplegar un DLL UnityPlayer.dll falso (marcador binario)
$dllPath = "$env:APPDATAMicrosoftWindowsStart MenuProgramsUnityPlayer.dll"
# Para demo, simplemente copie cualquier DLL existente (por ejemplo, version.dll) y cámbiele el nombre
Copy-Item "$env:SystemRootSystem32version.dll" $dllPath -Force
# 3. Desplegar el ejecutable auxiliar (una copia de un binario legítimo para realismo)
$exePath = "$env:APPDATAMicrosoftWindowsStart MenuProgramsRuntimeBroker_update.exe"
Copy-Item "$env:SystemRootSystem32RuntimeBroker.exe" $exePath -Force
# 4. Crear el LNK malicioso con doble extensión
$lnkPath = "$env:USERPROFILEDesktop計畫申請審查結果通知單.pdf.lnk"
$ws = New-Object -ComObject WScript.Shell
$shortcut = $ws.CreateShortcut($lnkPath)
$shortcut.TargetPath = "$env:SystemRootSystem32wscript.exe"
$shortcut.Arguments = "`"$vbPath`""
$shortcut.Save()
Write-Host "LNK malicioso creado en $lnkPath"
Write-Host "Ejecutando el LNK para desencadenar la cadena..."
Start-Process -FilePath $lnkPath -Wait
Comandos de Limpieza
# Eliminar artefactos
Remove-Item "$env:TEMPevil.vbs" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:APPDATAMicrosoftWindowsStart MenuProgramsUnityPlayer.dll" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:APPDATAMicrosoftWindowsStart MenuProgramsRuntimeBroker_update.exe" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILEDesktop計畫申請審查結果通知單.pdf.lnk" -Force -ErrorAction SilentlyContinue
Write-Host "Limpieza completa."