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
| macOS | Pfad | Hinweise |
|---|---|---|
| 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, diefseventsdanweist, 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
| Feld | Bedeutung |
|---|---|
Page Magic 1SLD | Seite der Version 1: Pfad, Ereignis-ID (8 Byte), Flags (4 Byte) |
Page Magic 2SLD | Seite der Version 2 (ab macOS 10.13 High Sierra): ergänzt die Node-ID (8 Byte) |
Page Magic 3SLD | Seite 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 |
| Pfad | Nullterminierter Pfad relativ zur Volume-Wurzel, wie er zum Zeitpunkt der Protokollierung lautete |
| Ereignis-ID | 64-Bit-Zähler pro Volume; nur zur Reihenfolge |
| Flags | Bitmaske aus Änderungsart und Objekttyp |
| Node-ID | ID 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:
- Änderungszeit der Log-Datei. Eine Datei wird geschrieben, wenn
fseventsdleert. Ihre mtime ist daher eine Obergrenze für ihre Einträge, die mtime der vorherigen Datei eine grobe Untergrenze. - Datierte Pfade. Pfade mit Datum im Namen (rotierte Logs, Snapshot-Namen, Diagnoseberichte), die als
Createderscheinen, verankern benachbarte Ereignis-IDs. FSEventsParser füllt damit seine Spalteapprox_dates_plus_minus_one_day. - 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_triageundfullenthalten das Artefaktfiles/logs/macos.yaml, das/.fseventsdund/System/Volumes/*/.fseventsdsichert. - mac_apt: Das Plugin
FSEVENTSliest den Ordner direkt aus einem E01-, DMG-, Raw- oder eingehängten Image. - Aftermath: standardmäßig nicht gesichert; fügen Sie den Ordner mit
--collect-dirshinzu. - Wechselmedien: Erstellen Sie ein Image des Laufwerks oder kopieren Sie dessen
.fseventsdmit 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. ExtendedAttrRemovedbei 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/LaunchAgentsundLibrary/LaunchDaemonsfür kurzlebige Persistenz; siehe Launch Agents und Daemons. - Eine Datei
no_logoder eine jungefseventsd-uuidkann 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.fseventsddes Laufwerks und den Belegen zu USB-Geräten. - Zusammenfassung: Ein Eintrag kann
Created;Modified;Removedkombinieren. 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
Verwandte Artefakte
Ausführliche Leitfäden
Glossar
- fseventsd (FSEvents)Englisch
- APFS (Apple File System)Englisch