AvanzadoWindowsprocess hollowingprocess injectionevasióndetecciónMITRE ATT&CK

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.

MalwareIntel Research··8 min lectura
Serie: Malware en Windows — Parte 3

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:

ProcesoPor qué se elige
svchost.exeMúltiples instancias son normales. Difícil distinguir una falsa
explorer.exeSiempre presente en sesiones de usuario
msiexec.exeSe ejecuta periódicamente para instalaciones
dllhost.exeMúltiples instancias normales (COM surrogate)
RuntimeBroker.exeComún en Windows 10/11
notepad.exeProceso simple, sin muchas imports propias
iexplore.exeAcceso a red esperado (oculta tráfico C2)
RegSvcs.exe.NET Framework host

Detección de process hollowing

IndicadorMétodo de detecciónConfianza
Proceso creado con CREATE_SUSPENDEDSysmon Event ID 1 (flags)Media (legítimo en debuggers)
NtUnmapViewOfSection cross-processETW, EDR hooks en ntdllAlta
Imagen en memoria no coincide con imagen en discoMemory scanning, Hollows HunterMuy alta
SetThreadContext modificando entry pointEDR, ETWAlta
WriteProcessMemory seguido de ResumeThreadBehavioral correlationAlta
Proceso con path legítimo pero sin command line esperadoSysmon: svchost.exe sin -k flagAlta

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:

  1. Crear una transacción NTFS (NtCreateTransaction)
  2. Dentro de la transacción, crear un archivo temporal con el contenido del malware
  3. Crear una sección de proceso desde ese archivo (NtCreateSection)
  4. Hacer rollback de la transacción (el archivo desaparece del disco)
  5. Crear el proceso desde la sección (NtCreateProcessEx)
  6. El proceso existe en memoria pero el archivo fuente nunca se persistió en disco

Ventajas sobre process hollowing

AspectoProcess HollowingProcess Doppelgänging
Archivo en discoEl exe legítimo existeNunca llega a existir de forma permanente
Modificación de procesoSí (unmap + write)No (se crea nuevo proceso desde sección limpia)
NtUnmapViewOfSectionRequeridoNo necesario
Detección por EDRMedia-AltaBaja (al momento de su publicación)
RequisitosWindows 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:

  1. Crear un archivo temporal
  2. Marcarlo para eliminación (NtSetInformationFile con FILE_DELETE_ON_CLOSE)
  3. Escribir el payload del malware en el archivo
  4. Crear una sección de imagen desde el archivo (NtCreateSection)
  5. Cerrar el handle del archivo (Windows lo elimina del disco)
  6. 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écnicaAñoArchivo en discoModifica proceso existenteDetectabilidad moderna
Process Hollowing~2005Sí (legítimo)Sí (vacía y reescribe)Alta
Process Doppelgänging2017No (transacción rollback)No (proceso nuevo)Media
Process Herpaderping2020Sí (modificado post-mapping)No (proceso nuevo)Media
Process Ghosting2021No (eliminado pre-ejecución)No (proceso nuevo)Media-Baja
Process Mockingjay2023NoSí (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

FamiliaTipoProceso objetivo típico
EmotetLoadersvchost.exe, regsvr32.exe
TrickBotBanking/Loadersvchost.exe
FormBookInfostealerexplorer.exe, iexplore.exe
Agent TeslaInfostealerRegSvcs.exe, MSBuild.exe
Remcos RATRATsvchost.exe, notepad.exe
NanoCoreRATRegSvcs.exe
AsyncRATRATaspnet_compiler.exe
Smoke LoaderLoaderexplorer.exe
RedLineInfostealerAppLaunch.exe
LokiBotInfostealervbc.exe

Mapeo MITRE ATT&CK

TécnicaIDDescripción
Process InjectionT1055Padre de todas las técnicas de inyección
Process HollowingT1055.012Vaciado y reemplazo del contenido de un proceso
Process DoppelgängingT1055.013Uso de transacciones NTFS para crear proceso
MasqueradingT1036El 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 malfind plugin (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

Artículos relacionados

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.