Auswertung der Virtual Address Descriptors

Microsoft Windows beschreibt die Nutzung des virtuellen Adressraums eines Prozesses mit Hilfe von Virtual Address Descriptors (VAD). Jeder VAD markiert dabei einen zusammenhängenden Adressbereich. Die einzelnen VAD werden in einem ausgeglichenen Baum angeordnet, um einen schnelles Auffinden zu ermöglichen. Die _EPROCESS-Struktur verweist schließlich auf die Wurzel des Baums. Ein Nachbilden der Baumstruktur ermöglicht es, den Adressraum eines Prozesses mitsamt der in den Speicher abgebildeten Dateien zu rekonstruieren. Brendan Dolan-Gavitt wird hierüber auf dem DFRWS 2007 sprechen. Bereits jetzt hat er seine vadtools, einen Satz von Werkzeugen veröffentlicht, die seinen Beitrag ergänzen.

Die Vadtools sind in Python geschrieben und benötigen deshalb einen Python-Interpreter. Die Programme erwarten Speicherabbilder im einfachen "dd"-Format; Windows Crash Dumps (DMP) werden nicht unterstützt.

Der rekonstruierte Baum aus Virtual Address Descriptors.

vadwalk.py rekonstruiert den Baum aus VAD. Es listet die einzelnen Knoten entweder in einer Tabelle, als ASCII-Baum oder als DOT-Datei auf. Aus der DOT-Datei kann dann GraphViz eine grafische Darstellung erzeugen.

Detailansicht der Baumstruktur.

vadinfo.py gibt für jeden einzelnen VAD eine Vielzahl technischer Einzelheiten aus. Das folgende Beispiel zeigt den VAD einer Protokolldatei, die in den Adressraum des Ereignisprotokolls (im Prozess services.exe) abgebildet ist.

>python vadtools\vadinfo.py  dump.bin 0x1051a70
...
VAD node @ffba4560 Start 00a10000 End 00a20000 Level 4 Tag Vad
Flags:
Commit Charge: 0 Protection: 4
ControlArea @811a79d8 Segment e14d0850
Dereference list: Flink 00000000, Blink 00000000
NumberOfSectionReferences:          2 NumberOfPfnReferences:           1
NumberOfMappedViews:                2 NumberOfSubsections:             2
FlushInProgressCount:               0 NumberOfUserReferences:          2
Flags: Accessed, HadUserReference, WasPurged, File
FileObject @811a7740 (01107740), Name: \WINDOWS\system32\config\AppEvent.Evt
WaitingForDeletion Event: 00000000
ModifiedWriteCount:        0 NumberOfSystemCacheViews:        1
First prototype PTE: e15214b8 Last contiguous PTE: e15214f4
Flags2:
File offset: 00000000
..

vaddump.py schreibt den durch jeweils einen VAD beschriebenen Speicherbereich in eine einzelne Datei.

procdump.py stellt einzelne DLL oder EXE-Dateien aus einem Speicherabbild her. Ich musste diese Datei allerdings aus dem "misc" Verzeichnis in das Hauptverzeichnis des Programmpakets kopieren, um es erfolgreich ausführen zu können. Wie im README beschrieben benötigt dieses Programm zusätzlich das Modul pefile.

>python vadtools\procdump.py" -e test.exe dump.bin 0x1051a70
DEBUG: PEB found at 7ffd5000 (67ab000)
DEBUG: Starting section .text
DEBUG: Starting section .data
DEBUG: Starting section .rsrc

listdlls.py zeigt alle DLL an, die ein Prozess geladen hat. Auch dieses Programm musste ich aus dem "misc" Verzeichnis in die nächsthöhere Verzeichnisebene verschieben.

>python vadtools\listdll.py dump.bin 0x1051a70
DEBUG: getting string of size 64 at 00020630
DEBUG: getting string of size 24 at 00020658
01000000 services.exe
DEBUG: getting string of size 58 at 7c97dee8
DEBUG: getting string of size 18 at 7c9226a4
7c900000 ntdll.dll
DEBUG: getting string of size 64 at 00191f70
DEBUG: getting string of size 24 at 00191f98
7c800000 kernel32.dll
DEBUG: getting string of size 60 at 00192018
DEBUG: getting string of size 20 at 00192040
77c10000 msvcrt.dll
...

Archiv

Impressum

Dieses Blog ist ein Projekt von:
Andreas Schuster
Im Äuelchen 45
D-53177 Bonn
impressum@forensikblog.de

Copyright © 2005-2012 by
Andreas Schuster
Alle Rechte vorbehalten.
Powered by Movable Type 5.12