Zum Inhalt springen
Categoria: Forensik8 Min. Lesezeit

macOS Incident Forensik: UnifiedLogs, FSEvents und AULR im Einsatz

Por Lucas Andrade ·

Wie Basilisk auf macOS Sonoma und Sequoia mit UnifiedLogs, FSEvents und AULR Beweise sichert, ohne den Tatort zu zerstoeren.

macOS Incident Forensik: UnifiedLogs, FSEvents und AULR im Einsatz

Ein MacBook Pro M3 landet auf dem Tisch, im Verdacht, ein Payload mit widerrufener Developer-ID auszufuehren. Der Kunde will Antworten in 48 Stunden, die Platte ist FileVault-verschluesselt und der Nutzer ist im Urlaub in einer anderen Zeitzone. Bevor irgendein Tool startet, klaert das Basilisk-Team den rechtlichen Scope, erhaelt das FileVault-Passwort ueber einen geprueften Kanal und notiert einen SHA-256-Hash des Ausgangsimages. Auf modernem macOS kommst du nicht weit, ohne zu wissen, dass sich der Logging-Stack seit Sierra drastisch veraenderte: klassische .log-Dateien wichen dem binaeren tracev3-Format, und das zu ignorieren verwirft achtzig Prozent der verfuegbaren Telemetrie. Dieser Leitfaden geht die drei Saeulen durch, die ein macOS-Responder nicht ueberspringen kann: UnifiedLogs, FSEvents und Apple Unified Logging mit Activity Tracing.

Warum sich macOS-Logging aenderte und warum es zaehlt

Seit macOS Sierra ersetzte Apple Apple System Log und verstreute Textlogs durch eine einheitliche, strukturierte, binaere Pipeline, die komprimierte tracev3-Chunks schreibt. Der Vorteil fuer die Verteidigung ist enorm: Subsystem- und Category-Tags, Activity-IDs, die verwandte Events verknuepfen, und eine Aufbewahrung, die Tage bis Wochen zurueckreichen kann. Der Nachteil ist, dass grep ueber Text tot ist; du brauchst jetzt einen Parser, der das Format und die uuidtext-String-Tabellen versteht, die die lesbaren Nachrichten rehydrieren. Ein Responder, der /var/log kopiert und Feierabend macht, hat fast nichts erfasst. Die echten Beweise liegen in einem binaeren Speicher, der bewusst gesammelt und geparst werden muss, und genau diese Reibung nimmt dieser Artikel. Wer die Umstellung verinnerlicht, gewinnt zudem eine Tiefe, die Windows- oder Linux-Ermittler beneiden: die Aktivitaets-IDs erlauben es, einen einzelnen XPC-Aufruf ueber mehrere Prozesse hinweg zu verfolgen, statt isolierte Zeilen zu raten.

UnifiedLogs: Sammeln und Parsen

UnifiedLogs liegen unter /var/db/diagnostics und /var/db/uuidtext und wiegen je nach Nutzung 500 MB bis 4 GB. Fuer die Live-Erfassung fuehren wir log collect --output incident.logarchive aus, was den aktuellen Zustand in ein portables Bundle einfriert, das du off-box analysieren kannst. Fuer Dead-Box-Arbeit kopieren wir die Rohverzeichnisse und fuettern sie an Mandiants macos-UnifiedLogs, einen Rust-Parser, der keinen passenden Apple-Host mehr braucht. Das war frueher ein grosser Reibungspunkt: du musstest einen Mac mit exakt der Ziel-OS-Version online halten, nur um /usr/bin/log aufzurufen. Streame die geparste Ausgabe nach JSONL, damit sie direkt in deine Analysepipeline fliesst. Fuer den breiteren Verteidigungskontext kombiniere diese Lektuere mit macOS-Hardening: Lockdown Mode, MDM und Angriffsflaechenreduktion.

FSEvents: was sich auf diesem Volume wann aenderte

FSEvents ist die zweite Saeule und beantwortet die Frage 'was aenderte sich auf diesem Volume und wann'. Logs liegen in /.fseventsd/ als gzip-komprimierte nummerierte Dateien; jeder Datensatz traegt eine monotone Event-ID plus Flags fuer Create, Rename oder Delete. Kritischer Vorbehalt: FSEvents speichert weder Inhalt noch den Nutzer, der die Aenderung ausloeste, nur Pfad und Operation. FSEvents mit UnifiedLogs zu paaren erzeugt eine vertrauenswuerdige Timeline, weil das Log dir sagt, welcher Prozess lief, waehrend FSEvents dir sagt, welche Dateien er beruehrte. Tools wie David Cowens FSEventsParser verarbeiten das in Sekunden und liefern Timesketch-fertiges CSV, im Einklang mit dem Workflow aus Timeline Forensics unter Windows: Plaso, Log2Timeline und KAPE in der Praxis. Nutze die monotone ID als Sortierschluessel, wenn Wall-Clock-Zeitstempel fehlen. Beachte, dass FSEvents nach einer Aenderung mit Verzoegerung auf die Platte flusht, sodass das letzte Fenster vor der Sicherung luechkenhaft wirken kann; kombiniere es daher immer mit den praeziser gestempelten UnifiedLogs, statt einer Quelle allein zu vertrauen.

