Skip to content

TCC.db im Browser analysieren: Schritt für Schritt

Schritt für Schritt: TCC.db samt WAL in einen kostenlosen Browser-Parser laden, Befunde lesen, Berechtigungen und Verlauf prüfen, Zeitraum setzen, exportieren.

Veröffentlicht am 7 Min. Lesezeit

Kurz gesagt. Sichern Sie die com.apple.TCC-Ordner (System und jeder Benutzer, mit der WAL), ziehen Sie sie auf TCC Parser und arbeiten Sie die Tabs durch: Findings, Permissions, Apps, Timeline, History, Sources. Setzen Sie einen Zeitraum, um jede Ansicht auf das relevante Zeitfenster zu konzentrieren, und exportieren Sie dann CSV, Timesketch-CSV oder JSON. Das Parsen läuft in WebAssembly in einem Web Worker in Ihrem Browser: Die Dateien werden nie hochgeladen.

Dies ist das praktische Gegenstück zum Leitfaden zur TCC.db-Forensik. Die Beispiele nutzen das eingebaute Beispiel, das synthetisch und fiktiv ist: ein Laptop aus der Finanzabteilung, FIN-MBP-03, Benutzer dana.whitlock, auf dem ein Angreifer mit einer gestohlenen Sitzung am 2026-09-14 etwa zwischen 10:05 und 10:50 UTC aktiv war. Es gehört zum selben fiktiven Einbruch wie der Windows-Host FIN-WKS-07, den unsere Schwesterwerkzeuge verwenden.

Apple und macOS sind Marken der Apple Inc. TCC Parser ist unabhängig und steht in keiner Verbindung zu Apple.

Bevor Sie beginnen

Sie brauchenWarum
Den System-Ordner com.apple.TCCFestplattenvollzugriff, Bedienungshilfen, Bildschirmaufnahme und MDM-Freigaben
Den Ordner com.apple.TCC jedes BenutzersAutomation, Ordner, Kamera, Mikrofon
Die -wal-DateienJüngste Änderungen und frühere Versionen von Zeilen
Den Benutzerordner im PfadOrdnet jede Datenbank einem Konto zu
Einen aktuellen Desktop-BrowserDer Parser läuft als WebAssembly

Schritt 1: Die com.apple.TCC-Ordner sichern

Erteilen Sie auf einem laufenden Mac zuerst Terminal (oder Ihrem Agenten) Festplattenvollzugriff und kopieren Sie dann die Ordner:

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

Dieselben Befehle sowie Varianten mit UAC, Aftermath, Velociraptor und für Dead-Box-Analysen finden Sie in der Anleitung How to get your data unter dem Ablagebereich und in TCC.db unter macOS: Speicherort und Sicherung. Hat Ihr Sicherungswerkzeug nur TCC.db ohne TCC.db-wal kopiert, funktioniert der Parser trotzdem, der Tab History hat dann aber weniger zu zeigen.

Schritt 2: Die Dateien laden

Öffnen Sie die Startseite. Im Ablagebereich können Sie:

  • Dateien, einen Ordner oder ein Sammlungsarchiv hineinziehen: ein ZIP (Velociraptor, die Aftermath-Kopien tcc_root / tcc_<user> oder einen gepackten Ordner) oder ein UAC-.tar.gz, das Sie vorher nicht entpacken müssen;
  • auf Choose files (Dateien auswählen) oder Choose a folder (Ordner auswählen) klicken;
  • auf Try a sample (Beispiel laden) klicken, um FIN-MBP-03 zu laden.

Der Parser erkennt TCC.db-Dateien und ordnet jeder ihre -wal zu, liest MDMOverrides.plist und lädt REG.db sowie jede andere SQLite-Datei im Ordner als Rohtabellen. Der Arbeitsbereich öffnet sich im Vollbild; mit Esc verlassen Sie das Vollbild.

Schritt 3: Den Tab Findings lesen

Befunde (Findings) sind Anlässe hinzusehen, keine Urteile. Im Beispiel sehen Sie unter anderem:

BefundZeile im Beispiel
Freigabe mit hoher Tragweite für ein TerminalFestplattenvollzugriff für com.apple.Terminal, 10:11:37 UTC
Pfadbasierter Client in einem versteckten Ordner, ad hoc signierte Code-Anforderung/Users/dana.whitlock/Library/Caches/.sync/sync-helper
Freigabe entfernt (nur in der WAL sichtbar)Bedienungshilfen für dieses Hilfsprogramm, erteilt um 10:19:05, später entfernt
Verweigerte Anfrage eines ungewöhnlichen ClientsBildschirmaufnahme für das Hilfsprogramm, verweigert um 10:24:40
Automation von System Events und FinderTerminal, 10:14:02 und 10:16:48
Häufung von BerechtigungsänderungenÄnderungen von 10:11:37 bis 10:24:40, danach eine Lücke von 14 Minuten bis 10:38:55
Per MDM erteilte Zeile zur PrüfungFestplattenvollzugriff für com.example.edr.agent aus einem PPPC-Profil

Die MDM-Zeile ist auf einem verwalteten Mac zu erwarten; sie wird aufgeführt, damit Sie sie bestätigen, nicht weil sie verdächtig wäre. Weitere Befundarten sind Clients in /tmp, /private/var/tmp, /Users/Shared oder Downloads sowie Zeitstempel in der Zukunft.

Schritt 4: Die Tabs Permissions und Apps prüfen

Permissions (Berechtigungen) listet jede Zeile aus jeder Datenbank dekodiert auf, in diesen Spalten:

