Saltar al contenido principal

Volatility

Memory Forensics3.xBlue Team

El framework líder de análisis forense de memoria volátil. Permite extraer evidencia de capturas RAM: procesos, conexiones de red, artefactos de malware, credenciales y mucho más sin necesidad de disco duro.

Volatility: el estándar del análisis forense de memoria

Arquitectura, tipos de evidencia y casos de uso

Volatility es el framework de análisis forense de memoria más utilizado por investigadores forenses, equipos de respuesta a incidentes y analistas de SOC. Analiza capturas de memoria RAM para extraer evidencia que no se encuentra en el disco.

¿Qué evidencia puedes extraer de la memoria? • Procesos activos y ocultos (incluso rootkits que eliminan entradas del Task Manager) • Conexiones de red activas (TCP/UDP, sockets, pipes) • DLLs y módulos cargados en memoria • Artefactos de malware (inyecciones de código, hooks) • Credenciales y contraseñas en texto plano • Comandos ejecutados recientemente • Archivos abiertos y ventanas activas • Contenido de la pantalla (capturas de pantalla)

¿Por qué forense de memoria? El análisis de memoria es una de las técnicas más poderosas en respuesta a incidentes. Muchas amenazas modernas (fileless malware, rootkits, in-memory exploits) no dejan rastro en disco. La memoria volátil es la única evidencia de su existencia.

Formatos soportados: • .raw (captura RAW de memoria) • .vmem (VMware) • .vbox (VirtualBox) • .elf (QEMU/KVM) • .dmp (crash dumps de Windows)

Plugins esenciales: • windows.pslist / windows.psscan: listado de procesos • windows.netscan / windows.netstat: conexiones de red • windows.handles: objetos abiertos por procesos • windows.cmdline: comandos ejecutados • windows.filescan / windows.dumpfiles: archivos en memoria • windows.hashdump / windows.lsadump: credenciales • malfind: detección de código inyectado

bash
# ── INSTALACIÓN ───────────────────────────────────────
# Volatility 3 (Python 3, última versión estable)
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
pip install -r requirements.txt

# Verificar instalación
python vol.py --help
python vol.py --info | head -20

# ── IDENTIFICAR EL PERFIL DE LA MEMORIA ───────────────
# El profile indica la versión exacta del SO para interpretar correctamente
python vol.py -f imagen.raw windows.info

# ── LISTADO DE PROCESOS ────────────────────────────────
python vol.py -f imagen.raw windows.pslist
python vol.py -f imagen.raw windows.psscan    # Detecta procesos ocultos
python vol.py -f imagen.raw windows.pstree    # Árbol de procesos

# ── CONEXIONES DE RED ──────────────────────────────────
python vol.py -f imagen.raw windows.netscan
python vol.py -f imagen.raw windows.netstat   # Conexiones activas

# ── COMANDOS EJECUTADOS ────────────────────────────────
python vol.py -f imagen.raw windows.cmdline
python vol.py -f imagen.raw windows.consoles

# ── ARCHIVOS EN MEMORIA ────────────────────────────────
python vol.py -f imagen.raw windows.filescan | head -30
python vol.py -f imagen.raw windows.dumpfiles --pid 1234 --dump-dir ./output/

# ── CREDENCIALES ───────────────────────────────────────
python vol.py -f imagen.raw windows.hashdump
python vol.py -f imagen.raw windows.lsadump

💡Si volatility3 no encuentra el profile, intenta con volatility2: volatility -f imagen.raw --profile=Win7SP1x64 pslist. La versión 2 sigue siendo más utilizada en producción por su mayor soporte de profiles.

Detección de malware y anomalías

Identificar procesos sospechosos y código malicioso

El verdadero poder de Volatility está en detectar amenazas que evaden los controles tradicionales. Aquí aprenderás a identificar procesos sospechosos, código inyectado y artefactos de rootkits.

Señales de alerta en procesos: • Proceso con PID inusual (e.g., PID 0 como hijo de otro proceso) • Proceso sin nombre o con nombre genérico (svchost.exe con路径 incorrecta) • Proceso con más DLLs de las normales • Proceso con código ejecutable en regions inusuales (heap, stack) • Proceso padre inesperado (e.g., word.exe spawns cmd.exe)

Detección de inyección de código: malfind es el plugin más importante para detectar amenazas. Busca regiones de memoria con permisos de ejecución que contienen código sospechoso (PAYLOAD, detecta patrones de inyección típicos).

Análisis de rootkits: • Comparar pslist vs psscan: si un proceso aparece en psscan pero no en pslist, está oculto • Comparar netscan vs netstat: conexiones ocultas • Usar dlllist para ver DLLs inusuales cargadas por procesos

bash
# ── MALFIND: DETECCIÓN DE CÓDIGO INYECTADO ───────────
python vol.py -f imagen.raw windows.malfind

# ── COMPARAR PROCESOS NORMALES VS OCULTOS ──────────────
# Procesos normales (desde EPROCESS)
python vol.py -f imagen.raw windows.pslist > pslist.txt
# Procesos ocultos (búsqueda en memoria cruda)
python vol.py -f imagen.raw windows.psscan > psscan.txt

# Diferencias = posibles rootkits
diff pslist.txt psscan.txt

# ── DLLS CARGADAS POR PROCESOS SOSPECHOSOS ────────────
python vol.py -f imagen.raw windows.dlllist --pid 1234
python vol.py -f imagen.raw windows.dlllist --pid 1234 | grep -i "temp|appdata|downloads"

# ── HANDLES Y MUTEX (detectar malware que usa mutex) ──
python vol.py -f imagen.raw windows.handles --pid 1234
python vol.py -f imagen.raw windows.handles --pid 1234 | grep -i "mutex|event"

# ── ARCHIVOS RECIENTES (LNK, Jump Lists) ──────────────
python vol.py -f imagen.raw windows.filescan | grep -i "recent|lnk|jump"

# ── CAPTURA DE PANTALLA ────────────────────────────────
python vol.py -f imagen.raw windows.screenshot --dump-dir ./screenshots/

# ── PROCESO ESPECÍFICO: DUMPEAR MEMORIA ────────────────
# Extraer la memoria de un proceso sospechoso para análisis estático
python vol.py -f imagen.raw windows.memmap --pid 1234 --dump-dir ./proc_mem/

💡Cuando encuentres un proceso sospechoso con malfind, extrae su memoria con memmap y analízala con YARA rules ostrings para encontrar patrones maliciosos.

Recuperación de evidencia y análisis de red

Extraer archivos, conexiones y artefactos de red

La memoria contiene una cantidad sorprendente de evidencia de red y archivos que no están en disco. Aquí verás cómo recuperar artefactos de red y archivos eliminados.

Evidencia de red en memoria: • Conexiones TCP/UDP activas al momento de la captura • Historial de conexiones (con procesos asociados) • DNS cache (resoluciones recientes) • Sockets abiertos por procesos • Pipes anónimos y con nombre (comunicación entre procesos)

Archivos en memoria: • Archivos abiertos por procesos (incluso si se borraron del disco) • Contenido de archivos PDF, DOC, imágenes • Registros del registro de Windows (hive files) • Prefetch files y shellbags

Uso en investigación forense: Cuando un sospechoso borra evidencia del disco, la memoria puede contener copias. Volatility puede extraer archivos directamente de la memoria RAM.

bash
# ── CONEXIONES DE RED DETALLADAS ──────────────────────
# Ver qué procesos tienen conexiones activas
python vol.py -f imagen.raw windows.netscan | grep -i "ESTABLISHED|LISTEN"

# ── DNS CACHE ──────────────────────────────────────────
# Las resoluciones DNS recientes están en memoria
python vol.py -f imagen.raw windows.netscan | grep ":53"

# ── DUMPEAR ARCHIVOS DE MEMORIA ────────────────────────
# Extraer todos los archivos encontrados en memoria
python vol.py -f imagen.raw windows.filescan --dump-dir ./archivos/

# Buscar archivos específicos
python vol.py -f imagen.raw windows.filescan | grep -i ".pdf|.doc|.xlsx|.zip"
python vol.py -f imagen.raw windows.dumpfiles --physaddr 0x12345678 --dump-dir ./archivos/

# ── REGISTRO DE WINDOWS ────────────────────────────────
# Extraer hives del registro (SAM, SYSTEM, SOFTWARE, SECURITY)
python vol.py -f imagen.raw windows.registry.hivelist
python vol.py -f imagen.raw windows.registry.dumpkey --key "Software\Microsoft\Windows\CurrentVersion\Run" --dump-dir ./reg/

# ── PREFETCH FILES ─────────────────────────────────────
python vol.py -f imagen.raw windows.filescan | grep -i "prefetch"

# ── PROCESOS CON CONEXIONES DE RED ─────────────────────
# Cruzar procesos con sus conexiones activas
python vol.py -f imagen.raw windows.netscan -p | grep -v "0.0.0.0|127.0.0.1"

💡Para análisis forense completo, captura la memoria ANTES de apagar la máquina. Usa herramientas como WinPmem o LiME para crear la imagen de memoria sin alterar el sistema.

Automatización y reportes forenses

Scripts de análisis y generación de evidencia

En entornos profesionales, el análisis de memoria debe ser reproducible y documentado. Aquí aprenderás a automatizar análisis y generar reportes forenses.

Principios de cadena de custodia:

  1. Documentar quién, cuándo y cómo se adquirió la imagen
  2. Calcular hash (MD5/SHA256) de la imagen原始
  3. Análisis con herramientas validadas
  4. Documentar cada paso y hallazgo
  5. Almacenar evidencia de forma segura

Automatización: • Scripts que ejecutan múltiples plugins • Comparación de resultados contra bases de datos de malware • Generación de reportes en HTML/JSON • Integración con plataformas de respuesta a incidentes

Reporte forense típico:

  1. Resumen ejecutivo (qué se encontró)
  2. Metodología (cómo se adquirió y analizó)
  3. Hallazgos detallados (con evidencia)
  4. Conclusiones y recomendaciones
  5. Anexos (logs, hashes, chain of custody)
bash
#!/bin/bash
# ── SCRIPT DE ANÁLISIS FORENSE AUTOMATIZADO ──────────
# Analiza una imagen de memoria y genera reporte HTML

IMAGE="$1"
OUTPUT_DIR="./forensic_report_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$OUTPUT_DIR"

echo "=== ANÁLISIS FORENSE DE MEMORIA ==="
echo "Imagen: $IMAGE"
echo "Fecha: $(date)"
echo ""

# 1. Hash de la imagen原始
echo "[1/7] Calculando hash de la imagen..."
md5sum "$IMAGE" > "$OUTPUT_DIR/original_hash.txt"
sha256sum "$IMAGE" >> "$OUTPUT_DIR/original_hash.txt"

# 2. Información del sistema
echo "[2/7] Identificando sistema operativo..."
python vol.py -f "$IMAGE" windows.info > "$OUTPUT_DIR/system_info.txt"

# 3. Listado de procesos
echo "[3/7] Analizando procesos..."
python vol.py -f "$IMAGE" windows.pslist > "$OUTPUT_DIR/processes_list.txt"
python vol.py -f "$IMAGE" windows.psscan > "$OUTPUT_DIR/processes_scan.txt"
python vol.py -f "$IMAGE" windows.pstree > "$OUTPUT_DIR/processes_tree.txt"

# 4. Conexiones de red
echo "[4/7] Analizando conexiones de red..."
python vol.py -f "$IMAGE" windows.netscan > "$OUTPUT_DIR/network_connections.txt"

# 5. Comandos ejecutados
echo "[5/7] Extrayendo comandos ejecutados..."
python vol.py -f "$IMAGE" windows.cmdline > "$OUTPUT_DIR/commands_executed.txt"

# 6. Detección de malware
echo "[6/7] Buscando código inyectado..."
python vol.py -f "$IMAGE" windows.malfind > "$OUTPUT_DIR/malicious_injections.txt"

# 7. Credenciales
echo "[7/7] Extrayendo credenciales..."
python vol.py -f "$IMAGE" windows.hashdump > "$OUTPUT_DIR/password_hashes.txt" 2>/dev/null

# Generar resumen
echo "=== RESUMEN DEL ANÁLISIS ===" > "$OUTPUT_DIR/SUMMARY.txt"
echo "Fecha: $(date)" >> "$OUTPUT_DIR/SUMMARY.txt"
echo "Imagen: $IMAGE" >> "$OUTPUT_DIR/SUMMARY.txt"
echo "Hash MD5: $(md5sum $IMAGE | awk '{print $1}')" >> "$OUTPUT_DIR/SUMMARY.txt"
echo "" >> "$OUTPUT_DIR/SUMMARY.txt"
echo "Procesos totales: $(wc -l < $OUTPUT_DIR/processes_list.txt)" >> "$OUTPUT_DIR/SUMMARY.txt"
echo "Conexiones de red: $(wc -l < $OUTPUT_DIR/network_connections.txt)" >> "$OUTPUT_DIR/SUMMARY.txt"
echo "Comandos ejecutados: $(wc -l < $OUTPUT_DIR/commands_executed.txt)" >> "$OUTPUT_DIR/SUMMARY.txt"
echo "Inyecciones sospechosas: $(wc -l < $OUTPUT_DIR/malicious_injections.txt)" >> "$OUTPUT_DIR/SUMMARY.txt"
echo "Credenciales extraídas: $(wc -l < $OUTPUT_DIR/password_hashes.txt)" >> "$OUTPUT_DIR/SUMMARY.txt"

