RootedCON è l'evento di cybersecurity più rilevante in Spagna e uno dei più importanti in Europa. Con la missione di promuovere la conoscenza tecnica, questo congresso è un punto di incontro vivace per professionisti della tecnologia e della cybersecurity in ogni disciplina.
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)
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, ad esempio, elencare i processi.
Questo rende i plugin “list” piuttosto veloci, ma altrettanto vulnerabili quanto l'API di Windows alla manipolazione 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).
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:
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:
Da qui: A differenza di imageinfo che fornisce semplicemente suggerimenti sui profili, 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 conosci già il profilo corretto (o se hai un suggerimento di profilo da imageinfo), assicurati di usarlo.
Dai sempre un'occhiata al numero di processi che kdbgscan ha trovato. A volte imageinfo e kdbgscan possono trovare più di unprofilo adatto, ma solo il valido avrà alcuni processi correlati (Questo perché per estrarre i processi è necessario l'indirizzo KDBG corretto).
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-ffile.dmpwindows.info.Info
Il plugin banners.Banners può essere utilizzato in vol3 per cercare banner linux nel dump.
./vol.py-ffile.dmpwindows.hashdump.Hashdump#Grab common windows hashes (SAM+SYSTEM)./vol.py-ffile.dmpwindows.cachedump.Cachedump#Grab domain cache hashes inside the registry./vol.py-ffile.dmpwindows.lsadump.Lsadump#Grab lsa secrets
volatility--profile=Win7SP1x86_23418hashdump-ffile.dmp#Grab common windows hashes (SAM+SYSTEM)volatility--profile=Win7SP1x86_23418cachedump-ffile.dmp#Grab domain cache hashes inside the registryvolatility--profile=Win7SP1x86_23418lsadump-ffile.dmp#Grab lsa secrets
Memory Dump
Il memory dump di un processo estrarrà tutto lo stato attuale del processo. Il modulo procdumpestrarrà solo il codice.
RootedCON è l'evento di cybersecurity più rilevante in Spagna e uno dei più importanti in Europa. Con la missione di promuovere la conoscenza tecnica, questo congresso è un punto di incontro vivace per professionisti della tecnologia e della cybersecurity in ogni disciplina.
Processi
Elenco processi
Cerca di trovare processi sospetti (per nome) o processi figlio 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.
python3vol.py-ffile.dmpwindows.pstree.PsTree# Get processes tree (not hidden)python3vol.py-ffile.dmpwindows.pslist.PsList# Get process list (EPROCESS)python3vol.py-ffile.dmpwindows.psscan.PsScan# Get hidden process list(malware)
volatility--profile=PROFILEpstree-ffile.dmp# Get process tree (not hidden)volatility--profile=PROFILEpslist-ffile.dmp# Get process list (EPROCESS)volatility--profile=PROFILEpsscan-ffile.dmp# Get hidden process list(malware)volatility--profile=PROFILEpsxview-ffile.dmp# Get hidden process list
Dump proc
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory
python3vol.py-ffile.dmpwindows.cmdline.CmdLine#Display process command-line arguments
volatility--profile=PROFILEcmdline-ffile.dmp#Display process command-line argumentsvolatility--profile=PROFILEconsoles-ffile.dmp#command history by scanning for _CONSOLE_INFORMATION
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 memory dump, è 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. Quindi, 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.
python3vol.py-ffile.dmpwindows.envars.Envars [--pid <pid>]#Display process environment variables
volatility--profile=PROFILEenvars-ffile.dmp [--pid <pid>]#Display process environment variablesvolatility --profile=PROFILE -f file.dmp linux_psenv [-p <pid>] #Get env of process. runlevel var means the runlevel where the proc is initated
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 processespython3vol.py-ffile.dmpwindows.privileges.Privs [--pid <pid>]#Get all processes with interesting privilegespython3 vol.py -f file.dmp windows.privileges.Privs | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"
#Get enabled privileges of some processesvolatility--profile=Win7SP1x86_23418privs--pid=3152-ffile.dmp|grepEnabled#Get all processes with interesting privilegesvolatility --profile=Win7SP1x86_23418 privs -f file.dmp | 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-ffile.dmpwindows.getsids.GetSIDs [--pid <pid>]#Get SIDs of processes./vol.py-ffile.dmpwindows.getservicesids.GetServiceSIDs#Get the SID of services
volatility--profile=Win7SP1x86_23418getsids-ffile.dmp#Get the SID owned by each processvolatility--profile=Win7SP1x86_23418getservicesids-ffile.dmp#Get the SID of each service
Handles
Utile sapere a quali altri file, chiavi, thread, processi... un processo ha un handle (ha aperto)
./vol.py-ffile.dmpwindows.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
volatility--profile=Win7SP1x86_23418dlllist--pid=3152-ffile.dmp#Get dlls of a procvolatility--profile=Win7SP1x86_23418dlldump--pid=3152--dump-dir=.-ffile.dmp#Dump dlls of a proc
String per processi
Volatility ci consente di controllare a quale processo appartiene una stringa.
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.
RootedCON è l'evento di cybersecurity più rilevante in Spagna e uno dei più importanti in Europa. Con la missione di promuovere la conoscenza tecnica, questo congresso è un punto di incontro vivace per professionisti della tecnologia e della cybersecurity in ogni disciplina.
Servizi
./vol.py-ffile.dmpwindows.svcscan.SvcScan#List services./vol.py-ffile.dmpwindows.getservicesids.GetServiceSIDs#Get the SID of services
#Get services and binary pathvolatility--profile=Win7SP1x86_23418svcscan-ffile.dmp#Get name of the services and SID (slow)volatility--profile=Win7SP1x86_23418getservicesids-ffile.dmp
Rete
./vol.py-ffile.dmpwindows.netscan.NetScan#For network info of linux use volatility2
volatility--profile=Win7SP1x86_23418netscan-ffile.dmpvolatility--profile=Win7SP1x86_23418connections-ffile.dmp#XPand2003onlyvolatility--profile=Win7SP1x86_23418connscan-ffile.dmp#TCPconnectionsvolatility--profile=Win7SP1x86_23418sockscan-ffile.dmp#Opensocketsvolatility--profile=Win7SP1x86_23418sockets-ffile.dmp#Scannerfortcpsocketobjectsvolatility--profile=SomeLinux-ffile.dmplinux_ifconfigvolatility--profile=SomeLinux-ffile.dmplinux_netstatvolatility--profile=SomeLinux-ffile.dmplinux_netfiltervolatility--profile=SomeLinux-ffile.dmplinux_arp#ARP tablevolatility --profile=SomeLinux -f file.dmp linux_list_raw #Processes using promiscuous raw sockets (comm between processes)
volatility--profile=SomeLinux-ffile.dmplinux_route_cache
Registro hives
Stampa hives disponibili
./vol.py-ffile.dmpwindows.registry.hivelist.HiveList#List roots./vol.py-ffile.dmpwindows.registry.printkey.PrintKey#List roots and get initial subkeys
volatility--profile=Win7SP1x86_23418-ffile.dmphivelist#List rootsvolatility--profile=Win7SP1x86_23418-ffile.dmpprintkey#List roots and get initial subkeys
volatility--profile=Win7SP1x86_23418printkey-K"Software\Microsoft\Windows NT\CurrentVersion"-ffile.dmp# Get Run binaries registry valuevolatility-ffile.dmp--profile=Win7SP1x86printkey-o0x9670e9d0-K'Software\Microsoft\Windows\CurrentVersion\Run'
Dump
#Dump a hivevolatility--profile=Win7SP1x86_23418hivedump-o0x9aad6148-ffile.dmp#Offset extracted by hivelist#Dump all hivesvolatility--profile=Win7SP1x86_23418hivedump-ffile.dmp
Filesystem
Mount
#See vol2
volatility--profile=SomeLinux-ffile.dmplinux_mountvolatility--profile=SomeLinux-ffile.dmplinux_recover_filesystem#Dump the entire filesystem (if possible)
Scansione/dump
./vol.py-ffile.dmpwindows.filescan.FileScan#Scan for files inside the dump./vol.py-ffile.dmpwindows.dumpfiles.DumpFiles--physaddr<0xAAAAA>#Offset from previous command
volatility--profile=Win7SP1x86_23418filescan-ffile.dmp#Scan for files inside the dumpvolatility--profile=Win7SP1x86_23418dumpfiles-n--dump-dir=/tmp-ffile.dmp#Dump all filesvolatility--profile=Win7SP1x86_23418dumpfiles-n--dump-dir=/tmp-Q0x000000007dcaa620-ffile.dmpvolatility--profile=SomeLinux-ffile.dmplinux_enumerate_filesvolatility--profile=SomeLinux-ffile.dmplinux_find_file-F/path/to/filevolatility--profile=SomeLinux-ffile.dmplinux_find_file-i0xINODENUMBER-O/path/to/dump/file
Master File Table
# I couldn't find any plugin to extract this information in volatility3
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 entrate MFT o in aree esterne alla MFT ma referenziate da queste entrate. 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
#vol2 allos you to search and dump certificates from memory
#Interesting options for this modules are: --pid, --name, --ssl
volatility --profile=Win7SP1x86_23418 dumpcerts --dump-dir=. -f file.dmp
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
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.
È possibile leggere dalla memoria la cronologia di bash. Potresti anche eseguire il dump del file .bash_history, ma è stato disabilitato, quindi sarai felice di poter utilizzare questo modulo di volatilità.
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 dell'MBR.
RootedCON è l'evento di cybersecurity più rilevante in Spagna e uno dei più importanti in Europa. Con la missione di promuovere la conoscenza tecnica, questo congresso è un punto di incontro fervente per professionisti della tecnologia e della cybersecurity in ogni disciplina.