Volatility - CheatSheet

Reading time: 21 minutes

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

Se hai bisogno di uno strumento che automatizzi l'analisi della memoria con diversi livelli di scansione e esegua più plugin Volatility3 in parallelo, puoi utilizzare autoVolatility3:: https://github.com/H3xKatana/autoVolatility3/

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

Se vuoi qualcosa di veloce e folle che lancerà diversi plugin di Volatility in parallelo, puoi usare: 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)

Installazione

volatility3

bash
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

Comandi di Volatility

Accedi alla documentazione ufficiale in Volatility command reference

Una nota sui plugin “list” vs. “scan”

Volatility ha due approcci principali ai plugin, che a volte si riflettono nei loro nomi. I plugin “list” cercheranno di navigare attraverso le strutture del kernel di Windows per recuperare informazioni come i processi (localizzare e percorrere la lista collegata delle strutture _EPROCESS in memoria), gestori del sistema operativo (localizzare e elencare la tabella dei gestori, dereferenziare eventuali puntatori trovati, ecc.). Si comportano più o meno come farebbe l'API di Windows se richiesto di elencare i processi, ad esempio.

Questo rende i plugin “list” piuttosto veloci, ma altrettanto vulnerabili all'interferenza da parte di malware. Ad esempio, se un malware utilizza DKOM per scollegare un processo dalla lista collegata _EPROCESS, non apparirà nel Task Manager e nemmeno in pslist.

I plugin “scan”, d'altra parte, adotteranno un approccio simile al carving della memoria per cose che potrebbero avere senso quando dereferenziate come strutture specifiche. psscan, ad esempio, leggerà la memoria e cercherà di creare oggetti _EPROCESS da essa (utilizza la scansione dei pool-tag, che cerca stringhe di 4 byte che indicano la presenza di una struttura di interesse). Il vantaggio è che può recuperare processi che sono terminati, e anche se il malware manomette la lista collegata _EPROCESS, il plugin troverà comunque la struttura presente in memoria (poiché deve ancora esistere affinché il processo funzioni). Lo svantaggio è che i plugin “scan” sono un po' più lenti dei plugin “list” e possono talvolta generare falsi positivi (un processo che è terminato troppo tempo fa e ha avuto parti della sua struttura sovrascritte da altre operazioni).

Da: http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/

Profili OS

Volatility3

Come spiegato all'interno del readme, è necessario inserire la tabella dei simboli del sistema operativo che si desidera supportare all'interno di volatility3/volatility/symbols.
I pacchetti della tabella dei simboli per i vari sistemi operativi sono disponibili per download su:

Volatility2

Profilo Esterno

Puoi ottenere l'elenco dei profili supportati eseguendo:

bash
./volatility_2.6_lin64_standalone --info | grep "Profile"

Se vuoi utilizzare un nuovo profilo che hai scaricato (ad esempio uno per linux) devi creare da qualche parte la seguente struttura di cartelle: plugins/overlays/linux e mettere all'interno di questa cartella il file zip contenente il profilo. Poi, ottieni il numero dei profili 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

Puoi scaricare i profili per Linux e Mac da https://github.com/volatilityfoundation/profiles

Nel blocco precedente puoi vedere che il profilo si chiama LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64, e puoi usarlo per eseguire qualcosa come:

bash
./vol -f file.dmp --plugins=. --profile=LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 linux_netscan

Scopri Profilo

volatility imageinfo -f file.dmp
volatility kdbgscan -f file.dmp

Differenze tra imageinfo e kdbgscan

Da qui: A differenza di imageinfo che fornisce semplicemente suggerimenti sul profilo, kdbgscan è progettato per identificare positivamente il profilo corretto e l'indirizzo KDBG corretto (se ce ne sono più di uno). Questo plugin cerca le firme KDBGHeader collegate ai profili di Volatility e applica controlli di sanità per ridurre i falsi positivi. La verbosità dell'output e il numero di controlli di sanità che possono essere eseguiti dipendono dal fatto che Volatility riesca a trovare un DTB, quindi se già conosci il profilo corretto (o se hai un suggerimento di profilo da imageinfo), assicurati di usarlo da .

Dai sempre un'occhiata al numero di processi che kdbgscan ha trovato. A volte imageinfo e kdbgscan possono trovare più di un profilo adatto, ma solo il valido avrà alcuni processi correlati (Questo perché per estrarre i processi è necessario l'indirizzo KDBG corretto).

bash
# GOOD
PsActiveProcessHead           : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList            : 0xfffff8000119aae0 (116 modules)
bash
# BAD
PsActiveProcessHead           : 0xfffff800011947f0 (0 processes)
PsLoadedModuleList            : 0xfffff80001197ac0 (0 modules)

KDBG

Il kernel debugger block, noto come KDBG da Volatility, è cruciale per i compiti forensi eseguiti da Volatility e vari debugger. Identificato come KdDebuggerDataBlock e di tipo _KDDEBUGGER_DATA64, contiene riferimenti essenziali come PsActiveProcessHead. Questo riferimento specifico punta alla testa della lista dei processi, consentendo l'elenco di tutti i processi, fondamentale per un'analisi approfondita della memoria.

OS Information

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

Il plugin banners.Banners può essere utilizzato in vol3 per cercare banner linux nel dump.

Hash/Password

Estrai gli hash SAM, credenziali memorizzate nella cache del dominio e segreti 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

Memory Dump

Il memory dump di un processo estrarrà tutto lo stato attuale del processo. Il modulo procdump estrarrà solo il codice.

volatility -f file.dmp --profile=Win7SP1x86 memdump -p 2168 -D conhost/

Processi

Elenca i processi

