Volatility - CheatSheet
Reading time: 22 minutes
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.
Si necesitas una herramienta que automatice el análisis de memoria con diferentes niveles de escaneo y ejecute múltiples plugins de Volatility3 en paralelo, puedes usar autoVolatility3:: https://github.com/H3xKatana/autoVolatility3/
# Full scan (runs all plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s full
# Minimal scan (runs a limited set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s minimal
# Normal scan (runs a balanced set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s normal
Si quieres algo rápido y loco que lanzará varios plugins de Volatility en paralelo, puedes usar: https://github.com/carlospolop/autoVolatility
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
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
python3 setup.py install
python3 vol.py —h
volatility2
Download the executable from https://www.volatilityfoundation.org/26
Comandos de Volatility
Accede a la documentación oficial en Volatility command reference
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 (localizar y recorrer la lista enlazada de estructuras _EPROCESS
en memoria), manejadores del SO (localizando y listando 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 le solicitara, por ejemplo, listar procesos.
Eso hace que los plugins “list” sean bastante rápidos, pero igual de vulnerables a la manipulación por malware que la API de Windows. Por ejemplo, si el malware utiliza DKOM para desvincular un proceso de la lista enlazada _EPROCESS
, no aparecerá en el Administrador de Tareas ni en el pslist.
Los plugins “scan”, por otro lado, adoptarán un enfoque similar al carving 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á crear objetos _EPROCESS
a partir de ella (utiliza escaneo de etiquetas de pool, que busca cadenas de 4 bytes que indican la presencia de una estructura de interés). La ventaja es que puede encontrar procesos que han salido, e incluso si el malware manipula la lista enlazada _EPROCESS
, el plugin aún encontrará 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/
Perfiles de SO
Volatility3
Como se explica en el readme, necesitas poner la tabla de símbolos del SO que deseas soportar dentro de volatility3/volatility/symbols.
Los paquetes de tablas 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/mac.zip
- https://downloads.volatilityfoundation.org/volatility3/symbols/linux.zip
Volatility2
Perfil Externo
Puedes obtener la lista de perfiles soportados haciendo:
./volatility_2.6_lin64_standalone --info | grep "Profile"
Si deseas usar un nuevo perfil que has descargado (por ejemplo, uno de linux), necesitas crear en algún lugar la siguiente estructura de carpetas: plugins/overlays/linux y poner dentro de esta carpeta el archivo zip que contiene el perfil. Luego, obtén el número de los perfiles usando:
./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 de 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:
./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
Desde aquí: 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 es que hay múltiples). Este plugin escanea las firmas KDBGHeader vinculadas a los perfiles de Volatility y aplica verificaciones de sanidad para reducir los falsos positivos. La verbosidad de la salida y el número de verificaciones de sanidad que se pueden realizar dependen de si Volatility puede encontrar un DTB, así que si ya conoces el perfil correcto (o si tienes una sugerencia de perfil de imageinfo), asegúrate de usarlo desde .
Siempre revisa el número de procesos que kdbgscan ha encontrado. A veces, imageinfo y kdbgscan pueden encontrar más de uno perfil adecuado, pero solo el válido tendrá algún proceso relacionado (Esto se debe a que para extraer procesos se necesita la dirección KDBG correcta).
# GOOD
PsActiveProcessHead : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList : 0xfffff8000119aae0 (116 modules)
# BAD
PsActiveProcessHead : 0xfffff800011947f0 (0 processes)
PsLoadedModuleList : 0xfffff80001197ac0 (0 modules)
KDBG
El bloque de depuración del núcleo, conocido como KDBG por Volatility, es crucial para las tareas forenses realizadas por Volatility y varios depuradores. Identificado como KdDebuggerDataBlock
y del tipo _KDDEBUGGER_DATA64
, contiene referencias esenciales como PsActiveProcessHead
. Esta referencia específica apunta a la cabeza de la lista de procesos, lo que permite listar todos los procesos, lo cual es fundamental para un análisis exhaustivo de la memoria.
OS Information
#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
se puede usar en vol3 para intentar encontrar banners de linux en el volcado.
Hashes/Contraseñas
Extraer hashes SAM, credenciales en caché de dominio y secretos lsa.
./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
Volcado de Memoria
El volcado de memoria de un proceso extraerá todo el estado actual del proceso. El módulo procdump solo extraerá el código.
volatility -f file.dmp --profile=Win7SP1x86 memdump -p 2168 -D conhost/
Procesos
Listar procesos
Intenta encontrar procesos sospechosos (por nombre) o inesperados procesos hijos (por ejemplo, un cmd.exe como hijo de iexplorer.exe).
Podría ser interesante comparar el resultado de pslist con el de psscan para identificar procesos ocultos.
python3 vol.py -f file.dmp windows.pstree.PsTree # Get processes tree (not hidden)
python3 vol.py -f file.dmp windows.pslist.PsList # Get process list (EPROCESS)
python3 vol.py -f file.dmp windows.psscan.PsScan # Get hidden process list(malware)
Volcado de proc
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory
Línea de comandos
¿Se ejecutó algo sospechoso?
python3 vol.py -f file.dmp windows.cmdline.CmdLine #Display process command-line arguments
Los comandos ejecutados en cmd.exe
son gestionados por conhost.exe
(o csrss.exe
en sistemas anteriores a Windows 7). Esto significa que si cmd.exe
es terminado por un atacante antes de que se obtenga un volcado de memoria, aún es posible recuperar el historial de comandos de la sesión desde la memoria de conhost.exe
. Para hacer esto, si se detecta actividad inusual dentro de los módulos de la consola, se debe volcar la memoria del proceso asociado conhost.exe
. Luego, al buscar strings dentro de este volcado, se pueden extraer potencialmente las líneas de comando utilizadas en la sesión.
Entorno
Obtén las variables de entorno de cada proceso en ejecución. Podría haber algunos valores interesantes.
python3 vol.py -f file.dmp windows.envars.Envars [--pid <pid>] #Display process environment variables
Privilegios de token
Verifique los tokens de privilegios en servicios inesperados.
Podría ser interesante listar los procesos que utilizan algún token privilegiado.
#Get enabled privileges of some processes
python3 vol.py -f file.dmp windows.privileges.Privs [--pid <pid>]
#Get all processes with interesting privileges
python3 vol.py -f file.dmp windows.privileges.Privs | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"
SIDs
Verifique cada SSID propiedad de un proceso.
Podría ser interesante listar los procesos que utilizan un SID de privilegios (y los procesos que utilizan algún SID de servicio).
./vol.py -f file.dmp windows.getsids.GetSIDs [--pid <pid>] #Get SIDs of processes
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services
Manejadores
Útil saber a qué otros archivos, claves, hilos, procesos... un proceso tiene un manejador (ha abierto)
vol.py -f file.dmp windows.handles.Handles [--pid <pid>]
DLLs
./vol.py -f file.dmp windows.dlllist.DllList [--pid <pid>] #List dlls used by each
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory process
Cadenas por procesos
Volatility nos permite verificar a qué proceso pertenece una cadena.
strings file.dmp > /tmp/strings.txt
./vol.py -f /tmp/file.dmp windows.strings.Strings --strings-file /tmp/strings.txt
También permite buscar cadenas dentro de un proceso utilizando el módulo yarascan:
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-rules "https://" --pid 3692 3840 3976 3312 3084 2784
./vol.py -f file.dmp yarascan.YaraScan --yara-rules "https://"
UserAssist
Windows realiza un seguimiento de los programas que ejecutas utilizando una función en el registro llamada UserAssist keys. Estas claves registran cuántas veces se ejecuta cada programa y cuándo fue la última vez que se ejecutó.
./vol.py -f file.dmp windows.registry.userassist.UserAssist
Servicios
./vol.py -f file.dmp windows.svcscan.SvcScan #List services
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services
Red
./vol.py -f file.dmp windows.netscan.NetScan
#For network info of linux use volatility2
Registro de hives
Imprimir hives disponibles
./vol.py -f file.dmp windows.registry.hivelist.HiveList #List roots
./vol.py -f file.dmp windows.registry.printkey.PrintKey #List roots and get initial subkeys
Obtener un valor
./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion"
Volcado
#Dump a hive
volatility --profile=Win7SP1x86_23418 hivedump -o 0x9aad6148 -f file.dmp #Offset extracted by hivelist
#Dump all hives
volatility --profile=Win7SP1x86_23418 hivedump -f file.dmp
Sistema de archivos
Montar
#See vol2
Escaneo/volcado
./vol.py -f file.dmp windows.filescan.FileScan #Scan for files inside the dump
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --physaddr <0xAAAAA> #Offset from previous command
Tabla de Archivos Maestra
# I couldn't find any plugin to extract this information in volatility3
El sistema de archivos NTFS utiliza un componente crítico conocido como la tabla maestra de archivos (MFT). Esta tabla incluye al menos una entrada para cada archivo en un volumen, cubriendo también la MFT. Detalles vitales sobre cada archivo, como tamaño, marcas de tiempo, permisos y datos reales, están encapsulados dentro de las entradas de la MFT o en áreas externas a la MFT pero referenciadas por estas entradas. Más detalles se pueden encontrar en la documentación oficial.
Claves/Certificados SSL
#vol3 allows to search for certificates inside the registry
./vol.py -f file.dmp windows.registry.certificates.Certificates
Malware
./vol.py -f file.dmp windows.malfind.Malfind [--dump] #Find hidden and injected code, [dump each suspicious section]
#Malfind will search for suspicious structures related to malware
./vol.py -f file.dmp windows.driverirp.DriverIrp #Driver IRP hook detection
./vol.py -f file.dmp windows.ssdt.SSDT #Check system call address from unexpected addresses
./vol.py -f file.dmp linux.check_afinfo.Check_afinfo #Verifies the operation function pointers of network protocols
./vol.py -f file.dmp linux.check_creds.Check_creds #Checks if any processes are sharing credential structures
./vol.py -f file.dmp linux.check_idt.Check_idt #Checks if the IDT has been altered
./vol.py -f file.dmp linux.check_syscall.Check_syscall #Check system call table for hooks
./vol.py -f file.dmp linux.check_modules.Check_modules #Compares module list to sysfs info, if available
./vol.py -f file.dmp linux.tty_check.tty_check #Checks tty devices for hooks
{{#endtab}}
{{#tab name="vol2"}}
volatility --profile=Win7SP1x86_23418 -f file.dmp malfind [-D /tmp] #Find hidden and injected code [dump each suspicious section]
volatility --profile=Win7SP1x86_23418 -f file.dmp apihooks #Detect API hooks in process and kernel memory
volatility --profile=Win7SP1x86_23418 -f file.dmp driverirp #Driver IRP hook detection
volatility --profile=Win7SP1x86_23418 -f file.dmp ssdt #Check system call address from unexpected addresses
volatility --profile=SomeLinux -f file.dmp linux_check_afinfo
volatility --profile=SomeLinux -f file.dmp linux_check_creds
volatility --profile=SomeLinux -f file.dmp linux_check_fop
volatility --profile=SomeLinux -f file.dmp linux_check_idt
volatility --profile=SomeLinux -f file.dmp linux_check_syscall
volatility --profile=SomeLinux -f file.dmp linux_check_modules
volatility --profile=SomeLinux -f file.dmp linux_check_tty
volatility --profile=SomeLinux -f file.dmp linux_keyboard_notifiers #Keyloggers
{{#endtab}} {{#endtabs}}
Escaneo con yara
Usa este script para descargar y fusionar todas las reglas de malware de yara desde github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Crea el directorio rules y ejecútalo. Esto creará un archivo llamado malware_rules.yar que contiene todas las reglas de yara para malware.
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
#Only Windows
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-file /tmp/malware_rules.yar
#All
./vol.py -f file.dmp yarascan.YaraScan --yara-file /tmp/malware_rules.yar
MISC
Plugins externos
Si deseas usar plugins externos, asegúrate de que las carpetas relacionadas con los plugins sean el primer parámetro utilizado.
./vol.py --plugin-dirs "/tmp/plugins/" [...]
Autoruns
Descárgalo de https://github.com/tomchop/volatility-autoruns
volatility --plugins=volatility-autoruns/ --profile=WinXPSP2x86 -f file.dmp autoruns
Mutexes
./vol.py -f file.dmp windows.mutantscan.MutantScan
Symlinks
./vol.py -f file.dmp windows.symlinkscan.SymlinkScan
Bash
Es posible leer la historia de bash desde la memoria. También podrías volcar el archivo .bash_history, pero fue deshabilitado, estarás contento de poder usar este módulo de volatilidad.
./vol.py -f file.dmp linux.bash.Bash
Línea de Tiempo
./vol.py -f file.dmp timeLiner.TimeLiner
Controladores
./vol.py -f file.dmp windows.driverscan.DriverScan
Obtener portapapeles
#Just vol2
volatility --profile=Win7SP1x86_23418 clipboard -f file.dmp
Obtener el historial de IE
#Just vol2
volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp
Obtener texto de notepad
#Just vol2
volatility --profile=Win7SP1x86_23418 notepad -f file.dmp
Captura de pantalla
#Just vol2
volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp
Registro de Arranque Maestro (MBR)
volatility --profile=Win7SP1x86_23418 mbrparser -f file.dmp
El Master Boot Record (MBR) juega un papel crucial en la gestión de las particiones lógicas de un medio de almacenamiento, que están estructuradas con diferentes file systems. No solo contiene información sobre el diseño de las particiones, sino que también incluye código ejecutable que actúa como un cargador de arranque. Este cargador de arranque inicia directamente el proceso de carga de segunda etapa del sistema operativo (ver second-stage boot loader) o trabaja en armonía con el volume boot record (VBR) de cada partición. Para un conocimiento más profundo, consulta la MBR Wikipedia page.
References
- https://andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/
- https://scudette.blogspot.com/2012/11/finding-kernel-debugger-block.html
- https://or10nlabs.tech/cgi-sys/suspendedpage.cgi
- https://www.aldeid.com/wiki/Windows-userassist-keys * https://learn.microsoft.com/en-us/windows/win32/fileio/master-file-table
- https://answers.microsoft.com/en-us/windows/forum/all/uefi-based-pc-protective-mbr-what-is-it/0fc7b558-d8d4-4a7d-bae2-395455bb19aa
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.