Skip to content

.fseventsd · 1SLD / 2SLD / 3SLD

macOS-FSEvents als Timeline lesen

Legen Sie einen .fseventsd-Ordner, ein UAC-tar.gz oder ein ZIP ab. Jede Logdatei (1SLD, 2SLD, 3SLD) wird in Pfade, Event-IDs, Node-IDs und verständliche Flags dekodiert und einem ehrlichen Zeitfenster zugeordnet – mit gepaarten Umbenennungen, einem Pfadbaum und Befunden zu Persistenz, Staging und Wechseldatenträgern. Die Analyse läuft per WebAssembly im Browser; es wird nichts hochgeladen.

Einen .fseventsd-Ordner, ein UAC-tar.gz, ein ZIP oder einzelne Logdateien ablegen

FSEvents-Logdateien (16-stellige Hex-Namen, gzip), fseventsd-uuid und no_log. Sicherungen aus UAC, Aftermath und Velociraptor funktionieren direkt; fremde Dateien werden übersprungen. Erhalten Sie die Änderungszeiten der Dateien: Sie sind die einzige Uhr, die FSEvents hat.

Das Beispiel ist synthetisch: die .fseventsd-Logs eines fiktiven MacBook (FIN-MBP-03) und eines USB-Sticks namens EXFIL während eines Einbruchs am 2026-09-14.

Analyse im Browser, nichts wird hochgeladen

FSEvents liegt in einem versteckten .fseventsd-Ordner im Stammverzeichnis jedes Volumes. Kopieren Sie den ganzen Ordner und erhalten Sie die Änderungszeiten der Dateien: Sie sind die einzige Uhr, die FSEvents hat. Ein tar.gz leistet beides und kann hier direkt abgelegt werden.

  1. .fseventsd mit tar, UAC oder Aftermath archivieren
  2. tar.gz, ZIP oder Ordner hier ablegen
  3. Lokale Analyse, nichts verlässt den Browser

Erteilen Sie auf dem laufenden Mac dem Terminal zuerst Festplattenvollzugriff (Full Disk Access) unter Systemeinstellungen → Datenschutz & Sicherheit → Festplattenvollzugriff; andernfalls scheitert das Lesen des Ordners mit „Operation not permitted“. Führen Sie dann als Administrator aus:

Terminal · sudo
sudo tar -czf ~/Desktop/fseventsd-$(hostname -s).tar.gz -C /System/Volumes/Data .fseventsd

Das Archiv erhält die Änderungszeit jeder Datei. Legen Sie es unverändert auf der Seite ab.

Bei einem eingehängten externen Laufwerk archivieren Sie dessen eigenen .fseventsd-Ordner auf dieselbe Weise (er protokolliert, was auf das Laufwerk geschrieben wurde):

Terminal · sudo
sudo tar -czf ~/Desktop/fseventsd-EXFIL.tar.gz -C /Volumes/EXFIL .fseventsd

Lieber einen Ordner? Auch ditto erhält die Änderungszeiten; legen Sie den resultierenden Ordner ab:

Terminal · sudo
sudo ditto /System/Volumes/Data/.fseventsd ~/Desktop/fseventsd
sudo ls -laT /System/Volumes/Data/.fseventsd > ~/Desktop/fseventsd-listing.txt

macOS 10.14 und älter speichern den Ordner im Stammverzeichnis des Startvolumes: Verwenden Sie -C / statt -C /System/Volumes/Data.

