Zum Inhalt springen

BenutzeraktivitätAusführungNetzwerk

Biome-SEGB-Streams: App-Fokus und Aktivität unter macOS

Biome speichert macOS-Aktivitätsstreams wie App.InFocus in SEGB-Dateien mit Protobuf-Einträgen, Nachfolger vieler Streams aus knowledgeC.db.

Speicherort
~/Library/Biome/streams/restricted/<Stream>/local/
Belegt
Welche Apps im Fokus waren, besuchte Websites, verbundene Geräte und Netzwerke, mit Zeiten pro Eintrag
Zeitstempel
Mac Absolute Time (Cocoa) als Double in SEGB-Einträgen; Dateinamen sind Cocoa-Zeit in Mikrosekunden
Zugriff
Full Disk Access (Benutzer-Streams); System-Streams sind durch SIP eingeschränkt
Aufbewahrung
Wochen für die meisten Streams (etwa 28 Tage, ein Wert aus iOS-Untersuchungen); abgelaufene Dateien wandern nach tombstone
Sicherung
UAC, mac_apt, Disk image

Was es ist

Biome ist Apples neueres Framework zur Erfassung von Kontext- und „Pattern of Life“-Ereignissen. Es hat nach und nach viele Streams übernommen, die früher in knowledgeC.db lagen, darunter den App-Fokus. Jeder Stream ist ein Ordner mit binären SEGB-Dateien, benannt nach dem Magic-Wert SEGB. Jeder SEGB-Eintrag trägt einen Status, einen oder zwei Zeitstempel, eine CRC und eine Nutzlast, die meist eine streamspezifische Protocol-Buffer-Nachricht ist.

Laut einer einzigen Quelle (Howard Oakley) tauchte Biome etwa mit macOS Catalina als eigenständiges Subsystem auf; breit genutzt wird es seit macOS 12 Monterey. Es ist auf allen aktuellen Versionen aktiv, wobei im Lauf der Zeit neue Streams hinzukommen (etwa App.MenuItem, von Unit 42 unter macOS Tahoe 26 dokumentiert).

Wo es liegt

BereichPfadSchutz
Benutzer-Streams~/Library/Biome/streams/restricted/<Stream>/local/ und ~/Library/Biome/streams/public/<Stream>/local/Durch TCC geschützt, benötigt Full Disk Access
Von anderen Geräten synchronisiert.../<Stream>/remote/<device UUID>/Wie oben
Abgelaufene Dateien.../<Stream>/local/tombstone/Wie oben
Sync-Status des Benutzers~/Library/Biome/sync/ (SQLite-Datenbank)Wie oben
System-Streams/private/var/db/biome/streams/Gehört _biome; UAC dokumentiert die Live-Sicherung nur bei deaktiviertem SIP

Stream-Ordner enthalten außerdem Lock- und Metadatendateien. Stream-Namen sind durch Punkte gegliedert, etwa App.InFocus; manche Quellen zeigen auf iOS ein Präfix _DKEvent.. Listen Sie die Ordner auf, statt Namen vorauszusetzen.

Was es belegt

Streams, die das Biome-Plugin von mac_apt unter macOS dekodiert:

StreamWas es zeigt
App.InFocusApp in den Fokus oder aus dem Fokus (Status 1 / 0), Produktname und Version
App.WebUsageURL, Domain und die verwendete App-Bundle-ID
Safari.*In Safari besuchte Domains
ScreenTime.AppUsageApp-Bundle-ID mit Status im Fokus oder nicht im Fokus
Notification.UsageApp, Titel und Untertitel von Mitteilungen
Device.Wireless.WiFiSSID mit Status Verbinden oder Trennen
Device.Wireless.BluetoothGeräteadresse, Produktname und ID, Verbinden oder Trennen
SystemSettings.SearchTermsIn die Suche der Systemeinstellungen eingegebene Begriffe

Es gibt weitere Streams, etwa App.MenuItem (macOS Tahoe 26), der vom Benutzer gewählte Menüeinträge aufzeichnet, wie Unit 42 dokumentiert hat. mac_apt hat für solche Streams keinen eigenen Decoder und dekodiert sie nur generisch als Protobuf ohne Schema.

Biome belegt nicht, wer an der Tastatur saß, und die Bedeutung der Nutzlasten stammt aus Reverse Engineering der Community, nicht aus Apple-Dokumentation. Behandeln Sie nicht dekodierte Felder als unbekannt.

Wichtige Felder

SEGB-Eintragsebene, wie in ccl-segb implementiert:

FormatHeaderFelder pro Eintrag
SEGB v156-Byte-Header, Magic SEGB in den letzten 4 Byte, Offset für das Datenende in den ersten 4Länge, Status, timestamp1, timestamp2, CRC32, Nutzlast
SEGB v232-Byte-Header beginnend mit SEGB, Anzahl der Einträge, Erstellungszeit; ein Trailer aus 16-Byte-Einträgen (End-Offset, Status, Zeitstempel) am Dateiende indexiert die EinträgeCRC32 über die Nutzlast, Nutzlast (Status und Zeitstempel stammen aus dem Trailer)

