Skip to content

Collecter .fseventsd : tar, UAC, Aftermath, Velociraptor

Collecter les journaux FSEvents de macOS sans perdre leurs dates de modification : une commande tar, UAC, Aftermath, Velociraptor et images disque.

Publié le 4 min de lecture

En bref. Archivez le dossier complet, conservez les dates de modification, n'écrivez rien sur la preuve. Sur un Mac allumé, accordez à Terminal l'Accès complet au disque (Full Disk Access) et exécutez sudo tar -czf ~/Desktop/fseventsd.tar.gz -C /System/Volumes/Data .fseventsd. Le profil ir_triage d'UAC fait la même chose dans le cadre d'une collecte plus large. Les deux archives peuvent être déposées telles quelles dans le FSEvents Parser. La fiche de référence rapide de cet artefact se trouve sur l'aide-mémoire FSEvents.

Que collecter

CheminPourquoi
/System/Volumes/Data/.fseventsd/macOS 10.15 et versions ultérieures : activité utilisateur, Users/…, private/…, Library/…
/.fseventsd/macOS 10.14 et versions antérieures (volume de démarrage)
/Volumes/<name>/.fseventsd/Chaque disque externe, si vous l'avez en main

Prenez tous les fichiers du dossier : les journaux aux noms hexadécimaux, fseventsd-uuid et no_log s'il est présent. Le parseur utilise la date de fseventsd-uuid comme borne inférieure du journal le plus ancien, et l'absence de no_log est en soi une information (voir no_log).

Les dates de modification sont la preuve. La fenêtre temporelle d'un enregistrement provient des mtimes des fichiers journaux (pourquoi). tar, ditto et cp -p les conservent ; AirDrop, l'e-mail et de nombreux envois vers le cloud, non.

Mac allumé : une seule commande

Accordez d'abord à Terminal l'Accès complet au disque (Réglages Système → Confidentialité et sécurité → Accès complet au disque). Sans cela, la lecture du dossier échoue avec « Operation not permitted », même en root.

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

Pour un disque externe connecté, archivez son propre dossier de la même manière :

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

Vous préférez un simple dossier ? ditto conserve lui aussi les dates de modification, et un listing les documente de façon indépendante :

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

Sur macOS 10.14 et versions antérieures, remplacez -C /System/Volumes/Data par -C /.

fseventsd continue d'écrire pendant la collecte : le journal le plus récent peut être incomplet ou encore en mémoire. C'est normal ; un bon parseur conserve chaque enregistrement complet et signale le reste.

UAC

UAC collecte /.fseventsd et /System/Volumes/*/.fseventsd via son artefact files/logs/macos.yaml. Les profils ir_triage et full l'incluent :

sudo ./uac -p ir_triage /Volumes/CASE

Pour ne collecter que l'artefact des journaux :

sudo ./uac -a ./artifacts/files/logs/macos.yaml /Volumes/CASE

Lancez-le depuis un Terminal disposant de l'Accès complet au disque. Le résultat est un tar.gz qui conserve les dates de modification ; le FSEvents Parser le lit en flux et n'en extrait que les fichiers .fseventsd.

Aftermath

Aftermath, de Jamf, ne collecte pas .fseventsd par défaut. Ajoutez explicitement le dossier :

sudo ./aftermath --collect-dirs /System/Volumes/Data/.fseventsd -o /Volumes/CASE

Déposez le ZIP obtenu, puis vérifiez l'onglet Sources : si tous les journaux affichent la même date de modification, les dates n'ont pas été conservées et il faut refaire la collecte avec tar.

Velociraptor

Deux options :

  • Collecter les fichiers bruts avec Generic.Collectors.File, Root /, et une collection spec qui liste /System/Volumes/Data/.fseventsd/* et /.fseventsd/*. Déposez le ZIP de collecte, puis vérifiez les dates dans l'onglet Sources comme ci-dessus.
  • Parser sur le poste avec MacOS.Forensics.FSEvents, qui restitue chaque enregistrement avec les dates de son fichier source. C'est pratique pour une recherche (hunting) sur de nombreux Mac ; sa sortie est une table de résultats Velociraptor, pas des fichiers que cette page sait lire. Sa valeur par défaut de MaxFileSize est de 10 Mo et son délai d'expiration de 600 secondes ; augmentez les deux pour les dossiers volumineux.

Images disque

Montez l'image en lecture seule et sans Finder, puis archivez le dossier du volume Data :

hdiutil attach -readonly -nobrowse /cases/MBP01.dmg
sudo tar -czf ~/Desktop/fseventsd-image.tar.gz -C "/Volumes/Macintosh HD - Data" .fseventsd

Ne montez jamais une preuve en lecture-écriture sur votre Mac d'analyse : son propre fseventsd commencerait à journaliser sur le volume de preuve. Il en va de même pour les disques USB : utilisez un bloqueur d'écriture. Pour les images E01, le plugin FSEVENTS de mac_apt lit directement le dossier et constitue un second avis utile.

Check-list

  1. Accès complet au disque pour l'application de collecte.
  2. Dossier complet, y compris fseventsd-uuid et no_log.
  3. tar, ditto, cp -p ou UAC ; conservez les mtimes.
  4. Disques externes derrière un bloqueur d'écriture.
  5. Après le chargement, vérifiez dans l'onglet Sources que les mtimes semblent d'origine.

FAQ

Pourquoi les dates de modification des fichiers comptent-elles pour FSEvents ?

Les enregistrements FSEvents n'ont pas d'horodatage. La date de modification de chaque fichier journal est la seule horloge disponible : une copie qui réinitialise ces dates rend tous les enregistrements impossibles à dater.

UAC collecte-t-il .fseventsd ?

Oui. L'artefact files/logs/macos.yaml collecte /.fseventsd et /System/Volumes/*/.fseventsd, et les profils ir_triage et full l'incluent. Le résultat est un tar.gz qui conserve les dates de modification.

Pourquoi tar échoue-t-il avec « Operation not permitted » ?

L'application Terminal n'a pas l'Accès complet au disque (Full Disk Access). Accordez-le dans Réglages Système, Confidentialité et sécurité, Accès complet au disque, puis relancez la commande avec sudo.

Articles liés