Volatility - CheatSheet

Reading time: 21 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks

Ako vam je potreban alat koji automatizuje analizu memorije sa različitim nivoima skeniranja i pokreće više Volatility3 dodataka paralelno, možete koristiti 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

Ako želite nešto brzo i ludo što će pokrenuti nekoliko Volatility dodataka paralelno, možete koristiti: 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)

Instalacija

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

Volatility komande

Pristupite zvaničnoj dokumentaciji u Volatility command reference

Napomena o “list” vs. “scan” pluginovima

Volatility ima dva glavna pristupa pluginovima, koji se ponekad odražavaju u njihovim imenima. “list” pluginovi će pokušati da navigiraju kroz Windows Kernel strukture kako bi prikupili informacije kao što su procesi (lociranje i prolazak kroz povezanu listu _EPROCESS struktura u memoriji), OS handle-ovi (lociranje i listanje tabele handle-ova, dereferenciranje bilo kojih pronađenih pokazivača, itd). Oni se ponašaju više-manje kao što bi se Windows API ponašao kada bi se, na primer, tražilo da listira procese.

To čini “list” pluginove prilično brzim, ali jednako ranjivim na manipulaciju od strane malvera kao i Windows API. Na primer, ako malver koristi DKOM da unlinkuje proces iz _EPROCESS povezane liste, on se neće prikazati u Task Manager-u, niti u pslist-u.

“scan” pluginovi, s druge strane, će uzeti pristup sličan vađenju podataka iz memorije za stvari koje bi mogle imati smisla kada se dereferenciraju kao specifične strukture. psscan na primer će čitati memoriju i pokušati da napravi _EPROCESS objekte iz nje (koristi skeniranje pool-taga, što je pretraživanje za 4-bajtne stringove koji ukazuju na prisustvo strukture od interesa). Prednost je u tome što može pronaći procese koji su izašli, i čak i ako malver manipuliše _EPROCESS povezanim listama, plugin će i dalje pronaći strukturu koja leži u memoriji (pošto ona i dalje mora postojati da bi proces radio). Nedostatak je što su “scan” pluginovi malo sporiji od “list” pluginova, i ponekad mogu dati lažne pozitivne rezultate (proces koji je izašao previše davno i čiji su delovi strukture prepisani drugim operacijama).

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

OS profili

Volatility3

Kao što je objašnjeno u readme-u, potrebno je staviti tabelu simbola OS-a koji želite da podržite unutar volatility3/volatility/symbols.
Paketi tabela simbola za različite operativne sisteme su dostupni za preuzimanje na:

Volatility2

Spoljni profil

Možete dobiti listu podržanih profila tako što ćete uraditi:

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

Ako želite da koristite novi profil koji ste preuzeli (na primer, linux profil) potrebno je da negde kreirate sledeću strukturu foldera: plugins/overlays/linux i stavite unutar ovog foldera zip fajl koji sadrži profil. Zatim, dobijte broj profila koristeći:

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

Možete preuzeti Linux i Mac profile sa https://github.com/volatilityfoundation/profiles

U prethodnom delu možete videti da se profil zove LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64, i možete ga koristiti za izvršavanje nečega poput:

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

Otkrijte profil

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

Razlike između imageinfo i kdbgscan

Odavde: Za razliku od imageinfo koji jednostavno pruža predloge profila, kdbgscan je dizajniran da pozitivno identifikuje tačan profil i tačnu KDBG adresu (ako ih ima više). Ovaj plugin skenira KDBGHeader potpise povezane sa Volatility profilima i primenjuje provere kako bi smanjio lažne pozitivne rezultate. Opširnost izlaza i broj provera koje se mogu izvršiti zavise od toga da li Volatility može pronaći DTB, tako da ako već znate tačan profil (ili ako imate predlog profila iz imageinfo), obavezno ga koristite.

Uvek obratite pažnju na broj procesa koje je kdbgscan pronašao. Ponekad imageinfo i kdbgscan mogu pronaći više od jednog odgovarajućeg profila, ali samo važeći će imati neki proces povezan (To je zato što je za ekstrakciju procesa potrebna tačna KDBG adresa).

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

KDBG

KDBG, ili kernel debugger block, je ključan za forenzičke zadatke koje obavlja Volatility i razni debuggers. Identifikovan kao KdDebuggerDataBlock i tipa _KDDEBUGGER_DATA64, sadrži bitne reference kao što je PsActiveProcessHead. Ova specifična referenca ukazuje na početak liste procesa, omogućavajući prikazivanje svih procesa, što je osnovno za temeljnu analizu memorije.

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

