Volatility - CheatSheet
Reading time: 21 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
Jeśli potrzebujesz narzędzia, które automatyzuje analizę pamięci z różnymi poziomami skanowania i uruchamia wiele wtyczek Volatility3 równolegle, możesz użyć 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
Jeśli chcesz czegoś szybkiego i szalonego, co uruchomi kilka wtyczek Volatility równolegle, możesz użyć: 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)
Instalacja
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
Komendy Volatility
Uzyskaj dostęp do oficjalnej dokumentacji w Volatility command reference
Uwaga na temat wtyczek “list” vs. “scan”
Volatility ma dwa główne podejścia do wtyczek, które czasami są odzwierciedlone w ich nazwach. Wtyczki “list” będą próbować nawigować przez struktury jądra Windows, aby uzyskać informacje takie jak procesy (lokalizowanie i przechodzenie przez powiązaną listę struktur _EPROCESS
w pamięci), uchwyty systemu operacyjnego (lokalizowanie i wyświetlanie tabeli uchwytów, dereferencjonowanie wszelkich znalezionych wskaźników itp.). Zachowują się one mniej więcej tak, jakby to robiło API Windows, gdyby na przykład poprosić o wylistowanie procesów.
To sprawia, że wtyczki “list” są dość szybkie, ale równie podatne na manipulacje przez złośliwe oprogramowanie, jak API Windows. Na przykład, jeśli złośliwe oprogramowanie użyje DKOM, aby odłączyć proces od powiązanej listy _EPROCESS
, nie pojawi się on w Menedżerze zadań, ani w pslist.
Wtyczki “scan”, z drugiej strony, przyjmą podejście podobne do wydobywania pamięci w poszukiwaniu rzeczy, które mogą mieć sens, gdy zostaną dereferencjonowane jako konkretne struktury. psscan
na przykład odczyta pamięć i spróbuje stworzyć obiekty _EPROCESS
z niej (używa skanowania tagów puli, które polega na wyszukiwaniu 4-bajtowych ciągów wskazujących na obecność interesującej struktury). Zaletą jest to, że może wykryć procesy, które zakończyły działanie, a nawet jeśli złośliwe oprogramowanie manipuluje powiązaną listą _EPROCESS
, wtyczka nadal znajdzie strukturę leżącą w pamięci (ponieważ nadal musi istnieć, aby proces mógł działać). Wadą jest to, że wtyczki “scan” są nieco wolniejsze niż wtyczki “list” i czasami mogą dawać fałszywe pozytywy (proces, który zakończył działanie zbyt dawno i miał części swojej struktury nadpisane przez inne operacje).
Z: http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/
Profile systemu operacyjnego
Volatility3
Jak wyjaśniono w readme, musisz umieścić tabelę symboli systemu operacyjnego, który chcesz obsługiwać, w volatility3/volatility/symbols.
Pakiety tabel symboli dla różnych systemów operacyjnych są dostępne do pobrania pod adresem:
- 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
Zewnętrzny profil
Możesz uzyskać listę obsługiwanych profili, wykonując:
./volatility_2.6_lin64_standalone --info | grep "Profile"
Jeśli chcesz użyć nowego profilu, który pobrałeś (na przykład profilu linux), musisz stworzyć gdzieś następującą strukturę folderów: plugins/overlays/linux i umieścić w tym folderze plik zip zawierający profil. Następnie, uzyskaj numer profili używając:
./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żesz pobrać profile dla Linuxa i Maca z https://github.com/volatilityfoundation/profiles
W poprzednim fragmencie możesz zobaczyć, że profil nazywa się LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64
, i możesz go użyć do wykonania czegoś takiego:
./vol -f file.dmp --plugins=. --profile=LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 linux_netscan
Odkryj profil
volatility imageinfo -f file.dmp
volatility kdbgscan -f file.dmp
Różnice między imageinfo a kdbgscan
Stąd: W przeciwieństwie do imageinfo, które po prostu dostarcza sugestie dotyczące profilu, kdbgscan jest zaprojektowane do pozytywnej identyfikacji poprawnego profilu i poprawnego adresu KDBG (jeśli występuje ich wiele). Ten plugin skanuje sygnatury KDBGHeader powiązane z profilami Volatility i stosuje kontrole sanity, aby zredukować fałszywe pozytywy. Szczegółowość wyjścia i liczba kontroli sanity, które można przeprowadzić, zależy od tego, czy Volatility może znaleźć DTB, więc jeśli już znasz poprawny profil (lub jeśli masz sugestię profilu z imageinfo), upewnij się, że go używasz.
Zawsze zwracaj uwagę na liczbę procesów, które znalazł kdbgscan. Czasami imageinfo i kdbgscan mogą znaleźć więcej niż jeden odpowiedni profil, ale tylko ważny będzie miał jakieś powiązane procesy (Dzieje się tak, ponieważ do wyodrębnienia procesów potrzebny jest poprawny adres KDBG).
# GOOD
PsActiveProcessHead : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList : 0xfffff8000119aae0 (116 modules)
# BAD
PsActiveProcessHead : 0xfffff800011947f0 (0 processes)
PsLoadedModuleList : 0xfffff80001197ac0 (0 modules)
KDBG
Blok debuggera jądra, określany jako KDBG przez Volatility, jest kluczowy dla zadań kryminalistycznych wykonywanych przez Volatility i różne debugery. Zidentyfikowany jako KdDebuggerDataBlock
i typu _KDDEBUGGER_DATA64
, zawiera istotne odniesienia, takie jak PsActiveProcessHead
. To konkretne odniesienie wskazuje na początek listy procesów, co umożliwia wylistowanie wszystkich procesów, co jest fundamentalne dla dokładnej analizy pamięci.
Informacje o systemie operacyjnym
#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 być użyty w vol3, aby spróbować znaleźć bannery linuxowe w zrzucie.
Hashe/Hasła
Wyodrębnij hashe SAM, pamiętane poświadczenia domeny oraz sekrety 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
Zrzut pamięci
Zrzut pamięci procesu wyciągnie wszystko z bieżącego stanu procesu. Moduł procdump wyciągnie tylko kod.
volatility -f file.dmp --profile=Win7SP1x86 memdump -p 2168 -D conhost/
Procesy
Lista procesów
Spróbuj znaleźć podejrzane procesy (po nazwie) lub nieoczekiwane procesy dzieci (na przykład cmd.exe jako dziecko iexplorer.exe).
Może być interesujące, aby porównać wynik pslist z wynikiem psscan, aby zidentyfikować ukryte procesy.
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)
Zrzut proc
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory
Wiersz poleceń
Czy wykonano coś podejrzanego?
python3 vol.py -f file.dmp windows.cmdline.CmdLine #Display process command-line arguments
Polecenia wykonywane w cmd.exe
są zarządzane przez conhost.exe
(lub csrss.exe
w systemach przed Windows 7). Oznacza to, że jeśli cmd.exe
zostanie zakończone przez atakującego przed uzyskaniem zrzutu pamięci, nadal możliwe jest odzyskanie historii poleceń sesji z pamięci conhost.exe
. Aby to zrobić, jeśli w modułach konsoli wykryto nietypową aktywność, pamięć powiązanego procesu conhost.exe
powinna zostać zrzutowana. Następnie, przeszukując ciągi w tym zrzucie, można potencjalnie wyodrębnić linie poleceń używane w sesji.
Środowisko
Uzyskaj zmienne środowiskowe każdego uruchomionego procesu. Mogą istnieć interesujące wartości.
python3 vol.py -f file.dmp windows.envars.Envars [--pid <pid>] #Display process environment variables
Uprawnienia tokenów
Sprawdź tokeny uprawnień w niespodziewanych usługach.
Może być interesujące, aby wymienić procesy korzystające z niektórego tokena z uprawnieniami.
#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
Sprawdź każdy SSID posiadany przez proces.
Może być interesujące, aby wymienić procesy używające SID z uprawnieniami (oraz procesy używające SID usługi).
./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
Uchwyty
Przydatne do wiedzenia, do których innych plików, kluczy, wątków, procesów... proces ma uchwyt (otworzył)
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
Ciągi per procesy
Volatility pozwala nam sprawdzić, do którego procesu należy ciąg.
strings file.dmp > /tmp/strings.txt
./vol.py -f /tmp/file.dmp windows.strings.Strings --strings-file /tmp/strings.txt
Umożliwia również wyszukiwanie ciągów wewnątrz procesu za pomocą modułu 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 śledzi programy, które uruchamiasz, za pomocą funkcji w rejestrze zwanej UserAssist keys. Te klucze rejestrują, ile razy każdy program został uruchomiony i kiedy był ostatnio uruchamiany.
./vol.py -f file.dmp windows.registry.userassist.UserAssist
Usługi
./vol.py -f file.dmp windows.svcscan.SvcScan #List services
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services
Sieć
./vol.py -f file.dmp windows.netscan.NetScan
#For network info of linux use volatility2
Rejestr hives
Wydrukuj dostępne hives
./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
Uzyskaj wartość
./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion"
Zrzut
#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
System plików
Montowanie
#See vol2
Skanowanie/zrzut
./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
Mistrzowska Tabela Plików
# 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}}
System plików NTFS używa krytycznego komponentu znanego jako master file table (MFT). Ta tabela zawiera przynajmniej jeden wpis dla każdego pliku na woluminie, obejmując również samą MFT. Kluczowe szczegóły dotyczące każdego pliku, takie jak rozmiar, znaczniki czasowe, uprawnienia i rzeczywiste dane, są zawarte w wpisach MFT lub w obszarach zewnętrznych do MFT, ale odniesionych przez te wpisy. Więcej szczegółów można znaleźć w oficjalnej dokumentacji.
Klucze/Certyfikaty SSL
#vol3 allows to search for certificates inside the registry
./vol.py -f file.dmp windows.registry.certificates.Certificates
Złośliwe oprogramowanie
./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
Skanowanie z yara
Użyj tego skryptu, aby pobrać i połączyć wszystkie zasady malware yara z github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Utwórz katalog rules i uruchom go. To stworzy plik o nazwie malware_rules.yar, który zawiera wszystkie zasady yara dla 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
Zewnętrzne wtyczki
Jeśli chcesz używać zewnętrznych wtyczek, upewnij się, że foldery związane z wtyczkami są pierwszym parametrem użytym.
./vol.py --plugin-dirs "/tmp/plugins/" [...]
Autoruns
Pobierz z 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
{{#endtab}}
{{#tab name="vol2"}}
volatility --profile=Win7SP1x86_23418 -f file.dmp symlinkscan
{{#endtab}} {{#endtabs}}
Bash
Możliwe jest odczytanie historii bash z pamięci. Możesz również zrzucić plik .bash_history, ale został on wyłączony, więc ucieszysz się, że możesz użyć tego modułu volatility.
./vol.py -f file.dmp linux.bash.Bash
Oś Czasu
./vol.py -f file.dmp timeLiner.TimeLiner
Sterowniki
./vol.py -f file.dmp windows.driverscan.DriverScan
Pobierz schowek
#Just vol2
volatility --profile=Win7SP1x86_23418 clipboard -f file.dmp
Pobierz historię IE
#Just vol2
volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp
Pobierz tekst z notatnika
#Just vol2
volatility --profile=Win7SP1x86_23418 notepad -f file.dmp
Zrzut ekranu
#Just vol2
volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp
Mistrzowski Rekord Rozruchowy (MBR)
volatility --profile=Win7SP1x86_23418 mbrparser -f file.dmp
Master Boot Record (MBR) odgrywa kluczową rolę w zarządzaniu logicznymi partycjami nośnika, które są strukturalnie zorganizowane w różne file systems. Nie tylko przechowuje informacje o układzie partycji, ale także zawiera kod wykonywalny działający jako boot loader. Ten boot loader albo bezpośrednio inicjuje proces ładowania drugiego etapu systemu operacyjnego (zobacz second-stage boot loader), albo współpracuje z volume boot record (VBR) każdej partycji. Aby uzyskać szczegółowe informacje, zapoznaj się z MBR Wikipedia page.
References
- 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
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.