TCC.db unter macOS: Speicherort und Sicherung
Wo System- und Benutzer-TCC.db liegen, warum Festplattenvollzugriff und SIP zählen und wie Sie sie mit WAL per UAC, Aftermath, Velociraptor und mac_apt sichern.
Kurz gesagt. Sichern Sie den gesamten Ordner com.apple.TCC, nicht nur TCC.db: aus /Library/Application Support/ für das System und aus ~/Library/Application Support/ für jeden Benutzer, samt TCC.db-wal, TCC.db-shm und MDMOverrides.plist. Auf einem laufenden Mac braucht der kopierende Prozess Festplattenvollzugriff. Mehrere verbreitete Sicherungswerkzeuge kopieren nur TCC.db und können so jüngste Änderungen verpassen, die noch in der WAL stehen. Ziehen Sie das Ergebnis dann auf TCC Parser; die Anleitung How to get your data auf der Startseite wiederholt die folgenden Befehle.
Eine einseitige Übersicht zum Artefakt bietet der TCC.db-Spickzettel. Dieser Artikel geht bei der Sicherung mehr in die Tiefe.
Was Sie sichern sollten
| Datei | Pfad | Hinweise |
|---|---|---|
| System-TCC.db | /Library/Application Support/com.apple.TCC/TCC.db | Meist Festplattenvollzugriff, Bedienungshilfen, Bildschirmaufnahme und ähnliche Dienste |
| Benutzer-TCC.db | /Users/<user>/Library/Application Support/com.apple.TCC/TCC.db | Eine pro Konto; meist Kamera, Mikrofon, Automation, Ordner |
| WAL | TCC.db-wal neben jeder Datenbank | Bestätigte Änderungen, die noch nicht per Checkpoint übertragen wurden, dazu ältere Seitenversionen |
| Shared-Memory-Index | TCC.db-shm neben jeder Datenbank | Lässt sich neu aufbauen; der Vollständigkeit halber sichern |
| MDM-Freigaben | /Library/Application Support/com.apple.TCC/MDMOverrides.plist | Verwaltete Macs; PPPC-Freigaben nach Client und Dienst |
| REG.db | /Library/Application Support/com.apple.TCC/REG.db | Auf vielen Systemen vorhanden; ihr Zweck ist kaum dokumentiert |
MDMOverrides.plist ist ein Dictionary, geordnet nach Client-Kennung; jeder Eintrag ist ein Dictionary, geordnet nach Dienstname, mit Schlüsseln wie Allowed, CodeRequirement, CodeRequirementData und IdentifierType. Einträge für Apple Events sind eine Ebene tiefer verschachtelt, pro empfangender App. Lesen Sie die Datei mit plutil -p.
Hören Sie nicht bei den Konten auf, die Sie erwarten. Dienstkonten, ein zweites Administratorkonto oder ein während des Einbruchs angelegtes Konto haben jeweils eine eigene Datenbank. Zählen Sie /Users auf und sichern Sie jedes Konto.
Schutzmechanismen: Festplattenvollzugriff und SIP
Zwei Mechanismen stehen auf einem laufenden System im Weg, und sie werden oft verwechselt:
| Mechanismus | Was er blockiert | Was er nicht blockiert |
|---|---|---|
| TCC selbst (Festplattenvollzugriff) | Das Lesen beider Datenbanken durch einen Prozess ohne Festplattenvollzugriff, auch durch root | Lesezugriffe eines Prozesses mit Festplattenvollzugriff |
| System Integrity Protection | Änderungen an der System-Datenbank, selbst durch root | Das Lesen durch einen Prozess mit Festplattenvollzugriff |
In der Praxis heißt das: Erteilen Sie Festplattenvollzugriff genau dem Programm, das die Kopie ausführt. Starten Sie ein Sicherungswerkzeug aus Terminal, braucht Terminal ihn; sichert ein Agent, braucht ihn der Agent. sudo ersetzt ihn nicht. Notieren Sie, welcher Prozess Festplattenvollzugriff hatte und wann Sie ihn erteilt haben: Diese Freigabe ist selbst eine neue Zeile in der System-Datenbank, mit einem last_modified während Ihrer Sicherung. Erwähnen Sie das im Bericht, damit niemand sie für Aktivität des Angreifers hält.
Manuelle Live-Sicherung
Hat Terminal Festplattenvollzugriff, kopiert ditto jeden Ordner mit seinen Begleitdateien:
sudo ditto "/Library/Application Support/com.apple.TCC" ./case/tcc_system
for u in /Users/*; do
[ -d "$u/Library/Application Support/com.apple.TCC" ] && \
sudo ditto "$u/Library/Application Support/com.apple.TCC" "./case/tcc_$(basename "$u")"
done
shasum -a 256 ./case/tcc_*/* > ./case/tcc_hashes.txt
Wer den Ordner statt einer einzelnen Datei kopiert, behält WAL, SHM, MDMOverrides.plist und alles andere, was tccd dort ablegt. Packen Sie den Ordner case als ZIP, wenn Sie ihn in einem Stück laden möchten.
Sicherungswerkzeuge und ihre Eigenheiten
| Werkzeug | Was es sichert | Eigenheit |
|---|---|---|
| UAC | artifacts/files/system/tcc.yaml: genau die System- und Benutzer-TCC.db | Enthält keine -wal/-shm. Über files/system/* Teil des Profils ir_triage |
| Aftermath (Jamf) | Das TCC-Modul kopiert die System-TCC.db und die jedes Benutzers als tcc_root und tcc_<username> in den Fall | Nur Rohkopien der Hauptdatei, ohne WAL. Muss als root mit Festplattenvollzugriff laufen |
Velociraptor MacOS.System.TCC | Fragt beide Datenbanken live ab und liefert Zeilen | Laut Beschreibung unter Big Sur getestet; ältere Versionen brauchen das Layout mit allowed/prompt_count. Liefert Zeilen, nicht die Dateien |
Velociraptor Generic.Collectors.File | Rohdateien, die zu Ihren Globs passen | Sie wählen die Globs selbst und können so die WAL einschließen |
| mac_apt | Parst TCC aus einem Abbild oder aus einer einzelnen Datei | Parst, statt Rohdateien zu bewahren; behalten Sie auch die Quelle |
UAC
sudo ./uac -p ir_triage /tmp
# or only the TCC artifact
sudo ./uac -a ./artifacts/files/system/tcc.yaml /tmp
Da das Artefakt genau TCC.db auflistet, ergänzen Sie ein manuelles ditto der oben genannten Ordner, wenn Sie die WAL brauchen. TCC Parser nimmt die .tar.gz-Ausgabe von UAC direkt an; Sie müssen sie nicht entpacken.
Aftermath
sudo ./aftermath # output to /tmp by default
sudo ./aftermath -o /Volumes/CASE
Suchen Sie im Archiv nach den Kopien tcc_root und tcc_<username>. TCC Parser erkennt diese Namen, wenn Sie das Aftermath-ZIP hineinziehen.
Velociraptor
Für Zeilen aus einer ganzen Flotte MacOS.System.TCC (Standard-Glob /Library/Application Support/com.apple.TCC/TCC.db,/Users/*/Library/Application Support/com.apple.TCC/TCC.db). Für die Rohdateien Generic.Collectors.File mit Root / und Globs wie:
Library/Application Support/com.apple.TCC/TCC.db*
Users/*/Library/Application Support/com.apple.TCC/TCC.db*
Das abschließende * erfasst auch -wal und -shm. Der Velociraptor-Client braucht auf dem Endpunkt Festplattenvollzugriff.
mac_apt
python mac_apt.py -o out -c E01 /path/mac.E01 TCC
python mac_apt_artifact_only.py -i TCC.db -o out -c TCC
Das Plugin TCC unterstützt die Layouts von Catalina sowie ab Big Sur.
Dead-Box-Sicherung
Binden Sie aus einem vollständigen Abbild das Data-Volume schreibgeschützt auf einem Analyse-Host ein. Dort schränken TCC und SIP das Lesen nicht ein. Die Pfade sind relativ zur Wurzel des Volumes dieselben: Library/Application Support/com.apple.TCC/ und Users/*/Library/Application Support/com.apple.TCC/. Kopieren Sie die Ordner heraus, bilden Sie Hashes und arbeiten Sie auf den Kopien.
Suchen Sie auch nach älteren Kopien: Lokale APFS-Snapshots und Time-Machine-Backups können frühere Versionen derselben Datenbanken enthalten. Das ist der zuverlässigste Weg, später entfernte Freigaben zu sehen.
Umgang mit den Kopien
- Öffnen Sie das Original nie mit einem schreibenden Werkzeug. SQLite kann beim Schließen der letzten Verbindung die WAL per Checkpoint in die Hauptdatei übertragen und dabei beide Dateien neu schreiben. Arbeiten Sie auf einer zweiten Kopie.
- Belassen Sie die WAL neben ihrer Datenbank, mit demselben Basisnamen. Parser ordnen die Dateien über den Namen einander zu.
- Behalten Sie den Pfad. Über den Benutzerordner im Pfad wird eine Benutzer-Datenbank einem Konto zugeordnet.
- Notieren Sie Zeit und Rechte. Ihre eigene Freigabe für Festplattenvollzugriff und jede Abfrage, die Sie auslösen, werden zu Zeilen.
In TCC Parser laden
Ziehen Sie die Ordner, einzelne Dateien, ein ZIP (Velociraptor, Aftermath, gepackte Ordner) oder ein UAC-.tar.gz (ohne es zu entpacken) in den Ablagebereich, oder nutzen Sie Choose files (Dateien auswählen) bzw. Choose a folder (Ordner auswählen). Der Parser spielt bestätigte WAL-Frames ein, liest MDMOverrides.plist und zeigt REG.db sowie jede andere SQLite-Datei im Ordner als Rohtabellen. Die Anleitung finden Sie in TCC.db im Browser analysieren.
Häufige Fragen
Wo liegt TCC.db unter macOS?
Die System-Datenbank liegt unter /Library/Application Support/com.apple.TCC/TCC.db. Jeder Benutzer hat eine eigene unter ~/Library/Application Support/com.apple.TCC/TCC.db. Verwaltete Macs haben zusätzlich /Library/Application Support/com.apple.TCC/MDMOverrides.plist.
Warum ist meine Kopie von TCC.db leer oder fehlt?
Auf einem laufenden Mac braucht der kopierende Prozess (Terminal, ein Sicherungsagent, das Binärprogramm des Werkzeugs) Festplattenvollzugriff. Ohne ihn schlagen Kopien fehl oder bleiben leer, selbst bei Ausführung als root.
Brauche ich TCC.db-wal und TCC.db-shm?
Sichern Sie die -wal-Datei, wann immer sie existiert: Jüngste Änderungen stehen womöglich noch nicht in der Hauptdatei, und sie kann frühere Versionen von Zeilen enthalten. Die -shm-Datei ist ein Index, der sich neu aufbauen lässt; sichern Sie sie der Vollständigkeit halber, ein Parser braucht sie aber nicht.
Hindert mich SIP daran, die System-TCC.db zu lesen?
Nein. System Integrity Protection schützt die System-Datenbank vor Änderungen, selbst durch root. Zum Lesen auf einem laufenden System ist Festplattenvollzugriff nötig. Bei einem eingebundenen Abbild auf einem Analyse-Host gilt keine der beiden Einschränkungen.