Eintragsstatus: 1 geschrieben, 3 gelöscht, 4 leer oder unbenutzt. Gelöschte Einträge können noch Daten enthalten. Eine CRC-Abweichung weist auf einen teilweise geschriebenen oder beschädigten Eintrag hin.

Auf iOS ist SEGB v1 für iOS 14 bis 16 dokumentiert, v2 ab iOS 17. Die Grenze unter macOS ist nicht öffentlich dokumentiert; Tools erkennen das Format automatisch am Header.

Zeitstempel

  • Zeitstempel der Einträge sind Mac Absolute Time, gespeichert als Double: Sekunden seit 2001-01-01 UTC. Addieren Sie 978307200 für Unix-Zeit.
  • SEGB-Dateinamen sind Ganzzahlen, die mac_apt als Cocoa-Zeit in Mikrosekunden interpretiert. Daraus ergibt sich eine ungefähre Erstellungszeit der Datei.
  • Manche Nutzlasten enthalten weitere Felder mit streamspezifischer Bedeutung; dekodieren Sie pro Stream, bevor Sie einen Wert als Zeitangabe behandeln.
# File name 781234567000000 (microseconds) -> UTC
date -u -r $(( 781234567000000 / 1000000 + 978307200 ))

Aufbewahrung

Untersuchungen zu iOS berichten, dass die meisten Streams aktive Einträge etwa 28 Tage halten, manche (etwa Device.Metadata und Location.Visit) monatelang. Abgelaufene SEGB-Dateien wandern nach tombstone/, das mac_apt standardmäßig überspringt, das aber eine manuelle Prüfung lohnt. Messen Sie die Aufbewahrung an Ihren Beweismitteln anhand des ältesten Eintrags pro Stream.

Sicherung

# Terminal needs Full Disk Access
ditto ~/Library/Biome case/Biome_user
find case/Biome_user/streams -maxdepth 2 -type d | sort
  • Das UAC-Artefakt biome sichert ~/Library/Biome/streams/restricted/*/local für jeden Benutzer sowie /private/var/db/biome (Letzteres laut UAC nur bei deaktiviertem SIP). Ergänzen Sie public/ und remote/ gegebenenfalls manuell.
  • Für den System-Speicher ist ein Image der gesamten Platte oder des Data-Volumes dem Deaktivieren von SIP vorzuziehen.
  • Verändern Sie SEGB-Dateien nicht an Ort und Stelle; hashen Sie vor der Auswertung.

Auswertung

  • Das Plugin BIOME von mac_apt liest Benutzer- und System-Streams (restricted und public) aus einem Image oder im Artifact-only-Modus aus einem Ordner streams und dekodiert die oben genannten Streams:
python3 mac_apt_artifact_only.py -i case/Biome_user/streams -o out -c BIOME
  • ccl-segb gibt die Roheinträge einer einzelnen SEGB-v1- oder v2-Datei aus:
python3 ccl_segb_cli.py "case/Biome_user/streams/restricted/App.InFocus/local/<file>"

Nutzlasten, die kein Parser abdeckt, lassen sich ohne Schema mit einem Protobuf-Tool wie blackboxprotobuf (das mac_apt verwendet) dekodieren und dann manuell zuordnen. Einige Felder der Nutzlast enthalten NSKeyedArchiver-Property-Lists.

KnowledgeC Parser dekodiert SEGB-v1- und -v2-Dateien im Browser, mit eigenen Decodern für Streams wie App.InFocus, App.WebUsage und ScreenTime.AppUsage und schemaloser Protobuf-Dekodierung für den Rest; es wird nichts hochgeladen.

Tipps für die Untersuchung

  • Prüfen Sie in jedem Fall sowohl knowledgeC.db als auch Biome: Auf aktuellem macOS sind App-Fokus-Daten in App.InFocus zu erwarten, nicht in knowledgeC. Siehe knowledgeC und Biome.
  • Trennen Sie local von remote/<device UUID>: Remote-Dateien stammen von anderen Geräten desselben Apple Accounts und dürfen nicht dem untersuchten Mac zugeschrieben werden.
  • Sehen Sie sich Einträge mit Status gelöscht und Dateien in tombstone/ an; Parser überspringen oft beides.
  • Device.Wireless.WiFi und Device.Wireless.Bluetooth ergänzen die Einstellungsdateien für WLAN und Bluetooth um Verbindungs- und Trennungszeiten.
  • ScreenTime.AppUsage und Notification.Usage überschneiden sich mit der Bildschirmzeit und der Mitteilungsdatenbank; Abweichungen zwischen ihnen sollten erklärt werden.
  • Validieren Sie dekodierte Felder an Testdaten desselben macOS-Builds, bevor Sie sich in einem Bericht darauf stützen.

Siehe auch