Timeline Forensics unter Windows: Plaso, Log2Timeline und KAPE in der Praxis
Super-Timelines eines kompromittierten Windows 11 in der Test-VM bauen, mit KAPE fuer Triage-Sammlung und Plaso, das ueber 200 Artefakte parst.

In diesem Artikel
Drei Uhr morgens, ein Incident-Anruf, und alles, was du hast, ist eine Windows-11-VDI mit Verdacht auf Payload-Ausfuehrung um 22:47 Uhr am Vortag. Kein vernuenftiger EDR, kein SIEM, das Logs aggregiert, nur die laufende Maschine und vierzig Minuten Zeit, um eine Hypothese zu liefern. Genau hier hoert Timeline Forensics auf, akademische Uebung zu sein, und wird zum Unterschied zwischen der Aussage, der Angreifer habe rundll32 verwendet und eine DLL aus %AppData%\Roaming\winlog um 22:47:13 geladen, und einem Achselzucken. Dieser Beitrag baut das Lab, das genau diesen Druck auf einem isolierten Windows 11 in VMware Workstation repliziert, und fuehrt Plaso, log2timeline und KAPE von der Sammlung bis zur belastbaren Erzaehlung.
Warum Timeline Forensics den Fall entscheidet#
Ein einzelnes Artefakt luegt leicht. Ein EVTX-Eintrag kann geloescht, ein Zeitstempel per Timestomping manipuliert, ein Log rotiert worden sein. Timeline Forensics gewinnt, weil sie unabhaengige Quellen auf einer gemeinsamen Zeitachse zusammenfuehrt: Dateisystem-Metadaten aus der MFT, Ausfuehrungsspuren aus Prefetch und Amcache, Registry-Persistenz, EVTX-Events, SRUM-Netzwerknutzung. Wo drei unabhaengige Artefakte denselben Moment bezeugen, wird aus Vermutung Evidenz. Diese Denke ist die defensive Kehrseite dessen, was wir in Hunting von Living-off-the-Land-Binaries unter Windows mit KQL und Threat Hunting mit Sigma und Elastic: Vom Indikator zur Detektionsregel als proaktive Jagd beschreiben. Der Vorteil der Zeitachse ist, dass sie die Kausalitaet sichtbar macht: nicht nur was passiert ist, sondern in welcher Reihenfolge und mit welchem Abstand. Wenn eine DLL zwei Sekunden vor dem Prozessstart auf die Platte geschrieben wird und drei Sekunden danach eine ausgehende Verbindung aufgebaut wird, ergibt sich eine Erzaehlung, die kein einzelnes Log liefern kann. Genau diese Rekonstruktion der Abfolge unterscheidet forensische Aussage von Spekulation. Timeline heisst nicht alles sammeln, sondern die Zeit gegen die falsche Hypothese aussagen lassen.
Der Stack: KAPE, Plaso, Timesketch#
Der Stack ist simpel und reproduzierbar: KAPE von Eric Zimmerman fuer die Triage-Sammlung (Targets wie !SANS_Triage brauchen unter drei Minuten), Plaso 20240308 in einem Ubuntu-24.04-Container mit 16 GB dediziertem RAM, dazu Timeline Explorer fuer die schnelle Sicht und Timesketch fuer die kollaborative Navigation. KAPE sammelt, ohne die Beweiskette zu brechen, weil es forensisch saubere Kopien mit Hashes zieht. Plaso normalisiert dann dutzende Artefakttypen in eine einzige durchsuchbare Super-Timeline. Timeline Explorer gibt dir Grid, Filter und Farbcodierung; Timesketch gibt dir Tags, Stories und geteilte Ansichten fuer das Team. Jedes Werkzeug hat seinen Platz, und die Kombination ist maechtiger als jedes einzelne.
Der Lab-Aufbau#
Ich baue das Lab auf einem isolierten Windows 11 in VMware Workstation, mit sauberem Snapshot, simuliertem Post-Infection-Snapshot und kontrolliertem Detonator, komplett host-only ohne Internet. Der Standardablauf ist: Snapshot, Sample detonieren (ich nutze inerte Varianten aus dem Lab in Malware-Analyse im Isolierten Lab: Sicheres Setup mit FlareVM und REMnux), mit KAPE in eine VHDX sammeln, im Analyse-Host read-only mounten und log2timeline.py gegen den Mount-Point feuern. Auf bescheidener Hardware erzeugt eine 80-GB-Platte mit 18 GB Belegung einen Plaso-Storage von etwa 1,2 GB in rund 22 Minuten. Der isolierte Aufbau ist Pflicht: ein Detonator ohne Netzsperre kontaktiert echtes C2 und macht dich zum Teil des Problems.
Sammlung mit KAPE: Targets und Modules#
Wer neu in KAPE ist, findet das Targets-und-Modules-Modell seltsam, aber genau das macht die Sammlung im rechtlichen Kontext verteidigbar. Targets kopieren rohe Artefakte, Modules parsen sie mit externen Tools. Ich pflege ein eigenes .tkape, das PowerShell\Operational, WMI-Activity und TaskScheduler zusaetzlich zu den Standard-Triage-Targets aufnimmt, und ein Modul, das RECmd mit Zimmermans Batch-Files ausfuehrt, um UserAssist, ShellBags, TypedPaths und das RunMRU-Set zu extrahieren. Das hinterlaesst mir ein Triage\-Verzeichnis fuer Plaso und ein Modules\-Verzeichnis mit fertig geparsten CSVs. Bei einem Incident auf einem Endpoint hinter einem Pivoting-Netz (Szenario aus Pivoting mit Chisel und Ligolo-ng: Segmentierte Netze im Pentest-Lab) laeuft KAPE lokal und exportiert auf ein authentifiziertes Share, um schweren Traffic zu vermeiden.
Die Super-Timeline mit log2timeline erzeugen#
Gegen den read-only Mount feuere ich log2timeline.py --storage-file case.plaso /mnt/evidence. Plaso erkennt Artefakte automatisch, aber in der Triage schalte ich gezielt die Parser winreg, prefetch, mft, usnjrnl, winevtx, srum, amcache, shimcache und bam frei, statt alles zu fahren, was die Laufzeit vervielfacht. Fuer VSS ergaenze ich --vss-stores all, um geloeschte Persistenz aus Shadow Copies zu heben. Der Storage waechst schnell: eine rohe Super-Timeline liefert leicht acht Millionen Ereignisse. Das ist kein Fehler, sondern Rohmaterial. Der Wert entsteht erst im naechsten Schritt, dem Filtern. Wichtig ist, den Storage einmal sauber zu erzeugen und danach nur noch mit psort.py daraus zu schneiden, statt log2timeline mehrfach laufen zu lassen.
Filtern und Slicing mit psort#
Das Gold liegt nicht im Tool-Ausfuehren, sondern im Filtern. Ich schneide immer zuerst ein Fenster von plus/minus dreissig Minuten um den bekannten Indikator mit psort.py -o l2tcsv --slice '2026-01-14T22:47:13' --slice_size 30 case.plaso. Dieser Schnitt reduziert von acht Millionen auf rund vierzehntausend Zeilen. Dann filtere ich nach MFT-, EVTX- und Registry-Sources und lade in Timeline Explorer mit Farbcodierung nach Typ. Weiter verengen laesst sich mit einer psort-Filterdatei, die nur relevante Artefakt-Sources und einen Zeitbereich zulaesst. Der Reflex, die ganze Super-Timeline lesen zu wollen, ist der haeufigste Anfaengerfehler; die Kunst ist, sich an einem zeitlichen IOC zu verankern und von dort auszustrahlen. In der Praxis arbeite ich mit zwei bis drei Slices unterschiedlicher Breite: ein enges Fenster fuer die genaue Sekunde der Ausfuehrung, ein mittleres fuer den Kontext der Minuten davor und danach, und ein weites von mehreren Stunden, um Persistenz und spaeteres Beaconing zu erfassen. Jeder Slice wird als eigene CSV in Timeline Explorer geladen, damit die Ansichten nicht ineinander verschwimmen. Wer diszipliniert von eng nach weit arbeitet, verliert sich nicht im Rauschen und behaelt die Kausalkette im Blick.
Artefakte kreuzen: Prefetch, Amcache, MFT, UsnJrnl, EVTX#
Konkretes Beispiel aus dem letzten Lab: Der Detonator war ein LNK, der auf powershell.exe -enc zeigte, ein Muster aehnlich wie in Initial Access Simuliert: Makros, LNK und ISO im Isolierten Windows-11-Lab untersucht. Die erste Spur kam nicht aus EVTX, sie kam aus dem Prefetch (POWERSHELL.EXE-7644F8E2.pf erstellt um 22:47:09, vier Sekunden vor der in Security 4688 protokollierten Ausfuehrung) und aus Amcache.hve, das den SHA1-Hash der ueber BITS nachgeladenen Satelliten-DLL zeigte. UsnJrnl bestaetigte die Dateierstellung unter C:\Users\elias\AppData\Roaming\winlog\runner.dll um 22:46:58, mit MFT-$SI-Zeitstempel gleich $FN, also kein Timestomping in diesem Fall. Diese Kreuzung dreier unabhaengiger Artefakte validiert die Hypothese; eines allein luegt leicht.
Drei Fallen, die Stunden kosten#
Erstens: Timezone. Plaso normalisiert standardmaessig auf UTC, aber EVTX speichert in UTC und manche Registry-Artefakte speichern Local Time als UTC getarnt. Ich fahre immer mit --timezone UTC und dokumentiere den Maschinen-Offset explizit im Report. Zweitens: VSS. Volume Shadow Copies verstecken aeltere Versionen der NTUSER.DAT und koennen Persistenz aufdecken, die geloescht wurde; KAPE sammelt mit --vss und Plaso verarbeitet mit --vss-stores all. Drittens: rauschende EVTX-Parser (Microsoft-Windows-Kernel-General erzeugt Millionen Zeilen) muessen beschnitten werden, sonst verschwendest du Analysezeit. Verwandte Defensiv-Techniken stehen in Windows-Persistenz: 10 Dokumentierte Techniken und ihre Gegenmassnahmen.
Timesketch und die Uebergabe#
Zur Uebergabe exportiere ich den relevanten Slice nach Timesketch (docker compose up, Plaso-Storage direkt ingesten), erstelle ein Sketch mit Tags wie execution, persistence, c2_beacon und generiere einen Report mit der Stories-Funktion. Das wird direkter Input fuer Sigma-Regeln, die kuenftige Detection speisen, und schliesst den in Purple Team in der Praxis: Aufbau eines Red-Blue-Feedback-Zyklus beschriebenen Zyklus. Jeder getaggte Event wird zur nachvollziehbaren Aussage, jede Story zur These mit Belegen. So wird aus einer Nacht-Triage nicht nur ein Bericht, sondern ein Detection-Artefakt, das den naechsten Vorfall frueher sichtbar macht.
Praktische Checkliste#
Erstens: Snapshot vor der Detonation, alles host-only. Zweitens: KAPE-Triage mit erweitertem .tkape (PowerShell, WMI, TaskScheduler). Drittens: read-only Mount der Evidenz im Analyse-Host. Viertens: log2timeline nur mit den relevanten Parsern plus --vss-stores all. Fuenftens: mit psort --slice ein dreissig-Minuten-Fenster um den IOC schneiden. Sechstens: nach MFT, EVTX, Registry, Prefetch und Amcache filtern und in Timeline Explorer farbcodieren. Siebtens: mindestens drei unabhaengige Artefakte kreuzen, bevor du eine Aussage triffst. Achtens: Timezone dokumentieren, VSS einbeziehen, rauschende Parser beschneiden. Neuntens: Slice nach Timesketch, taggen, Story schreiben, Sigma-Regel ableiten. Wer diese neun Schritte diszipliniert geht, liefert in vierzig Minuten eine belastbare Hypothese.
FAQ#
Warum nicht einfach den EDR-Alarm nehmen? Weil im realen Incident oft kein EDR laeuft, der Alarm luecken hat oder der Angreifer Logs geloescht hat. Timeline Forensics rekonstruiert den Ablauf aus Dateisystem- und Registry-Artefakten, die schwerer vollstaendig zu tilgen sind, und kreuzt sie, sodass eine einzelne Manipulation auffaellt.
Reicht KAPE allein oder brauche ich Plaso? KAPE sammelt und parst punktuell, aber die zeitliche Korrelation ueber dutzende Artefakttypen leistet Plaso mit der Super-Timeline. In der Praxis nutzt du beide: KAPE fuer die schnelle, saubere Sammlung, Plaso fuer die einheitliche Zeitachse, Timesketch fuer Uebergabe und Detection. Die Zimmerman-EZ-Tools (MFTECmd, PECmd, AmcacheParser, RECmd) ergaenzen das, wenn du ein einzelnes Artefakt tief inspizieren willst, ohne die ganze Super-Timeline neu zu bauen. So bleibt jeder Schritt schnell und gezielt statt in einer monolithischen Sammelaktion zu ertrinken.
Fazit#
Timeline Forensics ist keine Sammelwut, sondern Disziplin: verankere dich an einem zeitlichen IOC, schneide ein enges Fenster, kreuze mindestens drei unabhaengige Artefakte und schreib erst dann die Erzaehlung. Der Stack aus KAPE, Plaso und Timesketch macht das reproduzierbar und rechtlich verteidigbar. Praktisches Takeaway: Versuch nicht, acht Millionen Events zu lesen. Anker dich am IOC, slice dreissig Minuten, kreuze Prefetch, Amcache, MFT und EVTX, und lass die Zeit gegen die falsche Hypothese aussagen. Genau das trennt eine belastbare Erzaehlung von einem Achselzucken um drei Uhr morgens.


