Éléments de connexion et base BTM sous macOS
Les éléments de connexion et la base Background Task Management (Ventura+) listent items, agents et démons avec développeur, team ID et approbation.
- Emplacement
- /private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v*.btm
- Prouve
- Quels éléments de connexion, agents et démons ont été enregistrés, par quel développeur, et s'ils ont été autorisés
- Horodatages
- Dates NSKeyedArchiver (temps absolu Mac, UTC) plus dates du système de fichiers
- Accès
- root et accès complet au disque (magasin BTM) ; utilisateur propriétaire (ancien backgrounditems.btm)
- Rétention
- Jusqu'au retrait de l'élément ou à la reconstruction du magasin par sfltool resetbtm
- Collecte
- Aftermath, sfltool dumpbtm, ditto
Outils
Comparer tous les outils- DumpBTMCLI · open source
- bgiparserCLI · open source
- PlasoCLI · open source
- sfltoolCLI · intégré à macOS
Ce que c'est
Les éléments de connexion (Login Items) sont des applications et des utilitaires qui démarrent quand un utilisateur ouvre sa session. Leur stockage a changé deux fois, ce qui donne trois formats. Jusqu'à macOS 10.12, ils se trouvaient dans un plist de préférences ; à partir de 10.13 High Sierra, un fichier backgrounditems.btm par utilisateur les contenait sous forme de données de signet (bookmark). macOS 13 Ventura a introduit Background Task Management (BTM) : un magasin système unique, géré par backgroundtaskmanagementd, qui suit ensemble éléments de connexion, LaunchAgents et LaunchDaemons, alimente le panneau Ouverture des Réglages Système et avertit l'utilisateur lorsqu'un nouvel élément d'arrière-plan est ajouté.
Pour l'enquêteur, BTM est précieux car il attribue chaque élément à un développeur et à un team ID, et peut en conserver la trace après la disparition du plist ou de l'application qui l'a créé.
Où il se trouve
| macOS | Chemin | Format | Protection |
|---|---|---|---|
| jusqu'à 10.12 | ~/Library/Preferences/com.apple.loginitems.plist | plist | Utilisateur |
| 10.13-12 | ~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm | Plist binaire, NSKeyedArchiver avec blobs de signets | Utilisateur |
| 13 Ventura et ultérieur | /private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v<N>.btm | Plist binaire, NSKeyedArchiver | root + accès complet au disque |
| Toutes | /private/var/db/com.apple.xpc.launchd/loginitems.<UID>.plist | plist | Éléments de connexion Service Management (SMLoginItemSetEnabled) |
Le <N> change selon les versions (v4 était le nom utilisé à la sortie de Ventura, v7 a été observé sur 13.2 et v16 est signalé sur les versions récentes), et des fichiers d'anciennes versions peuvent subsister à côté du fichier actuel. Collectez tous les fichiers .btm du dossier. BTM contient les éléments de tous les utilisateurs, indexés par utilisateur.
Ce qu'il prouve
- Qu'un élément de connexion, un agent/démon classique ou une tâche
SMAppServiceembarquée dans une application a été enregistré, et pour quel utilisateur. - Le nom du développeur et le team identifier issus de la signature de code, l'identifiant de bundle et l'application parente.
- Le chemin de l'exécutable et l'URL du plist ou du bundle.
- Si l'élément était activé, autorisé par l'utilisateur, masqué, et si l'utilisateur a été averti.
- Les éléments installés par MDM via une charge utile Service Management.
Il ne prouve pas que l'élément s'est exécuté. Un enregistrement peut aussi désigner un plist ou un bundle qui n'existe plus.
Champs clés
sfltool dumpbtm et DumpBTM affichent pour chaque élément :
| Champ | Signification |
|---|---|
| UUID | Identifiant de l'enregistrement |
| Name | Nom affiché |
| Developer Name / Team Identifier | Issus de la signature de code |
| Type | Champ de bits : 0x2 application, 0x4 élément de connexion, 0x8 agent, 0x10 démon, 0x20 développeur, 0x10000 historique, 0x80000 curated |
| Disposition | Champ de bits : 0x1 activé, 0x2 autorisé, 0x4 masqué, 0x8 averti ; par exemple [enabled, allowed, visible, notified] (11) |
| Identifier | Identifiant de l'élément, souvent le label ou le bundle ID |
| URL | Emplacement du plist ou du bundle |
| Executable Path | Programme exécuté |
| Generation | Compteur de génération de l'enregistrement |
| Assoc. Bundle IDs | Issus de AssociatedBundleIdentifiers dans le plist |
| Parent Identifier | Application conteneur |
Dans le magasin brut (tel qu'exposé par bgiparser), les clés d'un élément incluent uuid, teamIdentifier, disposition, generation, modificationDate, associatedBundleIdentifiers, url, bundleIdentifier, type, identifier, executablePath, container, developerName et executableModificationDate.
Horodatages
modificationDate et executableModificationDate sont des valeurs NSDate au sein de l'archive, qui stockent du temps absolu Mac (secondes depuis le 2001-01-01 UTC) ; les parseurs les convertissent. Les dates APFS du fichier .btm lui-même indiquent la dernière mise à jour du magasin. Pour l'ancien backgrounditems.btm, il n'existe pas de date par élément : appuyez-vous sur les dates de fichier, FSEvents et les journaux.
Rétention
Les enregistrements subsistent jusqu'à ce que l'utilisateur ou le développeur retire l'élément, que l'application le désenregistre ou que sfltool resetbtm reconstruise le magasin. Les entrées de journal suivent la rétention normale du unified log.
Collecte
# Live, root, Terminal with Full Disk Access
sudo sfltool dumpbtm > ./case/btm_dump.txt
sudo ditto /private/var/db/com.apple.backgroundtaskmanagement ./case/btm
for u in /Users/*; do
f="$u/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm"
[ -f "$f" ] && sudo cp -p "$f" "./case/bgi_$(basename "$u").btm"
done
# BTM activity
log show --info --predicate 'subsystem == "com.apple.backgroundtaskmanagement"' --last 7d
- Aftermath collecte les éléments de connexion parmi les mécanismes de persistance.
- UAC collecte
loginitems.*.plistdepuis/private/var/db/com.apple.xpc.launchd; ajoutez manuellement le dossier BTM si votre profil ne l'inclut pas. - N'exécutez jamais
sfltool resetbtmsur une preuve : cette commande reconstruit la base.
Analyse
- sfltool dumpbtm (intégré à macOS) sur le système live.
- DumpBTM (objective-see/DumpBTM) : équivalent open source qui peut aussi analyser par programme un fichier
.btmcopié (compilation avec Xcode). - bgiparser (mnrkbys/bgiparser) : analyse l'ancien
backgrounditems.btmcommeBackgroundItems-v*.btmet produit du JSON :python3 bgiparser.py -f ./case/btm/BackgroundItems-v16.btm -o btm.json. - Plugins
macos_background_items_plistetmacos_login_items_plistde Plaso ; le motif documenté couvreBackgroundItems-v[3-9].btm: renommez les versions plus récentes ou testez-les.
Conseils d'investigation
- Comparez chaque
URLde BTM avec le système de fichiers : une entrée dont le plist ou l'application n'existe plus est une piste sérieuse de persistance nettoyée. - Un Team Identifier absent ou inattendu pour un élément qui imite un éditeur connu mérite un examen attentif.
- Les éléments avec le bit masqué ou une disposition « non averti » n'ont jamais été présentés à l'utilisateur.
- Endpoint Security émet
ES_EVENT_TYPE_NOTIFY_BTM_LAUNCH_ITEM_ADDet..._REMOVEsur macOS 13 et ultérieur : la télémétrie EDR peut donc conserver des enregistrements que le magasin ne montre plus. - Des autorisations TCC suivent souvent l'ajout d'un nouvel élément d'arrière-plan ; vérifiez TCC.db pour le même bundle ID ou chemin.
- Poursuivez depuis chaque élément vers son plist dans LaunchAgents/LaunchDaemons et vers les traces Gatekeeper de son binaire.