Cómo un archivo VHDX entrega Remcos RAT
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Una campaña de malware de múltiples etapas utiliza un archivo ZIP armado que contiene una imagen de disco VHDX para evadir los controles de seguridad comunes. Después de montar el VHDX, se ejecuta un archivo JavaScript ofuscado que lanza una serie de etapas de PowerShell a través de WMI. La carga final es Remcos RAT, que se inyecta en un proceso legítimo de Windows para ocultar su ejecución.
Investigación
El investigador examinó un archivo ZIP malicioso y el contenedor VHDX incrustado para reconstruir el flujo completo del ataque. El análisis expuso una cadena de ejecución compleja que utilizaba la creación de procesos basada en WMI para disfrazar las relaciones padre-hijo, junto con la ofuscación de cadenas con XOR y Base64 y un cargador reflectivo de .NET. El camino de infección se rastreó con éxito desde la ejecución inicial de JavaScript hasta el despliegue de la carga final de Remcos.
Mitigación
Las organizaciones deben aplicar controles estrictos para prevenir el montaje de imágenes de disco VHDX desde fuentes no confiables. Las herramientas de seguridad también deben monitorear actividades sospechosas Win32_Process.Create activadas por motores de scripting como JavaScript o PowerShell. Bloquear dominios maliciosos conocidos y vigilar la persistencia inusual de claves Run en el registro puede reducir aún más el riesgo.
Respuesta
Si se detecta esta actividad, aísle el endpoint afectado inmediatamente para detener la comunicación de mando y control. Adquiera un volcado de memoria para capturar la carga inyectada de Remcos y el cargador reflectivo de .NET. Luego, una revisión forense completa debe buscar entradas maliciosas de claves Run, archivos VHDX adicionales y actividad sospechosa de PowerShell en el resto del entorno.
Flujo de Ataque
Detecciones
Posibles Puntos de Persistencia [ASEPs – Hive Software/NTUSER] (a través de registry_event)
Ver
Posibles Puntos de Persistencia [ASEPs – Hive Software/NTUSER] (a través de cmdline)
Ver
LOLBAS WScript / CScript (a través de process_creation)
Ver
Archivo de Disco Duro Virtual fue Creado (a través de file_event)
Ver
Se Contactó un Posible Servicio de DNS Dinámico (a través de dns)
Ver
Detección de Inyección de Procesos y Cargador Reflectivo .Net de PowerShell [Creación de Procesos de Windows]
Ver
Ejecución de Scripts de PowerShell a través de WMI para Evasión de EDR [PowerShell de Windows]
Ver
## Ejecución de Simulación
Requisito Previo: La Comprobación de Pre-vuelo de Telemetría y Línea Base debe haberse completado.
Justificación: Esta sección detalla la ejecución precisa de la técnica adversaria (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y tienen como objetivo generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a un mal diagnóstico.
-
Narrativa del Ataque y Comandos: El adversario tiene como objetivo ejecutar una carga maliciosa en la memoria para evitar la detección por parte de AV tradicional. Utilizan un script de PowerShell que aprovecha
[System.Reflection.Assembly]::Load()para extraer un DLL compilado .NET directamente desde un array de bytes en el proceso actual. Para mantener la persistencia y evadir el escrutinio, intentan generar o interactuar conbackgroundTaskHost.exe, un proceso legítimo de Windows, para ocultar su hilo de ejecución dentro de una tarea de fondo del sistema estándar. -
Script de Prueba de Regresión:
# Script de Simulación: Carga Reflectiva .NET e Interacción de Procesos # Este script imita la lógica capturada por la regla de detección. # 1. Crear un array de bytes ficticio que represente un Ensamblaje .NET (muy simplificado para simulación) $assemblyBytes = [byte[]](0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00) # Imita el encabezado MZ Write-Host "[+] Intentando Cargar Ensamblado Reflectivo .NET..." -ForegroundColor Cyan try { # Esta cadena específica es un objetivo para la regla de detección $assembly = [System.Reflection.Assembly]::Load($assemblyBytes) Write-Host "[!] Éxito: Ensamblado cargado en memoria (solo simulación)." -ForegroundColor Green } catch { Write-Host "[-] La carga del ensamblado falló (esperado debido a bytes ficticios inválidos), pero el comando fue enviado." -ForegroundColor Yellow } Write-Host "[+] Intentando invocar backgroundTaskHost.exe para activar detección..." -ForegroundColor Cyan # Esta cadena específica es un objetivo para la regla de detección Start-Process "C:WindowsSystem32backgroundTaskHost.exe" -ArgumentList "/test-detection" -
Comandos de Limpieza:
# Limpieza: Terminar el proceso spawned backgroundTaskHost Stop-Process -Name "backgroundTaskHost" -ErrorAction SilentlyContinue Write-Host "[+] Limpieza completa. BackgroundTaskHost terminado." -ForegroundColor Green