Zurück zu allen Beiträgen

Wie man Windows-Prefetch-Dateien analysiert

Sie haben ein C:\Windows\Prefetch\-Verzeichnis von einem Triage-Image und eine Frage zur Programmausführung zu beantworten. Die Reihenfolge unten ist das, was ich tatsächlich abarbeite, ungefähr in der Reihenfolge, in der ich es tue. Überspringen Sie Schritte auf eigene Gefahr; die Stelle, an der sich Analysten verbrennen, ist fast immer Schritt 3.

1. Den Ordner triagieren

Parsen Sie das gesamte Verzeichnis in einem Durchgang. PECmd über einen Ordner, pyscca in einer Schleife oder der Parser auf dieser Seite — wählen Sie eines, das MAM-komprimierte Win10/11-Dateien korrekt verarbeitet. Ältere Python-Tools überspringen MAM stillschweigend und geben Ihnen ein unvollständiges Bild.

Bevor Sie irgendetwas anklicken, beantworten Sie drei Fragen aus der Übersichtstabelle:

  • Wie viele Dateien? Eine Windows-10/11-Workstation mit normaler Nutzung sitzt im Hunderter-Bereich. Zwölf Dateien auf einem sechs Monate alten Endpoint heißen entweder Server-SKU, Wipe oder EnablePrefetcher = 0. Null Dateien plus ein vorhandenes Verzeichnis bedeuten meist, dass SysMain gestoppt wurde.
  • Welche Versionen? Überwiegend v30 unter Win10, überwiegend v31 unter Win11. Ein vereinzelter v17-Eintrag auf einem modernen Host ist anomal — v17 wird nur unter XP/Vista/7 geschrieben, daher bedeutet ein solches Vorkommen auf einem Win11-Image, dass die Datei von woanders eingeschleust wurde.
  • Auffällige Namen? Sortieren Sie nach Namen der ausführbaren Datei und überfliegen Sie. PowerShell-Varianten mit zufälligen Suffixen, Binärdateien mit Ein-Zeichen-Namen, alles, was gepackt aussieht, alles, das in \AppData\Local\Temp\ oder \Users\Public\ lebt.

2. In die markierten Zeilen eintauchen

Für jeden Kandidaten drei Fragen:

  • Wann lief er? Auf v26+ erhalten Sie bis zu acht FILETIME-Werte in UTC, plus „Last run". Ordnen Sie diese dem Vorfallszeitfenster zu. Wenn Ihr Fenster „zwischen Dienstag 18:00 und Mittwoch 03:00" ist und drei der acht Last-Run-Slots darin fallen, ist das Ihre Ausführungszahl für den interessanten Zeitraum.
  • Woher lief er? Die Volume-Informationssektion enthält NTFS-Gerätepfad und Seriennummer. Eine Seriennummer, die nicht zum primären Volume des Systems passt, deutet auf Wechselmedien oder ein gemountetes Image hin. Vergleichen Sie die Seriennummer mit MFT-Volume-Datensätzen und LNK-Laufwerksseriennummern, die oft dieselbe Zahl enthalten.
  • Was hat er berührt? Die Dateimetrik-Liste enthält jeden Pfad, den die Binärdatei in den ersten zehn Sekunden überwachter Ausführung gelesen hat — typischerweise einige hundert Einträge bei einer echten Anwendung. Verweise auf Benutzerprofilverzeichnisse, Netzwerkfreigaben oder umbenannte System-DLLs sind Hinweise. DLL-Search-Order-Hijacking zeigt sich hier als vertrauenswürdige Binärdatei, die etwas aus \AppData\Local\Temp\ statt aus \System32\ lädt.

3. Immer quervergleichen

Prefetch allein sagt Ihnen, dass ein Prozess gestartet wurde. Es sagt nicht, wer ihn gestartet hat, mit welchen Argumenten oder ob die Binärdatei jetzt auf der Festplatte die Binärdatei ist, die lief. Dieser Schritt macht aus einem Prefetch-Treffer einen verteidigungsfähigen Ausführungsnachweis.

  • AmCache für SHA-1, Dateigröße, Herausgeber, Signaturstatus. Ein Prefetch-Eintrag ohne AmCache-Datensatz ist unter Win10+ ungewöhnlich. Ein AmCache-Eintrag ohne Prefetch ist üblich (Binärdatei vorhanden, nie ausgeführt).
  • Shimcache / AppCompatCache bestätigt den Pfad. Wenn sowohl Prefetch als auch Shimcache die Binärdatei in C:\Users\Public\evil.exe verorten, lässt sich das schwerer angreifen als jedes für sich.
  • Security 4688 oder Sysmon EID 1 — wenn Prozessauditierung aktiv war, erhalten Sie hier den übergeordneten Prozess und die Befehlszeile. Prefetch zeichnet niemals Argumente auf.
  • Das USN-Journal sagt Ihnen, wann die Binärdatei erstmals auf die Festplatte gelangte; paaren Sie das mit dem frühesten Prefetch-FILETIME, um die Verweildauer einzugrenzen.
  • RecentFileCache auf älteren Systemen für die gleiche Abdeckung, die AmCache auf modernen bietet.

4. Auf Manipulation prüfen

Eine .pf ist nur eine Datei. Sie kann gelöscht, eingeschleust oder überschrieben werden. Drei billige Prüfungen:

  • Berechnen Sie den Pfad-Hash neu und vergleichen Sie ihn mit dem Dateinamen-Suffix. Der Algorithmus von Win7+ ist kurz, und der Parser legt den geparsten Pfad offen; eine Abweichung bedeutet, dass die Datei nicht hier entstanden ist.
  • Ein Ausführungszähler von 1 mit einem „Last run"-Zeitstempel, der zum vermuteten Kompromittierungsfenster auf einem Host passt, der seit Wochen online ist, ist einen zweiten Blick wert. Die legitime .pf wurde möglicherweise gelöscht und eine frische geschrieben, als die Binärdatei nach der Bereinigung erneut lief.
  • Acht Last-Run-FILETIMEs, die auf dieselbe Sekunde geclustert sind oder auf exakte Sekunden ausgerichtet sind, riechen nach Batch-Manipulation. Echte Ausführungen verteilen sich über Sub-Sekunden-Offsets.

Der dedizierte Beitrag zur Manipulation hat mehr Details; das hier ist der schnelle Durchgang.

5. Exportieren und dokumentieren

Exportieren Sie strukturierte Ausgaben (JSON oder CSV) und legen Sie diese neben den Fallnotizen ab. Sie wollen ein zeitstempelstabiles Artefakt, das leicht zu greppen, leicht gegen eine spätere Erfassung vom selben Host zu diffen und leicht in ein Timeline-Tool zu übernehmen ist. Die CSV von PECmd lässt sich direkt in den Timeline-Output von KAPE einbinden; der JSON-Output des Parsers auf dieser Seite eignet sich für jq und ein Notebook.

Für tieferen Kontext zu jedem Feld siehe Windows Prefetch verstehen und Prefetch v30- und v31-Änderungen.

Weiterführende Literatur

  • Eric Zimmerman, PECmd.
  • Joachim Metz, libscca und die mitgelieferte SCCA-Formatdokumentation.