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.
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),.dmpoMEMORY.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 constrings. - 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
pstreeenseña qué proceso lanzó a cuál. Fíjate encmd.exeopowershell.execolgando de procesos raros.cmdlineda la línea de comandos de cada proceso: contraseñas pasadas como argumento, rutas de scripts.netscanlista 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.kernelosymbol_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 envolatility3/symbols/.- Los comandos de un tutorial no funcionan: es Volatility 2 (
imageinfo,--profile=Win7SP1x64,vol.py). En la 3 sonwindows.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. pypykatzno 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-Archiveo7z) y bájalo por SMB con Impacket (smbclient) en vez de por HTTP. stringsno encuentra la contraseña: en Windows mucho texto está en UTF-16. Repite constrings -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.