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
| Bereich | Pfad | Schutz |
|---|---|---|
| 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:
| Stream | Was es zeigt |
|---|---|
App.InFocus | App in den Fokus oder aus dem Fokus (Status 1 / 0), Produktname und Version |
App.WebUsage | URL, Domain und die verwendete App-Bundle-ID |
Safari.* | In Safari besuchte Domains |
ScreenTime.AppUsage | App-Bundle-ID mit Status im Fokus oder nicht im Fokus |
Notification.Usage | App, Titel und Untertitel von Mitteilungen |
Device.Wireless.WiFi | SSID mit Status Verbinden oder Trennen |
Device.Wireless.Bluetooth | Geräteadresse, Produktname und ID, Verbinden oder Trennen |
SystemSettings.SearchTerms | In 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:
| Format | Header | Felder pro Eintrag |
|---|---|---|
| SEGB v1 | 56-Byte-Header, Magic SEGB in den letzten 4 Byte, Offset für das Datenende in den ersten 4 | Länge, Status, timestamp1, timestamp2, CRC32, Nutzlast |
| SEGB v2 | 32-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äge | CRC32 ü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
978307200fü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
biomesichert~/Library/Biome/streams/restricted/*/localfür jeden Benutzer sowie/private/var/db/biome(Letzteres laut UAC nur bei deaktiviertem SIP). Ergänzen Siepublic/undremote/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
BIOMEvon mac_apt liest Benutzer- und System-Streams (restrictedundpublic) aus einem Image oder im Artifact-only-Modus aus einem Ordnerstreamsund 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.InFocuszu erwarten, nicht in knowledgeC. Siehe knowledgeC und Biome. - Trennen Sie
localvonremote/<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.WiFiundDevice.Wireless.Bluetoothergänzen die Einstellungsdateien für WLAN und Bluetooth um Verbindungs- und Trennungszeiten.ScreenTime.AppUsageundNotification.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
Verwandte Artefakte
Ausführliche Leitfäden
Glossar
- BiomeEnglisch
- Mac Absolute TimeEnglisch
- knowledgeC.dbEnglisch
- TCC (Transparency, Consent, and Control)Englisch