SpalteInhalt
Last modifiedlast_modified in UTC
DecisionErlaubt, verweigert, unbekannt oder eingeschränkt
PermissionLesbarer Name und Rohkennung, zum Beispiel Festplattenvollzugriff und kTCCServiceSystemPolicyAllFiles
App/programDer Client, dazu das Automation-Ziel, falls vorhanden
Reasonauth_reason, dekodiert
DatabaseSystem- oder Benutzer-Datenbank, sodass eine Benutzerzeile ihrem Konto zugeordnet bleibt
Review flagsDie Befunde, die auf die Zeile zutreffen

Ein Klick auf eine Zeile öffnet ihr Detailfenster: client_type, den rohen Wert von auth_value, den zu Anforderungstext dekodierten csreq, auth_version, flags, die Richtlinie, den Speicherort (eine Seite der TCC.db oder eine Kopie in der WAL) sowie Schaltflächen, mit denen Sie den Zeitraum um diese Entscheidung herum setzen.

Apps gruppiert nach Client. Öffnen Sie im Beispiel com.apple.Terminal, sehen Sie seinen gesamten Fußabdruck an einer Stelle: Festplattenvollzugriff in der System-Datenbank; Automation von System Events und Finder, Zugriff auf Dokumente und Schreibtisch sowie Zugriff auf Wechselmedien (10:38:55, in der Geschichte das USB-Volume „EXFIL“) in der Datenbank von dana.whitlock. Genau dieses Bild gehört in den Bericht: eine App, viele Fähigkeiten, alles innerhalb von 30 Minuten.

Schritt 5: Auf der Timeline einen Zeitraum eingrenzen

Der Tab Timeline (Zeitachse) ordnet jeden Zeitstempel. Um ihn und alles andere einzugrenzen, nutzen Sie die Zeitraumleiste über allen Tabs:

  • From und To (von, bis), sekundengenau;
  • eine Auswahl des Zeitfelds: Last modified, Last reminded, Expired at oder Any of these times (einer dieser Zeitpunkte);
  • aus den Daten berechnete Vorgaben;
  • eine Auswahl Around… (um … herum);
  • ein Dichtestreifen, der zeigt, wo sich Änderungen häufen, und auf dem Sie durch Ziehen ein Zeitfenster auswählen.

Auch aus dem Detailfenster einer Zeile können Sie den Zeitraum um diese Entscheidung herum setzen. Der Zeitraum gilt für jede Ansicht, jede Zählung, jeden Befund und jeden Export und wird in der URL gespeichert. So können Sie genau diese Ansicht als Lesezeichen ablegen oder mit einem Kollegen teilen, der dieselben Dateien lädt. Im Beispiel trennt ein Zeitraum von 10:05:00 bis 10:50:00 UTC den Einbruch von den älteren, legitimen Freigaben (Kamera und Mikrofon für Zoom, Teams und so weiter); ist das Beispiel geladen, setzt ihn die Schaltfläche Use the sample's incident window (Zeitfenster des Vorfalls im Beispiel verwenden) im Tab Findings für Sie.

Schritt 6: History und Sources prüfen

History (Verlauf) zeigt Zeilen, die aus WAL-Frames (ältere Commits, unbestätigte Frames und Frames aus einer älteren WAL-Generation) und aus freien Seiten wiederhergestellt wurden, im Vergleich mit dem aktuellen Zustand. Im Beispiel erscheint dort die Freigabe für Bedienungshilfen des sync-helper, die in der aktuellen Datenbank nicht mehr existiert. Wie und warum das funktioniert, erklärt entfernte TCC-Freigaben aus der WAL wiederherstellen.

Sources (Quellen) listet auf, was geladen wurde: jede Datenbank, ob eine WAL gefunden und eingespielt wurde, MDMOverrides.plist und die Rohtabellen anderer SQLite-Dateien. Prüfen Sie das, bevor Sie einem Fehlen trauen: Fehlt die Datenbank eines Benutzers, liegt eine Lücke in der Sicherung vor, kein sauberes Konto.

Schritt 7: Die Beweismittel exportieren

Eintrag im ExportmenüVerwendung
Permissions (CSV, incl. history)Die dekodierten Zeilen samt wiederhergestellter Verlaufszeilen, mit einer Statusspalte (aktuell, abgelaufen, entfernt oder früher)
Timeline (CSV)Die Zeitachse, für die Zeitachse des Falls
Timeline for Timesketch (CSV)Import in Timesketch neben anderen Quellen
Everything (JSON)Alles, einschließlich dekodierter Anforderungen und wiederhergestelltem Verlauf

Ist ein Zeitraum gesetzt, steht er in den Dateinamen, sodass ein Export immer angibt, welches Zeitfenster er abdeckt. Halten Sie die Hashes der geladenen Quelldateien zusammen mit den Exporten fest.

Wie es weitergeht

Das Beispiel endet nicht in TCC.db: In derselben Geschichte gibt es einen unter Quarantäne gestellten Download tools.zip von https://files.example/…, einen gefälschten LaunchAgent com.example.updater.plist, in ~/Library/Caches/.sync/ bereitgestellte Dateien und einen Besuch auf transfer.example. Wie Sie von TCC-Zeilen zu diesen Artefakten wechseln, beschreibt Missbrauch von TCC-Berechtigungen untersuchen.

Verwandte Artikel

Verwandte Artikel

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.
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.
Wie Angreifer TCC-Berechtigungen unter macOS missbrauchen, welche Spuren das in TCC.db hinterlässt und welche Artefakte Sie als Nächstes prüfen.