Skip to content

.fseventsd · 1SLD / 2SLD / 3SLD

Lisez les FSEvents macOS comme une chronologie

Déposez un dossier .fseventsd, un tar.gz UAC ou un ZIP. Chaque fichier journal (1SLD, 2SLD, 3SLD) est décodé en chemins, identifiants d'événement, node IDs et flags en langage clair, placé dans une fenêtre temporelle honnête, avec renommages appariés, arborescence des chemins et constats sur la persistance, la préparation de données et les volumes amovibles. Analysé dans votre navigateur en WebAssembly ; rien n'est envoyé.

Déposez un dossier .fseventsd, un tar.gz UAC, un ZIP ou des fichiers journaux

Fichiers journaux FSEvents (noms à 16 chiffres hexadécimaux, gzip), fseventsd-uuid et no_log. Les collectes UAC, Aftermath et Velociraptor fonctionnent telles quelles ; les fichiers sans rapport sont ignorés. Conservez les dates de modification des fichiers : c'est la seule horloge de FSEvents.

L'exemple est synthétique : les journaux .fseventsd d'un MacBook fictif (FIN-MBP-03) et d'une clé USB nommée EXFIL, lors d'une intrusion le 2026-09-14.

Analysé dans votre navigateur, rien n'est envoyé

FSEvents réside dans un dossier caché .fseventsd à la racine de chaque volume. Copiez le dossier entier en conservant les dates de modification des fichiers : c'est la seule horloge de FSEvents. Un tar.gz fait les deux et peut être déposé ici tel quel.

  1. Archivez .fseventsd avec tar, UAC ou Aftermath
  2. Déposez ici le tar.gz, le ZIP ou le dossier
  3. Analyse locale, rien ne quitte le navigateur

Sur le Mac allumé, accordez d'abord à Terminal l'Accès complet au disque (Full Disk Access) (Réglages Système → Confidentialité et sécurité → Accès complet au disque), sinon la lecture du dossier échoue avec « Operation not permitted ». Puis exécutez, en tant qu'administrateur :

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

L'archive conserve la date de modification de chaque fichier. Déposez-la telle quelle sur la page.

Pour un disque externe monté, archivez son propre .fseventsd de la même façon (il enregistre ce qui a été écrit sur le disque) :

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

Vous préférez un dossier ? ditto conserve aussi les dates de modification ; déposez le dossier obtenu :

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

macOS 10.14 et versions antérieures placent le dossier à la racine du volume de démarrage : utilisez -C / au lieu de -C /System/Volumes/Data.

Pièges

  • Conservez les dates de modification : tar, ditto et cp -p le font ; un glisser-déposer dans le Finder vers certaines destinations, AirDrop, l'e-mail et de nombreux envois vers le cloud, non. Si tous les fichiers affichent la même heure, la page signale les fenêtres comme peu fiables.
  • fseventsd continue d'écrire pendant la collecte : le fichier journal le plus récent peut être incomplet ou encore en mémoire. C'est normal ; le parseur conserve chaque enregistrement complet.
  • Connecter en lecture-écriture le disque ou l'image disque d'un tiers à votre Mac d'analyse y ajoute de nouveaux FSEvents. Utilisez un bloqueur d'écriture ou un montage en lecture seule.
  • Les enregistrements n'ont pas d'horodatage. Les heures affichées ici sont des fenêtres déduites des dates de modification des fichiers ; confirmez les moments importants avec un autre artefact.
  • Le Finder masque .fseventsd. Archivez-le avec tar ou ditto plutôt que d'essayer de le sélectionner dans le Finder.
  • Les fichiers ZIP stockent les dates en heure locale sans fuseau, sauf s'ils comportent le champ d'horodatage étendu ; préférez tar.gz, ou vérifiez les dates dans l'onglet Sources.

Ce qu'enregistre FSEvents

macOS tient un journal persistant des modifications du système de fichiers, écrit par le démon fseventsd pour que Time Machine, Spotlight et les clients de synchronisation puissent savoir ce qui a changé depuis un point donné. Chaque volume dispose d'un dossier caché .fseventsd contenant des fichiers journaux compressés en gzip. Chaque enregistrement comprend un chemin, un identifiant d'événement sur 64 bits et un ensemble de flags (création, suppression, renommage, modification, attribut étendu modifié, montage, …) ; les formats récents ajoutent le node ID du fichier.

Pour une investigation, c'est un historique du volume au niveau des chemins, qui inclut souvent des fichiers qui n'existent plus : une archive restée brièvement dans Downloads, un LaunchAgent écrit puis supprimé, des documents rassemblés dans un dossier caché, ou le contenu d'une clé USB.

