Skip to content

Forensik mit macOS Unified Logs: ein Praxisleitfaden

Was macOS Unified Logs aufzeichnen, wo tracev3, uuidtext und timesync liegen, was sie beweisen können und was nicht – und wie Sie sie für Ermittlungen lesen.

Veröffentlicht am 4 Min. Lesezeit

Kurz gesagt. Unified Logs sind die detaillierteste Zeitleiste, die ein Mac führt: Anmeldungen, sudo, Datenschutzentscheidungen (TCC), Gatekeeper, Launch-Agents, Fernzugriff und das Einbinden von Datenträgern, jeweils mit Prozess, Subsystem und mikrosekundengenauem Zeitstempel. Der Haken: Ein Eintrag verteilt sich auf drei Arten von Dateien – .tracev3, uuidtext/dsc und timesync –, und Sie brauchen alle davon. Dieser Leitfaden erklärt, was wo liegt und wie Sie es durcharbeiten; der Unified Log Parser liest alles in Ihrem Browser.

Was das Unified-Logging-System ist

Seit macOS 10.12 Sierra leitet Apple nahezu die gesamte Protokollierung über ein einziges System. Der Kernel, Apples Daemons und jeder Drittanbietercode, der os_log aufruft, senden Einträge an logd, der sie in komprimierte Binärdateien schreibt. Textdateien im Syslog-Stil unter /var/log gibt es weiterhin, doch das meiste, was in einer Ermittlung zählt, liegt im einheitlichen Speicher.

Jeder Eintrag enthält:

  • die Zeit, nach der Umrechnung mikrosekundengenau;
  • den Prozess (Image-Pfad und PID), Thread und User-ID;
  • das Sender-Image: die Bibliothek oder das Framework, das protokolliert hat (oft nicht der Prozess selbst);
  • ein Subsystem und eine Kategorie in Reverse-DNS-Form, zum Beispiel com.apple.TCC / access;
  • einen Typ: Default, Info, Debug, Error oder Fault bei Log-Meldungen, dazu Activities, Signposts und Statedumps;
  • die Meldung, gerendert aus einem Formatstring und den mit dem Eintrag gespeicherten Werten.

Wo die Dateien liegen

PfadInhalt
/private/var/db/diagnostics/Persist/Hauptspeicher der .tracev3-Dateien
/private/var/db/diagnostics/Special/Einträge mit eigener Lebensdauer (oft älter als Persist)
/private/var/db/diagnostics/Signpost/Performance-Signposts
/private/var/db/diagnostics/HighVolume/Daten mit hohem Volumen, meist leer
/private/var/db/diagnostics/timesync/Datensätze zur Korrelation von Bootvorgang und Uhr
/private/var/db/uuidtext/XX/…Formatstrings, eine Datei pro Binary-UUID
/private/var/db/uuidtext/dsc/…Strings des dyld Shared Cache

Ein .logarchive, erzeugt von log collect oder sysdiagnose, enthält dieselben Ordner plus logdata.LiveData.tracev3, den Speicherpuffer zum Zeitpunkt der Sicherung. Der Artikel zum tracev3-Format geht den binären Aufbau durch.

Warum Sie immer drei Arten von Dateien brauchen

Ein .tracev3-Eintrag speichert seinen Text nicht. Er speichert einen Verweis auf einen Formatstring (einen Offset in eine uuidtext-Datei oder in die dsc-Datei des Shared Cache) und die rohen Argumentwerte. Ohne die String-Dateien kann ein Parser nur Zahlen und Fragmente anzeigen; die Einträge sind „unaufgelöst“. Zeiten werden als bootrelative Mach Continuous Time gespeichert und mithilfe der timesync-Datensätze in Uhrzeit umgerechnet; ohne sie sind Zeiten bestenfalls Näherungswerte.

Die Regel für die Sicherung ist daher einfach: Nehmen Sie diagnostics und uuidtext mit, oder ein .logarchive, das beides enthält.

