Volatility - CheatSheet

Unterstützen Sie HackTricks

​​RootedCON ist die relevanteste Cybersecurity-Veranstaltung in Spanien und eine der wichtigsten in Europa. Mit der Mission, technisches Wissen zu fördern, ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersecurity-Profis in jeder Disziplin.

Wenn Sie etwas schnelles und verrücktes wollen, das mehrere Volatility-Plugins parallel ausführt, können Sie verwenden: 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)

Installation

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

Volatility-Befehle

Zugriff auf die offizielle Dokumentation in Volatility-Befehlsreferenz

Eine Anmerkung zu „list“ vs. „scan“ Plugins

Volatility hat zwei Hauptansätze für Plugins, die sich manchmal in ihren Namen widerspiegeln. „list“ Plugins versuchen, durch Windows-Kernel-Strukturen zu navigieren, um Informationen wie Prozesse abzurufen (lokalisieren und die verkettete Liste von _EPROCESS-Strukturen im Speicher durchlaufen), OS-Handles (lokalisieren und die Handle-Tabelle auflisten, alle gefundenen Zeiger dereferenzieren usw.). Sie verhalten sich mehr oder weniger so, wie die Windows-API es tun würde, wenn sie beispielsweise aufgefordert wird, Prozesse aufzulisten.

Das macht „list“ Plugins ziemlich schnell, aber ebenso anfällig für Manipulationen durch Malware wie die Windows-API. Wenn Malware beispielsweise DKOM verwendet, um einen Prozess von der _EPROCESS-verketteten Liste zu trennen, wird er im Task-Manager nicht angezeigt und auch nicht in der pslist.

„scan“ Plugins hingegen verfolgen einen Ansatz, der dem Carving des Speichers ähnelt, um Dinge zu finden, die sinnvoll erscheinen, wenn sie als spezifische Strukturen dereferenziert werden. psscan wird beispielsweise den Speicher lesen und versuchen, _EPROCESS-Objekte daraus zu erstellen (es verwendet Pool-Tag-Scanning, das nach 4-Byte-Strings sucht, die auf das Vorhandensein einer interessanten Struktur hinweisen). Der Vorteil ist, dass es Prozesse finden kann, die beendet wurden, und selbst wenn Malware mit der _EPROCESS-verketteten Liste manipuliert, wird das Plugin die Struktur, die im Speicher liegt, immer noch finden (da sie weiterhin existieren muss, damit der Prozess ausgeführt werden kann). Der Nachteil ist, dass „scan“ Plugins etwas langsamer sind als „list“ Plugins und manchmal falsch-positive Ergebnisse liefern können (ein Prozess, der zu lange beendet wurde und Teile seiner Struktur von anderen Operationen überschrieben wurden).

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

OS-Profile

Volatility3

Wie im Readme erklärt, müssen Sie die Symboltabelle des OS, das Sie unterstützen möchten, in volatility3/volatility/symbols einfügen. Symboltabellenpakete für die verschiedenen Betriebssysteme sind zum Download verfügbar unter:

Volatility2

Externes Profil

Sie können die Liste der unterstützten Profile abrufen, indem Sie:

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

Wenn Sie ein neues Profil, das Sie heruntergeladen haben (zum Beispiel ein Linux-Profil) verwenden möchten, müssen Sie an einem Ort die folgende Ordnerstruktur erstellen: plugins/overlays/linux und die ZIP-Datei, die das Profil enthält, in diesen Ordner legen. Dann erhalten Sie die Nummer der Profile mit:

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

Sie können Linux- und Mac-Profile von https://github.com/volatilityfoundation/profiles herunterladen.

Im vorherigen Abschnitt sehen Sie, dass das Profil LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 genannt wird, und Sie können es verwenden, um etwas wie Folgendes auszuführen:

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

Profil entdecken

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

Unterschiede zwischen imageinfo und kdbgscan

Von hier: Im Gegensatz zu imageinfo, das einfach Profilvorschläge bietet, ist kdbgscan darauf ausgelegt, das richtige Profil und die richtige KDBG-Adresse (falls mehrere vorhanden sind) positiv zu identifizieren. Dieses Plugin scannt nach den KDBGHeader-Signaturen, die mit Volatility-Profilen verknüpft sind, und führt Plausibilitätsprüfungen durch, um Fehlalarme zu reduzieren. Die Ausführlichkeit der Ausgabe und die Anzahl der durchgeführten Plausibilitätsprüfungen hängen davon ab, ob Volatility einen DTB finden kann. Wenn Sie also bereits das richtige Profil kennen (oder wenn Sie einen Profilvorschlag von imageinfo haben), stellen Sie sicher, dass Sie es verwenden.

Achten Sie immer auf die Anzahl der Prozesse, die kdbgscan gefunden hat. Manchmal können imageinfo und kdbgscan mehr als ein geeignetes Profil finden, aber nur das gültige wird einige prozessbezogene Informationen haben (Dies liegt daran, dass die korrekte KDBG-Adresse benötigt wird, um Prozesse zu extrahieren).

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

KDBG

Der Kernel-Debugger-Block, der von Volatility als KDBG bezeichnet wird, ist entscheidend für forensische Aufgaben, die von Volatility und verschiedenen Debuggern durchgeführt werden. Identifiziert als KdDebuggerDataBlock und vom Typ _KDDEBUGGER_DATA64, enthält er wesentliche Referenzen wie PsActiveProcessHead. Diese spezifische Referenz verweist auf den Kopf der Prozessliste und ermöglicht die Auflistung aller Prozesse, was für eine gründliche Analyse des Speichers grundlegend ist.