AULR und die Macht der Praedikate

AULR, genauer Apple Unified Logging mit Activity Tracing, legt Parent-Prozess, Thread-ID und Signpost-Kontext obendrauf. Praedikate sind dein schaerfstes Messer: log show --predicate 'subsystem == "com.apple.securityd"' --last 24h bringt verdaechtige XPC-Versuche ans Licht, waehrend das Subsystem com.apple.TCC Mikrofon- und Kamera-Prompts offenlegt, die verweigert oder gewaehrt wurden. In einem echten Fall im Juni dieses Jahres hinterliess eine Atomic-AMOS-Stealer-Variante Fingerabdruecke in com.apple.kextd beim Versuch, ein KEXT auf einem SIP-aktiven Mac zu laden, und scheiterte lautstark. Ohne dieses Praedikat ertrinkt das Event in Millionen Zeilen Rauschen. Baue eine kleine Bibliothek von Praedikaten fuer Persistenz, TCC, Code-Signing und Netzwerk-Subsysteme, damit du nie blind durch einen Firehose greppst. Nuetzliche Startpraedikate sind eventMessage CONTAINS "amfid" fuer Code-Signing-Ablehnungen, process == "tccd" fuer Privacy-Freigaben und subsystem == "com.apple.network" fuer Verbindungsversuche; speichere jedes mit einer Notiz, was es beweist, damit ein Kollege es unter Druck wiederverwenden kann, ohne die Syntax neu herzuleiten.

Ethische Erfassung und Chain of Custody

Bei der ethischen Erfassung folgt Basilisk einem festen Runbook: schriftliche Kundenautorisierung, ein Thunderbolt-Write-Blocker fuer das Disk-Imaging wo machbar, SHA-256- und SHA-3-512-Hashes und Chain-of-Custody-Logs, signiert mit YubiKey-Hardware-Keys. Wenn der Mac live ist und nicht heruntergefahren werden kann, stuetzen wir uns auf CrowdStrikes aftriage oder das Velociraptor-Rezept macos_artifact_collection, immer mit Ausgabe auf eine dedizierte externe APFS-SSD. Diese Strenge spiegelt, was wir in DFIR unter Linux: Live-Triage mit UAC und Velociraptor untersuchten, und verbindet sich mit der persoenlichen Disziplin aus OPSEC fuer Security-Researcher: Persoenliches Bedrohungsmodell. Protokolliere jeden ausgefuehrten Befehl mit Zeitstempel, denn der Report ist nur so stark wie seine Reproduzierbarkeit.

Den breiteren Artefakt-Satz korrelieren

Die drei Saeulen sind das Skelett; das Fleisch ist der Rest des Artefakt-Satzes. Inspiziere Spotlight-Metadaten via mdls an verdaechtigen Dateien, exportiere KnowledgeC.db aus CoreDuet, um fokussierte Fenster zu mappen, und durchlaufe /private/var/db/CoreDuet/Knowledge, um Terminal-Nutzung mit Aktivitaet ausserhalb der Arbeitszeit zu korrelieren. Fuer Persistenz zaehle LaunchAgents und LaunchDaemons in der Nutzer- und Systemdomain auf, pruefe BTM-Eintraege (Background Task Management) und diffe installierte Konfigurationsprofile. Taucht Loader-Verhalten auf, reimt es sich oft mit Techniken aus Malware-Analyse im Isolierten Lab: Sicheres Setup mit FlareVM und REMnux, also schwenke ein Sample in eine Sandbox, statt es auf dem Beweis-Host zu detonieren. Ergaenze KnowledgeC.db um die Auswertung von quarantine-Flags via xattr -p com.apple.quarantine, weil ein Payload, der ueber den Browser kam, dort seinen Ursprung als Download-Agent und Zeitstempel hinterlaesst und dir die Eintrittsstelle liefert.

Die Timeline bauen

Die Analyse startet parallel: waehrend macos-UnifiedLogs im Hintergrund JSONL streamt, laden wir FSEvents-CSV und die Log-Ausgabe in ein Jupyter-Notebook mit pandas und joinen UnifiedLogs-PIDs gegen FSEvents-Pfade auf einem gemeinsamen Zeitfenster. Ziel ist eine einzige Super-Timeline, in der Prozessstart, Dateierstellung, TCC-Prompt und Netzwerkverbindung innerhalb von Sekunden zueinander liegen und eine kohaerente Geschichte erzaehlen. Schiebe den zusammengefuehrten Frame in Timesketch fuer kollaborative Pruefung und Tagging und nutze gespeicherte Views, um das mutmassliche Einbruchsfenster zu isolieren. Eine Timeline, die dem Kreuzverhoer standhaelt, ist eine, in der jede Zeile ihr Quell-Artefakt zitiert, also halte die Provenance-Spalte ab dem ersten Import gefuellt, statt sie spaeter unter Zeitdruck zu rekonstruieren.

