Suche nach Page Directories (1)

Werkzeuge wie der Microsoft Debugger oder PTFinder identifizieren Prozesse und zeigen zusätzlich die Page Directory Base Address an, weil diese Information der Ausgangspunkt zur Rekonstruktion des virtuellen Adressraums ist. Ich habe eine Weile darüber nachgedacht, dieses Verfahren umzukehren, d.h. in einem Speicherabbild zunächst nach Page Directories zu suchen und darüber dann den jeweiligen Prozess ausfindig zu machen. In diesem Artikel beschreibe ich eine einfache und elegante Methode zur Identifizierung von Page Directories, die darauf beruht, dass Page Directories auf sich selbst zurückweisen.

Page Directories (PD) sind der Ausgangspunkt bei der Umrechnung physischer Adressen in virtuelle Adressen. Windows blendet die PD eines Prozesses an der festen (virtuellen) Adresse 0xc0300000 ein. Wenn man nun diese Adresse von Hand in eine physische Adresse umrechnet, so wird man feststellen, dass stets der Page Directory Entry Nr. 0x300 auf die jeweilige Page Table verweisen wird - und diese ist wiederum das PD selbst! Dieser Zusammenhang ist sehr anschaulich in einer Präsentation von Microsoft beschrieben; bitte achten Sie auf die Seiten Nr. 44 bis 46.

Joe Stewart nutzt diese charakteristische Eigenschaft in seinem Programm pmodump.pl, das Teil des Truman Projekts ist. Für jede Seite in einem Speicherabbild überprüft pmodump, ob die Page Frame Number im DWORD an Offset 3072 (das entspricht dem PDE Nr. 0x300) der Page Frame Number der aktuellen Speicherseite gleicht. Falls ja, dann nimmt das Programm an, ein PD gefunden zu haben.

Dieser einfache und schnelle Test erweist sich als überraschend genau. Als Beispiel suchte ich im ersten Speicherabbild aus der DFRWS 2005 Challenge nach PDs. Zum Vergleich ließ ich auch PTFinder eine Liste aller Prozesse und ihrer PDs erstellen.

Der Test identifizierte erfolgreich alle aktuell ausgeführten Prozesse sowie 5 von 7 bereits beendeten Prozesse, die mit PTFinder noch nachzuweisen waren. Erwartungsgemäß konnten jedoch auf diese Weise keine Artefakte früherer Programmläufe von Windows nachgewiesen werden. Es wurden also keine PDs fälschlicherweise unterdrückt. Der Test identifizierte jedoch unzutreffend 2 Speicherseiten als PDs. Beide befanden sich an relativ niedrigen physischen Adressen. Dieses Verhalten ließ sich mit anderen Speicherabbildern reproduzieren. Es handelt sich also um ein inhärentes, wenngleich auch nicht schwerwiegendes Problem dieser einfachen Methode zur Identifizierung von Page Directories.

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