Stolperfallen

  • Änderungszeiten erhalten: tar, ditto und cp -p tun das; Ziehen im Finder auf manche Ziele, AirDrop, E-Mail und viele Cloud-Uploads nicht. Zeigen alle Dateien dieselbe Zeit, markiert die Seite die Zeitfenster als unzuverlässig.
  • fseventsd schreibt während der Sicherung weiter: Die neueste Logdatei ist möglicherweise unvollständig oder noch im Speicher. Das ist normal; der Parser behält jeden vollständigen Datensatz.
  • Wer das Laufwerk oder Disk-Image eines anderen mit Schreibzugriff an den eigenen Analyse-Mac anhängt, erzeugt darauf neue FSEvents. Verwenden Sie einen Writeblocker oder hängen Sie schreibgeschützt ein.
  • Datensätze haben keinen Zeitstempel. Die hier gezeigten Zeiten sind aus Änderungszeiten abgeleitete Fenster; bestätigen Sie wichtige Zeitpunkte mit einem weiteren Artefakt.
  • Der Finder blendet .fseventsd aus. Archivieren Sie ihn mit tar oder ditto, statt ihn im Finder auswählen zu wollen.
  • ZIP-Dateien speichern Zeiten als lokale Zeit ohne Zone, sofern sie nicht das erweiterte Zeitstempelfeld enthalten; bevorzugen Sie tar.gz oder prüfen Sie die Zeiten im Tab „Quellen“.

Was FSEvents aufzeichnet

macOS führt ein dauerhaftes Protokoll der Dateisystemänderungen, geschrieben vom Daemon fseventsd, damit Time Machine, Spotlight und Sync-Clients abfragen können, was sich seit einem bestimmten Punkt geändert hat. Jedes Volume erhält einen versteckten .fseventsd-Ordner mit gzip-komprimierten Logdateien. Jeder Datensatz besteht aus einem Pfad, einer 64-Bit-Event-ID und einer Reihe von Flags (erstellt, entfernt, umbenannt, geändert, erweitertes Attribut geändert, Einhängen, …); neuere Formate ergänzen die Node-ID der Datei.

Für eine Untersuchung ist das eine Historie des Volumes auf Pfadebene, oft einschließlich Dateien, die nicht mehr existieren: ein Archiv, das kurz in Downloads lag, ein LaunchAgent, der geschrieben und wieder entfernt wurde, in einem versteckten Ordner gesammelte Dokumente oder der Inhalt eines USB-Sticks.

Was der Parser dekodiert

  • gzip-Logdateien, auch abgeschnittene oder beschädigte (alles Wiederherstellbare bleibt erhalten und der Schaden wird gemeldet), mehrere gzip-Member pro Datei sowie bereits dekomprimierte Seiten.
  • Seiten in den drei On-Disk-Formaten: 1SLD (Pfad, Event-ID, Flags), 2SLD (+ Node-ID, macOS 10.13 und neuer) und 3SLD (+ ein 4-Byte-Zusatzfeld, macOS 14 und neuer), mehrere Seiten pro Datei.
  • Jedes Flag-Bit mit verständlichem Namen, samt Rohwert und den Namen, die FSEventsParser und mac_apt verwenden.
  • fseventsd-uuid (Stream-Identität und Beginn der Historie) und no_log-Markierungen, ein Volume pro .fseventsd-Ordner (Data-Volume, Volume-Stammverzeichnis oder externes Laufwerk).
  • Zeitfenster für jede Logdatei aus den Änderungszeiten, Umbenennungspaare über die Node-ID, ein Pfadbaum sowie Exporte als CSV, Timesketch und JSON.

Welche Fragen es beantwortet

  • Hat diese Datei oder dieser Ordner je auf dem Mac existiert, und wurde sie oder er erstellt, geändert, umbenannt oder entfernt?
  • Wurde ein LaunchAgent oder LaunchDaemon geschrieben, und wann (ungefähr)?
  • Wurden Dokumente in einem versteckten Ordner gesammelt, auf ein externes Volume kopiert und dann gelöscht?
  • Wurde bei einem Download vermutlich das Quarantäne-Attribut entfernt oder eine Datenschutzberechtigung (TCC) geändert?
  • Was wurde auf ein USB-Laufwerk geschrieben – anhand des laufwerkseigenen .fseventsd?

