Skip to content

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.

Veröffentlicht am 6 Min. Lesezeit

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

DateiPfadHinweise
System-TCC.db/Library/Application Support/com.apple.TCC/TCC.dbMeist Festplattenvollzugriff, Bedienungshilfen, Bildschirmaufnahme und ähnliche Dienste
Benutzer-TCC.db/Users/<user>/Library/Application Support/com.apple.TCC/TCC.dbEine pro Konto; meist Kamera, Mikrofon, Automation, Ordner
WALTCC.db-wal neben jeder DatenbankBestätigte Änderungen, die noch nicht per Checkpoint übertragen wurden, dazu ältere Seitenversionen
Shared-Memory-IndexTCC.db-shm neben jeder DatenbankLässt sich neu aufbauen; der Vollständigkeit halber sichern
MDM-Freigaben/Library/Application Support/com.apple.TCC/MDMOverrides.plistVerwaltete Macs; PPPC-Freigaben nach Client und Dienst
REG.db/Library/Application Support/com.apple.TCC/REG.dbAuf 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:

MechanismusWas er blockiertWas er nicht blockiert
TCC selbst (Festplattenvollzugriff)Das Lesen beider Datenbanken durch einen Prozess ohne Festplattenvollzugriff, auch durch rootLesezugriffe eines Prozesses mit Festplattenvollzugriff
System Integrity ProtectionÄnderungen an der System-Datenbank, selbst durch rootDas 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

WerkzeugWas es sichertEigenheit
UACartifacts/files/system/tcc.yaml: genau die System- und Benutzer-TCC.dbEnthä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 FallNur Rohkopien der Hauptdatei, ohne WAL. Muss als root mit Festplattenvollzugriff laufen
Velociraptor MacOS.System.TCCFragt beide Datenbanken live ab und liefert ZeilenLaut Beschreibung unter Big Sur getestet; ältere Versionen brauchen das Layout mit allowed/prompt_count. Liefert Zeilen, nicht die Dateien
Velociraptor Generic.Collectors.FileRohdateien, die zu Ihren Globs passenSie wählen die Globs selbst und können so die WAL einschließen
mac_aptParst TCC aus einem Abbild oder aus einer einzelnen DateiParst, 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.

Verwandte Artikel

Verwandte Artikel

Schritt für Schritt: TCC.db samt WAL in einen kostenlosen Browser-Parser laden, Befunde lesen, Berechtigungen und Verlauf prüfen, Zeitraum setzen, exportieren.
Was die TCC-Datenbank von macOS aufzeichnet, was sie belegt und was nicht, die wichtigsten Dienste und ein wiederholbarer Ablauf für die forensische Analyse.
Wie Angreifer TCC-Berechtigungen unter macOS missbrauchen, welche Spuren das in TCC.db hinterlässt und welche Artefakte Sie als Nächstes prüfen.