als PDF | 1,3 MB

Transcription

als PDF | 1,3 MB
PTFinder und PoolFinder – Identifikation von Prozessen und
anderen Objekten des Microsoft Windows-Betriebssystemkerns
in Arbeitsspeicherabbildern
Andreas Schuster
Helenenstraße 5c
53225 Bonn
E-Mail: a.schuster@yendor.net
30.06.2008
Zusammenfassung
Die Werkzeuge PTFinder und PoolFinder ermöglichen eine Betrachtung der von einem Microsoft Windows-Betriebssystemkern instantiierten Objekte unabhängig von den Enumerationsmechanismen des Betriebssystems. Im Rahmen einer forensischen Untersuchung machen diese Werkzeuge
sowohl bereits zerstörte, als auch aktive und in maliziöser Absicht verborgene Objekte des Betriebssystems sichtbar.
1
1
Stand der Forschung/Technik
Der Hauptspeicher eines Computers enthält umfassende Informationen über den Zustand der ausgeführten Programme. Die Folgen netzwerkbasierter Angriffe sind möglicherweise sogar nur im Hauptspeicher,
nicht aber auf einem Massenspeicher nachweisbar. Um so mehr überrascht, dass der Hauptspeicher in
der digitalen Forensik derzeit nur selten als Informationsquelle herangezogen wird.
S CHWEITZER [1] sowie J ONES, B EJTLICH und ROSE [2] beschreiben zwar Verfahren zur Sicherung des
Hauptspeichers, gehen dann aber nicht auf die Auswertung der Speicherabbilder ein.
So verwundert es nicht, dass sich bislang einzig die Suche nach Folgen druckbarer Zeichen als Standardverfahren zur Untersuchung von Speicherabbildern etablieren konnte. Typischerweise kommen hierzu
Programme wie das unter UNIX bekannte strings zum Einsatz. Diese sehr einfache Art der Auswertung
birgt jedoch drei entscheidende Schwächen:
1. Die meisten der interessanten Zeichenfolgen finden sich im Userland, dem einem Prozess zur exklusiven Nutzung zugewiesenen Arbeitsspeicher. Wie S OLOMON ET AL . [3] gezeigt haben, werden diese Daten binnen weniger Minuten nach Beendigung eines Prozesses durch das Betriebssystem erneut verwendet oder aber mit Nullbytes überschrieben .
2. Als schwerwiegendes Problem erweist sich der Verlust des Kontextes. Hierzu muss vorausgeschickt werden, dass der Arbeitsspeicher in gleichmäßig große Seiten unterteilt ist. Zuteilungen
an Prozesse erfolgen dabei jedoch nicht zusammenhängend. In benachbarten Seiten identifizierte
Zeichenfolgen werden deswegen häufig unterschiedlichen Prozessen zuzuschreiben sein. Unterbleibt die mühevolle Rekonstruktion der Zuordnung von Speicherseiten zu Prozessen, so besteht
die Gefahr der Fehlinterpretation.
3. Viele der für die IT-Forensik wichtigen Informationen liegen nicht als als Text vor. IP-Adressen,
Zeitstempel und zahlreiche weitere Meta-Daten über Objekte des Betriebssystemkerns sind gewöhnlich nur in binärer Form abgelegt. Mit dem dargestellten Verfahren lassen sich diese Informationen
daher in einem Speicherabbild nicht identifizieren.
Teilweise lassen sich diese Schwächen überwinden, indem man ein Speicherabbild mit einem Debugger analysiert. Programme dieser Art verstehen sich jedoch primär als Testhilfe zur Diagnose von Fehlern während der Entwicklungsphase einer Software. Typischerweise enumerieren Debugger Objekte
des Betriebssystems, zum Beispiel Prozesse und Threads, über die zu diesem Zweck vom Betriebssystem bereitgestellten Funktionen. Debugger sind deshalb allgemein nicht geeignet, in maliziöser Absicht
verborgene Objekte zu entdecken. Auch bereits wieder zerstörte Objekte wird ein Debugger nicht darstellen, da sie aus der Sicht des Betriebssystems nicht mehr existieren. Für forensische Zwecke wertvolle
Informationen bleiben daher ungenutzt.
Um die Entwicklung forensisch einwandfreier Werkzeuge zu stimulieren, veranstaltete der Digital Forensics Research Workshop im Jahr 2005 einen Wettbewerb [4]. Ausgehend von einem simulierten Angriff
auf einen Computer mit dem Betriebssystem Microsoft Windows 2000 wurden Abbilder des Arbeitsspeichers und einige ergänzende Dateien veröffentlicht. Die Aufgabe bestand darin, den Hergang und
die Auswirkungen des Vorfalls zu analysieren.
2
Zwei Programme, MemParser [5] von C HRIS B ETZ und KnTList [6] von G EORGE G ARNER und ROBERTJAN M ORA, gingen siegreich aus dem Wettbewerb hervor. Beide Werkzeuge enumerieren Objekte, indem sie die entsprechenden Funktionen des Betriebssystemkerns nachbilden. Damit unterliegen sie jedoch denselben funktionalen Beschränkungen, wie das Betriebssystem selbst: Maliziöse Software kann
einer Entdeckung entgehen und bereits beendete Prozesse und Threads sind nicht mehr nachweisbar.
3
2
Idee
Der Betriebssystemkern von Microsoft Windows ist objektorientiert. Die Daten eines Objekts werden in
Speicherbereichen des Kernels abgelegt, die Microsoft als Pools [7] bezeichnet. Für die Untersuchung
von Computern sind zwei dieser Pools von besonderer Bedeutung. Daten im paged pool können bei
Bedarf in eine Auslagerungsdatei verschoben werden, um freien Arbeitsspeicher für andere Zwecke zu
gewinnen. Besonders häufig benötigte Daten, und hierzu zählen die für die digitale Forensik bedeutsamen
Informationen über Gerätetreiber, Prozesse und Threads, werden hingegen in einem non-paged pool
permanent im Arbeitsspeicher gehalten. Allen Allokationen in den Pools stellt das Betriebssystem einen
kurzen Block von Verwaltungsinformationen, den POOL HEADER voran.
Abbildung 1 zeigt einen Auszug aus einem Arbeitsspeicherabbild in einem Hex-Editor. Der POOL HEADER
ist hier in rot markiert. In der rechten Spalte ist deutlich die Zeichenfolge ”Pro” zu erkennen. Hierbei
handelt es sich um das so genannte Pool Tag1 . Es weist darauf hin, dass dieser Speicherbereich für die
Verwaltung eines Prozesses alloziert wurde. In gleicher Weise sind Tags für die anderen Objekte des
Kernels und hunderte weiterer Datenstrukturen in Verwendung. Microsoft empfiehlt Programmierern
von Kerneltreibern, Pool Tags eindeutig einem Ausführungspfad zuzuordnen [8].
Abbildung 1: Prozess-Objekt des Betriebssystemkerns in einem Hauptspeicherabbild
Allen Objekten der Ausführungsschicht ist in ähnlicher Weise eine identische Datenstruktur vorangestellt. In Abbildung 1 ist sie blau hinterlegt. Diese OBJECT HEADER genannte Struktur ermöglicht
dem Betriebssystem eine einheitliche Verwaltung der durch Objekte repräsentierten Ressourcen.
Der OBJECT HEADER nennt unter anderem den Namen der betreffenden Instanz und wie viele andere Instanzen darauf verweisen. Wichtig ist ebenfalls ein Zeiger auf eine weitere Datenstruktur, die die
Klasse genauer beschreibt.
Klassen definieren üblicherweise individuelle Datenstrukturen. Im hier abgebildeten Beispiel eines Pro1 Tatsächlich
umfasst das Pool Tag vier Zeichen, hier sind es ”Proc”. Allerdings ist im vorligenden Fall das höchstwertige
Bit des vierten Zeichens gesetzt, um anzuzeigen, dass der Speicherbereich für Zwecke des Betriebssystemkerns selbst belegt
wurde.
4
zesses finden sich die spezifischen Daten des Objektes in einer Struktur namens EPROCESS. Ihr hier
grün unterlegter Datenbereich enthält unter anderem den Namen der Programmdatei. In der rechten
Spalte der Abbildung 1 ist er als Zeichenfolge dfrws2005.exe zu erkennen.
Es lassen sich also Datenstrukturen auf drei Ebenen unterscheiden:
1. Speicherverwaltung des Kernels
2. allgemeine Objektstruktur
3. spezifische Objektstruktur
Die zentrale Idee dieses Beitrags besteht darin, dass sich diese Datenstrukturen mit Hilfe eines Regelwerks in einem Abbild des Hauptspeichers identifizieren lassen. Anstatt also wie bisher Listen und
Baumstrukturen zu rekonstruieren, die dann auf die einzelnen Objektinstanzen verweisen, ist es so
möglich, das Speicherabbild nach den Objektinstanzen selbst zu durchsuchen.
2.1
Signaturen für Kernel-Objekte
Das Regelwerk basiert auf zwei unterschiedlichen Arten von Signaturen. Statische Signaturen erfordern
die exakte Übereinstimmung zwischen einem Bitmuster und dem Speicherabbild. Signaturen dieser Art
lassen sich induktiv durch Reverse-Engineering des Betriebssystemkerns gewinnen. Alternativ kann deduktiv eine statische Signatur als übereinstimmendes Bitmuster einer Menge bekannter Objektinstanzen
gebildet werden.
Als statische Signatur zur Erkennung von EPROCESS-Strukturn ist so zum Beispiel die Bytefolge 0x03
0x00 0x1b 0x00 geeignet. Die Bedeutung der einzelnen Zahlen ergibt sich aus der Definition der Datenstruktur: 0x03 bezeichnet Prozesse, während beispielsweise 0x05 eine Semaphore und 0x06 einen
Thread bezeichnen. Die Zuordnung von Nummern zu Objekttypen ist konstant von Windows 2000 bis
hin zum Windows Server 2008. Die zweite Zahl, 0x1b nennt die Länge der Datenstruktur in Einheiten
von 8 Bytes. Die Länge variiert zwischen den einzelnen Betriebssystem-Versionen. Für alle Instanzen
derselben Version ist sie konstant.
Dynamische Signaturen gehen zunächst von der Hypothese aus, eine gewünschte Datenstruktur gefunden zu haben. Sie interpretieren dann den Abschnitt im Speicherabbild gemäß der Strukturdefinition.
Schließlich überprüfen sie einzelne Elemente innerhalb der Struktur. Typischerweise wird hierbei getestet, ob sich der Wert innerhalb eines bestimmten Intervalls befindet oder komplexeren Bedingungen
genügt.
Ein Beispiel soll dies verdeutlichen: Prozess-Objekte enthalten Zeiger auf ihre Vorgänger und Nachfolger. Die Adressen dieser Objekte sind zunächst nicht bekannt. Aufgrund der Speicheraufteilung des Betriebssystems kann aber gefordert werden, dass diese Zeiger in einen bestimmten Bereich des Adressraums
verweisen müssen. Ein weiteres Kriterium lässt sich daraus ableiten, dass der Arbeitsspeicher mit einer
Granularität von 8 Bytes zugewiesen wird. Also müssen auch die mutmaßlichen Adressen ganzzahlig
durch 8 teilbar sein.
5
2.2
Implementierung
Diese einfache Idee wurde in zwei unterschiedlichen Werkzeugen umgesetzt. PTFinder identifiziert mit
Hilfe von insgesamt 20 Signaturen die spezifischen Strukturen von Prozessen [9]. Das Programm führte
die identifizierten Objekte mit ihrer Adresse und den wichtigsten Daten zunächst nur in einer tabellarischen Form auf. Um einem Betrachter die Interpretation der mitunter sehr umfangreichen Daten zu
erleichtern, wurde es um eine grafische Ausgabe erweitert. PTFinder erzeugt jetzt einen Graphen der
Eltern-Kind-Relation von Prozessen und Threads in der Beschreibungssprache DOT. Mit Hilfe der frei
erhältlichen Software GraphViz [10] lässt sich der Graph dann in einem gebräuchlichen Grafik-Format
darstellen.
Die Entwicklung des umfangreichen Regelwerks für PTFinder erforderte viel Zeit. Um das Funktionsprinzip bei geringem Aufwand auf eine große Anzahl unterschiedlicher Objektklassen anwenden zu
können, wurde ein zweites Werkzeug entwickelt. PoolFinder stützt sich allein auf den lediglich 8 Bytes
großen POOL HEADER. Die Schwierigkeit bestand hier darin, trotz dieser sehr kleinen Struktur Regeln
mit ausreichend hoher Selektivität zu entwickeln und dadurch falsch-positive Funde zu vermeiden.
Derzeit bildet PoolFinder aus 9 Regeln [11] ein gewichtetes Gesamtergebnis. Der Anwender kann über
einen Schwellwert bestimmen, ob er nur die zweifelsfrei identifizierten Allokationen, oder aber bei einem
entsprechend niedrigeren Schwellwert auch Überreste früherer Allokationen betrachten möchte.
Mit PoolFinder lassen sich sämtliche Objekte der Ausführungsschicht sowie mehrere hundert weitere Klassen von Allokationen in einem Speicherabbild nachweisen. PoolFinder beschränkt sich darauf,
die Position der Allokationen mit ihren wichtigsten Eigenschaften in einer Datenbank zu vermerken.
Um die Beispiel-Implementierung einfach und portabel zu halten, wurde als SQLite [12] als DBMS
gewählt. Das aktuelle Datenbank-Schema erlaubt es, die Resultate mehrerer Speicherabbilder in derselben Datenbank zu speichern. Änderungen zwischen Abbildern lassen sich deshalb leicht mit den SQLMengenoperatoren EXCEPT und INTERCEPT leicht bestimmen.
2.3
Ergänzungen
Einige Dienstprogramme ergänzen PoolFinder und unterstützen den Anwender bei der Detailanalyse
der gefundenen Speicherallokationen. PoolGrep durchsucht Allokationen nach einem regulären Ausdruck und meldet die jeweiligen Pool Tags. Geht man von bekannten Informationen, zum Beispiel einer
IP-Adresse in kanonischer Darstellung aus, so führt PoolGrep unter anderem auf Allokationen für TCPSockets und deren Pool Tags. Der Anwender identifiziert mit deren Hilfe zuerst den entsprechenden
Gerätetreiber, hier also tcpip.sys. In einem zweiten Schritt lässt sich die den Speicherblock anfordernde Funktion bestimmen. Die weitere Nutzung des Speicherbereichs, und damit das Datenformat, ist dann
mit den Techniken des Reverse-Engineerings bestimmbar.
PoolDump gibt alle Allokationen einer Klasse als Hexdump mit ergänzenden Informationen aus. Auch
dieses Werkzeug soll primär das Reverse-Engineering unterstützen. Abbildung 2 zeigt einen durch das
Rootkit Unreal.a [13] manipulierten Treiber-Eintrag. Nur sehr erfahrene Anwender werden die Manipulation in dieser Darstellung bemerken.
Für einen breiten Anwenderkreis müssen die Informationen jedoch einfacher zu erfassen sein. Hierzu
dient das Programm PoolView. Es interpretiert die Datenstrukturen, prüft einzelne Werte und warnt den
6
’Driv’ (P/-) at offset
0000: 06 00 1f 0a 44
0010: 68 31 a0 e1 01
0020: 00 00 00 00 00
0030: 04 00 a8 00 08
0040: 00 17 00 00 70
0050: 98 33 a0 e1 10
0060: 00 00 00 00 14
0070: 7e 93 a4 fc 7e
|
00d0: 7e 93 a4 fc 7e
00e0: 00 00 00 00 00
00f0: 00 00 00 00 00
0x01022d70
72 69 f6 78
00 00 00 00
00 00 00 00
22 0c 81 12
22 1b 81 48
d8 68 80 00
9d a4 fc 7e
93 a4 fc 7e
1c
00
00
00
2e
a1
93
93
34
00
00
00
0c
a4
a4
a4
e1
00
00
00
81
fc
fc
fc
0c
00
00
00
1c
33
7e
7e
00
00
00
90
00
9d
93
93
0c
00
00
a4
1c
a4
a4
a4
00
00
00
fc
00
fc
fc
fc
....Dri.x.4.....
h1..............
................
....."..........
....p"..H.......
.3....h.....3...
........˜...˜...
˜...˜...˜...˜...
93 a4 fc 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00
00 00 00
˜...˜...........
................
Abbildung 2: Darstellung eines manipulierten Treiber-Eintrags durch PoolDump.
Anwender bei unzulässigen und inkonsistenzen Daten. Abbildung 3 zeigt den gleichen Treiber-Eintrag
in der Darstellung durch PoolView.
Derzeit verarbeitet PoolView Daten von 20 Klassen. Das Programm befindet sich noch in einer frühen
Phase der Entwicklung und steht derzeit nur Ermittlungsbehörden und anderen besonderen Benutzergruppen auf Anfrage zur Verfügung.
Offset: 0x01022d70
Free: Object: 0x00000000 (SUSPECT object address detected!)
Extension: 0x810c2e48 (SUSPECT mismatching object and extension detected!)
Obj type: 0x00000000 (SUSPECT object type pointer detected!
Obj name: 0xe1a03168
Drv name: 0xe1a03398
Image base: 0xfca49000
Size: 0x00001700
Init: 0xfca49d33
Start info: 0x00000000
Unload: 0xfca49d14
Funct. 0: 0xfca4937e
...
Funct. 27: 0xfca4937e
Abbildung 3: PoolView übersetzt die Datenstruktur in eine leichter zu erfassende Form und weist auf
verdächtige Daten hin.
7
3
Nutzen
Der Hauptnutzen dieser Idee ergibt sich aus ihrer Unabhängigkeit von den üblichen Mechanismen zur
Verwaltung von Objekten.
1. Schadsoftware tarnt Kernelobjekte, die Hinweise auf maliziöse Aktivitäten geben könnten, indem
sie sie aus den zur Verwaltung genutzten Datenstrukturen entfernt. Da die Suche nach Kernelobjekten von diesen Verwaltungsdaten unabhängig ist, erweist sie sich als robust gegenüber den
Täuschungsversuchen.
2. Objekte, die ihre Aufgabe erfüllt haben, werden durch das Betriebssystem zerstört und aus den
entsprechenden Verzeichnissen entfernt. Für die digitale Forensik ist jedoch auch der Blick in die
Vergangenheit von großer Bedeutung. Zeigt die Gegenwart die Folgen eines Angriffs, so können
sich aus dem Vergangenen wertvolle Hinweise auf das Angriffswerkzeug und die ausgenutzte
Schwachstelle ergeben. Die Suche nach Kernelobjekten findet Spuren längst vergangener Objekte,
solange sie im Speicher noch nicht überschrieben wurden. Die Methode ist damit das Analogon
zur Wiederherstellung gelöschter Dateien, die schon lange ein unverzichtbarer Schritt in der forensischen Untersuchung von Massenspeichern ist.
Ein extremes Beispiel für Spuren bereits bereits gelöschter Objekte ist die Persistenz von Daten über
einen Neustart des Betriebssystems hinaus. Mit PTFinder konnte sie auf dem Digital Forensics Research
Workshop 2006 erfolgreich nachgewiesen werden [9]. Auch wenn dies unter realistischen Bedingungen
kaum wiederholbar sein dürfte, so demonstriert es eindrucksvoll die Leistungsfähigkeit der Methode.
3.1
Incident Response
Bei der Incident Response unterstützt die Visualisierung der Hierarchie von Prozessen und Threads mit
Hilfe von GraphViz die schnelle Analyse eines Systemzustands; ein starker Anfangsverdacht auf eine
Kompromittierung lässt sich einschließlich Datensicherung und Auswertung mit PTFinder in etwa einer
30 Minuten durchführen. Der untersuchte Host kann hierbei sogar im Produktivbetrieb verbleiben. Als
Beispiel für diesen Anwendungsfall soll hier ein Speicherabbild des Digital Forensic Research Workshops [4] dienen.
Mit PTFinder werden zunächst in dem Speicherabbild die Spuren aktiver und bereits beendeter Prozesse
identifiziert. Jedes Prozess-Objekt nennt neben der eigenen ID auch die des erzeugenden Prozesses.
Auf der Basis dieser Eltern-Kind-Relation erstellt PTFinder einen Graphen (siehe Abbildung 4). Seine
Knoten sind die Prozess-Objekte, seine Kanten entsprechen der festgestellten Abstammung.
Für jeden Prozess ist, jeweils von links nach rechts, seine numerische Prozess-ID, der gegebenenfalls auf
16 Zeichen gekürzte Name der Programmdatei und die Startzeit angegeben. Diese Daten werden direkt
aus der jeweiligen EPROCESS-Struktur gewonnen.
Grau hinterlegte Knoten markieren bereits beendete Prozesse. Zusätzlich zu den bereits genannten Informationen werden auch der Zeitpunkt der Beendigung und der vom Programm zurückgegebene Status
angegeben. Die grau hinterlegten Knoten symbolisieren zugleich diejenigen Objekte, die einzig durch
8
Abbildung 4: Hierarchie der Prozesse eines kompromittierten Hosts
die Suche nach Prozessobjekten, nicht aber durch die anderen zuvor genannten Methoden identifiziert
werden können.
Die Prozess-Hierarchie entwickelt sich von links nach rechts. Am linken Bildrand ist der Idle-Prozess
dargestellt, der den System-Prozess startet. Weitere stets gestartete Prozesse sind der Session Manager
(SMSS), das Client/Server Runtime Subsystem (CSRSS), Winlogon und das Local Security Authority
Subsystem (LSASS). Letzteres ist für die Authentisierung von Sitzungen und die Autorisierung von
Aktionen verantwortlich.
Abbildung 5: Erfolgreicher Angriff mit Metasploit gegen das LSASS
In der Vergrößerung (Abbildung 5) ist deutlich zu erkennen, dass aus dem Local Security Authority
Subsystem zwei Kindsprozesse hervorgingen – was sehr ungewöhnlich ist. Hinzu kommt, dass diese
beiden Prozesse mit metasploit.exe den Namen eines bekannten Angriffswerkzeugs [14] tragen.
9
In einem Fall hat der mutmaßliche Schadcode einen weiteren Prozess UMGR32.EXE gestartet. Der Name deutet zunächst auf den Windows User Manager, ein harmloses Dienstprogramm zur Verwaltung
von Benutzerkonten und -gruppen hin. Mit weiteren Informationen aus der EPROCESS-Struktur dieses
Prozesses ließ sich schließlich dessen Adressraum mit dem Programmcode rekonstruieren. Die weitere
Analyse zeigte, dass es sich jedoch um die bekannte Backdoor Back Orifice [15] handelt. In der Gesamtansicht wird deutlich, dass aus dieser Backdoor heraus das Programm dfrws2005.exe ausgeführt
wurde, was aber binnen einer Sekunde terminierte. Es gab dabei den Fehlercode 0 an das Betriebssystem
zurück, was gewöhnlich ”Erfolg” signalisiert.
Worin dieser Erfolg besteht, wird deutlich, wenn man (siehe Abbildung 4, rote Markierungen im oberen
Teil) nach weiteren Ereignissen in zeitlicher Nähe sowie nach Prozessen des selben Namens sucht. Beide
Ansätze führen auf eine weitere Instanz von dfrws2005.exe, die als Kindsprozess von services.exe
läuft.
Dies lässt vermuten, dass die erste gestartete Instanz von dfrws2005.exe sich als Systemdienst installierte. Der Service Control Manager services.exe startete dann die zweite Instanz. Die genaue Analyse
ergab dann, dass es sich bei dfrws2005.exe um das Rootkit ”Hacker Defender” [16] handelt. Wie die
Abbildung bereits andeutet, startete das Rootkit dann noch einen Netcat-Listener. Mit seiner Hilfe war
über einen TCP-Socket eine privilegierte Kommandozeile zu erreichen.
3.2
Datierung der Ausführung bestimmter Adressen
Aus den Meta-Informationen über einzelne Threads lässt sich ableiten, dass zu einem bestimmten Zeitpunkt Code an einer bestimmten Adresse ausgeführt wurde. Analog zu Prozessen sind hier ebenfalls der
Zeitpunkt der Beendigung des Threads und ein Statuscode verfügbar.
Im Falle einer forensischen Untersuchung gelang so der Nachweis, dass eine Schadsoftware bereits einen
Thread zur Zerstörung des Dateisystems gestartet hatte.
3.3
Auswirkungen forensischer Software auf das Untersuchungsgut
Forensische Software soll die ursprünglichen Spuren nur im absolut notwendigen Umfang verändern.
Mit Hilfe von PoolFinder lassen sich Veränderungen in den Speicherbereichen des Betriebssystemkerns
genauer beobachten, als dies mit konventionellen Methoden wie einem Kernel-Debugger möglich wäre.
Der Autor wird im August 2008 erste Ergebnisse auf dem Digital Forensics Research Workshop vorstellen [17]. Demnach sollte gerade Software zum Zwecke der forensisch einwandfreien Sicherung des
Arbeitsspeichers und der Incident Response äußerste Zurückhaltung bei der Instantiierung neuer KernelObjekte üben. Um möglichst viele Spuren zu erhalten, sollte ein derartiges Programm lediglich einen
einzigen Thread erzeugen und auch keine weiteren Kindsprozesse starten.
10
Abbildung 6: Meta-Informationen über Threads ermöglichen die Datierung der Ausführung bestimmter
Code-Abschnitte.
4
Marktchancen
Der Markt für Software zur forensisch einwandfreien Auswertung von Arbeitsspeicherabbildern ist noch
kaum entwickelt.
Im kommerziellen Sektor herrscht derzeit das nur ausgewählten Nutzern zugängliche KnTList vor. Dieses Programm verfolgt den konventionellen Ansatz und lokalisiert Kernelobjekte über die Verwaltungsmechanismen des Betriebssystemkerns. In enger Zusammenarbeit mit dem Autor, George Garner, stellt
PTFinder inzwischen über eine XML-Schnittstelle Informationen über aufgefundene Prozesse und Threads
zur Verfügung, um so die Analysequalität von KnTList zu verbessern.
Obwohl sich PTFinder ausdrücklich als Machbarkeitsstudie versteht, wurde das Programm in die zwei
Werkzeug-Sammlungen grml [18] und Helix [19] für Administratoren und Computer-Forensiker aufgenommen.
PTFinder ist bei Strafverfolgungsbehörden in aller Welt im Einsatz. R ICHARD M C Q UOWN von der
Milwaukee Police ergänzte PTFinder um das grafische Frontend PTFinderFE [20] und portierte [21] das
Suchverfahren in die Scriptsprache des gebräuchlichen kommerziellen Forensik-Programms EnCase von
Guidance Software.
Die Idee der Suche nach Objekten, das Regelwerk zur Identifizierung von Prozessen und Threads und die
Implementierung in der Open Source Software PTFinder wurden mit dem Best Paper Award des Digital
Forensic Research Workshop 2006 ausgezeichnet.
Im Rahmen seiner zeitlichen Möglichkeiten strebt der Verfasser die Anwendung des Prinzips der kontextunabhängigen Suche über Prozesse, Gerätetreiber und Threads hinaus auf die verbleibenden Objektklassen des Microsoft Windows Betriebssystemkerns an. Entsprechend den mit PTFinder und PoolView
gewonnenen Erfahrungen sollen die aufgefundenen Daten benutzerfreundlich aufbereitet und in Hierar-
11
chien und Zeitleisten visualisiert werden. Als ersten Schritt hierzu hat der Verfasser Funktionalität aus
PTFinder, PoolFinder und PoolView in Volatility[22], ein quelloffenes Framework für Anwendungen zur
forensischen Analyse von Arbeitsspeicherabbildern, eingebracht.
12
5
Literatur
[1] S CHWEITZER , D OUGLAS: Incident Response. Wiley Publishing, Indianapolis, 1. Auflage, 2003.
[2] J ONES , K EITH J., R ICHARD B EJTLICH und C URTIS W. ROSE: Real Digital Forensics : Computer
Security and Incident Response. Addison-Wesley Professional, 2005.
[3] S OLOMON , JASON, E WA H UEBNER, D EREK B EM und M AGDALENA S ZE ŻYNSKA:
User data persistence in physical memory.
Digital Investigation, 4(2):68–72, 2007.
doi:10.1016/j.diin.2007.03.002.
[4] D IGITAL F ORENSICS R ESEARCH W ORKSHOP: Memory Analysis Challenge, August 2005. Online. http://www.dfrws.org/2005/challenge/ (2008-06-01).
[5] B ETZ , C HRIS: MemParser, August 2005. Online. http://www.dfrws.org/2005/challenge/
memparser.html (2008-06-01).
[6] G ARNER , G EORGE M. und ROBERT-JAN M ORA: kntlist, August 2005. Online. http://www.
dfrws.org/2005/challenge/kntlist.html (2008-06-01).
[7] M ICROSOFT C ORPORATION, Redmond: POOL TYPE, Mai 2005.
microsoft.com/en-us/library/aa492492.aspx (2008-06-01).
Online. http://msdn2.
[8] M ICROSOFT C ORPORATION, Redmond: ExAllocatePoolWithTag, 2008. Online. http://msdn2.
microsoft.com/en-us/library/ms796989.aspx (2008-06-01).
[9] S CHUSTER , A NDREAS: Searching for Processes and Threads in Microsoft Windows Memory
Dumps. Digital Investigation, 3(Supplement 1):10–16, September 2006. doi:10.1016/j.diin.
2006.06.010.
[10] AT&T: Graphviz - Graph Visualization Software, Januar 2005. Online. http://www.graphviz.
org/ (2008-06-01).
[11] S CHUSTER , A NDREAS: Pool Allocations as an Information Source in Windows Memory Forensics.
In: G ÖBEL , O LIVER, D IRK S CHADT, S ANDRA F RINGS, H ARDO H ASE, D ETLEF G ÜNTHER und
J ENS N EDON (Herausgeber): IT-Incident Management & IT-Forensics – IMF 2006, Band P-97 der
Reihe Lecture Notes in Informatics, Seiten 104–115, 18 Oktober 2006.
[12] SQLite Home Page. Online. http://www.sqlite.org/ (2008-06-01).
[13] EP X0FF: Unreal.A, bypassing modern Antirootkits. Rootkit.com, 1 Februar 2007. Online.http:
//www.rootkit.com/newsread.php?newsid=647 (2008-06-01).
[14] The Metasploit Project. Online. http://www.metasploit.org/index.html (2008-06-01).
[15] C ULT OF THE D EAD C OW: Back Orifice 2000, 27 November 2004. Online. http://www.bo2k.
com/ (2008-06-01).
[16] HF: Hacker Defender, 18 September 2005. Online. http://www.rootkit.com/project.php?
id=5 (2008-06-01).
13
[17] S CHUSTER , A NDREAS: The impact of Microsoft Windows pool allocation strategies on memory
forensics. Digital Investigation (in print). doi:10.1016/j.diin.2008.05.007.
[18] P ROKOP, M ICHAEL: grml - Linux Live-CD for Sysadmins. Online. http://grml.org/ (2008-0601).
[19] E - FENSE , I NC ., Alexandria, VA, USA: Helix - Incident Response & Computer Forensics Live CD.
Online. http://www.e-fense.com/helix/ (2008-06-01).
[20] M C Q UOWN , R ICHARD: PTFinderFE Facts, 26 Oktober 2007. Online. http://forensiczone.
blogspot.com/2007/10/ptfinderfe-facts.html (2008-06-01).
[21] M C Q UOWN , R ICHARD: RAM Enscript, 22 November 2007. Online. http://forensiczone.
blogspot.com/2008/01/ram-enscript.html (2008-06-01).
[22] WALTERS , A ARON und N ICK L. P ETRONI: The Volatility Framework: Volatile memory artifact extraction utility framework. Online. https://www.volatilesystems.com/VolatileWeb/
volatility.gsp (2008-06-01).
14

Similar documents