Zum Inhalt springen

PersistenzAusführung

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

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

macOSPfadFormatSchutz
bis 10.12~/Library/Preferences/com.apple.loginitems.plistPlistBenutzer
10.13-12~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btmBinär-Plist, NSKeyedArchiver mit Bookmark-BlobsBenutzer
Ab 13 Ventura/private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v<N>.btmBinär-Plist, NSKeyedArchiverroot + Full Disk Access
Alle/private/var/db/com.apple.xpc.launchd/loginitems.<UID>.plistPlistAnmeldeobjekte 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:

FeldBedeutung
UUIDKennung des Eintrags
NameAnzeigename
Developer Name / Team IdentifierAus der Codesignatur
TypeBitfeld: 0x2 App, 0x4 Anmeldeobjekt, 0x8 Agent, 0x10 Daemon, 0x20 Entwickler, 0x10000 Legacy, 0x80000 kuratiert
DispositionBitfeld: 0x1 aktiviert, 0x2 zugelassen, 0x4 ausgeblendet, 0x8 benachrichtigt; z. B. [enabled, allowed, visible, notified] (11)
IdentifierKennung des Objekts, oft das Label oder die Bundle-ID
URLSpeicherort der Plist oder des Bundles
Executable PathProgramm, das ausgeführt wird
GenerationGenerationszähler des Eintrags
Assoc. Bundle IDsAus AssociatedBundleIdentifiers in der Plist
Parent IdentifierEnthaltende 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.*.plist aus /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 resetbtm niemals 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.btm als auch BackgroundItems-v*.btm nach JSON aus: python3 bgiparser.py -f ./case/btm/BackgroundItems-v16.btm -o btm.json.
  • Plugins macos_background_items_plist und macos_login_items_plist von Plaso; das dokumentierte Muster deckt BackgroundItems-v[3-9].btm ab, benennen Sie neuere Versionen daher um oder testen Sie sie.

Tipps für die Untersuchung

  • Vergleichen Sie jede BTM-URL mit 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_ADD und ..._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.

Siehe auch