Cerca di trovare processi sospetti (per nome) o processi figli inaspettati (ad esempio un cmd.exe come figlio di iexplorer.exe).
Potrebbe essere interessante confrontare il risultato di pslist con quello di psscan per identificare processi nascosti.

bash
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)

Dump proc

bash
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory

Linea di comando

È stato eseguito qualcosa di sospetto?

bash
python3 vol.py -f file.dmp windows.cmdline.CmdLine #Display process command-line arguments

I comandi eseguiti in cmd.exe sono gestiti da conhost.exe (o csrss.exe sui sistemi precedenti a Windows 7). Questo significa che se cmd.exe viene terminato da un attaccante prima che venga ottenuto un dump della memoria, è ancora possibile recuperare la cronologia dei comandi della sessione dalla memoria di conhost.exe. Per fare ciò, se viene rilevata un'attività insolita all'interno dei moduli della console, la memoria del processo associato conhost.exe dovrebbe essere dumpata. Poi, cercando stringhe all'interno di questo dump, le righe di comando utilizzate nella sessione possono potenzialmente essere estratte.

Ambiente

Ottieni le variabili di ambiente di ciascun processo in esecuzione. Potrebbero esserci alcuni valori interessanti.

bash
python3 vol.py -f file.dmp windows.envars.Envars [--pid <pid>] #Display process environment variables

Privilegi dei token

Controlla i token di privilegi in servizi inaspettati.
Potrebbe essere interessante elencare i processi che utilizzano alcuni token privilegiati.

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

Controlla ogni SSID posseduto da un processo.
Potrebbe essere interessante elencare i processi che utilizzano un SID di privilegi (e i processi che utilizzano un SID di servizio).

bash
./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

Handle

Utile sapere a quali altri file, chiavi, thread, processi... un processo ha un handle (ha aperto)

bash
vol.py -f file.dmp windows.handles.Handles [--pid <pid>]

DLLs

bash
./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

String per processi

Volatility ci consente di controllare a quale processo appartiene una stringa.

bash
strings file.dmp > /tmp/strings.txt
./vol.py -f /tmp/file.dmp windows.strings.Strings --strings-file /tmp/strings.txt

Consente anche di cercare stringhe all'interno di un processo utilizzando il modulo yarascan:

bash
./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 tiene traccia dei programmi che esegui utilizzando una funzionalità nel registro chiamata UserAssist keys. Queste chiavi registrano quante volte ogni programma è stato eseguito e quando è stato eseguito l'ultima volta.

bash
./vol.py -f file.dmp windows.registry.userassist.UserAssist

Servizi

bash
./vol.py -f file.dmp windows.svcscan.SvcScan #List services
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services

Rete

bash
./vol.py -f file.dmp windows.netscan.NetScan
#For network info of linux use volatility2

Registro hives

Stampa hives disponibili

bash
./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

Ottieni un valore

bash
./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion"

Dump

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

Filesystem

Mount

bash
#See vol2

Scans/dump

bash
./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

Master File Table

bash
# I couldn't find any plugin to extract this information in volatility3

{{#endtab}}

{{#tab name="vol2"}}

bash
volatility --profile=Win7SP1x86_23418 mftparser -f file.dmp

{{#endtab}} {{#endtabs}}

Il file system NTFS utilizza un componente critico noto come master file table (MFT). Questa tabella include almeno un'entrata per ogni file su un volume, coprendo anche la MFT stessa. Dettagli vitali su ogni file, come dimensione, timestamp, permessi e dati effettivi, sono racchiusi all'interno delle voci MFT o in aree esterne alla MFT ma referenziate da queste voci. Maggiori dettagli possono essere trovati nella documentazione ufficiale.

Chiavi/Certificati SSL

bash
#vol3 allows to search for certificates inside the registry
./vol.py -f file.dmp windows.registry.certificates.Certificates

Malware

bash
./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"}}

bash
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}}

Scanning con yara

Usa questo script per scaricare e unire tutte le regole yara per malware da github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Crea la directory rules ed eseguila. Questo creerà un file chiamato malware_rules.yar che contiene tutte le regole yara per malware.

bash
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

Plugin esterni

Se desideri utilizzare plugin esterni, assicurati che le cartelle relative ai plugin siano il primo parametro utilizzato.

bash
./vol.py --plugin-dirs "/tmp/plugins/" [...]

Autoruns

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

Bash

È possibile leggere dalla memoria la cronologia di bash. Potresti anche eseguire il dump del file .bash_history, ma è stato disabilitato, sarai felice di poter utilizzare questo modulo di volatilità.

./vol.py -f file.dmp linux.bash.Bash

Cronologia

bash
./vol.py -f file.dmp timeLiner.TimeLiner

Driver

./vol.py -f file.dmp windows.driverscan.DriverScan

Ottieni appunti

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 clipboard -f file.dmp

Ottieni la cronologia di IE

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp

Ottieni testo da notepad

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 notepad -f file.dmp

Screenshot

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp

Master Boot Record (MBR)

bash
volatility --profile=Win7SP1x86_23418 mbrparser -f file.dmp

Il Master Boot Record (MBR) gioca un ruolo cruciale nella gestione delle partizioni logiche di un supporto di memorizzazione, che sono strutturate con diversi file systems. Non solo contiene informazioni sul layout delle partizioni, ma include anche codice eseguibile che funge da boot loader. Questo boot loader avvia direttamente il processo di caricamento di secondo livello del sistema operativo (vedi second-stage boot loader) o lavora in armonia con il volume boot record (VBR) di ciascuna partizione. Per una conoscenza approfondita, fare riferimento alla pagina Wikipedia MBR.

Riferimenti

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks