Wer saß am Mac? Methode mit knowledgeC und Biome
Entsperrte Sitzungen auf einem Mac aus Sperr-, Display-, Strom- und App-Fokus-Records in knowledgeC.db und Biome rekonstruieren, samt Grenzen der Aussagekraft.
Kurz gesagt. Um die Frage „Hat jemand diesen Mac benutzt, und wann?“ zu beantworten, bilden Sie entsperrte Sitzungen aus /device/isLocked (0 = entsperrt), prüfen sie gegen /display/isBacklit und /device/isPluggedIn und füllen dann jede Sitzung mit App-Fokus (Biome App.InFocus, knowledgeC /app/usage und /app/inFocus) und Web-Nutzung. Trennen Sie Records, die von anderen Geräten synchronisiert wurden, rechnen Sie mit ZSECONDSFROMGMT in Ortszeit um und benennen Sie klar, was die Daten nicht beweisen: Sie zeigen Aktivität unter einem Konto, nicht die Identität der Person an der Tastatur.
Dieser Artikel ist der Auswertungsschritt der Serie. Den Klickpfad im Werkzeug finden Sie unter knowledgeC.db und Biome im Browser analysieren, die Dateien selbst im Leitfaden zur forensischen Analyse von knowledgeC.db.
Die Frage, die Sie beantworten können
knowledgeC.db und Biome zeichnen „Pattern of Life“-Ereignisse auf: Zustände über die Zeit (gesperrt, Display an, am Strom) und App-Aktivität. Zusammen beantworten sie eine engere Frage als „wer“:
In welchen Intervallen war dieser Mac entsperrt und das Display an, und was lief unter diesem Konto im Vordergrund?
Das reicht oft aus, um eine Zeitleiste zu bestätigen oder auszuschließen, und es zeigt Ihnen, wo Sie in anderen Artefakten suchen sollten.
Die Streams
| Frage | knowledgeC.db (ZOBJECT.ZSTREAMNAME) | Biome |
|---|---|---|
| Gesperrt oder entsperrt? | /device/isLocked (ZVALUEINTEGER 1 gesperrt, 0 entsperrt) | |
| Display an? | /display/isBacklit (1 = leuchtet) | Backlight-Streams, sofern vorhanden |
| Am Strom? | /device/isPluggedIn (1 = am Strom) | |
| Welche App im Vordergrund? | /app/usage, /app/inFocus (ZVALUESTRING = Bundle-ID) | App.InFocus (Status 1 / 0, Bundle-ID) |
| Welche Websites? | /app/webUsage, /safari/history | App.WebUsage, Safari.* |
Die Bedeutung der Werte folgt APOLLO und der veröffentlichten Forschung; die Feldnummern für Biome stammen aus mac_apt und iLEAPP (siehe die Referenz zum SEGB-Format). In neueren macOS-Versionen wandert der App-Fokus nach Biome, und /app/inFocus kann spärlich oder leer sein: Das ist zu erwarten und kein Zeichen einer Löschung (knowledgeC vs. Biome). Nicht jeder Mac hat jeden Stream; listen Sie daher die Streams in Ihrem Beweismaterial auf, bevor Sie die Analyse planen.
Sichern Sie knowledgeC.db-wal zusammen mit der Datenbank. Die jüngsten Ereignisse, oft genau die entscheidenden, existieren möglicherweise nur im WAL (Wiederherstellung aus dem knowledgeC-WAL).
Schritt 1: Entsperrte Sitzungen bilden
knowledgeC-Ereignisse sind Intervalle mit ZSTARTDATE und ZENDDATE in Mac Absolute Time. Eine entsperrte Sitzung ist ein /device/isLocked-Intervall mit dem Wert 0:
SELECT datetime(o.ZSTARTDATE + 978307200, 'unixepoch') AS start_utc,
datetime(o.ZENDDATE + 978307200, 'unixepoch') AS end_utc,
datetime(o.ZSTARTDATE + o.ZSECONDSFROMGMT + 978307200, 'unixepoch') AS start_local,
round(o.ZENDDATE - o.ZSTARTDATE) AS seconds,
s.ZDEVICEID AS device_id
FROM ZOBJECT o LEFT JOIN ZSOURCE s ON o.ZSOURCE = s.Z_PK
WHERE o.ZSTREAMNAME = '/device/isLocked' AND o.ZVALUEINTEGER = 0
ORDER BY o.ZSTARTDATE;
Prüfen Sie dann jede Sitzung gegen /display/isBacklit. Ein entsperrtes Intervall mit leuchtendem Display bildet den Kern einer Sitzung. Ein leuchtendes Display bei gesperrtem Mac bedeutet, dass jemand (oder etwas) den Bildschirm geweckt hat, ohne zu entsperren. /device/isPluggedIn liefert Kontext: Ein Laptop, der den ganzen Tag am Strom hängt, ist sehr wahrscheinlich an seinem Arbeitsplatz geblieben, auch wenn das kein Beweis ist.
Fehlt /device/isLocked, ergeben Display-Intervalle plus App-Fokus eine schwächere Annäherung. Vermerken Sie das im Bericht.
Schritt 2: App-Fokus in jede Sitzung einordnen
Biome App.InFocus speichert getrennte Records für „im Fokus“ und „nicht im Fokus“. Fassen Sie sie je App zu Intervallen zusammen: Ein Record „im Fokus“ endet beim nächsten Record „nicht im Fokus“ für dieselbe Bundle-ID. Die Zeilen aus knowledgeC /app/usage und /app/inFocus sind bereits Intervalle.
Lesen Sie den Fokus immer innerhalb der entsperrten Sitzungen, nie isoliert:
- Fokus während einer entsperrten Sitzung mit leuchtendem Display ist das stärkste Nutzungssignal, das diese Quellen liefern;
- Fokus, der über den Sperrzeitpunkt hinaus andauert, ist eine im Vordergrund zurückgelassene App, keine Aktivität;
- ein langes einzelnes Fokusintervall ohne weitere Änderung kann ein unbenutzter Bildschirm mit einem offenen Fenster sein.
Schritt 3: Web-Nutzung ergänzen
/app/webUsage enthält die Bundle-ID, Domain und URL stehen in ZSTRUCTUREDMETADATA; /safari/history enthält die URL, der Titel steht in den Metadaten. In Biome hat App.WebUsage URL, Domain und Bundle-ID. Sehen Sie sich gelöschte Records (Status 3) und die Dateien in tombstone/ an: Ein gelöschter Verlauf kann Biome-Records hinterlassen, die als gelöscht markiert sind, deren Payload aber noch lesbar ist.
Schritt 4: Synchronisierte Geräte trennen
Geräte mit demselben Apple Account synchronisieren manche Records. Diese dürfen nicht dem Mac zugeordnet werden:
- in knowledgeC.db gruppieren Sie die Zeilen nach
ZSOURCE.ZDEVICEID(APOLLO liest den Wert als Hardware-UUID des Ursprungsgeräts); - in Biome stammen Dateien unter
.../<Stream>/remote/<device UUID>/von einem anderen Gerät;local/ist der Mac selbst.
Synchronisierte Records bleiben nützlich: Sie zeigen, was das andere Gerät zur selben Zeit tat.
Schritt 5: Sorgfältig in Ortszeit umrechnen
Gespeicherte Zeiten sind UTC. ZSECONDSFROMGMT ist der Offset, den das Gerät zum Zeitpunkt des jeweiligen Ereignisses verwendete, sodass start + ZSECONDSFROMGMT die Ortszeit dieser Zeile ergibt. Biome-Records haben keine solche Spalte: Wenden Sie den Offset an, den Sie aus knowledgeC oder aus den Systemeinstellungen ermittelt haben, und notieren Sie, welchen Sie verwendet haben. Ändert sich ZSECONDSFROMGMT zwischen Ereignissen, deutet das auf einen Zeitzonenwechsel hin.
Durchgerechnetes Beispiel: FIN-MBP-03 (synthetisch)
Das eingebaute Beispiel ist synthetisch und fiktiv und wurde für dieses Werkzeug erzeugt. MacBook FIN-MBP-03, Benutzer dana.whitlock, Montag, 2026-09-14. Der Offset des Mac beträgt +02:00 (ZSECONDSFROMGMT = 7200). Im Szenario sperrt Dana den Mac und geht um 11:58 Uhr Ortszeit in die Mittagspause; die nächste reguläre Sitzung beginnt um 14:58 Uhr Ortszeit.
| UTC | Ortszeit | Quelle | Beobachtung |
|---|---|---|---|
| 09:58:02 | 11:58 | /device/isLocked | Gesperrt: Die Mittagspause beginnt |
| 10:04:31 | 12:04 | /device/isLocked | Entsperrt; Display etwa zehn Sekunden vorher an |
| 10:05:10 | 12:05 | App.InFocus, /app/webUsage | Safari, files.example/dl/tools.zip |
| 10:07:02 | 12:07 | App.InFocus | Archivierungsprogramm |
| 10:08:00 | 12:08 | App.InFocus | Terminal: kein früherer Terminal-Fokus in den vorhandenen Daten |
| 10:12:10 | 12:12 | App.InFocus, App.MenuItem | Systemeinstellungen; Menüeinträge mit den Texten Privacy & Security und Full Disk Access |
| 10:31:20 | 12:31 | App.InFocus, App.MenuItem | Finder; ein Menüeintrag mit dem Text Eject "EXFIL" |
| 10:38:10 | 12:38 | App.WebUsage | Safari, transfer.example/upload |
| 10:48:30 | 12:48 | App.WebUsage | Die transfer.example-Records als gelöscht markiert (Status 3), Payload intakt |
| 10:49:38 | 12:49 | /device/isLocked | Gesperrt |
Zwei weitere Beobachtungen verändern die Deutung:
- Synchronisierte iPhone-Records.
App.InFocusunterremote/<iPhone UUID>/und knowledgeC-Zeilen mit einer anderenZDEVICEIDzeigen Karten von 10:12 bis 10:19 UTC und Nachrichten von 10:27 bis 10:29 UTC. Das ist keine Mac-Aktivität. Es passt dazu, dass Dana ihr Telefon anderswo benutzt hat, was mit dem Szenario übereinstimmt, beweist aber nicht, wo sie war: Jemand anderes könnte ihr Telefon in der Hand gehabt haben, oder sie könnte beide Geräte benutzt haben. - Eine nächtliche Sitzung. Eine dreiminütige Entsperrung um 01:12 UTC, 03:12 Uhr Ortszeit, mit Safari auf
files.example. Erst die Umrechnung in Ortszeit lässt diese Sitzung auffallen.
Die Werte aus App.MenuItem stammen aus einer Dekodierung ohne Schema: Der Stream hat keine öffentliche Feldzuordnung, daher zitiert die Tabelle die sichtbaren Strings und weist den Feldnummern keine Bedeutung zu. Im Beispiel existiert jede Zeile nach 10:00 UTC in der System-knowledgeC.db nur in der -wal: Ohne sie ist das Vorfallsfenster leer.
Was das stützt: Der Mac war von 10:04:31 bis 10:49:38 UTC unter dana.whitlock entsperrt, das Display leuchtete, und die obige Abfolge von Apps und Websites lief im Vordergrund. Was es für sich allein nicht stützt: dass Dana oder irgendeine bestimmte Person an der Tastatur saß.
Was die Daten nicht beweisen
- Identität. Records gehören zu einem Konto und einem Gerät. Ein geteiltes Passwort, ein unbeaufsichtigt entsperrt zurückgelassener Mac oder eine Fernsteuerung erzeugen alle dieselben Records.
- Aufmerksamkeit. Eine App im Fokus vor einem unbenutzten Bildschirm sieht wie Nutzung aus.
- Vollständigkeit. Die Aufbewahrung beträgt in knowledgeC etwa vier Wochen (Sarah Edwards) und für die meisten Biome-Streams etwa 28 Tage (iOS-Forschung); messen Sie den ältesten Record je Stream in Ihrem Beweismaterial. „Erste Nutzung“ bedeutet „erste Nutzung in den vorhandenen Daten“.
- Absicht. Ein Website-Besuch oder ein Menüeintrag sagt, was auf dem Bildschirm war, nicht warum.
Mit anderen Artefakten untermauern
Nutzen Sie diese Sitzungen als Gerüst und suchen Sie in denselben Zeitfenstern nach unabhängiger Bestätigung:
- Unified Logs: Einträge zu Anmeldung und Bildschirmsperre an den Rändern der Sitzung, im Rahmen der Log-Aufbewahrung.
- TCC.db: Berechtigungs-Records, etwa eine Änderung am Festplattenvollzugriff in der Nähe des Systemeinstellungen-Intervalls.
- Quarantine Events: Downloads und ihre Herkunft, etwa das in Safari heruntergeladene Archiv.
- FSEvents: Dateisystemänderungen, etwa auf einem externen Volume während des Finder-Intervalls.
Jedes dieser Artefakte hat eigene Vorbehalte; behandeln Sie sie als Bestätigung und überlassen Sie die Frage der Identität Beweisen aus der physischen Welt (Zutrittskarten, Kameras, Zeugen).
Checkliste für den Bericht
- Vorhandene Streams, ältester und jüngster Record je Stream und ob
-wal-Dateien gesichert wurden. - Entsperrte Sitzungen mit UTC- und Ortszeiten und dem verwendeten Offset.
- Fokus- und Web-Aktivität je Sitzung, mit getrennt aufgeführten Records synchronisierter Geräte.
- Gelöschte, Tombstone- und Biome-Records mit fehlgeschlagener CRC-Prüfung, als solche aufgeführt.
- Ein Satz, der festhält, dass die Daten Kontoaktivität zeigen, nicht Identität.
FAQ
Kann knowledgeC.db beweisen, wer einen Mac benutzt hat?
Nein. Die Datenbank zeigt, dass der Mac entsperrt war, dass das Display leuchtete und welche Apps im Fokus waren, und zwar unter einem bestimmten Benutzerkonto. Die Person an der Tastatur identifiziert sie nicht. Für die Zuordnung braucht es andere Beweise, etwa Zutrittsprotokolle, Videoaufzeichnungen, Zeugenaussagen oder Authentifizierungsprotokolle.
Welche knowledgeC-Streams zeigen, wann ein Mac entsperrt war?
/device/isLocked, bei dem ZVALUEINTEGER 0 ein entsperrtes und 1 ein gesperrtes Intervall markiert, zusammen mit /display/isBacklit (1 = leuchtet). Nicht jeder Mac hat jeden Stream, prüfen Sie also zuerst, welche in Ihrem Beweismaterial vorhanden sind.
Warum sehe ich iPhone-Apps in der knowledgeC.db oder im Biome-Ordner eines Mac?
Geräte mit demselben Apple Account können Records synchronisieren. In knowledgeC.db tragen sie eine andere ZSOURCE.ZDEVICEID; in Biome liegen sie unter remote/<device UUID>. Sie beschreiben das andere Gerät, nicht den untersuchten Mac.
Beweist eine App im Fokus, dass jemand sie benutzt hat?
Nein. Eine App bleibt vor einem unbenutzten Bildschirm im Fokus, bis etwas anderes den Fokus übernimmt oder der Bildschirm gesperrt wird. Wägen Sie Fokusintervalle gegen die Sperr- und Display-Intervalle und gegen Aktivität innerhalb der App ab.