OS-Informationen

#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

Der Plugin banners.Banners kann in vol3 verwendet werden, um nach Linux-Bannern im Dump zu suchen.

Hashes/Passwörter

Extrahiere SAM-Hashes, domain cached credentials und lsa secrets.

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

Der Memory Dump eines Prozesses wird alles aus dem aktuellen Status des Prozesses extrahieren. Das procdump-Modul wird nur den Code extrahieren.

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

​​​RootedCON ist die relevanteste Cybersecurity-Veranstaltung in Spanien und eine der wichtigsten in Europa. Mit der Mission, technisches Wissen zu fördern, ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersecurity-Profis in jeder Disziplin.

Prozesse

Prozesse auflisten

Versuchen Sie, verdächtige Prozesse (nach Namen) oder unerwartete Kind Prozesse (zum Beispiel ein cmd.exe als Kind von iexplorer.exe) zu finden. Es könnte interessant sein, das Ergebnis von pslist mit dem von psscan zu vergleichen, um versteckte Prozesse zu identifizieren.

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

Befehlszeile

Wurde etwas Verdächtiges ausgeführt?

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

Befehle, die in cmd.exe ausgeführt werden, werden von conhost.exe (oder csrss.exe auf Systemen vor Windows 7) verwaltet. Das bedeutet, dass, wenn cmd.exe von einem Angreifer beendet wird, bevor ein Memory-Dump erstellt wird, es dennoch möglich ist, den Befehlsverlauf der Sitzung aus dem Speicher von conhost.exe wiederherzustellen. Um dies zu tun, sollte der Speicher des zugehörigen conhost.exe Prozesses gedumpt werden, wenn ungewöhnliche Aktivitäten innerhalb der Module der Konsole festgestellt werden. Anschließend können durch die Suche nach strings innerhalb dieses Dumps möglicherweise die in der Sitzung verwendeten Befehlszeilen extrahiert werden.

Umgebung

Holen Sie sich die Umgebungsvariablen jedes laufenden Prozesses. Es könnten einige interessante Werte vorhanden sein.

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

Tokenprivilegien

Überprüfen Sie die privilegierten Tokens in unerwarteten Diensten. Es könnte interessant sein, die Prozesse aufzulisten, die ein privilegiertes Token verwenden.

#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

Überprüfen Sie jede SSID, die von einem Prozess besessen wird. Es könnte interessant sein, die Prozesse aufzulisten, die eine privilegierte SID verwenden (und die Prozesse, die eine Dienst-SID verwenden).

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

Nützlich zu wissen, auf welche anderen Dateien, Schlüssel, Threads, Prozesse... ein Prozess einen Handle hat (geöffnet hat)

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

Strings pro Prozesse

Volatility ermöglicht es uns zu überprüfen, zu welchem Prozess ein String gehört.

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

Es ermöglicht auch, nach Strings innerhalb eines Prozesses mit dem yarascan-Modul zu suchen:

./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 verfolgt die Programme, die Sie ausführen, mithilfe einer Funktion in der Registrierung namens UserAssist-Schlüssel. Diese Schlüssel zeichnen auf, wie oft jedes Programm ausgeführt wird und wann es zuletzt gestartet wurde.

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

​​​​RootedCON ist die relevanteste Cybersecurity-Veranstaltung in Spanien und eine der wichtigsten in Europa. Mit der Mission, technisches Wissen zu fördern, ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersecurity-Profis in jeder Disziplin.

Dienstleistungen

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

Netzwerk

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

Registry hive

Verfügbare Hives drucken

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

Einen Wert erhalten

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

Dateisystem

Einhängen

#See vol2

Scannen/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

Das NTFS-Dateisystem verwendet eine kritische Komponente, die als Master File Table (MFT) bekannt ist. Diese Tabelle enthält mindestens einen Eintrag für jede Datei auf einem Volume, einschließlich der MFT selbst. Wichtige Details zu jeder Datei, wie Größe, Zeitstempel, Berechtigungen und tatsächliche Daten, sind in den MFT-Einträgen oder in Bereichen außerhalb der MFT, die von diesen Einträgen referenziert werden, enthalten. Weitere Details finden Sie in der offiziellen Dokumentation.

SSL-Schlüssel/Zertifikate

#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

Scannen mit yara

Verwenden Sie dieses Skript, um alle yara-Malware-Regeln von GitHub herunterzuladen und zusammenzuführen: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9 Erstellen Sie das rules-Verzeichnis und führen Sie es aus. Dies erstellt eine Datei namens malware_rules.yar, die alle yara-Regeln für Malware enthält.

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

Externe Plugins

Wenn Sie externe Plugins verwenden möchten, stellen Sie sicher, dass die mit den Plugins verbundenen Ordner das erste verwendete Parameter sind.

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

Autoruns

Laden Sie es von https://github.com/tomchop/volatility-autoruns herunter.

volatility --plugins=volatility-autoruns/ --profile=WinXPSP2x86 -f file.dmp autoruns

Mutexes

./vol.py -f file.dmp windows.mutantscan.MutantScan
./vol.py -f file.dmp windows.symlinkscan.SymlinkScan

Bash

Es ist möglich, aus dem Speicher die Bash-Historie zu lesen. Sie könnten auch die .bash_history Datei dumpen, aber sie wurde deaktiviert, Sie werden froh sein, dass Sie dieses Volatility-Modul verwenden können.

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

Zeitlinie

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

Treiber

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

Zwischenablage abrufen

#Just vol2