Grenzen, die man kennen sollte

  • Keine Zeitstempel: Datensätze haben nur eine Event-ID. Zeiten sind Fenster zwischen den Änderungszeiten der Logdateien und nur so gut, wie die Sicherung sie erhalten hat.
  • Kein Benutzer, kein Prozess: FSEvents sagt nicht, wer eine Änderung vorgenommen hat. Das 3SLD-Zusatzfeld wird von FSEventsParser als Benutzer-ID dekodiert; seine Bedeutung ist von Apple nicht dokumentiert.
  • Zusammenfassung (Coalescing): Mehrere Änderungen an einem Pfad können in einem Datensatz zusammengeführt werden (z. B. Created + Modified + Removed); ihre Reihenfolge innerhalb des Datensatzes ist unbekannt.
  • Aufbewahrung: fseventsd löscht alte Logs nach eigenem Zeitplan; typisch sind Wochen bis Monate an Historie, garantiert ist das nicht.
  • Nicht protokolliert: schreibgeschützte Volumes, Netzwerkfreigaben und die jüngsten Ereignisse, die beim Kopieren der Logs noch im Speicher lagen.

Mit einem Befehl sichern

  • Laufender Mac, Terminal mit Festplattenvollzugriff: sudo tar -czf ~/Desktop/fseventsd.tar.gz -C /System/Volumes/Data .fseventsd, dann das Archiv hier ablegen.
  • UAC: Das Profil ir_triage (oder allein das Artefakt files/logs/macos.yaml) sichert jeden .fseventsd-Ordner in ein tar.gz, das diese Seite direkt liest.
  • Disk-Image: schreibgeschützt einhängen und dann den .fseventsd-Ordner des Data-Volumes auf dieselbe Weise archivieren.

FAQ

Werden meine Dateien irgendwohin hochgeladen?

Nein. Der Parser ist in Rust geschrieben, nach WebAssembly kompiliert und läuft in einem Web Worker in Ihrem Browser. Die Dateien verlassen Ihren Rechner nie; einmal geladen, funktioniert die Seite auch offline.

Warum gibt es keine exakten Zeitstempel?

FSEvents-Datensätze enthalten keinen. Eine Logdatei wird geschrieben, wenn fseventsd sie auf die Festplatte schreibt; ihre Änderungszeit ist daher eine Obergrenze für ihre Datensätze und die Zeit der vorherigen Logdatei eine grobe Untergrenze. Der Parser zeigt dieses Fenster für jeden Datensatz an und erklärt, wie es hergeleitet wurde.

Welche macOS-Versionen werden unterstützt?

Alle drei On-Disk-Formate: 1SLD (ältere macOS-Versionen), 2SLD (macOS 10.13 High Sierra und neuer, ergänzt Node-IDs) und 3SLD (macOS 14 Sonoma und neuer, ergänzt ein 4-Byte-Feld). Gemischte Ordner werden unterstützt.

Kann es eine UAC-Sicherung direkt lesen?

Ja. Legen Sie das UAC-tar.gz ab: Die Seite liest es als Stream, behält nur die .fseventsd-Dateien und verwendet die im Archiv gespeicherten Änderungszeiten. ZIPs aus Aftermath und Velociraptor sowie einfache Ordner funktionieren ebenfalls.

Was passiert mit einer abgeschnittenen oder beschädigten Logdatei?

Alles, was sich dekomprimieren lässt, wird analysiert, vollständige Datensätze bleiben erhalten, und die Datei wird mit Begründung als „Teilweise“ markiert (abgeschnittenes gzip, CRC-Fehler, Seite reicht über die Daten hinaus, beschädigter Datensatz).

Wie schneidet es im Vergleich zu FSEventsParser und mac_apt ab?

Es dekodiert dieselben On-Disk-Strukturen und Flag-Bits (die Namen beider Tools werden angezeigt), ergänzt Zeitfenster, Umbenennungspaare, einen Pfadbaum und Befunde und benötigt weder Python noch eine Installation. Für gerichtsverwertbare Arbeit sollten wichtige Datensätze mit einem zweiten Tool validiert werden.

Blog

Zu den Leitfäden

Blog