Ce que décode le parseur

  • Fichiers journaux gzip, y compris tronqués ou endommagés (tout ce qui est récupérable est conservé et le dommage est signalé), plusieurs membres gzip par fichier, et pages déjà décompressées.
  • Pages dans les trois formats sur disque : 1SLD (chemin, identifiant d'événement, flags), 2SLD (+ node ID, macOS 10.13 et versions ultérieures) et 3SLD (+ un champ supplémentaire de 4 octets, macOS 14 et versions ultérieures), plusieurs pages par fichier.
  • Chaque bit de flag décodé en un nom clair, avec la valeur brute et les noms utilisés par FSEventsParser et mac_apt.
  • fseventsd-uuid (identité du flux et début de l'historique) et marqueurs no_log, un volume par dossier .fseventsd (volume Data, racine du volume ou disque externe).
  • Fenêtres temporelles de chaque fichier journal déduites des dates de modification, paires de renommage par node ID, arborescence des chemins, et exports CSV, Timesketch et JSON.

Les questions auxquelles il aide à répondre

  • Ce fichier ou ce dossier a-t-il existé sur le Mac, et a-t-il été créé, modifié, renommé ou supprimé ?
  • Un LaunchAgent ou un LaunchDaemon a-t-il été écrit, et quand (approximativement) ?
  • Des documents ont-ils été rassemblés dans un dossier caché, copiés sur un volume externe, puis supprimés ?
  • L'attribut de quarantaine a-t-il probablement été retiré d'un téléchargement, ou une autorisation de confidentialité (TCC) modifiée ?
  • Qu'est-ce qui a été écrit sur une clé USB, d'après le propre .fseventsd de la clé ?

Limites à garder en tête

  • Pas d'horodatage : les enregistrements n'ont qu'un identifiant d'événement. Les heures sont des fenêtres entre les dates de modification des fichiers journaux, et ne valent que ce que la collecte en a préservé.
  • Ni utilisateur ni processus : FSEvents n'indique pas qui a effectué une modification. Le champ supplémentaire 3SLD est décodé comme un identifiant d'utilisateur par FSEventsParser ; sa signification n'est pas documentée par Apple.
  • Fusion : plusieurs modifications d'un même chemin peuvent être regroupées en un seul enregistrement (ex. Created + Modified + Removed) ; leur ordre au sein de l'enregistrement est inconnu.
  • Rétention : fseventsd purge les anciens journaux selon son propre calendrier ; quelques semaines à quelques mois d'historique sont courants, sans garantie.
  • Non journalisés : volumes en lecture seule, partages réseau, et les événements les plus récents encore en mémoire au moment de la copie des journaux.

Le collecter en une commande

  • Mac allumé, Terminal avec l'Accès complet au disque (Full Disk Access) : sudo tar -czf ~/Desktop/fseventsd.tar.gz -C /System/Volumes/Data .fseventsd, puis déposez l'archive ici.
  • UAC : le profil ir_triage (ou l'artefact files/logs/macos.yaml seul) collecte chaque dossier .fseventsd dans un tar.gz que cette page lit tel quel.
  • Image disque : montez-la en lecture seule, puis archivez le .fseventsd du volume Data de la même façon.

FAQ

Mes fichiers sont-ils envoyés quelque part ?

Non. Le parseur est écrit en Rust, compilé en WebAssembly et s'exécute dans un Web Worker de votre navigateur. Les fichiers ne quittent jamais votre machine ; une fois chargée, la page fonctionne hors ligne.

Pourquoi n'y a-t-il pas d'horodatage exact ?

Les enregistrements FSEvents n'en contiennent pas. Un fichier journal est écrit lorsque fseventsd le vide sur disque : sa date de modification est donc une borne supérieure pour ses enregistrements, et la date du fichier journal précédent une borne inférieure approximative. Le parseur affiche cette fenêtre pour chaque enregistrement et indique comment elle a été calculée.

Quelles versions de macOS sont prises en charge ?

Les trois formats sur disque : 1SLD (anciennes versions de macOS), 2SLD (macOS 10.13 High Sierra et versions ultérieures, ajoute les node IDs) et 3SLD (macOS 14 Sonoma et versions ultérieures, ajoute un champ de 4 octets). Les dossiers mixtes sont gérés.

Peut-il lire directement une collecte UAC ?

Oui. Déposez le tar.gz UAC : la page le lit en flux, ne conserve que les fichiers .fseventsd et utilise les dates de modification stockées dans l'archive. Les ZIP Aftermath et Velociraptor ainsi que les simples dossiers fonctionnent aussi.

Que se passe-t-il avec un fichier journal tronqué ou corrompu ?

Tout ce qui peut être décompressé est analysé, les enregistrements complets sont conservés, et le fichier est marqué Partiel avec la raison (gzip tronqué, CRC incorrect, page dépassant les données, enregistrement endommagé).

Comment se compare-t-il à FSEventsParser et mac_apt ?

Il décode les mêmes structures sur disque et les mêmes bits de flags (les noms des deux outils sont affichés), ajoute des fenêtres temporelles, l'appariement des renommages, une arborescence des chemins et des constats, et ne nécessite ni Python ni installation. Pour un usage judiciaire, validez les enregistrements importants avec un second outil.

Blog

Lire les guides

Blog