Download-Forensik unter macOS: ein Fall Schritt für Schritt
Ein synthetischer macOS-Vorfall mit Quarantine Parser: Zeitleiste, eine gelöschte und wiederhergestellte Zeile, Gatekeeper-Ablehnung und AppleDouble auf USB.
TL;DR. Dieses Beispiel nutzt die synthetischen Beispieldaten der Website: macOS-Laptop FIN-MBP-03, Benutzerin dana.whitlock, 14. September 2026. In wenigen Minuten zeigen die Quarantäne-Daten ein Werkzeugarchiv von einem Filehoster, dessen Datenbankzeile gelöscht und wiederhergestellt wurde, einen Download von einer Paste-Seite, einen gefälschten LaunchAgent mit dem Quarantäne-Wert des Archivs, ein Hilfsprogramm mit entfernter Quarantäne, ein Disk-Image, dessen App Gatekeeper abgelehnt hat, und eine Finanztabelle, die auf einem USB-Volume gelandet ist. Es zeigt auch, wo Quarantäne-Daten enden.
Alles Folgende ist fiktiv: Rechner, Personen und Dateien existieren nicht, und jede Domain endet auf .example.
Das Szenario
Der Fall setzt den fiktiven Vorfall FIN-WKS-07 / svc_backup fort. Ein Angreifer mit einer gestohlenen Sitzung ist zwischen etwa 10:05 und 10:50 UTC auf dem Laptop von dana.whitlock aus der Finanzabteilung aktiv. Die Frage: Was wurde heruntergeladen, was wurde bereitgelegt, und hat etwas das Haus verlassen?
1. Die Beispieldaten laden
Öffnen Sie die Startseite unter /de und klicken Sie auf Beispiel laden. Die Auswertung läuft in Ihrem Browser; nichts wird hochgeladen. Die Ansicht Quellen listet, was geladen wurde und wie jede Datei ausgewertet wurde. Die Baseline reicht vom 18. August bis zum 15. September: Berichte aus Intranet und Dokumentenserver, mit Safari gespeichert, MeetClient-5.2.pkg und MeetClient-5.3.pkg von downloads.meet.example mit Chrome (5.3 von der Benutzerin freigegeben, Flags 00c3), Mail-Anhänge von ap@vendor.example und priya.raman@fin.example, Nachrichten-Anhänge und ein über sharingd empfangener AirDrop.
2. Das Vorfallszeitfenster setzen
Setzen Sie den Zeitraum auf 10:00–10:55 UTC am 2026-09-14, per Eingabe oder durch Ziehen auf dem Dichtestreifen. Der Zeitraum gilt für jede Ansicht und jeden Export und bleibt im URL-Hash erhalten, sodass der Link Ihre Ansicht reproduziert. Die Baseline fällt weg, und die Ansicht Befunde listet nur noch Hinweise aus diesem Zeitfenster.
3. Die Zeitleiste lesen
Die Zeitleiste zeigt drei Downloads im Zeitfenster:
- 10:07:12, Safari,
https://files.example/s/8f3k2/tools.zip, Ursprunghttps://files.example/s/8f3k2; - 10:12:05, Chrome,
https://paste.example/raw/Zx81; - 10:26:30, Safari,
https://transfer.example/d/Qm7/sync-agent.dmg.
Die Ansicht Domains zeigt keinen dieser Hosts in der Baseline. Die Befunde kennzeichnen sie als Filehoster, Paste- und Transferdienste und markieren Archive und Disk-Images von selten gesehenen Domains. Das sind Hinweise, keine Urteile: Auch Mitarbeitende der Finanzabteilung nutzen Transferdienste.
4. Die wiederhergestellte Zeile zu files.example
Die Zeile zu tools.zip ist als wiederhergestellt markiert. Im Szenario wurde sie gegen 10:48 mit sqlite3 aus der Datenbank gelöscht. Der eigene SQLite-Leser des Tools fand den Datensatz im freien Speicher der Tabellenseite und baute ihn wieder auf. Der Befund lautet „mögliche Löschung oder Bereinigung“. Der Artikel zur Wiederherstellung erklärt das Carving.
Die wiederhergestellte Zeile aus QuarantineEventsV2 lässt sich weiterhin über die UUID verknüpfen: Die Ansicht Dateien zeigt fünf Dateien mit ihrer Kennung, darunter die drei vom Archivierungsprogramm entpackten Dateien (tools/README.txt, tools/updater.sh, tools/com.example.updater.plist) mit demselben Quarantäne-Wert. Das Löschen der Zeile hat die Attribute nicht entfernt, und die Attribute stellen den Zusammenhang der Zeile wieder her.
5. Der Text von paste.example
Der Chrome-Download landet als ~/Downloads/Zx81.txt. Ein während eines Vorfalls abgerufener Roh-Paste kann ein Skript oder eine Befehlsliste sein, aber die Quarantäne-Daten belegen nur den Download. Sichern und lesen Sie die Datei selbst.
6. Die Kopie in LaunchAgents
Eine Kopie von com.example.updater.plist liegt in ~/Library/LaunchAgents/. Sie trägt noch den Quarantäne-Wert von tools.zip samt UUID und ist damit eine der fünf verknüpften Dateien. Der Befund „heruntergeladene Datei in einem Autostart-Ordner“ weist auf sie hin. Der Quarantäne-Wert sagt, woher die plist stammt, nicht, wann sie nach LaunchAgents kopiert wurde; datieren Sie diesen Schritt mit anderen Artefakten.
7. Der entkleidete sync-helper
~/Library/Caches/.sync/sync-helper hat ein WhereFroms, das auf files.example zeigt, aber kein Quarantäne-Attribut. Das Tool meldet „WhereFroms ohne Quarantäne-Attribut (mögliches xattr -d)“. Im Szenario wurde das Attribut entfernt. In einem echten Fall wägen Sie die in kMDItemWhereFroms und Quarantäne beschriebenen Alternativen ab, bevor Sie von Anti-Forensik sprechen.
8. Das Disk-Image von transfer.example und die Gatekeeper-Ablehnung
Fünfunddreißig Sekunden nach dem Download des Disk-Images zeigt ein .LastGKReject-Eintrag, dass Gatekeeper um 10:27:05 /Volumes/Sync Agent/SyncAgent.app abgelehnt hat, mit XProtectMalwareType 2 (berichtet als unsignierte App/unsigniertes Programm; die Zuordnung ist nicht von Apple dokumentiert). Der Volume-Name passt zum Image; die Verknüpfung beruht auf Name und Zeit. Die vollständige Kette beschreibt .LastGKReject als Beweismittel.
9. Q3_forecast.xlsx auf dem Volume EXFIL
Erweitern Sie für diesen Schritt den Zeitraum auf den gesamten Datenbestand. Q3_forecast.xlsx war ein am 28. August empfangener Mail-Anhang. Die Beispieldaten enthalten die zugehörige AppleDouble-Datei ._Q3_forecast.xlsx vom exFAT-USB-Volume EXFIL. Diese Datei enthält noch den Quarantäne-Wert von Mail und das WhereFroms und verbindet so die Kopie auf dem Stick mit dem ursprünglichen Anhang.
Zeitleiste (UTC, 2026-09-14)
| Zeit | Quelle | Ereignis |
|---|---|---|
| 10:07:12 | Wiederhergestellte Zeile, fünf verknüpfte Dateien | Safari lädt tools.zip von files.example |
| 10:12:05 | Datenbankzeile, Attribut | Chrome lädt Zx81.txt von paste.example |
| nicht datiert | Attribut der LaunchAgent-Kopie | com.example.updater.plist in ~/Library/LaunchAgents/ |
| nicht datiert | WhereFroms, keine Quarantäne | sync-helper unter ~/Library/Caches/.sync/ |
| 10:26:30 | Datenbankzeile | Safari lädt sync-agent.dmg von transfer.example |
| 10:27:05 | .LastGKReject | Gatekeeper lehnt SyncAgent.app ab, Typ 2 |
| gegen 10:48 | Wiederherstellung aus freiem Speicher | Zeile zu files.example mit sqlite3 gelöscht |
| nicht datiert | AppleDouble auf EXFIL | Q3_forecast.xlsx auf dem USB-Volume vorhanden |
Exportieren Sie Zeitleiste und Dateien als CSV, JSON oder Timesketch-fähiges CSV; Exporte folgen dem gewählten Zeitraum.
Was Quarantäne-Daten nicht zeigen können
Drei Schritte dieses Szenarios hinterlassen keine Quarantäne-Spur:
- der Start von Terminal, über das Befehle ausgeführt wurden;
- die Gewährung des Festplattenvollzugriffs in TCC;
- der Kopiervorgang auf USB selbst.
Wechseln Sie zu anderen Artefakten: Unified Logs für Prozess- und Richtlinienaktivität, TCC.db für Datenschutzberechtigungen und FSEvents für Dateisystemänderungen wie das Schreiben auf das Volume EXFIL. Sichern Sie außerdem die Dateien selbst: Zx81.txt, updater.sh, die LaunchAgent-plist und sync-helper.
Befehle zur Sicherung finden Sie unter Quarantäne-Ereignisse sichern, eine kompakte Referenz im Cheat-Sheet zu Quarantäne-Ereignissen auf unserer Schwesterseite.
Häufige Fragen
Ist der Fall FIN-MBP-03 echt?
Nein. Rechner, Benutzerin, Domains und Dateien sind fiktiv, die Daten synthetisch. Alle Domains verwenden die reservierte Endung .example. Das Beispiel soll zeigen, wie die Artefakte zusammenhängen.
Können Quarantäne-Daten zeigen, dass eine Datei auf USB kopiert wurde?
Nicht direkt. Sie zeigen, woher eine Datei stammt. Im Beispiel zeigt die AppleDouble-Datei auf dem Volume EXFIL, dass Q3_forecast.xlsx samt Attributen auf dieses Volume gelangt ist; den Kopiervorgang selbst muss man aber mit anderen Artefakten wie FSEvents datieren.
Warum fehlte die Zeile zu files.example in der aktiven Datenbank?
Im Szenario wurde sie gegen 10:48 UTC mit sqlite3 gelöscht. Quarantine Parser hat sie durch Carving im freien Speicher der Tabellenseite wiederhergestellt. Die Wiederherstellung hängt von SQLite-Einstellungen und späteren Schreibvorgängen ab; ein Fehlschlag hätte also nichts bewiesen.