TL;DR. Prefetch ist echter Ausführungsbeweis mit Run-Counts und Laufzeiten. ShimCache beweist nur, dass eine Datei existierte und untersucht wurde. Wenn du "lief sie, und wann?" brauchst, greif zuerst zu Prefetch. Wenn Prefetch deaktiviert oder gewischt ist, wird ShimCache zu deinem Existenzzeugen-Fallback.
Die beiden werden ständig verglichen, weil beide "Programme auf einem Windows-Host" hervorbringen. Sie sind nicht dieselbe Art Beweis. Behandle sie als austauschbar, und du produzierst falsche Schlüsse. Hier ist das Duell.
Auf einen Blick
| ShimCache | Prefetch | |
|---|---|---|
| Speicherort | HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache | C:\Windows\Prefetch\*.pf |
| Was er beweist | Datei existierte und wurde untersucht | Datei wurde ausgeführt |
| Run-Count | Nein | Ja |
| Run-Zeitstempel | Nein (nur Datei-mtime) | Ja, letzte 8 Laufzeiten |
| Referenzierte Dateien | Nein | Ja, geladene DLLs und Datendateien |
| Wird geschrieben wann | Nur bei sauberem Shutdown | Innerhalb von ~10 s nach Ausführung |
| Standard auf Workstation-SKUs | Ja | Ja |
| Standard auf Server-SKUs | Ja | Oft deaktiviert |
| Kapazität | Bis zu ~1.024 Einträge | 1.024 .pf-Dateien auf Win8+ |
Wo Prefetch gewinnt
Prefetch ist das stärkere Ausführungsartefakt, Punkt. Jede .pf-Datei gibt dir die letzte Laufzeit (bis zu acht auf Windows 8+), einen Gesamt-Run-Count und die Liste der Dateien, die der Prozess geladen hat. Genug, um zu behaupten "diese Binärdatei wurde zu diesen Zeiten ausgeführt", was ShimCache nie tun kann, weil sein einziger Zeitstempel die Last-Modified-Zeit der Datei ist, keine Ausführungszeit.
Die Liste geladener Module ist auch Gold für die Triage: ein .pf, das einen Word-Prozess zeigt, der WINWORD.EXE plus MSO.DLL plus eine verdächtige DLL aus \AppData\ geladen hat, ist eine schnelle Lesart für bösartiges Add-In-Laden. Eric Zimmermans PECmd ist der Standardparser. Der Prefetch-Parser deckt das Format ab, falls du deinen eigenen rollen willst.
Wo ShimCache gewinnt
Prefetch hat eine kritische Schwäche: Es ist auf Servern, auf SSD-getunten Images und durch Angreifer häufig deaktiviert (EnablePrefetcher = 0). Es wird auch aktiv durch Cleanup-Tooling gelöscht. ShimCache hingegen ist immer an und empfindlich genug, um eine Binärdatei aufzuzeichnen, die abgelegt und gelöscht wurde, bevor sie je lief.
Wenn Prefetch leer ist, beantwortet ShimCache oft noch "hat diese Datei diesen Host jemals berührt?". Die volle Inferenz steht in Beweist der ShimCache, dass ein Programm ausgeführt wurde?.
Der Cache erfasst auch Dateien, die Prefetch nie sieht:
- Binärdateien, die abstürzten, bevor die Prozessinitialisierung abgeschlossen war.
- Dateien, die Windows aus Kompatibilitätsgründen untersuchte, die der Benutzer aber nicht tatsächlich startete.
- Ausführbare Dateien, die von Netzwerkfreigaben liefen, bevor Prefetch entschied, eine
.pfzu schreiben.
Wie man sie zusammen einsetzt
- Beide vorhanden, Pfade passen. Starker Ausführungsbeweis. Nutze Prefetchs Laufzeiten als Ereignis-Timeline. Nutze die mtime des ShimCache nur, um die Identität der Datei zu verankern.
- Nur Prefetch. Die Ausführung ist bewiesen. ShimCache ist eventuell einfach noch nicht geleert (er schreibt nur beim Shutdown, siehe wo der ShimCache gespeichert ist).
- Nur ShimCache. Die Datei existierte und wurde untersucht. Behaupte keine Ausführung ohne Bestätigung. Zieh AmCache, BAM und EVTX. Die volle Matrix steht in der Artefakt-Referenz.
- Keines, aber du vermutest Ausführung. Such nach Anti-Forensik. Prefetch-Löschung plus fehlender ShimCache-Flush ist selbst ein Fund, in ShimCache-Anti-Forensik behandelt.
Um die ShimCache-Seite ohne Installation zu lesen, leg einen SYSTEM-Hive in den Shimcache Parser. Vollständig im Browser.
Weiterführende Lektüre
- libyals Windows Prefetch (PF) format notes. Referenz für das
.pf-Binärlayout. - Mandiants Caching Out the Val. definiert die forensische Rolle des ShimCache.