Glossaire
LaunchAgent / LaunchDaemon
Listes de propriétés demandant à launchd de lancer un programme automatiquement, par utilisateur ou pour tout le système ; un classique de la persistance.
Un LaunchAgent est une liste de propriétés (.plist) qui demande à launchd de lancer automatiquement un programme pour le compte d'un utilisateur, en général à l'ouverture de session (RunAtLoad), selon une planification ou en le maintenant actif (KeepAlive). Les agents propres à un utilisateur se trouvent dans ~/Library/LaunchAgents, ceux de tous les utilisateurs dans /Library/LaunchAgents. Un LaunchDaemon en est l'équivalent pour tout le système, dans /Library/LaunchDaemons : il s'exécute en root au démarrage, sans qu'aucune session soit ouverte. Les agents et démons d'Apple se trouvent sous /System/Library, sur le volume système en lecture seule.
Pourquoi c'est important en investigation
Ces dossiers font partie des emplacements de persistance les plus courants sur macOS. Les outils de mise à jour et utilitaires légitimes s'en servent tous les jours, les logiciels malveillants aussi, car un plist est facile à déposer et survit aux redémarrages. Le plist désigne le programme à lancer dans ProgramArguments : le fichier lui-même est donc la meilleure preuve, s'il existe encore.
FSEvents conserve souvent l'histoire une fois le fichier disparu. Un enregistrement dans Users/<nom>/Library/LaunchAgents/ ou Library/LaunchDaemons/ montre que le plist a été créé, renommé, modifié ou supprimé, et le node ID relie un nom temporaire au nom final. Le FSEvents Parser génère un constat pour les écritures directement dans ces dossiers. FSEvents ne dit ni ce que contenait le plist, ni si launchd l'a chargé : rapprochez-le du contenu du plist, des Unified Logs et des traces du programme lui-même.
Exemple
Dans l'exemple synthétique, com.example.updater.plist arrive dans le dossier des agents de l'utilisateur par un renommage :
Users/dana.whitlock/Library/LaunchAgents/com.example.updater.plist.tmp:Created;Modified;File- le nom
.tmp, puiscom.example.updater.plist:Renamed;File, même node ID com.example.updater.plist:InodeMetaMod;File
Les trois se situent dans la fenêtre du journal de 10:09:55 à 10:23:18 UTC, peu après une écriture dans TCC.db : une séquence qui mérite une explication.
Termes associés
Filtrez sur LaunchAgents dans le FSEvents Parser, et replacez cette étape de persistance dans son contexte avec l'exemple d'exfiltration commenté.