knowledgeC.db: App-Nutzung und Geräteaktivität unter macOS
SQLite-Datenbank von CoreDuet mit App-Nutzung, Fokus, Display- und Stromstatus unter macOS; zeigt, wann und wie lange Apps genutzt wurden.
- Speicherort
- /private/var/db/CoreDuet/Knowledge/knowledgeC.db
- Belegt
- Welche Apps wann und wie lange genutzt wurden und ob das Display zu dem Zeitpunkt an war
- Zeitstempel
- Mac Absolute Time (Sekunden seit 2001-01-01 UTC) plus Offset in ZSECONDSFROMGMT
- Zugriff
- root plus SIP-Einschränkungen (System-DB); Full Disk Access (Benutzer-DB)
- Aufbewahrung
- Auf typischen Systemen etwa vier Wochen an Ereignissen (je nach Stream unterschiedlich)
- Sicherung
- UAC, Disk image, cp
- KnowledgeC ParserBrowser
- APOLLOCLI · Open Source
- PlasoCLI · Open Source
- sqlite3CLI · in macOS enthalten
Was es ist
knowledgeC.db ist eine SQLite-Datenbank, die Apples Framework CoreDuet schreibt. Sie erfasst „Pattern of Life“-Ereignisse als Intervalle: eine genutzte Anwendung, ein beleuchtetes Display, ein Mac am Netzteil, eine besuchte Web-Domain und mehr. Jedes Ereignis gehört zu einem benannten Stream wie /app/usage und hat eine Start- und Endzeit. Deshalb beantwortet es Fragen zur Dauer, die Zeitstempel des Dateisystems nicht beantworten können.
Die Datenbank ist ein Core-Data-Speicher, Tabellen und Spalten tragen daher das Präfix Z. Auf neueren macOS-Versionen hat Apple viele Streams nach Biome verlagert, sodass eine moderne knowledgeC.db spärlich gefüllt sein kann. Untersuchen Sie immer beide.
Wo es liegt
| Bereich | Pfad | Schutz |
|---|---|---|
| System | /private/var/db/CoreDuet/Knowledge/knowledgeC.db | Gehört root, durch SIP eingeschränkt. UAC dokumentiert, dass es diese Datei live nur bei deaktiviertem SIP sichert |
| Benutzer | ~/Library/Application Support/Knowledge/knowledgeC.db | Durch TCC geschützt: Der sichernde Prozess benötigt Full Disk Access |
Beide Datenbanken laufen im WAL-Modus. Sichern Sie knowledgeC.db-wal und knowledgeC.db-shm zusammen mit der Hauptdatei: Die jüngsten Ereignisse stehen oft nur im WAL.
Was es belegt
- Welche Bundle-IDs genutzt wurden (
/app/usage) oder im Fokus waren (/app/inFocus) und für wie viele Sekunden. - Wann der Bildschirm beleuchtet war (
/display/isBacklit) und wann der Mac am Netzstrom hing (/device/isPluggedIn). - Web- und Mediennutzung pro App (
/app/webUsage,/app/mediaUsage) und Safari-Verlaufseinträge (/safari/history), sofern diese Streams existieren. - Aktivität anderer Geräte mit demselben Apple Account, sofern synchronisierte Zeilen vorhanden sind (siehe Tipps).
Es belegt nicht, dass eine bestimmte Person an der Tastatur saß, und es erfasst weder Dateinamen noch Befehlszeilen. Eine „genutzte“ App kann ein offenes Fenster vor einem inaktiven Bildschirm sein.
Wichtige Felder
Haupttabelle ZOBJECT (eine Zeile pro Ereignis):
| Spalte | Bedeutung |
|---|---|
ZSTREAMNAME | Stream, z. B. /app/usage, /display/isBacklit |
ZVALUESTRING | Hauptwert als String, meist eine Bundle-ID oder URL |
ZVALUEINTEGER / ZVALUEDOUBLE | Numerischer Wert für boolesche oder gemessene Streams (1 = an) |
ZSTARTDATE / ZENDDATE | Beginn und Ende des Intervalls |
ZCREATIONDATE | Zeitpunkt, zu dem die Zeile geschrieben wurde |
ZSECONDSFROMGMT | UTC-Offset des Geräts in Sekunden zum Ereigniszeitpunkt |
ZSTARTDAYOFWEEK | Wochentag, 1 = Sonntag |
ZUUID | UUID des Ereignisses |
ZSOURCE | Fremdschlüssel auf ZSOURCE.Z_PK |
ZSTRUCTUREDMETADATA | Fremdschlüssel auf ZSTRUCTUREDMETADATA.Z_PK |
ZSOURCE beschreibt den Erzeuger; APOLLO liest ZSOURCE.ZDEVICEID als Hardware-UUID des Ursprungsgeräts. ZSTRUCTUREDMETADATA enthält streamspezifische Zusatzspalten, die je nach Version variieren.
Die macOS-Module von APOLLO decken unter anderem folgende Streams ab: /app/usage, /app/inFocus, /app/activity, /app/intents, /app/webUsage, /app/mediaUsage, /safari/history, /display/isBacklit, /device/isPluggedIn, /device/isLocked und /bluetooth/isConnected. Nicht jeder Mac hat jeden Stream.
Zeitstempel
ZSTARTDATE, ZENDDATE und ZCREATIONDATE sind Mac Absolute Time: Sekunden (oft mit Nachkommastellen) seit 2001-01-01 00:00:00 UTC. Addieren Sie 978307200, um Unix-Sekunden zu erhalten. Gespeicherte Werte sind UTC; ZSECONDSFROMGMT gibt den lokalen Offset an, den das Gerät verwendete.
SELECT datetime(ZSTARTDATE + 978307200, 'unixepoch') AS start_utc,
datetime(ZSTARTDATE + ZSECONDSFROMGMT + 978307200, 'unixepoch') AS start_local
FROM ZOBJECT LIMIT 5;
date -u -r $((694224000 + 978307200)) # macOS date: Mac absolute 694224000 -> UTC
Aufbewahrung
Sarah Edwards (mac4n6) dokumentierte etwa vier Wochen an Ereignissen in ZOBJECT. Die Bereinigung erfolgt pro Stream und hängt von der Version ab. Messen Sie sie daher an den Beweismitteln: Das älteste ZSTARTDATE pro Stream ist das tatsächliche Aufbewahrungsfenster und gehört in Ihren Bericht.
Sicherung
Live, mit Full Disk Access für Terminal oder das Sicherungstool:
mkdir -p case/knowledgec_user
cp -p ~/Library/Application\ Support/Knowledge/knowledgeC.db* case/knowledgec_user/
shasum -a 256 case/knowledgec_user/*
- UAC hat ein Artefakt
knowledgecfür beide Pfade, sichert aber nurknowledgeC.db, nicht die Dateien-walund-shm; laut eigenen Hinweisen wird die System-Kopie nur bei deaktiviertem SIP gesichert. Deaktivieren Sie SIP dafür nicht: Erstellen Sie lieber ein Image der gesamten Platte oder des Data-Volumes und extrahieren Sie daraus/private/var/db/CoreDuet/Knowledge/. - mac_apt kann Dateien aus einem Image exportieren. Öffnen Sie die Kopie, nie das Original, denn das Öffnen einer WAL-Datenbank an Ort und Stelle kann einen Checkpoint auslösen und sie verändern.
Auswertung
- APOLLO führt SQL-Module aus (
knowledge_app_usage,knowledge_app_inFocus,knowledge_device_is_backlitusw.) und führt sie zu einer Zeitleiste zusammen:
python3 apollo.py extract -o csv -p apple -v yolo -k modules/ case/knowledgec_user/
- Plaso enthält das SQLite-Plugin
mac_knowledgec(--parsers sqlite/mac_knowledgec). - Reines SQL: zuerst die Streams auflisten, dann abfragen:
SELECT ZSTREAMNAME, COUNT(*),
datetime(MIN(ZSTARTDATE)+978307200,'unixepoch') AS first_utc,
datetime(MAX(ZSTARTDATE)+978307200,'unixepoch') AS last_utc
FROM ZOBJECT GROUP BY ZSTREAMNAME ORDER BY 2 DESC;
SELECT datetime(o.ZSTARTDATE+978307200,'unixepoch') AS start_utc,
o.ZENDDATE - o.ZSTARTDATE AS seconds,
o.ZVALUESTRING AS bundle_id,
s.ZDEVICEID AS device_id
FROM ZOBJECT o LEFT JOIN ZSOURCE s ON o.ZSOURCE = s.Z_PK
WHERE o.ZSTREAMNAME = '/app/usage'
ORDER BY o.ZSTARTDATE;
KnowledgeC Parser liest knowledgeC.db mit angewendetem -wal (Zeilen, die nur im WAL stehen, werden markiert) und Biome-SEGB-Streams im Browser, mit Sitzungen, Summen pro App und CSV- oder Timesketch-Export; es wird nichts hochgeladen.
Tipps für die Untersuchung
- Prüfen Sie
.schema ZOBJECTund.schema ZSOURCE, bevor Sie vorgefertigte Abfragen ausführen; Spalten ändern sich zwischen Versionen. - Ein spärliches oder leeres
/app/inFocusauf einem aktuellen Mac ist zu erwarten und kein Beleg für eine Löschung. Sehen Sie in Biome (App.InFocus) nach, bevor Sie Schlüsse ziehen. Siehe knowledgeC und Biome. - Gruppieren Sie Ereignisse nach
ZSOURCE.ZDEVICEID: Von einem iPhone oder einem anderen Mac desselben Accounts synchronisierte Zeilen dürfen nicht dem untersuchten Gerät zugeschrieben werden. - Kombinieren Sie App-Intervalle mit
/display/isBacklitund Anmeldeereignissen in den Unified Logs: Eine App im Fokus bei ausgeschaltetem Display ist ein schwacher Nutzungsbeleg. - Fehlende
-wal-Dateien sind der häufigste Grund für „keine jüngste Aktivität“. Vermerken Sie im Bericht, ob sie gesichert wurden. - Wechselt
ZSECONDSFROMGMTzwischen Ereignissen, ist das ein nützlicher Hinweis auf Reisen oder einen Zeitzonenwechsel. - Korrelieren Sie mit den Nutzungssummen der Bildschirmzeit und dem Mitteilungsverlauf.
Siehe auch
Verwandte Artefakte
Ausführliche Leitfäden
Glossar
- knowledgeC.dbEnglisch
- Mac Absolute TimeEnglisch
- BiomeEnglisch
- TCC (Transparency, Consent, and Control)Englisch