Volatility - CheatSheet

Support HackTricks

​​RootedCON 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 vibrante para profesionales de la tecnología y la ciberseguridad en cada disciplina.

Si quieres algo rápido y loco que lance 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 Referencia de comandos de Volatility

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 a la extracción de 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 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:

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 desde 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 sensatez para reducir los falsos positivos. La verbosidad de la salida y el número de verificaciones de sensatez 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.

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.

Información del SO

#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/

​​​RootedCON 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 vibrante para profesionales de la tecnología y la ciberseguridad en cada disciplina.

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

Handles

Útil saber a qué otros archivos, claves, hilos, procesos... un proceso tiene un handle (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

​​​​RootedCON 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 vibrante para profesionales de la tecnología y la ciberseguridad en cada disciplina.

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 Maestra de Archivos

# 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. Se pueden encontrar más detalles 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

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
./vol.py -f file.dmp windows.symlinkscan.SymlinkScan

Bash

Es posible leer desde la memoria el historial de bash. 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