Speicheranalyse

Suche nach Page Directories (2)

Microsoft Windows teilt den Adressraum eines Prozesses in zwei Teile: die unteren 2 GiB des virtuellen Speichers sind für das Userland, die oberen 2 GiB sind für den Betriebssystemkern reserviert (wie gewöhnlich unterstelle ich hier eine 32Bit-Plattform und einen Systemstart ohne besondere Optionen). In diesem Beitrag beschreibe ich, wie sich diese Aufteilung des Adressraums nutzen lässt, um Page Directories zu finden.

Windows weist jedem Prozess seinen eigenen Adressraum zu. Das Userland, also die ausgeführte Anwendung, verwendet dabei die untere Hälfte des Adressraums. Offensichtlich wird es in diesem Teil des Adressraums zwischen einzelnen Prozessen erhebliche Unterschiede geben.

Die obere Hälfte des Adressraums steht exklusiv dem Kernel zur Verfügung. Hier hinein werden der Hardware Abstraction Layer (HAL) und der Betriebssystemkern mit ihren umfangreichen systemweit gültigen Datenstrukturen geladen. Die meisten dieser Speicherseiten werden sich daher zwischen den einzelnen Prozessen nicht unterscheiden.

Das Page Directory (PD) ist ein aus 1024 Page Directory Entries (PDE) gebildetes Array. Es stellt gleichsam den Adressraum eines Prozesses aus der Vogelperspektive dar. Wir können deshalb erwarten, dass sich die oberen Hälften (PDE 512 bis 1023) der einzelnen PD ähneln.

Die folgende Grafik zeigt die Anzahl derartiger Übereinstimmungen per PDE, wobei die Zahl auf die Gesamtzahl aller aktiven Prozesse normalisiert wurde. Außerdem wurden nur gültige PDE ausgewertet.

Ähnlichkeiten in der oberen Hälfte von Page Directories

Also bildete aus den PDs aller von PTFinder gefundenen Prozesse eine dynamische Signatur und verglich alle Speicherseiten im ersten Speicherabbild der DFRWS 2005 Challenge mit dieser Signatur. Wie das nächste Diagramm zeigt, treten die (angenommenen) PDs deutlich hervor.

Ergebnismenge bei einer über alle Prozesse gebildeten Signatur.

Die Berechnung dieser Signatur erfordert relativ viel Rechenzeit, insbesondere für Leseoperationen und das Anspringen neuer Positionen innerhalb des Speicherabbildes. Also erzeugte ich probehalber eine Signatur einzig aus dem System/Idle-Prozess. Das PD dieses Prozesses befindet sich an einer konstanten physischen Adresse (0x30000 bei Windows 2000, 0x39000 bei XP), so dass der vorbereitende Lauf von PTFinder entfallen kann. Aufgrund einiger feiner Unterschiede zwischen dem System/Idle-Prozess und gewöhnlichen Prozessen sinkt die erzielte Ähnlichkeit um 5 Prozentpunkte ab. Dies beeinflusst letztlich aber nicht die Ergebnismenge.

Ergebnismenge bei einer nur aus dem System/Idle-Prozess abgeleiteten Signatur.

Alle Page Directories wurden gefunden. Auf der anderen Seite identifizierte die Methode jedoch 7 Speicherseiten fälschlicherweise als PD. In Anbetracht des vergleichsweise hohen Aufwands ist dieses Ergebnis etwas enttäuschen. Allerdings gibt es hier noch einen interessanten Befund, auf den ich in einem späteren Beitrag eingehen werde.

English

International edition

Rubriken

Abonnieren

Impressum

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

Copyright © 2005-2010 by
Andreas Schuster
Alle Rechte vorbehalten.