Was Unified Logs beweisen können

  • Anmeldung und Rechtenutzung: sudo-Befehle mit Zielbenutzer und vollständiger Befehlszeile, falsche Passwörter, su, von authd gewährte Autorisierungsrechte, Änderungen an lokalen Konten.
  • Fernzugriff: SSH-Sitzungen (sshd, sshd-session) und Sitzungen der Bildschirmfreigabe, mit der entfernten Adresse, sofern protokolliert.
  • Datenschutzentscheidungen: TCC-Dialoge und -Ergebnisse – etwa Festplattenvollzugriff für Terminal – unter dem Subsystem com.apple.TCC.
  • Ausführungskontext: Gatekeeper-Bewertungen und deren Übergehen durch syspolicyd, Aktivität von XProtect und XProtect Remediator, Quarantäne-Attribute, App-Starts über LaunchServices.
  • Persistenz: das Laden von Launch-Agents und -Daemons, die Registrierung von Anmeldeobjekten durch Background Task Management.
  • Geräte: von diskarbitrationd aktivierte und ausgeworfene Volumes, angeschlossene USB-Geräte.

Der Artikel zu Triage-Abfragen listet für jeden Punkt konkrete Suchen auf.

Was sie nicht beweisen können

  • Abwesenheit. Ein fehlender Eintrag kann bedeuten, dass der Speicher rotiert ist, die Stufe nie persistiert wurde (die meisten Info- und Debug-Einträge existieren nur im Arbeitsspeicher), der Wert geschwärzt wurde oder Apple den Wortlaut in dieser Version geändert hat.
  • Geschwärzte Werte. <private> bedeutet, dass der Wert beim Protokollieren verborgen wurde. Kein Parser kann ihn wiederherstellen; der Formatstring zeigt aber weiterhin, um welche Art von Ereignis es sich handelte.
  • Exakter Wortlaut über Versionen hinweg. Meldungen sind keine API. Eine auf eine macOS-Version abgestimmte Suche kann Ereignisse in einer anderen übersehen; bevorzugen Sie Filter nach Subsystem, Kategorie und Prozess und lesen Sie rund um jeden Treffer.

Ein belastbarer Arbeitsablauf

  1. Früh sichern, mit uuidtext und timesync, und das Gesicherte hashen.
  2. Abdeckung dokumentieren: erster und letzter Eintrag pro Boot-Sitzung sowie jede Lücke, bevor Sie sagen „es ist nichts passiert“.
  3. Zeitlich eingrenzen um bekannte Ereignisse (ein bösartiger Download, eine Anmeldung), dann erweitern.
  4. Nach Prozess und Subsystem filtern statt nur nach Meldungstext.
  5. Rund um jeden Treffer lesen: Die Einträge derselben PID wenige Sekunden davor und danach erklären ihn meist.
  6. Wichtige Einträge mit log show bestätigen – auf einem Mac, für alles, was in einen Bericht einfließt – und den verwendeten Parser samt Version notieren.

Im Browser arbeiten

Der Unified Log Parser dekodiert tracev3-Dateien aus einem .logarchive, einem kopierten /private/var/db-Baum oder einer UAC- bzw. Velociraptor-Sammlung und öffnet auch log show-Exporte. Er bietet einen Zeitraum mit Dichtestreifen, Filter nach Typ, Prozess, Subsystem und PID, kuratierte DFIR-Vorgaben sowie Exporte als CSV, NDJSON und für Timesketch. Alles läuft lokal per WebAssembly; die Anleitung nutzt das synthetische Beispiel FIN-MBP-03.

Weiterführende Lektüre: Das Projekt macos-UnifiedLogs von Mandiant und die Notizen zum Apple-Unified-Logging-Format von libyal dokumentieren die Formate im Detail.

Verwandte Artikel

Schritt für Schritt: .logarchive, diagnostics-Ordner oder log-show-Export im kostenlosen Unified Log Parser öffnen, Befunde sichten, filtern, exportieren.
macOS Unified Logs mit log collect, Rohkopie von diagnostics und uuidtext, UAC, Velociraptor oder mac_apt sichern – ohne Lücken, die das Parsen stören.
macOS Unified Logs mit log show exportieren (ndjson, json, Text), Zeitzonenfallen vermeiden, Parser vergleichen und CSV- oder Timesketch-Zeitleisten bauen.