Windows Mittwoch: Prefetch Files

Im heutigen Beitrag werde ich mich kurz mit Windows Prefetch beschäftigen. Aber zuerst ein kurzer Hinweis auf ein bevorstehendes Training:

Ich bereite mich derzeit auf einen bevorstehenden FOR508-Kurs mit Chad Tillbury auf der SANS Security East 2017 vor. Der Termin rückt immer näher, aber wir freuen uns auf einen großartigen Kurs und darauf, das nächste Team von tödlichen Forensikern zu finden! Wenn Sie teilnehmen möchten, schreiben Sie mir bitte vorher eine Nachricht. Wenn ihr teilnehmen wollt, ist die Anmeldung noch offen! Während der Veranstaltung, am Mittwoch, den 11. Januar, werde ich einen SANS@Night-Vortrag mit dem Titel Zero In on the Artifacts That Matter halten. Die Vorbereitung auf diesen Vortrag war die Inspiration für den heutigen Beitrag, da Prefetch sicherlich eine Erwähnung finden wird.

Ich habe es schon einmal gesagt und ich werde es wieder sagen – viele Artefakte, die wir in der DFIR-Welt lieben, sind eigentlich Nebenprodukte des Betriebssystems, die versuchen, das Leben für den Benutzer oder die Entwickler einfacher und/oder effizienter zu machen. Meiner Meinung nach fällt Prefetch auch in diese Kategorie.

Prefetch gibt es seit Windows XP. Ursprünglich wurde es entwickelt, um den Systemstart und das Starten von Anwendungen zu beschleunigen. Das Ziel von Prefetch ist es, das Startverhalten von Anwendungen bei der Ausführung zu analysieren und aufzuzeichnen, um zukünftige Starts effizienter zu gestalten. Diese Daten werden bis zu 10 Sekunden nach dem Start der Anwendung aufgezeichnet. Das aufgezeichnete Anwendungsverhalten wird in einer Trace-Datei – der so genannten Prefetch-Datei – unter dem Pfad C:\Windows\Prefetch gespeichert.

Prefetch-Dateien

Wie bereits erwähnt, befinden sich Prefetch-Dateien im statischen Verzeichnis C:\Windows\Prefetch. Prefetch-Dateien haben eine .pf-Erweiterung und folgen einer Standard-Namenskonvention:

<APPLICATION NAME IN ALL CAPS>-<EIGHT CHARACTER HASH OF APPLICATION LOCATION>.pf

Prefetch-Dateien enthalten die folgenden Metadaten:

  • Der Name der entsprechenden ausführbaren Datei
  • Die Anzahl, wie oft die ausführbare Datei ausgeführt wurde
  • Die Größe der Prefetch-Datei
  • Die Dateien und Verzeichnisse, auf die während des Anwendungsstarts verwiesen wurde (dies ist das, was Windows nachverfolgen möchte)
  • Informationen in Bezug auf den Datenträger, auf dem sich die ausführbare Datei befindet, einschließlich des Datenträgerpfads und der Seriennummer.

Hier ist ein Beispiel für einige Prefetch-Dateien von meinem Testhost:

Screenshot Prefetch-Ordner von einem Windows 10 Test-Host

Beachte, dass ich mehrere Anwendungen mit dem gleichen Namen, aber einem anderen Speicherort habe. Dies wird durch die etwas ähnlichen Hashes belegt und ist in vielen Fällen wahrscheinlich ein Hinweis auf ein Software-Update oder eine Änderung der Ordnerstruktur.

EDIT: Vielen Dank an Eric Zimmerman für den Hinweis, dass Prefetch-Dateinamen auch von Befehlszeilenargumenten abhängen und Groß- und Kleinschreibung unterscheiden, obwohl in der Trace-Datei keine Groß- und Kleinschreibung zu sehen ist. Hexacorn deckt den Hashing-Algorithmus hier im Detail ab, und ich empfehle Ihnen, sich das anzuschauen, wenn Sie diese Ebene der Prefetch-Analyse benötigen.

Parsing the Prefetch File

Die Struktur für Prefetch-Dateien ist eigentlich ziemlich bekannt, und es gibt mehrere Parsing-Optionen. Hier sind ein paar Optionen:

  • Im schlimmsten Fall können wir strings verwenden, um einige Informationen über Prefetch-Trace-Informationen zu erhalten. Hier ist ein Beispiel für die Aufzählung von Unicode-Zeichenfolgen aus einer verdächtigen ausführbaren Datei:

