Zum Inhalt springen

DateizugriffAnti-Forensik

FSEvents (.fseventsd): Änderungsprotokoll des Dateisystems

Gzip-Logs pro Volume von fseventsd, die erstellte, geänderte, umbenannte und gelöschte Pfade erfassen, oft die einzige Spur einer entfernten Datei.

Speicherort
/System/Volumes/Data/.fseventsd/
Belegt
Welche Pfade auf einem Volume erstellt, geändert, umbenannt oder gelöscht wurden, in Ereignisreihenfolge
Zeitstempel
Keine pro Eintrag; Schätzung über die mtime der Log-Datei und datierte Pfade
Zugriff
root; auf einem Live-System Full Disk Access
Aufbewahrung
Fortlaufend, von fseventsd bereinigt (Monate beobachtet, variiert)
Sicherung
UAC, mac_apt, Disk image, ditto

Was es ist

Der Daemon fseventsd führt ein dauerhaftes Journal der Dateisystemänderungen, damit Anwendungen (Time Machine, Spotlight, Sync-Clients) fragen können: „Was hat sich unter diesem Ordner seit Ereignis X geändert?“ Jedes beschreibbare Volume, das er überwacht, erhält einen versteckten Ordner .fseventsd mit gzip-komprimierten Log-Dateien. Jeder Eintrag besteht aus einem Pfad, einer 64-Bit-Ereignis-ID und einer Flag-Maske, neuere Formate ergänzen eine Node-ID.

Für die forensische Analyse ist das eine Historie des Volumes auf Pfadebene: Dateien, die in /private/tmp erstellt und wieder gelöscht wurden, ein Archiv, das kurzzeitig in ~/Downloads lag, eine LaunchAgent-Plist, die geschrieben und später entfernt wurde, oder der Inhalt eines USB-Sticks. Der ausführliche FSEvents-Leitfaden behandelt das Format im Detail, diese Seite ist die Kurzreferenz.

Wo es liegt

macOSPfadHinweise
10.15 Catalina und neuer/System/Volumes/Data/.fseventsd/Das Data-Volume enthält die Benutzeraktivität; Pfade darin sind relativ zur Wurzel des Data-Volumes
10.14 und älter/.fseventsd/Einzelnes Boot-Volume
Alle, externes oder Wechselmedium/Volumes/<name>/.fseventsd/Wandert mit dem Laufwerk

Im Ordner:

  • Log-Dateien mit 16-stelligen hexadezimalen Namen, die aus Ereignis-IDs abgeleitet sind und daher in Ereignisreihenfolge sortieren.
  • fseventsd-uuid: identifiziert den Ereignisstrom dieses Volumes. Eine neue UUID bedeutet, dass die Historie zurückgesetzt wurde.
  • no_log (optional): eine leere Datei, die fseventsd anweist, das Volume nicht zu protokollieren.

Schutz: Der Ordner gehört root. Auf einem Live-System benötigt der sichernde Prozess zusätzlich Full Disk Access. mac_apt prüft außerdem /private/var/db/fseventsd als alternativen Speicherort.

Was es belegt

  • Dass eine Datei oder ein Ordner mit einem bestimmten Namen unter einem Pfad auf diesem Volume existierte, auch nach dem Löschen.
  • Die Art der Änderung: erstellt, geändert, umbenannt oder verschoben, entfernt, Rechte oder Eigentümer geändert, erweitertes Attribut hinzugefügt oder entfernt (etwa das Entfernen von com.apple.quarantine).
  • Die relative Reihenfolge der Änderungen auf einem Volume (Ereignis-IDs steigen monoton).
  • Dass ein Wechselmedium an einem Mac beschrieben wurde und welche Pfade darauf berührt wurden.

Es belegt nicht:

  • Einen genauen Zeitpunkt. Einträge tragen keinen Zeitstempel.
  • Welcher Benutzer oder Prozess die Änderung vorgenommen hat.
  • Dateiinhalte. Kombinieren Sie es mit APFS-Snapshots, Time Machine oder Carving.
  • Aktivität auf schreibgeschützten Mounts oder Netzwerkfreigaben, die nicht protokolliert werden.

Wichtige Felder

FeldBedeutung
Page Magic 1SLDSeite der Version 1: Pfad, Ereignis-ID (8 Byte), Flags (4 Byte)
Page Magic 2SLDSeite der Version 2 (ab macOS 10.13 High Sierra): ergänzt die Node-ID (8 Byte)
Page Magic 3SLDSeite der Version 3 (ab macOS 14 Sonoma): ergänzt ein weiteres 4-Byte-Feld, das FSEventsParser als Benutzer-ID (fs_uid) dekodiert und mac_apt als unbekannt belässt
PfadNullterminierter Pfad relativ zur Volume-Wurzel, wie er zum Zeitpunkt der Protokollierung lautete
Ereignis-ID64-Bit-Zähler pro Volume; nur zur Reihenfolge
FlagsBitmaske aus Änderungsart und Objekttyp
Node-IDID des Dateisystemobjekts (auf APFS die Inode-Nummer); verknüpft eine Datei über Umbenennungen hinweg

Gängige Flag-Namen in Parsern: Created, Removed, Renamed (mac_apt: RenamedOrMoved), Modified, InodeMetaMod, PermissionChange, ExtendedAttrModified / ExtendedAttrRemoved (mac_apt: XAttrModified / XAttrRemoved), FinderInfoMod, FolderCreated, Exchange, ItemCloned, LastHardLinkRemoved, Mount, Unmount, EndOfTransaction, dazu Objekttypen wie FileEvent, FolderEvent, SymbolicLink, HardLink. Die Bitwerte auf der Platte unterscheiden sich von Apples öffentlichen API-Konstanten FSEventStreamEventFlags. Vertrauen Sie daher einem Parser, der das Layout auf der Platte dekodiert.

