Was ist TCC.db?
Transparency, Consent and Control (TCC) ist das macOS-Framework, das entscheidet, ob ein Programm Kamera, Mikrofon, Bildschirm, Tastaturereignisse, Bedienungshilfen-APIs, geschützte Ordner, Festplattenvollzugriff oder Automation per Apple Events nutzen darf. Der Daemon tccd speichert jede bestehende Entscheidung in SQLite-Datenbanken namens TCC.db: eine für das System und eine pro Benutzer.
Jede Zeile ist eine Entscheidung für ein Programm (Bundle-ID oder Pfad) und einen Dienst, mit der Entscheidung (erlaubt, abgelehnt, eingeschränkt), ihrem Grund, der Code-Anforderung des Programms und dem Zeitpunkt der letzten Änderung. Sie ist ein Berechtigungsregister, kein Nutzungsprotokoll.
Wo sie gespeichert ist
- /Library/Application Support/com.apple.TCC/TCC.db: System-Datenbank (durch SIP und TCC geschützt), meist Festplattenvollzugriff, Bedienungshilfen, Bildschirmaufnahme, Eingabeüberwachung.
- ~/Library/Application Support/com.apple.TCC/TCC.db für jeden Benutzer: Kamera, Mikrofon, Ordner, Wechselmedien, Automation und mehr.
- TCC.db-wal neben jeder Datenbank: das Write-Ahead-Log mit aktuellen Änderungen und älteren Kopien von Seiten.
- /Library/Application Support/com.apple.TCC/MDMOverrides.plist: über MDM-Konfigurationsprofile (PPPC) verteilte Freigaben.
Warum sie für Ermittlungen wichtig ist
- Zeigt, welche Programme alles lesen (Festplattenvollzugriff), den Bildschirm beobachten, Tastatureingaben mitschneiden oder die Oberfläche steuern konnten – einschließlich eines Terminals oder Skript-Hosts, über den alles andere läuft.
- Datiert die letzte Änderung jeder Entscheidung (Unix-Sekunden, UTC): Eine Häufung von Freigaben im Zeitfenster eines Angriffs ist ein starker Hinweis.
- Pfad-Clients in temporären, freigegebenen oder versteckten Ordnern und ad-hoc-signierte Code-Anforderungen deuten auf abgelegte Tools hin.
- Das WAL und freie Seiten können Freigaben bewahren, die später mit tccutil reset entfernt wurden.
Grenzen
- Eine Zeile zeigt eine Entscheidung, nicht deren Nutzung: TCC.db protokolliert nicht jede Kamera-Aktivierung oder jeden Dateizugriff. Belege für einzelne Anfragen finden sich im Unified Log (Subsystem com.apple.TCC).
- last_modified ist nur die letzte Änderung; der Zeitpunkt der ersten Freigabe geht verloren, wenn eine Zeile aktualisiert wird.
- Entfernte Zeilen überdauern nur, bis SQLite den Platz wiederverwendet; eine fehlende Zeile beweist nicht, dass eine Berechtigung nie erteilt wurde.
- Die auth_reason-Werte und einige Spalten (flags, pid, boot_uuid) sind von Apple nicht dokumentiert; das Tool zeigt Rohwerte neben den Interpretationen der Community.
So sichern Sie die Dateien
- Kopieren Sie den kompletten Ordner /Library/Application Support/com.apple.TCC und für jeden Benutzer den Ordner ~/Library/Application Support/com.apple.TCC unter Beibehaltung der Pfade aus einem Terminal mit Festplattenvollzugriff (siehe „So kommen Sie an Ihre Daten“).
- Sichern Sie TCC.db-wal mit jeder TCC.db; tcc.yaml von UAC und Aftermath kopieren nur TCC.db.
- Binden Sie bei einem Image das Data-Volume schreibgeschützt ein und archivieren Sie dieselben Ordner.
FAQ
Werden meine TCC-Datenbanken irgendwohin hochgeladen?
Nein. Der Parser ist in Rust geschrieben, zu WebAssembly kompiliert und läuft in einem Web Worker in Ihrem Browser. Es gibt keinen Upload-Endpunkt; Tabellen, Befunde und Exporte werden lokal erzeugt.
Welche macOS-Versionen werden unterstützt?
Jedes Layout der Tabelle access: Mojave und Catalina (allowed, prompt_count), Big Sur bis Ventura (auth_value, auth_reason, auth_version) und ab Sonoma (pid, pid_version, boot_uuid, last_reminded). Spaltennamen werden aus dem Schema jeder Datenbank gelesen, unbekannte Spalten werden unverändert angezeigt.
Brauche ich die -wal- und -shm-Dateien?
Bringen Sie die -wal-Datei mit: Sie kann die neuesten Entscheidungen und ältere Versionen von Zeilen enthalten, und das Tool spielt sie nach, wie SQLite es tut. Die -shm-Datei ist nur ein Index des WAL und wird nicht benötigt.
Was bedeutet auth_value 2?
Erlaubt. 0 steht für abgelehnt, 1 für unbekannt und 3 für eingeschränkt. Unter Mojave und Catalina hatte die Tabelle stattdessen eine Spalte allowed (1 = erlaubt), die das Tool auf dieselben Entscheidungen abbildet.
Was ist die Spalte csreq?
Eine kompilierte Codesignatur-Anforderung, die das Programm identifiziert, für das die Entscheidung gilt. Das Tool dekodiert sie in Text wie identifier "com.apple.Terminal" and anchor apple und zeigt die Team-ID oder den cdhash von ad-hoc-signiertem Code.
Kann es gelöschte Berechtigungen wiederherstellen?
Bei jüngeren Änderungen oft: Mit tccutil reset oder über die Systemeinstellungen entfernte Zeilen können in WAL-Frames, in den vom WAL ersetzten Seitenversionen und in freien Seiten überdauern. Sie erscheinen im Tab Historie, bis SQLite den Platz wiederverwendet.
Über den Parser
TCC Parser ist eine unabhängige Rust-Implementierung, kompiliert zu WebAssembly. Er liest SQLite-Dateien selbst, anhand der öffentlichen Spezifikationen für Dateiformat und WAL (sqlite.org), und kann daher die -wal-Datei nachspielen, auflisten, was das WAL ersetzt hat, und Zeilen aus freien Seiten extrahieren – was eine normale SQLite-Abfrage nicht zeigt. Die Spalten werden aus dem jeweiligen Schema jeder Datenbank gelesen, sodass Layouts aus der Mojave-Ära, der Big-Sur-Ära sowie ab Sonoma alle dekodiert werden. Code-Anforderungen (csreq) werden in die von Apple dokumentierte Anforderungssprache dekodiert. Die Bedeutungen von auth_reason sind von der Community dokumentiert, nicht von Apple veröffentlicht; überprüfen Sie wichtige Schlussfolgerungen auf einem Test-Mac mit derselben Version und in den Unified Logs.