# Volatility - Hoja de trucos
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro hirviente para los profesionales de la tecnología y la ciberseguridad en todas las disciplinas.
{% embed url="https://www.rootedcon.com/" %}
Si quieres algo **rápido y loco** que lance varios plugins de Volatility en paralelo, puedes usar: [https://github.com/carlospolop/autoVolatility](https://github.com/carlospolop/autoVolatility)
```bash
python autoVolatility.py -f MEMFILE -d OUT_DIRECTORY -e /home/user/tools/volatility/vol.py # It will use the most important plugins (could use a lot of space depending on the size of the memory)
```
## Instalación
### volatility3
```bash
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
python3 setup.py install
python3 vol.py —h
```
### volatility2
{% tabs %}
{% tab title="Método1" %}
#### Comandos básicos
- `volatility2 -f imageinfo`: muestra información sobre la imagen de memoria.
- `volatility2 -f --profile=`: ejecuta un comando en la imagen de memoria con el perfil especificado.
- `volatility2 -f --profile= pslist`: muestra una lista de procesos en la imagen de memoria.
- `volatility2 -f --profile= pstree`: muestra un árbol de procesos en la imagen de memoria.
- `volatility2 -f --profile= psscan`: muestra una lista de procesos en la imagen de memoria, incluyendo procesos ocultos.
- `volatility2 -f --profile= netscan`: muestra una lista de conexiones de red en la imagen de memoria.
- `volatility2 -f --profile= connscan`: muestra una lista de conexiones de red en la imagen de memoria.
- `volatility2 -f --profile= filescan`: muestra una lista de archivos abiertos en la imagen de memoria.
- `volatility2 -f --profile= dlllist`: muestra una lista de DLL cargadas en la imagen de memoria.
- `volatility2 -f --profile= handles`: muestra una lista de handles abiertos en la imagen de memoria.
- `volatility2 -f --profile= getsids`: muestra una lista de SIDs en la imagen de memoria.
- `volatility2 -f --profile= hivelist`: muestra una lista de archivos de registro en la imagen de memoria.
- `volatility2 -f --profile= printkey`: muestra el contenido de una clave de registro en la imagen de memoria.
- `volatility2 -f --profile= dumpregistry`: extrae un archivo de registro de la imagen de memoria.
- `volatility2 -f --profile= malfind`: busca malware en la imagen de memoria.
- `volatility2 -f --profile= apihooks`: muestra una lista de ganchos de API en la imagen de memoria.
- `volatility2 -f --profile= idt`: muestra la tabla de descriptores de interrupción en la imagen de memoria.
- `volatility2 -f --profile= gdt`: muestra la tabla de descriptores globales en la imagen de memoria.
- `volatility2 -f --profile= ldrmodules`: muestra una lista de módulos cargados en la imagen de memoria.
- `volatility2 -f --profile= modscan`: muestra una lista de módulos cargados en la imagen de memoria.
- `volatility2 -f --profile= svcscan`: muestra una lista de servicios en la imagen de memoria.
- `volatility2 -f --profile= printkey`: muestra el contenido de una clave de registro en la imagen de memoria.
- `volatility2 -f --profile= dumpregistry`: extrae un archivo de registro de la imagen de memoria.
- `volatility2 -f --profile= malfind`: busca malware en la imagen de memoria.
- `volatility2 -f --profile= apihooks`: muestra una lista de ganchos de API en la imagen de memoria.
- `volatility2 -f --profile= idt`: muestra la tabla de descriptores de interrupción en la imagen de memoria.
- `volatility2 -f --profile= gdt`: muestra la tabla de descriptores globales en la imagen de memoria.
- `volatility2 -f --profile= ldrmodules`: muestra una lista de módulos cargados en la imagen de memoria.
- `volatility2 -f --profile= modscan`: muestra una lista de módulos cargados en la imagen de memoria.
- `volatility2 -f --profile= svcscan`: muestra una lista de servicios en la imagen de memoria.
#### Análisis de procesos
- `volatility2 -f --profile= pslist`: muestra una lista de procesos en la imagen de memoria.
- `volatility2 -f --profile= pstree`: muestra un árbol de procesos en la imagen de memoria.
- `volatility2 -f --profile= psscan`: muestra una lista de procesos en la imagen de memoria, incluyendo procesos ocultos.
- `volatility2 -f --profile= cmdline`: muestra el comando utilizado para ejecutar un proceso en la imagen de memoria.
- `volatility2 -f --profile= consoles`: muestra una lista de consolas asociadas a procesos en la imagen de memoria.
- `volatility2 -f --profile= dlllist`: muestra una lista de DLL cargadas en la imagen de memoria.
- `volatility2 -f --profile= handles`: muestra una lista de handles abiertos en la imagen de memoria.
- `volatility2 -f --profile= memdump`: extrae el espacio de memoria de un proceso en la imagen de memoria.
- `volatility2 -f --profile= memmap`: muestra un mapa de memoria de un proceso en la imagen de memoria.
- `volatility2 -f --profile= vadinfo`: muestra información sobre los VADs (áreas de asignación de memoria) de un proceso en la imagen de memoria.
- `volatility2 -f --profile= vadtree`: muestra un árbol de los VADs de un proceso en la imagen de memoria.
- `volatility2 -f --profile= vadwalk`: muestra una lista de los VADs de un proceso en la imagen de memoria.
#### Análisis de red
- `volatility2 -f --profile= netscan`: muestra una lista de conexiones de red en la imagen de memoria.
- `volatility2 -f --profile= connscan`: muestra una lista de conexiones de red en la imagen de memoria.
- `volatility2 -f --profile= sockets`: muestra una lista de sockets en la imagen de memoria.
- `volatility2 -f --profile= sockscan`: muestra una lista de sockets en la imagen de memoria.
#### Análisis de archivos
- `volatility2 -f --profile= filescan`: muestra una lista de archivos abiertos en la imagen de memoria.
- `volatility2 -f --profile= dumpfiles`: extrae un archivo de la imagen de memoria.
- `volatility2 -f --profile= handles`: muestra una lista de handles abiertos en la imagen de memoria.
#### Análisis de registro
- `volatility2 -f --profile= hivelist`: muestra una lista de archivos de registro en la imagen de memoria.
- `volatility2 -f --profile= printkey`: muestra el contenido de una clave de registro en la imagen de memoria.
- `volatility2 -f --profile= dumpregistry`: extrae un archivo de registro de la imagen de memoria.
#### Análisis de malware
- `volatility2 -f --profile= malfind`: busca malware en la imagen de memoria.
- `volatility2 -f --profile= apihooks`: muestra una lista de ganchos de API en la imagen de memoria.
#### Análisis de kernel
- `volatility2 -f --profile= idt`: muestra la tabla de descriptores de interrupción en la imagen de memoria.
- `volatility2 -f --profile= gdt`: muestra la tabla de descriptores globales en la imagen de memoria.
#### Análisis de módulos
- `volatility2 -f --profile= ldrmodules`: muestra una lista de módulos cargados en la imagen de memoria.
- `volatility2 -f --profile= modscan`: muestra una lista de módulos cargados en la imagen de memoria.
#### Análisis de servicios
- `volatility2 -f --profile= svcscan`: muestra una lista de servicios en la imagen de memoria.
{% endtab %}
{% endtabs %}
```
Download the executable from https://www.volatilityfoundation.org/26
```
{% endtab %}
{% tab title="Método 2" %}
```bash
git clone https://github.com/volatilityfoundation/volatility.git
cd volatility
python setup.py install
```
{% endtab %}
{% endtabs %}
## Comandos de Volatility
Acceda a la documentación oficial en [Referencia de comandos de Volatility](https://github.com/volatilityfoundation/volatility/wiki/Command-Reference#kdbgscan)
### Una nota sobre los plugins "list" vs "scan"
Volatility tiene dos enfoques principales para los plugins, que a veces se reflejan en sus nombres. Los plugins "list" intentarán navegar a través de las estructuras del kernel de Windows para recuperar información como procesos (ubicar y recorrer la lista vinculada de estructuras `_EPROCESS` en la memoria), manejadores del sistema operativo (ubicar y listar la tabla de manejadores, desreferenciando cualquier puntero encontrado, etc.). Se comportan más o menos como lo haría la API de Windows si se solicita, por ejemplo, listar procesos.
Eso hace que los plugins "list" sean bastante rápidos, pero igual de vulnerables que la API de Windows a la manipulación por parte de malware. Por ejemplo, si el malware utiliza DKOM para desvincular un proceso de la lista vinculada `_EPROCESS`, no aparecerá en el Administrador de tareas ni en la lista de procesos.
Los plugins "scan", por otro lado, tomarán un enfoque similar al tallado de la memoria para cosas que podrían tener sentido cuando se desreferencian como estructuras específicas. `psscan`, por ejemplo, leerá la memoria e intentará hacer objetos `_EPROCESS` de ella (utiliza el escaneo de etiquetas de grupo, que busca cadenas de 4 bytes que indiquen la presencia de una estructura de interés). La ventaja es que puede desenterrar procesos que han salido, e incluso si el malware manipula la lista vinculada `_EPROCESS`, el plugin seguirá encontrando la estructura en la memoria (ya que aún necesita existir para que el proceso se ejecute). La desventaja es que los plugins "scan" son un poco más lentos que los plugins "list" y a veces pueden dar falsos positivos (un proceso que salió hace demasiado tiempo y tuvo partes de su estructura sobrescritas por otras operaciones).
De: [http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/](http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/)
## Perfiles de SO
### Volatility3
Como se explica en el archivo readme, debe colocar la **tabla de símbolos del SO** que desea admitir dentro de _volatility3/volatility/symbols_.\
Los paquetes de tabla de símbolos para los diversos sistemas operativos están disponibles para **descarga** en:
* [https://downloads.volatilityfoundation.org/volatility3/symbols/windows.zip](https://downloads.volatilityfoundation.org/volatility3/symbols/windows.zip)
* [https://downloads.volatilityfoundation.org/volatility3/symbols/mac.zip](https://downloads.volatilityfoundation.org/volatility3/symbols/mac.zip)
* [https://downloads.volatilityfoundation.org/volatility3/symbols/linux.zip](https://downloads.volatilityfoundation.org/volatility3/symbols/linux.zip)
### Volatility2
#### Perfil externo
Puede obtener la lista de perfiles admitidos haciendo:
```bash
./volatility_2.6_lin64_standalone --info | grep "Profile"
```
Si deseas utilizar un **nuevo perfil que has descargado** (por ejemplo, uno de Linux), debes crear en algún lugar la siguiente estructura de carpetas: _plugins/overlays/linux_ y colocar dentro de esta carpeta el archivo zip que contiene el perfil. Luego, obtén el número de perfiles usando:
```bash
./vol --plugins=/home/kali/Desktop/ctfs/final/plugins --info
Volatility Foundation Volatility Framework 2.6
Profiles
--------
LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 - A Profile for Linux CentOS7_3.10.0-123.el7.x86_64_profile x64
VistaSP0x64 - A Profile for Windows Vista SP0 x64
VistaSP0x86 - A Profile for Windows Vista SP0 x86
```
Puedes **descargar perfiles de Linux y Mac** desde [https://github.com/volatilityfoundation/profiles](https://github.com/volatilityfoundation/profiles)
En el fragmento anterior puedes ver que el perfil se llama `LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64`, y puedes usarlo para ejecutar algo como:
```bash
./vol -f file.dmp --plugins=. --profile=LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 linux_netscan
```
#### Descubrir Perfil
```
volatility imageinfo -f file.dmp
volatility kdbgscan -f file.dmp
```
#### **Diferencias entre imageinfo y kdbgscan**
A diferencia de imageinfo, que simplemente proporciona sugerencias de perfil, **kdbgscan** está diseñado para identificar positivamente el perfil correcto y la dirección KDBG correcta (si hay varias). Este complemento escanea las firmas de KDBGHeader vinculadas a los perfiles de Volatility y aplica comprobaciones de integridad para reducir los falsos positivos. La verbosidad de la salida y el número de comprobaciones de integridad que se pueden realizar dependen de si Volatility puede encontrar un DTB, por lo que si ya conoce el perfil correcto (o si tiene una sugerencia de perfil de imageinfo), asegúrese de usarlo (de [aquí](https://www.andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/)).
Siempre eche un vistazo al **número de procesos que kdbgscan ha encontrado**. A veces, imageinfo y kdbgscan pueden encontrar **más de un perfil adecuado**, pero solo el **válido tendrá algo relacionado con procesos** (esto se debe a que se necesita la dirección KDBG correcta para extraer procesos).
```bash
# GOOD
PsActiveProcessHead : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList : 0xfffff8000119aae0 (116 modules)
```
```bash
# BAD
PsActiveProcessHead : 0xfffff800011947f0 (0 processes)
PsLoadedModuleList : 0xfffff80001197ac0 (0 modules)
```
#### KDBG
El **bloque del depurador del kernel** (llamado KdDebuggerDataBlock del tipo \_KDDEBUGGER\_DATA64, o **KDBG** por Volatility) es importante para muchas cosas que Volatility y los depuradores hacen. Por ejemplo, tiene una referencia a PsActiveProcessHead que es la cabeza de lista de todos los procesos necesarios para la lista de procesos.
## Información del sistema operativo
```bash
#vol3 has a plugin to give OS information (note that imageinfo from vol2 will give you OS info)
./vol.py -f file.dmp windows.info.Info
```
El plugin `banners.Banners` puede ser utilizado en **vol3 para intentar encontrar banners de linux** en el volcado.
## Hashes/Contraseñas
Extraer hashes SAM, credenciales en caché del dominio y secretos de LSA.
```bash
./vol.py -f file.dmp windows.hashdump.Hashdump #Grab common windows hashes (SAM+SYSTEM)
./vol.py -f file.dmp windows.cachedump.Cachedump #Grab domain cache hashes inside the registry
./vol.py -f file.dmp windows.lsadump.Lsadump #Grab lsa secrets
```
{% endtab %}
{% tab title="volatility-cheatsheet.md" %}
# Volatility Cheatsheet
## Volatility Installation
### Linux
```bash
sudo apt-get install volatility
```
### Windows
Download the latest version from the [official website](https://www.volatilityfoundation.org/releases).
## Volatility Usage
### Basic Commands
```bash
volatility -f imageinfo
volatility -f pslist
volatility -f pstree
volatility -f psscan
volatility -f netscan
volatility -f connscan
volatility -f sockets
volatility -f filescan
volatility -f hivelist
volatility -f hivedump -o -s -f
volatility -f printkey -K
volatility -f dumpregistry -o -s -k -f
volatility -f malfind
volatility -f apihooks
volatility -f ldrmodules
volatility -f modscan
volatility -f getsids
volatility -f getservicesids
volatility -f handles
volatility -f mutantscan
volatility -f driverirp
volatility -f devicetree
volatility -f callbacks
volatility -f idt
volatility -f gdt
volatility -f ssdt
volatility -f driverscan
volatility -f fileinfo -F
volatility -f dumpfiles -Q -D
volatility -f memdump -p -D
volatility -f memdump -b -e -D
volatility -f memdump -o -s -D
```
### Advanced Commands
```bash
volatility -f --profile=
```
### Plugins
#### Malware Analysis
```bash
volatility -f malfind
volatility -f malfind -Y
volatility -f malfind -D
volatility -f malfind -p
volatility -f malfind -u
volatility -f malfind -U
volatility -f malfind -Y -D
volatility -f malfind -Y -p
volatility -f malfind -Y -u
volatility -f malfind -Y -U
volatility -f malfind -D -p
volatility -f malfind -D -u
volatility -f malfind -D -U
volatility -f malfind -p -u
volatility -f malfind -p -U
volatility -f malfind -u -U
volatility -f malfind -Y -D -p
volatility -f malfind -Y -D -u
volatility -f malfind -Y -D -U
volatility -f malfind -Y -p -u
volatility -f malfind -Y -p -U
volatility -f malfind -Y -u -U
```
#### Registry Analysis
```bash
volatility -f hivelist
volatility -f hivedump -o -s -f
volatility -f printkey -K
volatility -f dumpregistry -o -s -k -f
```
#### File Analysis
```bash
volatility -f filescan
volatility -f filescan -S
volatility -f filescan -F
volatility -f dumpfiles -Q -D
volatility -f dumpfiles -Q -D -n
volatility -f dumpfiles -Q -D -u
volatility -f dumpfiles -Q -D -U
volatility -f dumpfiles -Q -D -n -u
volatility -f