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
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.
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/
# 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
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
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:
- 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
Profilo Esterno
Puoi ottenere l'elenco dei profili supportati eseguendo:
./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:
./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:
./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).
# GOOD
PsActiveProcessHead : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList : 0xfffff8000119aae0 (116 modules)
# 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
#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.
./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.
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
./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?
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.
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.
#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).
./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)
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
String per processi
Volatility ci consente di controllare a quale processo appartiene una stringa.
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:
./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.
./vol.py -f file.dmp windows.registry.userassist.UserAssist
Servizi
./vol.py -f file.dmp windows.svcscan.SvcScan #List services
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services
Rete
./vol.py -f file.dmp windows.netscan.NetScan
#For network info of linux use volatility2
Registro hives
Stampa hives disponibili
./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
./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion"
Dump
#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
#See vol2
Scans/dump
./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
# I couldn't find any plugin to extract this information in volatility3
{{#endtab}}
{{#tab name="vol2"}}
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
#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}}
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.
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.
./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
Symlinks
./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
./vol.py -f file.dmp timeLiner.TimeLiner
Driver
./vol.py -f file.dmp windows.driverscan.DriverScan
Ottieni appunti
#Just vol2
volatility --profile=Win7SP1x86_23418 clipboard -f file.dmp
Ottieni la cronologia di IE
#Just vol2
volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp
Ottieni testo da notepad
#Just vol2
volatility --profile=Win7SP1x86_23418 notepad -f file.dmp
Screenshot
#Just vol2
volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp
Master Boot Record (MBR)
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
- 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
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
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.