Process Hollowing y Process Doppelgänging: Técnicas de Suplantación de Procesos
Análisis técnico de process hollowing (RunPE) y process doppelgänging. Cómo el malware crea procesos legítimos y reemplaza su contenido con código malicioso. Variantes modernas, detección con Sysmon/EDR y comparativa de técnicas de suplantación.
Ocultarse dentro de procesos legítimos
Process hollowing es una de las técnicas de evasión más usadas en malware Windows. La idea es elegante en su simplicidad: ¿por qué crear un proceso sospechoso nuevo cuando puedes secuestrar uno que ya es confiable?
El resultado de un process hollowing exitoso es un proceso que, para el sistema operativo y las herramientas de seguridad, aparece como svchost.exe, explorer.exe o cualquier otro ejecutable legítimo. Pero el código que ejecuta es completamente diferente: es el payload del malware.
Process Hollowing (RunPE) (T1055.012)
Flujo paso a paso
1. CreateProcess("svchost.exe", CREATE_SUSPENDED)
→ Proceso creado pero no ejecuta codigo aun
2. NtUnmapViewOfSection(hProcess, pImageBase)
→ Vaciar la imagen del ejecutable original de memoria
3. VirtualAllocEx(hProcess, pImageBase, sizeOfMalware, ...)
→ Reservar memoria en la misma direccion base
4. WriteProcessMemory(hProcess, pImageBase, malwareBytes, ...)
→ Escribir el PE malicioso en la memoria del proceso
5. SetThreadContext(hThread, newContext)
→ Modificar el entry point del hilo para apuntar al malware
6. ResumeThread(hThread)
→ El proceso "svchost.exe" ejecuta el codigo malicioso
Pseudocódigo detallado
def process_hollowing(target_exe, malware_pe):
# 1. Crear proceso legitimo en estado suspendido
si = STARTUPINFO()
pi = PROCESS_INFORMATION()
CreateProcess(
target_exe, # "C:\\Windows\\System32\\svchost.exe"
None,
None, None,
False,
CREATE_SUSPENDED, # El proceso NO arranca
None, None,
si, pi
)
# 2. Obtener la direccion base de la imagen del proceso
context = CONTEXT()
context.ContextFlags = CONTEXT_FULL
GetThreadContext(pi.hThread, context)
# Leer PEB para obtener ImageBaseAddress
peb_addr = context.Rdx # En x64, RDX apunta al PEB
image_base = read_remote_memory(pi.hProcess, peb_addr + 0x10, 8)
# 3. Vaciar la imagen original
NtUnmapViewOfSection(pi.hProcess, image_base)
# 4. Reservar memoria y escribir el PE malicioso
malware_headers = parse_pe_headers(malware_pe)
new_base = VirtualAllocEx(
pi.hProcess,
image_base,
malware_headers.SizeOfImage,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE
)
# Escribir headers
WriteProcessMemory(pi.hProcess, new_base, malware_pe[:malware_headers.SizeOfHeaders])
# Escribir secciones
for section in malware_headers.sections:
WriteProcessMemory(
pi.hProcess,
new_base + section.VirtualAddress,
malware_pe[section.PointerToRawData:section.PointerToRawData + section.SizeOfRawData]
)
# 5. Actualizar el entry point
context.Rcx = new_base + malware_headers.AddressOfEntryPoint # x64
SetThreadContext(pi.hThread, context)
# Actualizar ImageBaseAddress en el PEB
write_remote_memory(pi.hProcess, peb_addr + 0x10, new_base)
# 6. Reanudar el proceso
ResumeThread(pi.hThread)
Procesos objetivo típicos
El malware elige procesos que son comunes y que los analistas no cuestionan:
| Proceso | Por qué se elige |
|---|---|
svchost.exe | Múltiples instancias son normales. Difícil distinguir una falsa |
explorer.exe | Siempre presente en sesiones de usuario |
msiexec.exe | Se ejecuta periódicamente para instalaciones |
dllhost.exe | Múltiples instancias normales (COM surrogate) |
RuntimeBroker.exe | Común en Windows 10/11 |
notepad.exe | Proceso simple, sin muchas imports propias |
iexplore.exe | Acceso a red esperado (oculta tráfico C2) |
RegSvcs.exe | .NET Framework host |
Detección de process hollowing
| Indicador | Método de detección | Confianza |
|---|---|---|
Proceso creado con CREATE_SUSPENDED | Sysmon Event ID 1 (flags) | Media (legítimo en debuggers) |
NtUnmapViewOfSection cross-process | ETW, EDR hooks en ntdll | Alta |
| Imagen en memoria no coincide con imagen en disco | Memory scanning, Hollows Hunter | Muy alta |
SetThreadContext modificando entry point | EDR, ETW | Alta |
WriteProcessMemory seguido de ResumeThread | Behavioral correlation | Alta |
| Proceso con path legítimo pero sin command line esperado | Sysmon: svchost.exe sin -k flag | Alta |
Herramienta: Hollows Hunter (hasherezade)
Hollows Hunter es una herramienta open source que escanea procesos en ejecución buscando indicadores de hollowing:
- Detecta discrepancias entre la imagen en disco y en memoria
- Identifica módulos inyectados no listados en el PEB
- Detecta hooks en la IAT (Import Address Table)
- Exporta los módulos sospechosos para análisis
Process Doppelgänging
Concepto
Process doppelgänging (presentado por Tal Liberman y Eugene Kogan en Black Hat Europe 2017) abusa de las transacciones NTFS (TxF) de Windows:
- Crear una transacción NTFS (
NtCreateTransaction) - Dentro de la transacción, crear un archivo temporal con el contenido del malware
- Crear una sección de proceso desde ese archivo (
NtCreateSection) - Hacer rollback de la transacción (el archivo desaparece del disco)
- Crear el proceso desde la sección (
NtCreateProcessEx) - El proceso existe en memoria pero el archivo fuente nunca se persistió en disco
Ventajas sobre process hollowing
| Aspecto | Process Hollowing | Process Doppelgänging |
|---|---|---|
| Archivo en disco | El exe legítimo existe | Nunca llega a existir de forma permanente |
| Modificación de proceso | Sí (unmap + write) | No (se crea nuevo proceso desde sección limpia) |
| NtUnmapViewOfSection | Requerido | No necesario |
| Detección por EDR | Media-Alta | Baja (al momento de su publicación) |
| Requisitos | Windows XP+ | Windows Vista+ (TxF) |
Limitaciones
- TxF está deprecado desde Windows 10 (pero sigue funcional)
- Algunos EDRs modernos monitorizan las APIs de transacciones NTFS
- La técnica fue ampliamente publicitada, lo que aceleró las detecciones
Process Ghosting
Concepto (2021)
Process ghosting (descubierto por Gabriel Landau de Elastic) explota una race condition en cómo Windows crea procesos:
- Crear un archivo temporal
- Marcarlo para eliminación (
NtSetInformationFileconFILE_DELETE_ON_CLOSE) - Escribir el payload del malware en el archivo
- Crear una sección de imagen desde el archivo (
NtCreateSection) - Cerrar el handle del archivo (Windows lo elimina del disco)
- Crear el proceso desde la sección
Resultado: el proceso se crea desde un archivo que ya fue eliminado. Cuando el antivirus intenta escanear el archivo fuente del proceso, no existe.
Comparativa de técnicas de suplantación
| Técnica | Año | Archivo en disco | Modifica proceso existente | Detectabilidad moderna |
|---|---|---|---|---|
| Process Hollowing | ~2005 | Sí (legítimo) | Sí (vacía y reescribe) | Alta |
| Process Doppelgänging | 2017 | No (transacción rollback) | No (proceso nuevo) | Media |
| Process Herpaderping | 2020 | Sí (modificado post-mapping) | No (proceso nuevo) | Media |
| Process Ghosting | 2021 | No (eliminado pre-ejecución) | No (proceso nuevo) | Media-Baja |
| Process Mockingjay | 2023 | No | Sí (abusa de DLL legítima con RWX) | Baja |
Process Herpaderping (2020)
Presentado por Johnny Shaw: crea un proceso desde un archivo, pero después de que Windows mapea el archivo en memoria, sobrescribe el contenido del archivo en disco con datos legítimos. Cuando el AV escanea el archivo, ve contenido benigno, pero el proceso ya está ejecutando el contenido malicioso original.
Process Mockingjay (2023)
Descubierto por Security Joes: encuentra DLLs legítimas que tienen secciones con permisos RWX (Read-Write-Execute) y las usa como contenedor para inyectar código sin necesidad de llamar a VirtualAlloc o VirtualProtect, que son APIs monitorizadas por EDRs.
Malware que usa process hollowing
| Familia | Tipo | Proceso objetivo típico |
|---|---|---|
| Emotet | Loader | svchost.exe, regsvr32.exe |
| TrickBot | Banking/Loader | svchost.exe |
| FormBook | Infostealer | explorer.exe, iexplore.exe |
| Agent Tesla | Infostealer | RegSvcs.exe, MSBuild.exe |
| Remcos RAT | RAT | svchost.exe, notepad.exe |
| NanoCore | RAT | RegSvcs.exe |
| AsyncRAT | RAT | aspnet_compiler.exe |
| Smoke Loader | Loader | explorer.exe |
| RedLine | Infostealer | AppLaunch.exe |
| LokiBot | Infostealer | vbc.exe |
Mapeo MITRE ATT&CK
| Técnica | ID | Descripción |
|---|---|---|
| Process Injection | T1055 | Padre de todas las técnicas de inyección |
| Process Hollowing | T1055.012 | Vaciado y reemplazo del contenido de un proceso |
| Process Doppelgänging | T1055.013 | Uso de transacciones NTFS para crear proceso |
| Masquerading | T1036 | El proceso parece ser algo que no es |
Estrategia de detección integral
Capa 1: Sysmon
Event ID 1 (ProcessCreate):
- Proceso con CREATE_SUSPENDED flag
- svchost.exe sin parametro -k
- Proceso hijo de proceso inusual
Event ID 8 (CreateRemoteThread):
- Hilo creado en proceso de otro usuario/sesion
Event ID 10 (ProcessAccess):
- Acceso cross-process con derechos PROCESS_VM_WRITE + PROCESS_VM_OPERATION
Capa 2: EDR / ETW
- Hooks en ntdll:
NtUnmapViewOfSection,NtWriteVirtualMemory,NtSetContextThread - Monitorización de
NtCreateTransaction(doppelgänging) - Detección de archivos marcados para eliminación con sección de imagen activa (ghosting)
Capa 3: Memory forensics
- Hollows Hunter (scan de procesos en vivo)
- Volatility
malfindplugin (busca regiones de memoria con PE headers inesperados) - Comparación hash de imagen en disco vs imagen en memoria
Capa 4: Behavioral
- Proceso con network activity inesperada (svchost.exe conectando a IP externa sin ser un servicio de red)
- Proceso hijo de proceso que normalmente no tiene hijos
- Proceso con working directory inusual
Fuentes y referencias
- Liberman, T. & Kogan, E. "Process Doppelgänging." Black Hat Europe, 2017.
- Landau, G. "Process Ghosting: A New Way to Hide Malware." Elastic Security Labs, 2021.
- Shaw, J. "Process Herpaderping." 2020. https://github.com/jxy-s/herpaderping
- Security Joes. "Process Mockingjay." 2023.
- hasherezade. "Hollows Hunter." https://github.com/hasherezade/hollows_hunter
- Microsoft. "Process Creation Flags." Microsoft Docs.
- MITRE ATT&CK. "Process Injection: Process Hollowing (T1055.012)." https://attack.mitre.org/techniques/T1055/012/
- Sikorski, M. & Honig, A. "Practical Malware Analysis." No Starch Press, 2012.
- Russinovich, M. et al. "Windows Internals Part 1." Microsoft Press, 2017.
- Elastic Security Labs. "Process Injection Detection." 2023.
Preguntas frecuentes
Libros recomendados
Artículos relacionados
DLL Injection en Windows: Técnicas, Variantes y Detección
Windows API Calls Más Usadas por Malware: Guía de Referencia para Analistas
Evasión de Antivirus: Ofuscación, Packers y Crypters
Process Hollowing: Detección con Volatility y Análisis de Memoria
De Alerta EDR a Informe Ejecutivo: Caso End-to-End Completo
ANY.RUN: Triaje de Fichero Sospechoso a IOCs en 5 Minutos
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.