Screenshot von Zeichenfolgen aus einer Prefetch-Datei für A.EXE
  • Eric Zimmerman unterhält sein Tool PECmd, derzeit in der Version 0.7.2.0. Es kann hier heruntergeladen werden.
  • log2timeline/Plaso enthält einen Prefetch-Parser und kann Schlüsseldaten aus den Prefetch-Dateien in ein Timeline-Format bringen.
  • TZWorks veröffentlicht auch einen wirklich hilfreichen und praktischen Prefetch-Parser pf. Weitere Informationen dazu können Sie hier einsehen. Hier ist ein Beispiel für die Ausgabe des TZWorks pf Tools:

Screenshot der pf-Ausgabe von TZWorks für eine Prefetch-Datei

Ich werde einige der forensischen Artefakte in dieser Ausgabe im nächsten Abschnitt behandeln, Beachten Sie jedoch, dass wir jetzt Kontextinformationen, Ausführungszeiten und wichtige Zeitstempel erhalten.

Ein weiterer wichtiger Hinweis zum Parsen von Prefetch-Dateien ist, dass neuere Prefetch-Versionen, insbesondere Windows 10, ein neues Komprimierungsformat verwenden, das nicht gut mit Parsern für frühere Versionen zusammenarbeitet. Vergewissern Sie sich, dass Ihr Tool mit Windows 10-Artefakten umgehen kann – oder suchen Sie sich ein neues Skript, bevor Sie davon ausgehen, dass Dateien beschädigt sein könnten.

Wie im DFIR verwenden

DFIR-Analysten müssen Prefetch kennen, da es eine Menge forensischen Wert enthält. Hier einige Beispiele für die Verwendung von Prefetch in der Vergangenheit:

  • Die Anzahl der Durchläufe kann einen wichtigen Hinweis darauf geben, wie lange sich Malware auf einem System befindet oder wie häufig sie verwendet wird/wurde. Wenn Sie nur zwei Malware-Ausführungen gesehen haben, Prefetch aber Dutzende anzeigt, müssen Sie noch weiter nachforschen.
  • Die Zeitstempel der Prefetch-Datei sagen uns ebenfalls viel. Denken Sie über Folgendes nach: Wodurch wird eine Prefetch-Datei erstellt, und wodurch wird eine Prefetch-Datei verändert? Wenn wir diese Aktionen in Zeitstempel umwandeln, können wir Folgendes feststellen: Der Erstellungszeitstempel einer Prefetch-Datei ist das erste Mal, wenn die Anwendung ausgeführt wurde, und die letzte Änderungszeit einer Prefetch-Datei ist das letzte Mal, wenn sie ausgeführt wurde. Betrachten wir noch einmal den Screenshot von oben:

Screenshot der pf-Ausgabe von TZWorks für eine Prefetch-Datei

Beachten Sie unsere letzte Ausführungszeit (2012-04-04 00:43:06.137) und die Änderungszeit: (2012-04-04 00:43:07). Jetzt können wir sehr schnell durch Prefetch-Dateien blättern, ohne sie parsen zu müssen, und unsere letzten Ausführungszeiten finden.

Sie können die Zeitstempel auch auf andere Weise nutzen. Betrachten Sie zum Beispiel die Erstellungszeitstempel aller Dateien aus dem Prefetch-Ordner. Bei interessanten Zeitrahmen oder Prefetch-Dateien für bekannte Malware sollten Sie nach anderen Dateien mit Zeitstempeln in unmittelbarer zeitlicher Nähe suchen.

  • Wenn Sie Prefetch-Dateien analysieren, insbesondere solche, die mit bekannter Malware in Verbindung stehen, sollten Sie einen Blick auf die Dateien werfen, die zugeordnet oder geladen wurden. Möglicherweise finden Sie zusätzliche Indikatoren.
  • Untersuchen Sie zusätzlich die Verzeichnisse, die von der Prefetch-Datei zugeordnet werden. Möglicherweise finden Sie Hinweise auf ein externes Laufwerk oder eine frühere Partition.
  • Sehen Sie mehrere Prefetch-Dateien mit unterschiedlichen Hashes am Ende der Datei? Denken Sie daran, dass der Hash aus dem Speicherort abgeleitet wird – möglicherweise befindet sich Malware an mehreren Stellen.
  • Letzen Endes sollten Sie nicht vergessen, dass Windows den Start einer Anwendung bis zu 10 Sekunden lang überwacht. Während wir uns also auf die Zeitstempel unserer Prefetch-Dateien als ziemlich starke Indikatoren verlassen können, müssen wir die maximale Verzögerung von zehn Sekunden einkalkulieren.

Über den Prefetch hinausgehen

In Windows Vista und darüber hinaus hat Microsoft den Prefetch mit zusätzlichen Funktionen wie SuperFetch, ReadyBoost, ReadyBoot und ReadyDrive weiter ausgebaut. Auf diese Funktionen werde ich in einem späteren Beitrag näher eingehen.

Bis morgen, viel Spaß beim Forensicating!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.