Zeitstempel

In den Einträgen gibt es keine. Schätzen Sie die Zeit anhand von:

  1. Änderungszeit der Log-Datei. Eine Datei wird geschrieben, wenn fseventsd leert. Ihre mtime ist daher eine Obergrenze für ihre Einträge, die mtime der vorherigen Datei eine grobe Untergrenze.
  2. Datierte Pfade. Pfade mit Datum im Namen (rotierte Logs, Snapshot-Namen, Diagnoseberichte), die als Created erscheinen, verankern benachbarte Ereignis-IDs. FSEventsParser füllt damit seine Spalte approx_dates_plus_minus_one_day.
  3. Korrelation. Ein echter Zeitstempel aus einem anderen Artefakt für einen Pfad (APFS-Erstellungszeit, ein Quarantäne-Ereignis, ein Eintrag in den Unified Logs) datiert seine Nachbarn.

Geben Sie FSEvents-Zeiten immer als Zeitraum an und nennen Sie den verwendeten Anker.

Aufbewahrung

Kein fester Zeitraum. fseventsd bereinigt ältere Log-Dateien selbstständig, und die Historie hängt von Aktivität und Platz auf dem Volume ab. CrowdStrike berichtete von Ereignissen, die auf typischen Systemen etwa vier Monate alt waren; stark genutzte Volumes halten womöglich deutlich weniger. Eine geänderte fseventsd-uuid oder eine Neuformatierung des Volumes beginnt eine neue Historie. Sichern Sie früh und bewahren Sie die mtimes der Dateien.

Sicherung

Kopieren Sie den gesamten Ordner und erhalten Sie die Änderungszeiten (sie sind Ihre einzige Uhr):

# Live, as root, from a terminal with Full Disk Access
sudo ditto /System/Volumes/Data/.fseventsd /Volumes/CASE/MBP01/fseventsd
sudo ls -lT /System/Volumes/Data/.fseventsd > /Volumes/CASE/MBP01/fseventsd_listing.txt
  • UAC: Die Profile ir_triage und full enthalten das Artefakt files/logs/macos.yaml, das /.fseventsd und /System/Volumes/*/.fseventsd sichert.
  • mac_apt: Das Plugin FSEVENTS liest den Ordner direkt aus einem E01-, DMG-, Raw- oder eingehängten Image.
  • Aftermath: standardmäßig nicht gesichert; fügen Sie den Ordner mit --collect-dirs hinzu.
  • Wechselmedien: Erstellen Sie ein Image des Laufwerks oder kopieren Sie dessen .fseventsd mit derselben Sorgfalt.

Auswertung

FSEventsParser (verarbeitet 1SLD, 2SLD und 3SLD) schreibt eine SQLite-Datenbank und TSV-Berichte:

python3 FSEParser_V4.1.py -s /cases/MBP01/fseventsd -t folder -o /cases/MBP01/out -c MBP01
-- FSEventsParser schema: deleted items under a user's Downloads
SELECT id_hex, fullpath, type, flags, approx_dates_plus_minus_one_day, source, source_modified_time
FROM fsevents_sorted_by_event_id
WHERE fullpath LIKE 'Users/%/Downloads/%' AND flags LIKE '%Removed;%'
ORDER BY id;

mac_apt wertet dieselben Daten aus einem Image aus, mit einer Spalte SourceModDate für jeden Eintrag:

python3 mac_apt.py -o /cases/MBP01/mac_apt E01 /cases/MBP01.E01 FSEVENTS

FSEvents Parser dekodiert einen .fseventsd-Ordner (oder eine UAC-, Aftermath- oder Velociraptor-Sammlung) im Browser, mit dekodierten Flags, Zeitfenstern, Umbenennungspaaren und CSV- oder Timesketch-Export; es wird nichts hochgeladen.

Tipps für die Untersuchung

  • Ordnen Sie Renamed-Einträge über die Node-ID paarweise zu (ab Version 2), um eine Datei über Umbenennungen und Verschiebungen zu verfolgen.
  • ExtendedAttrRemoved bei einem frisch heruntergeladenen App-Bundle kann bedeuten, dass das Quarantäne-Attribut entfernt wurde. Prüfen Sie die Quarantäne-Ereignisse.
  • Achten Sie auf Pfade unter Library/LaunchAgents und Library/LaunchDaemons für kurzlebige Persistenz; siehe Launch Agents und Daemons.
  • Eine Datei no_log oder eine junge fseventsd-uuid kann gezielte Anti-Forensik sein oder nur ein anderswo formatiertes Volume. Prüfen Sie die Unified Logs und die APFS-Zeitstempel dieser Dateien.
  • Auf dem internen Data-Volume zeigen neue Pfade Volumes/<name>, dass ein Volume eingehängt wurde. Kombinieren Sie das mit dem eigenen .fseventsd des Laufwerks und den Belegen zu USB-Geräten.
  • Zusammenfassung: Ein Eintrag kann Created;Modified;Removed kombinieren. Die genaue Reihenfolge innerhalb eines Eintrags lässt sich nicht rekonstruieren.
  • Die ausgewertete Ausgabe überschreitet leicht eine Million Zeilen. Filtern Sie zuerst nach Pfad (Users/*/Downloads, private/tmp, Users/Shared, Library/LaunchAgents) und erweitern Sie dann.
  • Deduplizieren Sie vor dem Bericht: FSEventsParser dedupliziert nicht, und gecarvte gzip-Dateien können Einträge wiederholen.

Siehe auch