Aller au contenu

PersistanceExécution

É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

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

macOSCheminFormatProtection
jusqu'à 10.12~/Library/Preferences/com.apple.loginitems.plistplistUtilisateur
10.13-12~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btmPlist binaire, NSKeyedArchiver avec blobs de signetsUtilisateur
13 Ventura et ultérieur/private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v<N>.btmPlist binaire, NSKeyedArchiverroot + accès complet au disque
Toutes/private/var/db/com.apple.xpc.launchd/loginitems.<UID>.plistplistÉ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 SMAppService embarqué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 :

ChampSignification
UUIDIdentifiant de l'enregistrement
NameNom affiché
Developer Name / Team IdentifierIssus de la signature de code
TypeChamp de bits : 0x2 application, 0x4 élément de connexion, 0x8 agent, 0x10 démon, 0x20 développeur, 0x10000 historique, 0x80000 curated
DispositionChamp de bits : 0x1 activé, 0x2 autorisé, 0x4 masqué, 0x8 averti ; par exemple [enabled, allowed, visible, notified] (11)
IdentifierIdentifiant de l'élément, souvent le label ou le bundle ID
URLEmplacement du plist ou du bundle
Executable PathProgramme exécuté
GenerationCompteur de génération de l'enregistrement
Assoc. Bundle IDsIssus de AssociatedBundleIdentifiers dans le plist
Parent IdentifierApplication 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.*.plist depuis /private/var/db/com.apple.xpc.launchd ; ajoutez manuellement le dossier BTM si votre profil ne l'inclut pas.
  • N'exécutez jamais sfltool resetbtm sur 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 .btm copié (compilation avec Xcode).
  • bgiparser (mnrkbys/bgiparser) : analyse l'ancien backgrounditems.btm comme BackgroundItems-v*.btm et produit du JSON : python3 bgiparser.py -f ./case/btm/BackgroundItems-v16.btm -o btm.json.
  • Plugins macos_background_items_plist et macos_login_items_plist de Plaso ; le motif documenté couvre BackgroundItems-v[3-9].btm : renommez les versions plus récentes ou testez-les.

Conseils d'investigation

  • Comparez chaque URL de 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_ADD et ..._REMOVE sur 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.

Voir aussi