Anti-Forensik und haeufige Fallstricke

Angreifer kennen diese Artefakte auch. Ein faehiger Eindringling kann UnifiedLogs mit einem signierten Helper loeschen, die Systemzeit manipulieren, um die Ordnung zu verwuerfeln, oder komplett im Speicher operieren, um FSEvents zu umgehen. Achte auf Luecken: ein verdaechtig sauberes tracev3-Fenster, eine FSEvents-Sequenz mit einem Sprung in den Event-IDs oder ein Log, das abrupt neu startet, deuten alle eher auf Manipulation als auf Unschuld. Der haeufigste selbst verschuldete Fallstrick ist analystenseitig: das Beweismittel booten, Spotlight neu indexieren lassen oder read-write mounten und damit neue FSEvents schreiben, die genau die Timeline verunreinigen, die du lesen wolltest. Mounte immer read-only und arbeite vom Image, nie vom Original. Ein zweiter haeufiger Fehler ist, der Wall-Clock-Zeit auf einer Maschine zu vertrauen, deren Uhr ein Angreifer verstellt hat; verankere deine Timeline an monotonen FSEvents-IDs und an extern pruefbaren Ereignissen wie DHCP-Leases oder serverseitigen Logs, und markiere jedes Intervall, in dem die lokale Uhr diesen Ankern widerspricht, als verdaechtig statt als massgeblich.

Eine Responder-Checkliste

Verdichte das Engagement in eine wiederholbare Checkliste: schriftliche Autorisierung und Scope bestaetigen; den FileVault-Key ueber einen geprueften Kanal erhalten; mit Write-Blocker imagen und mit SHA-256 hashen; log collect ausfuehren und /.fseventsd/ kopieren; mit macos-UnifiedLogs und FSEventsParser parsen; KnowledgeC, TCC, LaunchAgents und BTM ziehen; die Super-Timeline in pandas und Timesketch bauen; auf anti-forensische Luecken pruefen; und die Chain of Custody bei jedem Schritt signieren. Halte die Checkliste im Fallordner und hake sie ab, denn ein verpasster FileVault-Key oder ein ungehashtes Image kann das gesamte Engagement nichtig machen, egal wie gut die folgende Analyse ist.

FAQ: kann ich UnifiedLogs ohne passenden Mac analysieren?

Ja. Frueher brauchte das einen Apple-Host mit derselben OS-Version, um /usr/bin/log aufzurufen, was fuer Dead-Box-Arbeit eine echte Einschraenkung war. Mandiants macos-UnifiedLogs ist ein eigenstaendiger Rust-Parser, der die rohen tracev3- und uuidtext-Verzeichnisse auf jeder Plattform liest, sodass du ein Image auf einer Linux-Workstation verarbeiten kannst. Notiere dennoch die Ziel-OS-Version, weil sich Nachrichtenformate zwischen Releases gelegentlich verschieben und das Wissen um die Version dir hilft, mehrdeutige Eintraege korrekt zu interpretieren.

FAQ: wie lange behaelt UnifiedLogs Daten?

Es haengt von Volumen und Plattendruck ab statt von einem festen Fenster; starkes Logging kann die Aufbewahrung auf ein paar Tage komprimieren, waehrend eine ruhige Maschine Wochen behalten kann. Genau diese Varianz ist der Grund, frueh zu sammeln: sobald ein Vorfall vermutet wird, fuehre log collect aus und snapshotte /.fseventsd/, bevor normale Aktivitaet die aeltesten Chunks herausrotiert. Aufbewahrung ist keine Garantie, sie ist ein Rennen, und der Responder, der an Tag null erfasst, hat Beweise, die der Responder, der eine Woche wartet, schlicht nicht hat.

Praktischer Takeaway: baue heute eine Baseline-Logarchive deines eigenen Macs mit log collect und lege sie neben einen APFS-Snapshot von /.fseventsd. Naechstes Mal, wenn sich etwas falsch anfuehlt, hast du einen echten zeitlichen Diff statt Vermutungen. Diese Baseline kostet fuenf Minuten und erspart dir Tage reaktiver Ermittlung, wenn der Vorfall wirklich klopft, und macht aus einem panischen 48-Stunden-Sprint einen ruhigen Vergleich gegen eine bekannte, saubere Grundwahrheit.

Related posts

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly