Investigation FSEvents : une exfiltration sur Mac pas à pas
Une intrusion macOS fictive retracée avec FSEvents seul : téléchargement, LaunchAgent, accès complet au disque, dossier caché, clé USB et nettoyage.
En bref. À partir des seuls journaux .fseventsd d'un portable et d'une clé USB, on peut montrer qu'entre 10:05 et 10:50 UTC environ, quelqu'un a téléchargé et décompressé tools.zip, retiré un attribut étendu, écrit un LaunchAgent, provoqué une modification TCC, rassemblé 48 documents financiers dans un dossier caché, les a copiés sur une clé nommée EXFIL, puis a supprimé le dossier de préparation. Tout ce qui suit correspond à l'exemple synthétique du FSEvents Parser : cliquez sur Essayer un exemple pour suivre pas à pas.
Le cas
Ce cas prolonge l'intrusion fictive qui a commencé sur le poste Windows FIN-WKS-07 (le compte svc_backup). Le même acteur a utilisé une session volée sur FIN-MBP-03, le MacBook de dana.whitlock, employée du service financier, le 2026-09-14. L'intervenant dispose de deux archives : le .fseventsd du volume Data et le .fseventsd d'une clé USB trouvée sur le bureau, imagée derrière un bloqueur d'écriture.
1. Charger les journaux
Déposez les deux archives (ou chargez l'exemple). L'onglet Sources affiche deux volumes : le volume Data (sept journaux 3SLD) et EXFIL (un journal). La ligne de datation indique « les dates des fichiers semblent d'origine » : les mtimes des journaux s'étalent sur la matinée, les fenêtres temporelles sont donc fiables. L'historique du volume EXFIL commence à 10:31:14, date de modification de son fseventsd-uuid : c'est à ce moment que fseventsd a vu la clé pour la première fois.
2. Définir la fenêtre
Dans la barre de plage temporelle, saisissez 2026-09-14 10:00:00 → 10:55:00 UTC (l'exemple propose un bouton en un clic). L'indicateur affiche 770 sur 1 068 enregistrements et l'URL s'enrichit de #from=2026-09-14T10:00:00Z&to=2026-09-14T10:55:00Z. Tous les compteurs, constats et exports utilisent désormais cette fenêtre. Conservez le champ temporel par défaut, fenêtre approximative (chevauchement), pour ne rien manquer (pourquoi).
3. Lire les constats
- LaunchAgent écrit.
~/Library/LaunchAgents/com.example.updater.plist.tmpest créé, puis renommé encom.example.updater.plistet ses métadonnées modifiées, entre 10:09:55 et 10:23:18. Voir launch agent. - Base TCC modifiée. Le fichier système
Library/Application Support/com.apple.TCC/TCC.db(et son-wal) est modifié dans la même fenêtre, juste aprèscom.apple.systempreferences.plist. C'est cohérent avec l'octroi de l'Accès complet au disque à Terminal ; les lignes de TCC.db permettraient de le confirmer (base TCC). - Attributs étendus supprimés.
Downloads/tools/sync-helperetDownloads/tools/com.example.updater.plistperdent un attribut entre 09:58:40 et 10:09:55, après avoir été extraits avec celui-ci. Le retrait decom.apple.quarantineest une explication probable ; FSEvents ne peut pas nommer l'attribut (attribut de quarantaine). - Dossier caché.
Users/dana.whitlock/Library/Caches/.syncest créé avec 48 tableurs, CSV et PDF. - Volume externe EXFIL.
Volumes/EXFILest monté puis démonté sur le volume Data ; sur la clé,exfil/reçoit les mêmes 48 noms, chacun accompagné de son fichier AppleDouble._. - Suppression massive. 48 suppressions dans
.sync, puis celle du dossier lui-même, entre 10:38:02 et 10:52:41. - Fichiers éphémères.
Downloads/tools/*etDownloads/tools.zipapparaissent puis disparaissent dans l'historique chargé.
Aucun de ces éléments ne prouve à lui seul une intention. Ensemble, et dans cet ordre, ils racontent une histoire cohérente.
4. Suivre les fichiers
- Ouvrez la suppression de
tools.zipet cliquez sur Afficher tous les enregistrements de ce chemin : l'archive arrive par un renommage depuistools.zip.download/tools.zip(le paquet de téléchargement de Safari), reçoit ses attributs, puis est supprimée à la fin. L'onglet Renommages associe les deux côtés grâce à leur node ID commun. - Filtrez sur
node:suivi du node ID du LaunchAgent pour voir le nom.tmpet le nom final comme un seul et même objet. - L'Arborescence montre
Users/dana.whitlock/Library/Caches/.syncavec les pastilles Créé et Supprimé, etexfilsur le volume EXFIL avec Créé uniquement. - La visite de
transfer.exampledans le navigateur ne laisse que des écritures dansSafari/History.dbcôté FSEvents : le domaine lui-même se trouve dans la base History, pas ici.
5. Exporter et rédiger le rapport
Exportez Enregistrements (CSV) et Paires de renommage (CSV) pour le rapport, Timesketch (CSV) pour fusionner avec d'autres chronologies (chaque enregistrement placé à l'heure d'écriture de son fichier journal, signalée comme borne supérieure), ou Tout (JSON). Les noms de fichiers indiquent la plage, par exemple FIN-MBP-03_fsevents_2026-09-14T100000Z-2026-09-14T105500Z_records.csv.
Dans le rapport, présentez chaque événement comme une fenêtre, citez le fichier journal et précisez ce que FSEvents ne montre pas : ni utilisateur, ni processus, ni contenu de fichier.
Ce qui changerait les conclusions
- Si la copie avait réinitialisé les mtimes des journaux, seul l'ordre subsisterait.
- Si la clé n'avait jamais été imagée, on ne verrait que le point de montage et la préparation/suppression sur le Mac ; la liste des fichiers écrits dessus manquerait.
- Si le Mac était resté inactif plusieurs jours avant l'incident, la première fenêtre pourrait couvrir plusieurs jours.
Pour la collecte, voir comment collecter .fseventsd ; pour le format, les pages 1SLD, 2SLD et 3SLD.