Anmeldeobjekte und BTM-Datenbank unter macOS
Anmeldeobjekte und der BTM-Speicher ab Ventura listen Login Items, Agents und Daemons mit Entwickler, Team-ID und Freigabestatus auf.
- Speicherort
- /private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v*.btm
- Belegt
- Welche Anmeldeobjekte, Agents und Daemons registriert wurden, von welchem Entwickler, und ob sie zugelassen waren
- Zeitstempel
- NSKeyedArchiver-Datumswerte (Mac Absolute Time, UTC) plus Zeiten des Dateisystems
- Zugriff
- root und Full Disk Access (BTM-Speicher); besitzender Benutzer (alte backgrounditems.btm)
- Aufbewahrung
- Bis das Objekt entfernt wird oder sfltool resetbtm den Speicher neu aufbaut
- Sicherung
- Aftermath, sfltool dumpbtm, ditto
- DumpBTMCLI · Open Source
- bgiparserCLI · Open Source
- PlasoCLI · Open Source
- sfltoolCLI · in macOS enthalten
Was es ist
Anmeldeobjekte (Login Items) sind Apps und Hilfsprogramme, die starten, wenn sich ein Benutzer anmeldet. Ihre Speicherung hat sich zweimal geändert, es gibt also drei Formate. Bis macOS 10.12 lagen sie in einer Einstellungs-Plist; ab 10.13 High Sierra hielt eine Datei backgrounditems.btm pro Benutzer sie als Bookmark-Daten. macOS 13 Ventura führte Background Task Management (BTM) ein: einen einzigen Systemspeicher, verwaltet von backgroundtaskmanagementd, der Anmeldeobjekte, Launch Agents und Launch Daemons gemeinsam erfasst, den Bereich Anmeldeobjekte in den Systemeinstellungen speist und den Benutzer benachrichtigt, wenn ein neues Hintergrundobjekt hinzukommt.
Für die forensische Analyse ist BTM wertvoll, weil es jedes Objekt einem Entwickler und einer Team-ID zuordnet und einen Eintrag behalten kann, nachdem die erzeugende Plist oder App verschwunden ist.
Wo es liegt
| macOS | Pfad | Format | Schutz |
|---|---|---|---|
| bis 10.12 | ~/Library/Preferences/com.apple.loginitems.plist | Plist | Benutzer |
| 10.13-12 | ~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm | Binär-Plist, NSKeyedArchiver mit Bookmark-Blobs | Benutzer |
| Ab 13 Ventura | /private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v<N>.btm | Binär-Plist, NSKeyedArchiver | root + Full Disk Access |
| Alle | /private/var/db/com.apple.xpc.launchd/loginitems.<UID>.plist | Plist | Anmeldeobjekte des Service Management (SMLoginItemSetEnabled) |
<N> ändert sich mit den Versionen (v4 war der Name bei der Veröffentlichung von Ventura, v7 wurde unter 13.2 gesehen, v16 wird für neuere Versionen berichtet), und Dateien älterer Versionen können neben der aktuellen liegen bleiben. Sichern Sie jede .btm-Datei im Ordner. BTM enthält die Objekte aller Benutzer, nach Benutzer zugeordnet.
Was es belegt
- Dass ein Anmeldeobjekt, ein klassischer Agent oder Daemon oder ein in einer App gebündelter
SMAppService-Job registriert wurde, und für welchen Benutzer. - Den Entwicklernamen und die Team-ID aus der Codesignatur, die Bundle-ID und die übergeordnete App.
- Den Pfad der ausführbaren Datei und die URL der Plist oder des Bundles.
- Ob das Objekt aktiviert, vom Benutzer zugelassen oder ausgeblendet war und ob der Benutzer benachrichtigt wurde.
- Objekte, die per MDM unter einem Service-Management-Payload installiert wurden.
Es belegt nicht, dass das Objekt ausgeführt wurde. Ein Eintrag kann sich auch auf eine Plist oder ein Bundle beziehen, das nicht mehr existiert.
Wichtige Felder
sfltool dumpbtm und DumpBTM geben pro Objekt aus:
| Feld | Bedeutung |
|---|---|
| UUID | Kennung des Eintrags |
| Name | Anzeigename |
| Developer Name / Team Identifier | Aus der Codesignatur |
| Type | Bitfeld: 0x2 App, 0x4 Anmeldeobjekt, 0x8 Agent, 0x10 Daemon, 0x20 Entwickler, 0x10000 Legacy, 0x80000 kuratiert |
| Disposition | Bitfeld: 0x1 aktiviert, 0x2 zugelassen, 0x4 ausgeblendet, 0x8 benachrichtigt; z. B. [enabled, allowed, visible, notified] (11) |
| Identifier | Kennung des Objekts, oft das Label oder die Bundle-ID |
| URL | Speicherort der Plist oder des Bundles |
| Executable Path | Programm, das ausgeführt wird |
| Generation | Generationszähler des Eintrags |
| Assoc. Bundle IDs | Aus AssociatedBundleIdentifiers in der Plist |
| Parent Identifier | Enthaltende App |
Im Rohspeicher (wie ihn bgiparser darstellt) gehören zu den Objektschlüsseln uuid, teamIdentifier, disposition, generation, modificationDate, associatedBundleIdentifiers, url, bundleIdentifier, type, identifier, executablePath, container, developerName und executableModificationDate.
Zeitstempel
modificationDate und executableModificationDate sind NSDate-Werte im Keyed Archive, die Mac Absolute Time speichern (Sekunden seit 2001-01-01 UTC); Parser rechnen sie um. Die APFS-Zeiten der .btm-Datei selbst zeigen die letzte Aktualisierung des Speichers. Für die alte backgrounditems.btm gibt es keine Datumswerte pro Objekt: Stützen Sie sich auf Dateizeiten, FSEvents und Logs.
Aufbewahrung
Einträge bleiben erhalten, bis der Benutzer oder Entwickler das Objekt entfernt, die App es abmeldet oder sfltool resetbtm den Speicher neu aufbaut. Log-Einträge folgen der normalen Aufbewahrung des Unified Log.
Sicherung
# 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 sichert Anmeldeobjekte als Teil der Persistenzmechanismen.
- UAC sichert
loginitems.*.plistaus/private/var/db/com.apple.xpc.launchd; fügen Sie den BTM-Ordner manuell hinzu, falls Ihr Profil ihn nicht enthält. - Führen Sie
sfltool resetbtmniemals auf Beweismitteln aus: Der Befehl baut die Datenbank neu auf.
Auswertung
- sfltool dumpbtm (in macOS integriert) auf dem Live-System.
- DumpBTM (objective-see/DumpBTM): Open-Source-Gegenstück, das auch eine kopierte
.btm-Datei programmatisch auswerten kann (Build mit Xcode). - bgiparser (mnrkbys/bgiparser): wertet sowohl die alte
backgrounditems.btmals auchBackgroundItems-v*.btmnach JSON aus:python3 bgiparser.py -f ./case/btm/BackgroundItems-v16.btm -o btm.json. - Plugins
macos_background_items_plistundmacos_login_items_plistvon Plaso; das dokumentierte Muster decktBackgroundItems-v[3-9].btmab, benennen Sie neuere Versionen daher um oder testen Sie sie.
Tipps für die Untersuchung
- Vergleichen Sie jede BTM-
URLmit dem Dateisystem: Ein Eintrag, dessen Plist oder App nicht mehr existiert, ist eine starke Spur für bereinigte Persistenz. - Eine fehlende oder unerwartete Team Identifier bei einem Objekt, das einen bekannten Hersteller imitiert, verdient einen genauen Blick.
- Objekte mit gesetztem Hidden-Bit oder der Disposition „nicht benachrichtigt“ wurden dem Benutzer nie angezeigt.
- Endpoint Security erzeugt ab macOS 13
ES_EVENT_TYPE_NOTIFY_BTM_LAUNCH_ITEM_ADDund..._REMOVE, sodass EDR-Telemetrie Registrierungen bewahren kann, die der Speicher nicht mehr zeigt. - Auf ein neues Hintergrundobjekt folgen oft TCC-Freigaben; prüfen Sie TCC.db auf dieselbe Bundle-ID oder denselben Pfad.
- Wechseln Sie von jedem Objekt zu seiner Plist in LaunchAgents/LaunchDaemons und zu den Gatekeeper-Spuren seines Binärprogramms.