echo ""
echo "Análisis completado. Resultados en: $OUTPUT_DIR/"
cat "$OUTPUT_DIR/SUMMARY.txt"

💡Siempre trabaja sobre una COPIA de la imagen, nunca sobre el原始. Calcula el hash antes y después para verificar integridad.

Labs Prácticos

Básico 30 min

Lab 1: Análisis forense básico de memoria

Objetivo

Analizar una imagen de memoria para identificar procesos, conexiones de red y artefactos del sistema operativo.

Escenario

Tienes una captura de memoria de una máquina Windows sospechosa de estar comprometida. Necesitas determinar qué procesos estaban ejecutándose, qué conexiones de red había activas y si hay artefactos de malware.

Pasos

1

Identificar el perfil del SO desde la imagen de memoria

2

Listar procesos activos con pslist y comparar con psscan

3

Analizar conexiones de red activas

4

Extraer comandos ejecutados recientemente

5

Generar reporte resumen con hashes de integridad

bash — práctica
# IDENTIFICAR PERFIL DEL SISTEMA
python vol.py -f imagen.raw windows.info | head -20

# LISTAR PROCESOS ACTIVOS
python vol.py -f imagen.raw windows.pslist

# DETECTAR PROCESOS OCULTOS (rootkits)
python vol.py -f imagen.raw windows.pslist > pslist.txt
python vol.py -f imagen.raw windows.psscan > psscan.txt
diff pslist.txt psscan.txt

# ANALIZAR CONEXIONES DE RED
python vol.py -f imagen.raw windows.netscan | grep "ESTABLISHED" | grep -v "127.0.0.1"

# EXTRAER COMANDOS EJECUTADOS
python vol.py -f imagen.raw windows.cmdline | grep -i "powershell\|cmd\|certutil"

# GENERAR REPORTE
echo "=== REPORTE FORENSE ===" > reporte.txt
python vol.py -f imagen.raw windows.pslist >> reporte.txt
python vol.py -f imagen.raw windows.netscan >> reporte.txt
python vol.py -f imagen.raw windows.cmdline >> reporte.txt
md5sum imagen.raw >> reporte.txt

Resultado esperado

Deberías tener un reporte con procesos activos, conexiones de red establecidas y comandos ejecutados. Identificar al menos 3 procesos normales de Windows y posibles anomalías.

Intermedio 40 min

Lab 2: Detección de malware con malfind

Objetivo

Usar Volatility para detectar código inyectado, procesos ocultos y artefactos de malware en una imagen de memoria.

Escenario

Durante el análisis forense de una máquina comprometida, necesitas identificar si hay código malicioso inyectado en procesos legítimos, si algún proceso está oculto y si hay evidencia de persistencia.

Pasos

1

Detectar código inyectado con malfind

2

Comparar pslist vs psscan para procesos ocultos

3

Analizar DLLs cargadas por procesos sospechosos

4

Verificar claves de registro de persistencia

5

Extraer evidencia para análisis estático

bash — práctica
# DETECTAR CÓDIGO INYECTADO
python vol.py -f imagen.raw windows.malfind

# DETECTAR PROCESOS OCULTOS
python vol.py -f imagen.raw windows.pslist > pslist.txt
python vol.py -f imagen.raw windows.psscan > psscan.txt
diff pslist.txt psscan.txt

# ANALIZAR DLLS CARGADAS
python vol.py -f imagen.raw windows.dlllist --pid 1234
python vol.py -f imagen.raw windows.dlllist | grep -i "temp\|appdata\|downloads"

# VERIFICAR PERSISTENCIA EN REGISTRO
python vol.py -f imagen.raw windows.registry.printkey --key "Software\\Microsoft\\Windows\\CurrentVersion\\Run"

# EXTRAER MEMORIA DEL PROCESO SOSPECHOSO
python vol.py -f imagen.raw windows.memmap --pid 1234 --dump-dir ./evidence/
strings ./evidence/*.bin | grep -i "http\|https\|password"

Resultado esperado

Deberías haber detectado al menos una inyección de código con malfind, posibles procesos ocultos, DLLs en ubicaciones sospechosas y evidencia de persistencia en registro.

Aviso legal: Este contenido es estrictamente educativo. CyberFlows no apoya actividades ilegales. Úsalo solo en entornos autorizados.