Memory Forensics – Windows Arbeitsspeicher auswerten mit Volatility

Memory-Image erstellen

Um von einem Windows-Rechner ein Memory Image zu erstellen, stehen einem eine grosse Auswahl an Werkzeugen zur Verfügung. Profitools können sogar über Netzwerkschnittstellen RAM dumpen. Zum experimentieren reichen allerdings Tools wie WinPMEM oder RamCapturer. Die Downloadlinks finden sich am Ende dieses Beitrags.

Als einfachste Methode ruft man das Programm WinPMEM wie folgt aus der Kommandozeile (mit Administrationsberechtigung) auf:

winpmem_1.6.0.exe memory.raw

Auswertung mithilfe von Volatility

Das zuvor erstellte Image kann nun (auch auf einem anderen Rechner, bspw. unter Kali-Linux) mit Volatility ausgewertet werden.

Volatility starten und Infos zum Image ausgeben

Unter Kali-Linux lässt sich das Memory-Analysetool normalerweise per Befehl vol direkt im Terminal aufrufen.

Sollte dies nicht klappen, kann das Python Script per sudo find / -name vol.py ausfindig gemacht und per python vol.py gestartet werden.

vol -f /pfad/zu/memory.raw imageinfo

Ein standalone Executable für Windows kann im Google Repository von Volatility heruntergeladen und wie folgt aufgerufen werden:

C:\vol>volatility-2.3.1.standalone.exe -f C:\pfad\zu\memory.raw imageinfo

Das Plugin imageinfo liefert allgemeine Infos zum System, unter welchem das Image erstellt wurde. Diese Infos brauchen wir zwingend für die nächsten Schritte. Bsp.:

imageinfo

Einige Beispiele

Gibt man Volatility das richtige Systemprofil mit, lassen sich automatisiert sehr detaillierte Infos auslesen. Das richtige Systemprofil entnehmen wir aus der oben genannten Abfrage bzw. aus der mit vol –info generierten Liste.

Nun kann man das Image mit den entsprechenden Plugins auf die gewünschten Informationen filtern. Eine Auflistung aller Plugins kann mit vol –help ausgegeben werden. Eine Befehlsreferenz mit guten Beispielen findet sich auch im Wiki von Volatility.

Beispiel 1: Prozesse ausgeben

vol -f /home/kali/memory.raw --profile=Win7SP1x86 pslist

pslist

Beispiel 2: Netzwerkverbindungen ausgeben

vol -f /home/kali/memory.raw --profile=Win7SP1x86 netscan

netscan

In der ungekürzten Ausgabe konnte ich auch sehen, dass ich zum Zeitpunkt des Images mit meinem Raspberry Pi zu Hause verbunden und bei meinem Google-Mailkonto angemeldet war 😉

Beispiel 3: Windows Passwörter auslesen

Das Hashdump-Plugin benötigt die Startadressen der Registryeinträge \REGISTRY\MACHINE\SYSTEM und \SystemRoot\System32\Config\SAM. Diese können mit dem Hivelist-Plugin ausgegeben werden:

vol -f /home/kali/memory.raw --profile=Win7SP1x86 hivelist

Nun kann das Hashdump-Plugin mit den entsprechenden Startadressen gestartet werden (-y = \SYSTEM, -s = \SAM):

vol -f /home/kali/memory.raw --profile=Win7SP1x86 hashdump -y 0x8d81b5a0 -s 0x8e1f89c8

hashdump

Weiterführende Links und Downloads

Download WinPMEM: http://www.rekall-forensic.com/downloads.html
Download RamCapturer (64bit): http://forensic.belkasoft.com/download/ram/RamCapturer64.zip
Download RamCapturer (32bit): http://forensic.belkasoft.com/download/ram/RamCapturer.zip
Download DumpIt: http://www.moonsols.com/…monitor/download.php?id=7

Download Volatility für Windows: https://code.google.com/…me=volatility-2.3.1.standalone.exe

Infos + Video zu DumpIt: http://www.moonsols.com/2011/07/18/moonsols-dumpit-goes-mainstream/
Referenz zu Volatility: https://code.google.com/p/volatility/wiki/CommandReference