TL;DR. Baue eine verschmolzene Timeline aus ShimCache + AmCache + Prefetch + BAM/DAM + Security/Sysmon. Nutze den ShimCache, um die Besetzung (Pfade) zu definieren, dann reichere jede Zeile mit Zeitstempeln aus Quellen an, die Ereignisse tatsächlich aufzeichnen. Markiere jeden Zeitstempel mit seiner Quellensemantik. Verschmelze nie "Datei-mtime" und "Prozessstart" in eine Spalte.
Eine Programmausführungs-Timeline ist das nützlichste Artefakt, das ein Windows-IR-Ermittler produziert. Gut gemacht erzählt sie eine chronologische Geschichte über mehrere Datenquellen hinweg. Schlecht gemacht überzeichnet sie Beweise und wird von jedem angegriffen, der weiß, was eine mtime ist. Hier ist der Workflow, den ich fahre, mit dem ShimCache als Rückgrat.
Warum der ShimCache ein gutes Rückgrat ist
Der Cache ist selten die genaueste Quelle für ein einzelnes Feld, hat aber einzigartige Vorteile als Timeline-Anker:
- Er trägt den Dateipfad explizit. Manche Artefakte haben nur Hashes oder Teilpfade.
- Er erfasst ausführbare Dateien, die Windows lediglich untersucht hat, also enthält er Binärdateien, die kurz liefen und gelöscht wurden (was Prefetch und BAM verpassen können).
- Er übersteht viele Anti-Forensik-Versuche, die andere Artefakte wischen, mit wichtigen Vorbehalten.
Nutze den ShimCache, um die Besetzung der Timeline zu definieren. Dann reichere jede Zeile mit belegenden Artefakten an, um verlässliche Zeiten zuzuweisen.
Die zu verschmelzenden Datenquellen
Eine vollständige Programmausführungs-Timeline zieht aus mindestens diesen fünf:
| Quelle | Was sie der Zeile hinzufügt |
|---|---|
| ShimCache | Pfad + Datei-mtime |
| AmCache | SHA-1, Dateigröße, Herausgeber, Installationszeit, First-Run-Zeit |
| Prefetch | Prozessstartzeiten (bis zu letzten 8), geladene Module |
| BAM/DAM | Per-User-"Letzte Ausführung"-Zeit auf Win10/11 |
| Security / Sysmon | Prozesserstellungs-Events mit Kommandozeile, Parent, User |
Für Hintergrund siehe die Referenz der Programmausführungs-Artefakte. In größeren Fällen falte SRUM für Netzwerk- und Ressourcennutzung ein, das USN-Journal für Dateiaktivität und LNK-Dateien plus Jump Lists für Shell-Historie.
Ein reproduzierbarer Workflow
- Sammle die Artefakte. SYSTEM-Hive mit Transaktionsprotokollen,
Amcache.hvemit seinen.LOG1und.LOG2,C:\Windows\Prefetch\*.pf, exportiertes Security-Eventlog, Sysmon-Log falls vorhanden, NTUSER.DAT pro Benutzer. Der Akquisitionsleitfaden deckt speziell den SYSTEM-Hive ab. - Parse jedes in eine normalisierte Tabelle. Nutze die Eric-Zimmerman-Suite (
AppCompatCacheParser,AmcacheParser,PECmd) für Offline-Arbeit oder den Shimcache Parser für den ShimCache-Anteil im Browser. - Verschmilz auf (Pfad, optional SHA-1). Der Join-Key ist der Dateipfad, mit SHA-1 aus AmCache als sekundärem Signal. Achte auf Groß-/Kleinschreibung und Pfadnormalisierung (
\??\C:\vs.C:\). - Markiere jeden Zeitstempel mit seiner Quellensemantik. Mische "AmCache install_date" und "Prefetch run_time" nicht in eine Spalte. Sie beantworten unterschiedliche Fragen. Halte sie nebeneinander, aber getrennt.
- Rendere in ein Tool, das per-Zeilen-Quellenangaben handhabt. Eric Zimmermans Timeline Explorer (TLE) und Plaso / log2timeline tun das beide gut. CSV in einer Tabellenkalkulation funktioniert für kleinere Fälle.
Wie es richtig aussieht
Eine verteidigungsfähige Zeile in einer endgültigen Timeline:
2026-04-12 09:14:33 UTC C:\Users\alice\AppData\Local\Temp\setup.exe
ShimCache-mtime: 2026-04-12 09:14:30 UTC
AmCache : SHA-1 a3b8c9..., Signer "Acme Updates", Install 2026-04-12 09:14:33
Prefetch : letzter Lauf 2026-04-12 09:15:01 UTC (1 Ausführung)
Security 4688 : 2026-04-12 09:15:01 UTC, PID 4521, Parent-PID 1234 (svchost.exe)
Jeder Zeitstempel ist mit einer Quelle versehen und die Zeile hält einer Anfechtung stand. Das Gegenteil ("ShimCache zeigt, dass setup.exe um 09:14:33 lief") verwechselt Datei-mtime mit Ausführungszeit und ist die Art Behauptung, die Berichte ablehnen lässt. Siehe Beweis der Ausführung.
Wenn Quellen nicht übereinstimmen
Konflikte sind Daten.
- ShimCache-mtime ≠ Prefetch-First-Run. Normal. Sie messen unterschiedliche Dinge. Notiere beide. Wähle nicht eines.
- AmCache sagt ausgeführt, ShimCache ist für diese Datei leer. Mögliche Gründe: Anti-Forensik-Wisch (Erkennungsmuster), der Eintrag wurde aus dem 1.024-Cap verdrängt, die Binärdatei lief nach dem letzten sauberen Shutdown (noch nur im Speicher, zieh einen RAM-Dump).
- Prefetch fehlt. Server-SKUs und SSD-getunte Hosts haben Prefetch oft deaktiviert. Fall zurück auf AmCache plus BAM.
- EVTX Security 4688 hat Programmname, aber keine Kommandozeile. Command-Line-Auditing war aus. Nützlich, aber begrenzt. Der EVTX-Parser deckt die Voraussetzungen für die Audit-Policy ab.
Am richtigen Punkt aufhören
Eine Timeline muss nicht vollständig sein, um wertvoll zu sein. Ein fokussiertes Fenster ("was lief auf Host X zwischen 14:00 und 18:00 am 2026-04-11?") streng aufgebaut schlägt eine wuchernde mit schwacher Zuordnung. Der Malware-Hunting-Workflow hilft dir, dieses Fenster zu wählen.
Weiterführende Lektüre
- Plaso / log2timeline. Open-Source-Timeline-Engine, die ShimCache, AmCache, Prefetch und Dutzende andere Windows-Artefakte konsumiert.
- Eric Zimmerman tools. Referenzparser plus Timeline Explorer.
- Velociraptor
Windows.Registry.AppCompatCache. Erfassung in großem Maßstab.