knowledgeC vs. Biome: wo macOS App-Nutzung speichert
knowledgeC.db oder Biome? Wie sich die Aktivitätsspeicher von macOS unterscheiden, welche Streams sich entsprechen und was aktuelle Versionen erwarten lassen.
Kurz gesagt. macOS speichert Aktivität an zwei Orten. knowledgeC.db ist eine SQLite-Datenbank mit einer Zeile pro Ereignisintervall; Biome ist ein Baum aus Stream-Ordnern mit SEGB-Dateien voller Protobuf-Datensätze. Unter aktuellen Versionen ist der App-Fokus in Biomes App.InFocus zu erwarten, nicht in knowledgeCs /app/inFocus, während Zustände wie Sperre und Hintergrundbeleuchtung weiterhin aus knowledgeC gelesen werden. Sichern und untersuchen Sie in jedem Fall beide, halten Sie synchronisierte Datensätze anderer Geräte getrennt und werten Sie einen leeren Stream als „hier nicht aufgezeichnet“, nicht als Löschung.
Wenn Sie die Datenbank selbst noch nicht kennen, beginnen Sie mit dem Leitfaden zur forensischen Analyse von knowledgeC.db.
Zwei Speicher, zwei Konzepte
| knowledgeC | Biome | |
|---|---|---|
| Container | Eine SQLite-Datenbank je Bereich (Core-Data-Speicher) | Ein Ordner je Stream mit SEGB-Dateien |
| Datensatz | Eine Zeile in ZOBJECT mit Beginn und Ende | Ein Datensatz mit Status, Zeitstempeln, einer CRC und einer Protobuf-Nutzlast |
| Stream-Namen | Pfade, zum Beispiel /app/inFocus | Namen mit Punkten, zum Beispiel App.InFocus |
| Zeit | Mac Absolute Time, UTC | Mac Absolute Time als Double in den Datensätzen |
| Lokaler Versatz | ZSECONDSFROMGMT je Zeile | Nicht unter den öffentlich dekodierten Feldern |
| Andere Geräte | Zeilen anderer Geräte, unterscheidbar über ZSOURCE.ZDEVICEID | Eigene Ordner remote/<device UUID>/ |
| Löschung | Zeilen werden entfernt; jüngste Entfernungen zeigt das WAL | Datensätze als gelöscht markiert (Status 3), Daten können erhalten bleiben; abgelaufene Dateien in tombstone/ |
| Dekodierung | Dokumentierte Spalten, stabil genug für SQL | Nutzlastfelder aus Reverse Engineering der Community |
Praktisch bedeutet das: Die beiden Speicher verlangen unterschiedliche Arbeitsweisen. knowledgeC wird mit SQL auf einer Kopie abgefragt, und die -wal muss mitgesichert werden. Biome braucht einen SEGB-Parser, dann einen Protobuf-Decoder je Stream, und Felder, die kein öffentlicher Decoder abdeckt, bleiben unbekannt. Den Aufbau auf Byte-Ebene beschreibt das Dateiformat Biome SEGB.
Intervalle und Übergänge
Eine knowledgeC-Zeile ist bereits ein Intervall: ZSTARTDATE bis ZENDDATE. Ein Biome-Datensatz in App.InFocus ist ein Übergang: Eine App ist zu einem bestimmten Zeitpunkt in den Fokus gekommen (Status 1) oder hat ihn verloren (Status 0). Um Dauern zu erhalten, muss ein Parser jeden „in“-Datensatz mit dem folgenden „out“-Datensatz derselben App paaren.
KnowledgeC Parser übernimmt diese Paarung: Ein In-Fokus-Datensatz endet mit dem nächsten Außer-Fokus-Datensatz für dieselbe Bundle-ID, vom selben Benutzer und derselben Herkunft, innerhalb von 24 Stunden. Ein „in“ ohne passendes „out“ wird ohne Dauer angezeigt statt mit einer geschätzten. Denken Sie daran, wenn eine gesamte Fokuszeit kurz wirkt: Das letzte Intervall vor einem Herunterfahren oder einem Absturz kann offen sein.
Stream für Stream
Die folgende Tabelle stellt Streams nebeneinander, die dieselbe Art von Aktivität aufzeichnen. Sie ist ein funktionaler Vergleich für Ermittler, keine von Apple dokumentierte Migrationstabelle; die Bedeutung der Felder auf der Biome-Seite stammt aus dem BIOME-Plugin von mac_apt und aus iLEAPP.
| Aktivität | knowledgeC-Stream | Biome-Stream | Hinweise |
|---|---|---|---|
| App im Fokus | /app/inFocus | App.InFocus | Biome: Status 1 in / 0 out, Bundle-ID, Versionsstrings |
| App in Benutzung | /app/usage | ScreenTime.AppUsage | Biome: Status und Bundle-ID |
| Webnutzung je App | /app/webUsage | App.WebUsage | Biome: URL, Domain, Bundle-ID |
| Safari | /safari/history | Safari.* | Biome: Domain |
| Mitteilungen | /notification/usage | Notification.Usage | Biome: App, Titel, Untertitel |
| Sperre, Hintergrundbeleuchtung, Stromversorgung | /device/isLocked, /display/isBacklit, /device/isPluggedIn | keiner in der dekodierten Liste | Aus knowledgeC lesen |
| WLAN | keiner | Device.Wireless.WiFi | SSID und Status Verbinden / Trennen |
| Bluetooth | keiner | Device.Wireless.Bluetooth | Adresse, Name, Produkt-ID, Status |
| Suche in den Systemeinstellungen | keiner | SystemSettings.SearchTerms | Eingegebener Suchbegriff |
| Ausgewählte Menübefehle | keiner | App.MenuItem | Von Unit 42 unter macOS Tahoe 26 dokumentiert; keine öffentliche Feldzuordnung |
„Keiner in der dekodierten Liste“ bedeutet, dass die öffentlichen Decoder keinen solchen Stream abdecken, nicht, dass Biome keinen enthalten kann. Listen Sie die Stream-Ordner in Ihrem Beweismaterial auf, statt Namen vorauszusetzen.
Was Sie je macOS-Version erwarten können
Die öffentliche Forschung liefert nur wenige feste Bezugspunkte; sie sind hier ohne Extrapolation zusammengefasst.
| Version | Was bekannt ist |
|---|---|
| macOS 10.15 Catalina | Biome erscheint als eigenes Subsystem, laut einer einzigen Quelle (Howard Oakley) |
| macOS 12 Monterey und neuer | Biome weit verbreitet |
| macOS 13 bis 15 (Ventura, Sonoma, Sequoia) | Keine öffentliche Aufstellung der Streams je Version; unter aktuellen Versionen ist der App-Fokus in App.InFocus zu erwarten, und knowledgeC kann spärlich gefüllt sein |
| macOS 26 Tahoe | Neue Streams wie App.MenuItem (Unit 42) |
Der SEGB-Container selbst hat sich von v1 zu v2 geändert. Unter iOS wird v1 für iOS 14 bis 16 und v2 ab iOS 17 berichtet; die entsprechende Grenze unter macOS ist nicht öffentlich dokumentiert, daher erkennen Werkzeuge die Version am Dateikopf. Wenn in einem Fall die genaue Version zählt, vergleichen Sie mit Testdaten desselben Builds.
Häufige Fehldeutungen
- „knowledgeC ist leer, also wurde Aktivität gelöscht.“ Ein spärlich gefüllter Stream
/app/inFocusist auf einem aktuellen Mac zu erwarten. Prüfen Sie Biome und prüfen Sie, obknowledgeC.db-walgesichert wurde, bevor Sie Schlüsse ziehen. - „Die beiden Quellen widersprechen sich, also ist eine falsch.“ Verschiedene Streams zeichnen Verschiedenes mit unterschiedlichen Auslösern auf. Ein knowledgeC-Intervall in
/app/usageund ein Biome-Intervall inApp.InFocusfür dieselbe App stimmen selten auf die Sekunde überein. Erklären Sie den Unterschied; wählen Sie nicht die bequemere Quelle. - „Dieser Datensatz stammt vom Mac.“ Biome-Ordner
remote/<device UUID>/und knowledgeC-Zeilen mit einer anderenZDEVICEIDstammen von anderen Geräten mit demselben Apple Account. Ein iPhone, das um 10:12 Karten öffnet, ist nicht der Mac, der Karten öffnet. - „Gelöscht heißt, der Benutzer hat es gelöscht.“ Biome-Datensätze mit Status 3 und Dateien in
tombstone/sind normale Artefakte des Lebenszyklus. Die Aufbewahrungsdauer wird in beiden Speichern in Wochen gemessen (etwa vier Wochen für knowledgeC laut Sarah Edwards, etwa 28 Tage für die meisten Biome-Streams laut iOS-Forschung). Messen Sie den ältesten Datensatz je Stream in Ihrem Beweismaterial.
Beide in einer Zeitleiste auswerten
- Sichern Sie beide Speicher mit ihren Begleitdateien: die knowledgeC-Dateien
-walund-shmsowie Biomes Ordnerrestricted/,public/,remote/undtombstone/. Wie das geht, steht in knowledgeC.db: Speicherort und Sicherung. - Rechnen Sie zuerst alles in UTC um. knowledgeC liefert Ihnen den Geräteversatz je Zeile; für Biome entnehmen Sie die Zeitzone aus knowledgeC oder anderen Artefakten.
- Trennen Sie lokal und remote, bevor Sie sortieren.
- Verwenden Sie die Sperr- und Beleuchtungsintervalle aus knowledgeC als Rahmen und die Fokus-Datensätze aus Biome darin.
In der synthetischen Beispielsammlung FIN-MBP-03 zeigt das Zeitfenster von 10:04 bis 10:49 UTC zum Beispiel den Mac entsperrt (knowledgeC, /device/isLocked), Terminal, Systemeinstellungen und Finder im Fokus (Biome App.InFocus) sowie Datensätze in App.MenuItem, die „Full Disk Access“ nennen. Datensätze zu Karten und Nachrichten von Danas iPhone liegen in denselben Minuten in remote/ und müssen aus der Aktivität des Macs ausgeschlossen werden. KnowledgeC Parser führt beide Speicher in einer Zeitleiste zusammen und kennzeichnet die Herkunft jeder Zeile. Was Ihnen auch die kombinierte Zeitleiste nicht sagen kann, ist, wer vor dem Mac saß; diese Argumentation behandelt wer saß an der Tastatur.