Was sind macOS-Unified-Logs?
Seit macOS 10.12 Sierra schreiben der Kernel, Apples Daemons und jede App, die os_log nutzt, in ein gemeinsames Protokollsystem. logd speichert die Einträge in komprimierten binären .tracev3-Dateien unter /private/var/db/diagnostics; der Text jeder Meldung wird aus einem Formatstring in /private/var/db/uuidtext (pro Binärdatei) oder in den dsc-Dateien des Shared Cache und den mit dem Eintrag gespeicherten Werten zusammengesetzt.
Für Ermittler ist es die reichhaltigste zeitlich geordnete Spur auf einem Mac: Anmeldungen und sudo, Datenschutzentscheidungen (TCC), Gatekeeper und XProtect, launchd und Anmeldeobjekte, SSH und Bildschirmfreigabe, aktivierte Datenträger — jeder Eintrag mit Prozess, PID, Subsystem, Kategorie und mikrosekundengenauem Zeitstempel.
Was dieses Werkzeug liest
- Ein .logarchive (aus log collect oder sysdiagnose), als Ordner oder ZIP, oder die rohen Ordner diagnostics + uuidtext von einem Mac oder Disk-Image, einschließlich UAC- (.tar.gz) und Velociraptor-Sammlungen (ZIP).
- tracev3-Blöcke: Header, Katalog, LZ4-komprimierte Chunksets, Firehose (log, activity, trace, signpost, loss), Oversize-Strings, Statedump und Simpledump; bootrelative Mach-Zeiten per timesync-Datensätzen nach UTC umgerechnet (Intel- und Apple-Silicon-Zeitbasen).
- Formatstrings, über uuidtext- und dsc-Dateien aufgelöst und wie bei log show dargestellt (printf-Konvertierungen, %{public}/%{private}, Decoder für errno, UUID und mask.hash).
- Exporte von log show: --style ndjson und json (alle Felder) sowie die Textstile default, compact und syslog, mehrzeilige Meldungen inklusive.
- Filter nach Freitext oder regulärem Ausdruck, Typ, Prozess, Subsystem, Kategorie und PID (mit Ausschlüssen), ein sekundengenauer Zeitraum mit Dichtestreifen, kuratierte DFIR-Triage-Regeln und Exporte als CSV, NDJSON (log-show-Feldnamen), JSON und Timesketch.
Warum es bei Ermittlungen zählt
- Authentifizierung und Rechte: sudo-Befehle und -Fehlschläge, su, Autorisierungsrechte, SSH- und Bildschirmfreigabe-Sitzungen, neue lokale Konten.
- Umgehung von Schutzmaßnahmen und Persistenz: TCC-Freigaben wie Festplattenvollzugriff für Terminal, Gatekeeper-Ausnahmen, entfernte Quarantäne, neue Launch-Agents, -Daemons, Anmeldeobjekte und Erweiterungen.
- Kontext einer Exfiltration: von DiskArbitration aktivierte USB-Volumes, Netzwerk- und Dateiaktivität in denselben Minuten.
- Anker der Zeitleiste: Mikrosekunden-Zeitstempel und Boot-UUIDs richten alle anderen macOS-Artefakte aus.
Grenzen, die man kennen sollte
- Meldungen sind nur so vollständig wie die String-Dateien: Ohne uuidtext und dsc lässt sich der Text nicht darstellen (Einträge werden als unaufgelöst markiert). Ohne timesync sind die Zeiten ungefähr.
- <private>-Werte wurden beim Protokollieren geschwärzt und lassen sich nicht wiederherstellen. Die meisten Info- und Debug-Meldungen werden nie auf die Platte geschrieben.
- Der Bestand rotiert nach Größe und hält oft nur Tage. Das Fehlen von Einträgen beweist nicht, dass nichts passiert ist.
- Die Darstellung folgt dem Open-Source-Parser macos-unifiedlogs, hier mit log show abgeglichen (rund 99 % der log-, activity- und state-Meldungen identisch); Signpost-Texte und einige Objektdecoder weichen ab. Prüfen Sie wichtige Einträge mit log show, bevor Sie sich in einem Bericht darauf stützen.
- Alles liegt im Speicher Ihres Browsers: Sehr große Bestände (mehrere Millionen Einträge) brauchen eventuell die Importoptionen, um nur ein Zeitfenster zu laden.
So sammeln Sie sie
- Auf dem Mac: sudo log collect --output host.logarchive (der ganze Bestand), dann das Paket oder sein ZIP ablegen.
- Aus einem Image oder mit einem anderen Werkzeug: /private/var/db/diagnostics und /private/var/db/uuidtext mit ihrer Struktur kopieren (UAC macos_unified_logs, mac_apt UNIFIEDLOGEXPORT, Velociraptor Generic.Collectors.File).
- Wenn Sie nur Apples Werkzeug haben: log show --archive host.logarchive --info --debug --timezone UTC --style ndjson > host.ndjson.
Häufige Fragen
Werden meine Protokolle irgendwohin hochgeladen?
Nein. Die Dateien werden von WebAssembly-Code in einem Web Worker Ihres Browsers gelesen. Nichts wird an einen Server gesendet; beim Schließen des Tabs wird alles vergessen.
Brauche ich dafür einen Mac?
Nein. Der tracev3-Decoder läuft in jedem aktuellen Browser unter Windows, Linux oder macOS. Sie brauchen nur die Dateien: ein .logarchive oder die Ordner diagnostics und uuidtext von einem Mac oder Disk-Image.
Warum sind manche Meldungen unvollständig oder als unaufgelöst markiert?
Der Text eines Eintrags stammt aus Formatstrings in den uuidtext- und dsc-Dateien. Fehlen diese in Ihrer Sammlung oder verweist der Eintrag auf einen String, den sie nicht enthalten, lässt sich die Meldung nicht vollständig darstellen. Sammeln Sie den Ordner uuidtext oder ein .logarchive, das ihn enthält.
Ist das Ergebnis identisch mit log show?
Sehr ähnlich, aber nicht garantiert. Der Decoder basiert auf Mandiants Open-Source-Parser macos-unifiedlogs mit Korrekturen für die Treue zu log show (Zahlenformat, UUIDs, errno und maskierte Hashes). Auf einem echten Archiv stimmten rund 99 % der Meldungen genau mit log show überein; Signposts und einige Objekttypen werden anders dargestellt. Bestätigen Sie für Beweiszwecke wichtige Einträge mit log show.
In welcher Zeitzone sind die Zeiten?
Einträge werden mithilfe der timesync-Datensätze aus der bootrelativen Mach-Zeit nach UTC umgerechnet. Der Schalter UTC / Lokal ändert nur die Anzeige; Exporte sind immer in UTC.
Wie große Bestände schafft es?
Mehrere Millionen Einträge, begrenzt durch den Speicher des Browser-Tabs. Für größere Bestände behalten Sie mit den Importoptionen nur ein Zeitfenster oder lassen beim Lesen Signposts, Info- oder Debug-Einträge aus.
Kann es die Ausgabe von log show lesen?
Ja: --style ndjson und json behalten alle Felder; die Textstile default, compact und syslog funktionieren ebenfalls, mit weniger Details. Nutzen Sie --timezone UTC, damit die Zeiten eindeutig sind (der Stil compact hat keinen UTC-Versatz).
Beweisen die Triage-Befunde eine Kompromittierung?
Nein. Es sind Vorlagen, die auf lesenswerte Einträge zeigen (sudo, TCC-Freigaben, Gatekeeper-Ausnahmen, neue Launch-Objekte, USB-Volumes …). Viele sind auf einem normalen Mac Routine; bewerten Sie sie im Zusammenhang.