ShimCache vs. Prefetch: Welches beweist, dass ein Programm lief?

3 Min. Lesezeit

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

ShimCachePrefetch
SpeicherortHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCacheC:\Windows\Prefetch\*.pf
Was er beweistDatei existierte und wurde untersuchtDatei wurde ausgeführt
Run-CountNeinJa
Run-ZeitstempelNein (nur Datei-mtime)Ja, letzte 8 Laufzeiten
Referenzierte DateienNeinJa, geladene DLLs und Datendateien
Wird geschrieben wannNur bei sauberem ShutdownInnerhalb von ~10 s nach Ausführung
Standard auf Workstation-SKUsJaJa
Standard auf Server-SKUsJaOft deaktiviert
KapazitätBis zu ~1.024 Einträge1.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 .pf zu 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

Verwandte Artikel