Missbrauch von TCC-Berechtigungen unter macOS untersuchen
Wie Angreifer TCC-Berechtigungen unter macOS missbrauchen, welche Spuren das in TCC.db hinterlässt und welche Artefakte Sie als Nächstes prüfen.
Kurz gesagt. Angreifer brauchen unter macOS für das meiste, was sie vorhaben, TCC-Berechtigungen: Festplattenvollzugriff, um Benutzerdaten zu lesen, Bedienungshilfen, Bildschirmaufnahme und Eingabeüberwachung, um die Sitzung zu beobachten und zu steuern, und Automation von Finder oder System Events, um als der Benutzer zu handeln. Jeder dieser Wege hinterlässt eine charakteristische Zeile in TCC.db: welcher Client, welcher Dienst, wie entschieden wurde und wann. Dieser Artikel ordnet den gängigen Techniken zu, was Sie finden werden und zu welchen Artefakten Sie als Nächstes wechseln sollten. Die Beispiele stammen aus dem fiktiven Beispiel FIN-MBP-03 in TCC Parser.
Behalten Sie die Relationen im Blick: Fast jede der unten beschriebenen Zeilen kommt auch auf sauberen Macs vor. Ein Befund ist eine Frage, die zu beantworten ist, keine Antwort.
Die Techniken und ihre Spuren
| Technik | Wie sie in TCC.db aussieht | Wo |
|---|---|---|
| Festplattenvollzugriff für ein Terminal oder einen Interpreter | kTCCServiceSystemPolicyAllFiles, Client com.apple.Terminal, /bin/bash, /usr/bin/osascript und Ähnliches, auth_value = 2 | System-DB |
| Überwachungsfähigkeiten | kTCCServiceAccessibility, kTCCServiceScreenCapture, kTCCServiceListenEvent, kTCCServicePostEvent | System-DB |
| Automation von Finder, System Events oder Terminal | kTCCServiceAppleEvents, Ziel com.apple.finder, com.apple.systemevents, com.apple.Terminal | Benutzer-DB |
| Pfadbasierte oder ad hoc signierte Clients | client_type = 1, Pfad in /tmp, /private/var/tmp, /Users/Shared, einem versteckten Punkt-Ordner oder Downloads, csreq nur mit cdhash | Beide |
| Ordner- und Volumezugriff zum Bereitstellen von Daten | kTCCServiceSystemPolicyDocumentsFolder, ...DesktopFolder, ...DownloadsFolder, ...RemovableVolumes | Benutzer-DB |
| Spurenbeseitigung | Mit tccutil reset entfernte Zeilen, nur in der WAL oder in älteren Kopien sichtbar | Beide |
| Direkte Änderungen an der Datenbank | Zeilen ohne passende Aktivität von tccd, merkwürdige Grundcodes oder Anforderungen | Hängt von den Schutzmechanismen ab |
„System-DB“ und „Benutzer-DB“ geben an, wo diese Dienste üblicherweise liegen; die Aufteilung hat sich zwischen Versionen verschoben, fragen Sie also beide ab.
Festplattenvollzugriff für Terminals und Interpreter
Der kürzeste Weg zu Benutzerdaten führt über Festplattenvollzugriff für etwas, das beliebige Befehle ausführt. Berechtigungen werden meist der verantwortlichen App zugeordnet. Eine Freigabe für Terminal gilt also für jedes Skript, jedes Binärprogramm und jeden Einzeiler, der darin gestartet wird. Suchen Sie nach Festplattenvollzugriff für com.apple.Terminal, Terminals von Drittanbietern oder pfadbasierte Interpreter, und lesen Sie auth_reason: Ein vom Benutzer ausgelöster Grund (üblicherweise 2 Zustimmung des Benutzers oder 3 vom Benutzer gesetzt) bedeutet, dass jemand geklickt hat.
Im Beispiel wurde com.apple.Terminal um 10:11:37 UTC Festplattenvollzugriff erteilt, sechs Minuten nach Beginn des Einbruchszeitraums.
Bedienungshilfen, Bildschirmaufnahme, Eingabeüberwachung
Das sind die Dienste zur Überwachung und Steuerung. Mit Bedienungshilfen kann ein Programm in anderen Apps klicken und tippen, auch Dialoge bestätigen; Bildschirmaufnahme sieht den Bildschirm; Eingabeüberwachung beobachtet Tastatureingaben; Post Event schleust Eingaben ein. Malware fordert sie typischerweise über ein Hilfsprogramm an, manchmal nachdem sie den Benutzer dazu gebracht hat, eine überzeugende Abfrage zu bestätigen.
Auch eine verweigerte Zeile ist ein Beleg. Im Beispiel erhielt das Hilfsprogramm /Users/dana.whitlock/Library/Caches/.sync/sync-helper um 10:19:05 Bedienungshilfen, und um 10:24:40 wurde ihm Bildschirmaufnahme verweigert. Die Verweigerung zeigt, dass die Anfrage stattfand, auch wenn sie erfolglos blieb.
Prüfen Sie ab Sequoia ~/Library/Group Containers/group.com.apple.replayd/ScreenCaptureApprovals.plist: Weit in der Zukunft liegende Erinnerungsdaten zeigen dort, dass jemand die regelmäßige Erinnerung zur Bildschirmaufnahme unterdrückt hat.
Automation von Finder, System Events und Terminal
Mit Apple-Events-Automation sendet eine App Befehle an eine andere. Wer Finder steuert, kann als der Benutzer Dateien kopieren und verschieben; wer System Events steuert, kann Oberflächen- und Systemaktionen skripten; wer Terminal steuert, kann Befehle über eine App ausführen, die womöglich Festplattenvollzugriff besitzt. Diese Zeilen liegen in der Benutzer-Datenbank, mit dem Ziel in indirect_object_identifier und dessen Code-Anforderung in indirect_object_code_identity.
Im Beispiel durfte Terminal ab 10:14:02 System Events und ab 10:16:48 Finder steuern, beides in der Datenbank von dana.whitlock.
Pfadbasierte und ad hoc signierte Clients
Legitime Apps werden fast immer mit Bundle-ID erfasst, mit einer Anforderung, die an Apple oder eine Team-ID gebunden ist. Ein über einen absoluten Pfad erfasster Client (client_type 1) in einem temporären, gemeinsam genutzten oder versteckten Ordner, dessen csreq nur aus einem cdhash besteht, ist ein kleines, unsigniertes oder ad hoc signiertes Programm, das jemand abgelegt und ausgeführt hat. Das trifft auch auf viele Entwicklerwerkzeuge zu. Prüfen Sie also den Pfad, die Datei und wie sie auf das System kam. Details in csreq-Code-Anforderungen dekodieren.
Daten bereitstellen: Ordner und Wechselmedien
Freigaben für Dokumente, Schreibtisch, Downloads und Wechselmedien an ein Terminal oder ein Hilfsprogramm, im Abstand weniger Minuten, zeichnen die Sammelphase nach. Im Beispiel: Dokumente und Schreibtisch für Terminal gegen 10:18, Downloads für den sync-helper um 10:21:44 und Wechselmedien für Terminal um 10:38:55, was die Geschichte mit einem USB-Volume namens „EXFIL“ verbindet.
Spurenbeseitigung mit tccutil
Ein Eindringling, der TCC kennt, entfernt Freigaben beim Rückzug womöglich mit tccutil reset. Die Zeile verschwindet aus der Datenbank, frühere Kopien ihrer Seite können aber in TCC.db-wal oder in freien Seiten bleiben. Im Beispiel fehlt die Freigabe für Bedienungshilfen des Hilfsprogramms im aktuellen Zustand und wird aus der WAL wiederhergestellt; die Geschichte legt die Entfernung auf 10:47:12 UTC. Siehe entfernte TCC-Freigaben aus der WAL wiederherstellen.
Direkte Änderungen an TCC.db
System Integrity Protection verhindert Änderungen an der System-Datenbank, selbst durch root. Bei deaktiviertem SIP kann ein root-Prozess direkt hineinschreiben. Die Benutzer-Datenbank ist durch TCC geschützt, nicht durch SIP, und öffentliche Forschung hat in der Vergangenheit Wege gezeigt, sie zu manipulieren. Anzeichen, die Sie mit Bedacht prüfen sollten: Zeilen, deren last_modified keine passende Aktivität von com.apple.TCC im Unified Log hat, Grundcodes, die nicht zur erwarteten Art der Freigabe passen, und fehlende oder merkwürdige Code-Anforderungen. Halten Sie den SIP-Status des Macs (über csrutil status auf einem laufenden System oder aus Ihrem Triage-Werkzeug) in den Fallnotizen fest.
MDM und PPPC
Ein bösartiges oder unerwartetes PPPC-Profil kann viele Dienste ohne Abfrage vorab freigeben. Kamera, Mikrofon oder Bildschirmaufnahme kann es nicht stillschweigend freigeben. Zeilen mit einem auth_reason, der üblicherweise als MDM-Richtlinie gelesen wird (6), mit einer policy_id oder mit einem Eintrag in MDMOverrides.plist sollten zu einem Profil passen, das Ihr MDM-Team kennt. Im Beispiel besitzt com.example.edr.agent Festplattenvollzugriff aus einem PPPC-Profil, was für einen EDR-Agenten zu erwarten ist.
Die Zeitachse aufbauen
Bringen Sie die Zeilen in eine Reihenfolge und achten Sie auf Lücken und Häufungen. Das Beispiel, in UTC am 2026-09-14:
| Zeit | Datenbank | Ereignis |
|---|---|---|
| 10:11:37 | System | Festplattenvollzugriff für Terminal erlaubt |
| 10:14:02 | dana.whitlock | Terminal darf System Events steuern |
| 10:16:48 | dana.whitlock | Terminal darf Finder steuern |
| ~10:18 | dana.whitlock | Zugriff auf Dokumente und Schreibtisch für Terminal |
| 10:19:05 | System | Bedienungshilfen für den pfadbasierten sync-helper erlaubt |
| 10:21:44 | dana.whitlock | Zugriff auf Downloads für den sync-helper |
| 10:24:40 | System | Bildschirmaufnahme für den sync-helper verweigert |
| 10:38:55 | dana.whitlock | Zugriff auf Wechselmedien für Terminal |
| 10:47:12 | System | Zeile für Bedienungshilfen des sync-helper entfernt (nur in der WAL) |
In TCC Parser meldet Findings eine Häufung von Berechtigungsänderungen von 10:11:37 bis 10:24:40, gefolgt von einer Lücke von 14 Minuten bis 10:38:55. Ein Zeitraum von 10:05 bis 10:50 (die Schaltfläche Use the sample's incident window im Tab Findings) beschränkt jeden Tab auf den Einbruch.
Wohin Sie als Nächstes wechseln
TCC.db sagt Ihnen, was möglich war. Andere Artefakte sagen Ihnen, was geschehen ist:
| Frage | Artefakt |
|---|---|
| Wer hat was angefordert, und welcher Prozess war verantwortlich? | Unified Log, subsystem == "com.apple.TCC" |
| Wie kam das Hilfsprogramm auf das System? | Datenbank der Quarantäne-Ereignisse, Download-Verlauf, Zeitstempel im Dateisystem |
| Wie verschafft es sich Persistenz? | LaunchAgents und LaunchDaemons (~/Library/LaunchAgents, /Library/LaunchAgents, /Library/LaunchDaemons) sowie Anmeldeobjekte |
| Was wurde in Terminal ausgeführt? | Shell-Historie (~/.zsh_history, ~/.zsh_sessions/) |
| Wurde eine Berechtigung geändert und entfernt? | EDR-Telemetrie; TCC-Änderungsereignisse von Endpoint Security ab macOS 15.4 |
| Was hat den Mac verlassen? | Browserverlauf, Spuren von Wechselmedien, Netzwerkprotokolle |
In der Geschichte des Beispiels führen diese Wechsel zu einem unter Quarantäne gestellten Download tools.zip von https://files.example/…, einem gefälschten LaunchAgent com.example.updater.plist, in ~/Library/Caches/.sync/ bereitgestellten Dateien und einem Besuch auf transfer.example. Nichts davon steht in TCC.db; genau dorthin verweisen Sie aber die TCC-Zeilen.
Eine Startabfrage für das Unified Log, auf einem gesicherten Log-Archiv oder einem laufenden System:
log show --info --predicate 'subsystem == "com.apple.TCC"' \
--start "2026-09-14 10:00:00" --end "2026-09-14 11:00:00"
Die Nachrichtenformate unterscheiden sich je nach Version, und manche Werte können als <private> geschwärzt sein. Die Aufbewahrung ist begrenzt, sichern Sie Logs also früh.
Der Bericht
- Nennen Sie Fähigkeiten, keine Handlungen: „Terminal besaß ab 10:11:37 UTC Festplattenvollzugriff“, und zitieren Sie dann das Artefakt, das die Nutzung zeigt.
- Nennen Sie für jede Zeile Datenbank und Konto, und geben Sie an, wenn eine Zeile aus der WAL wiederhergestellt wurde.
- Formulieren Sie Deutungen von
auth_reasonvorsichtig, als von der Community dokumentiert. - Vermerken Sie Ihre eigenen Freigaben während der Sicherung, damit niemand sie für Aktivität des Angreifers hält.
Häufige Fragen
Ist Festplattenvollzugriff für Terminal ein Zeichen für eine Kompromittierung?
Für sich genommen nicht. Entwickler und Administratoren erteilen ihn routinemäßig. Bedeutung bekommt er, wenn der Zeitpunkt der Freigabe zu anderen verdächtigen Aktivitäten passt, wenn die Rolle des Benutzers ihn nicht erfordert oder wenn für dieselbe App Freigaben für Automation, Ordner oder Wechselmedien folgen.
Kann sich Malware selbst TCC-Berechtigungen erteilen?
Normalerweise ist eine Abfrage beim Benutzer, eine MDM-Richtlinie oder eine Entscheidung des Systems nötig. Wege dorthin sind etwa, den Benutzer zur Zustimmung zu einer Abfrage zu verleiten, sich die Berechtigungen einer App auszuleihen, die sie bereits besitzt, oder die Datenbank direkt zu bearbeiten, wo die Schutzmechanismen es zulassen, zum Beispiel die System-Datenbank bei deaktiviertem SIP.
Wo finde ich Belege dafür, dass eine Berechtigung genutzt wurde?
Nicht in TCC.db, die nur Entscheidungen speichert. Sehen Sie sich das Unified Log (Subsystem com.apple.TCC für Anfragen), Belege für Prozessausführung, die Shell-Historie, Zeitstempel im Dateisystem und EDR-Telemetrie an.
Wie unterscheide ich eine per MDM erteilte Berechtigung von einer durch den Benutzer erteilten?
Prüfen Sie auth_reason (6 wird üblicherweise als MDM-Richtlinie gelesen), policy_id und die Tabelle policies sowie MDMOverrides.plist. Bestätigen Sie das anhand der installierten Konfigurationsprofile. Ein PPPC-Profil, das Sie nicht erklären können, ist ein Befund.