Plugin banners.Banners može se koristiti u vol3 da pokuša da pronađe linux banere u dump-u.

Hashovi/Lozinke

Izvucite SAM hashove, keširane kredencijale domena i lsa tajne.

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

Memorijski dump procesa će izvući sve iz trenutnog stanja procesa. procdump modul će samo izvući kod.

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

Procesi

Lista procesa

Pokušajte da pronađete sumnjive procese (po imenu) ili neočekivane pod procese (na primer, cmd.exe kao podproces iexplorer.exe).
Može biti zanimljivo uporediti rezultat pslist-a sa onim iz psscan-a kako biste identifikovali skrivene procese.

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

Komandna linija

Da li je izvršeno nešto sumnjivo?

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

Komande izvršene u cmd.exe upravlja conhost.exe (ili csrss.exe na sistemima pre Windows 7). To znači da, ako cmd.exe bude prekinut od strane napadača pre nego što se dobije memorijski dump, još uvek je moguće povratiti istoriju komandi sesije iz memorije conhost.exe. Da bi se to uradilo, ako se otkrije neobična aktivnost unutar modula konzole, memorija povezanog conhost.exe procesa treba da se dumpuje. Zatim, pretraživanjem stringova unutar ovog dump-a, mogu se potencijalno izvući komandne linije korišćene u sesiji.

Okruženje

Dobijte env varijable svakog pokrenutog procesa. Mogu postojati neki zanimljivi vrednosti.

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

Token privilegije

Proverite privilegovane tokene u neočekivanim servisima.
Može biti zanimljivo napraviti spisak procesa koji koriste neki privilegovani token.

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

Proverite svaki SSID koji poseduje proces.
Može biti zanimljivo navesti procese koji koriste SID sa privilegijama (i procese koji koriste neki servisni SID).

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

Handles

Koristan je znati na koje druge datoteke, ključeve, niti, procese... proces ima handle (otvorene su)

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

Stringovi po procesima

Volatility nam omogućava da proverimo kojem procesu pripada string.

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

Takođe omogućava pretragu stringova unutar procesa koristeći yarascan modul:

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 prati programe koje pokrećete koristeći funkciju u registru nazvanu UserAssist ključevi. Ovi ključevi beleže koliko puta je svaki program pokrenut i kada je poslednji put pokrenut.

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

Usluge

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

Mreža

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

Registry hive

Ispis dostupnih hives

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

Dobijanje vrednosti

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

Datotečni sistem

Montiranje

bash
#See vol2

Skener/izbacivanje

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

NTFS datotečni sistem koristi kritičnu komponentu poznatu kao master file table (MFT). Ova tabela uključuje barem jedan unos za svaku datoteku na volumenu, pokrivajući i samu MFT. Vitalni detalji o svakoj datoteci, kao što su veličina, vremenske oznake, dozvole i stvarni podaci, su enkapsulirani unutar MFT unosa ili u oblastima van MFT-a, ali na koje se pozivaju ovi unosi. Više detalja može se naći u official documentation.

SSL Ključevi/Cerifikati

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

Skener sa yara

Koristite ovaj skript za preuzimanje i spajanje svih yara pravila za malver sa github-a: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Kreirajte rules direktorijum i izvršite ga. Ovo će kreirati datoteku pod nazivom malware_rules.yar koja sadrži sva yara pravila za malver.

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

Eksterni dodaci

Ako želite da koristite eksterne dodatke, uverite se da su fascikle povezane sa dodacima prvi parametar koji se koristi.

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

Autoruns

Preuzmite ga sa 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

Simboličke veze

bash
./vol.py -f file.dmp windows.symlinkscan.SymlinkScan

{{#endtab}}

{{#tab name="vol2"}}

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

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

Bash

Moguće je pročitati bash istoriju iz memorije. Takođe možete izvući .bash_history fajl, ali je on onemogućen, bićete srećni što možete koristiti ovaj volatility modul

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

Vremenska Linija

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

Drajveri

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

Uzmite sadržaj iz međuspremnika

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

Dobijanje IE istorije

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

Dobijanje teksta iz beležnice

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

Master Boot Record (MBR) igra ključnu ulogu u upravljanju logičkim particijama skladišnog medija, koje su strukturirane sa različitim file systems. On ne samo da sadrži informacije o rasporedu particija, već takođe sadrži izvršni kod koji deluje kao boot loader. Ovaj boot loader ili direktno pokreće drugi deo procesa učitavanja OS-a (vidi second-stage boot loader) ili radi u harmoniji sa volume boot record (VBR) svake particije. Za detaljno znanje, pogledajte MBR Wikipedia page.

References

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks