
Ein forensisches Toolkit zur Sammlung und Analyse von Beweisen für OS X

OSXCollector ist ein Toolkit für die forensische Beweissammlung und -analyse für OSX.
Das Sammlungsskript läuft auf einer potenziell infizierten Maschine und gibt eine JSON-Datei aus, die die Zielmaschine beschreibt. OSXCollector sammelt Informationen aus Plists, SQLite-Datenbanken und dem lokalen Dateisystem.
Mit der forensischen Sammlung ausgestattet, kann ein Analyst Fragen beantworten wie:
Yelp automatisiert die Analyse der meisten OSXCollector-Läufe und wandelt seine Ausgabe in eine leicht lesbare und umsetzbare Zusammenfassung nur der verdächtigen Dinge um. Schauen Sie sich das OSXCollector Output Filters-Projekt an, um zu erfahren, wie Sie die automatisierte OSXCollector-Ausgabeanalyse optimal nutzen können.
osxcollector.py ist eine einzelne Python-Datei, die ohne Abhängigkeiten auf einer Standard-OSX-Maschine läuft. Das macht es sehr einfach, die Sammlung auf jeder Maschine durchzuführen – kein Ärger mit brew, pip, Konfigurationsdateien oder Umgebungsvariablen. Kopieren Sie einfach die einzelne Datei auf die Maschine und führen Sie sie aus:
sudo osxcollector.py ist alles, was es braucht.
$ sudo osxcollector.py
Wrote 35394 lines.
Output in osxcollect-2014_12_21-08_49_39.tar.gz
Wenn Sie gerade das GitHub-Repository geklont haben, befindet sich osxcollector.py im Verzeichnis osxcollector/, also müssen Sie es wie folgt ausführen:
$ sudo osxcollector/osxcollector.py
WICHTIG: Stellen Sie bitte sicher, dass der Befehl python auf Ihrem Mac OS X den standardmäßig mitgelieferten Python-Interpreter verwendet und nicht durch z.B. die über brew installierte Python-Version überschrieben wird. OSXCollector ist auf einige native Python-Bindungen für OS X-Bibliotheken angewiesen, die in anderen Python-Versionen als der ursprünglich auf Ihrem System installierten möglicherweise nicht verfügbar sind.
Alternativ können Sie osxcollector.py ausführen und dabei explizit die gewünschte Python-Version angeben:
$ sudo /usr/bin/python2.7 osxcollector/osxcollector.py
Die JSON-Ausgabe des Sammlers wurde zusammen mit einigen hilfreichen Dateien wie Systemprotokollen in eine .tar.gz-Datei gebündelt, um sie an einen Analysten zu übergeben.
osxcollector.py hat auch viele nützliche Optionen, um die Funktionsweise der Sammlung zu ändern:
-i INCIDENT_PREFIX/--id=INCIDENT_PREFIX:
Legt eine Kennung fest, die als Präfix der Ausgabedatei verwendet wird. Der Standardwert ist osxcollect.
$ sudo osxcollector.py -i IncontinentSealord
Wrote 35394 lines.
Output in IncontinentSealord-2014_12_21-08_49_39.tar.gz
Seien Sie kreativ bei den Vorfallnamen, es macht es einfacher, über den Schmerz zu lachen.
-p ROOTPATH/--path=ROOTPATH:
Legt den Pfad zum Wurzelverzeichnis des Dateisystems fest, auf dem die Sammlung ausgeführt werden soll. Der Standardwert ist /. Dies ist ideal, um die Sammlung auf einem Datenträgerabbild durchzuführen.
$ sudo osxcollector.py -p '/mnt/powned'
-s SECTION/--section=SECTION:
Führt nur einen Teil der vollständigen Sammlung aus. Kann mehrmals angegeben werden. Die vollständige Liste der Abschnitte und Unterabschnitte ist:
Der Sammler gibt eine .tar.gz-Datei aus, die alle gesammelten Artefakte enthält. Das Archiv enthält eine JSON-Datei mit dem Großteil der Informationen. Zusätzlich sind nützliche Protokolle aus den Systemlogs des Zielsystems enthalten.
Jede Zeile der JSON-Datei zeichnet 1 Information auf. Es gibt einige gemeinsame Schlüssel, die in jedem JSON-Datensatz vorkommen:
osxcollector_incident_id: Eine eindeutige ID, die von jedem Datensatz geteilt wird.osxcollector_section: Der Abschnitt oder die Art der Daten, die dieser Datensatz enthält.osxcollector_subsection: Der Unterabschnitt oder eine detailliertere Beschreibung der Art der Daten, die dieser Datensatz enthält.Für Datensätze, die Dateien repräsentieren, gibt es eine Reihe nützlicher Schlüssel:
atime: Die Zugriffszeit der Datei.ctime: Die Erstellungszeit der Datei.mtime: Die Änderungszeit der Datei.file_path: Der absolute Pfad zur Datei.md5: MD5-Hash des Dateiinhalts.sha1: SHA1-Hash des Dateiinhalts.sha2: SHA2-Hash des Dateiinhalts.Für Datensätze, die heruntergeladene Dateien repräsentieren:
xattr-wherefrom: Eine Liste mit den Quell- und Referrer-URLs für die heruntergeladene Datei.xattr-quarantines: Eine Zeichenkette, die beschreibt, welche Anwendung die Datei heruntergeladen hat.Für Datensätze, die eine Zeile einer SQLite-Datenbank repräsentieren:
osxcollector_table_name: Der Tabellenname, aus dem die Zeile stammt.osxcollector_db_path: Der absolute Pfad zur SQLite-Datei.Für Datensätze, die Daten darstellen, die einem bestimmten Benutzer zugeordnet sind:
osxcollector_username: Der Name des BenutzersOSXCollector versucht, Zeitstempel in menschenlesbare Datums-/Zeitzeichenfolgen im Format YYYY-mm-dd hh:MM:ss umzuwandeln. Es verwendet Heuristiken, um verschiedene Zeitstempel automatisch zu identifizieren:
version-AbschnittDie aktuelle Version von OSXCollector.
system_info-AbschnittSammelt grundlegende Informationen über das System:
kext-AbschnittSammelt die Kernel-Erweiterungen von:
/System/Library/Extensions/Library/Extensionsstartup-AbschnittSammelt Informationen über die LaunchAgents, LaunchDaemons, ScriptingAdditions, StartupItems und andere Anmeldeobjekte von:
/System/Library/LaunchAgents/System/Library/LaunchDaemons/Library/LaunchAgents~/Library/LaunchAgents/Library/LaunchDaemons/System/Library/ScriptingAdditions/Library/ScriptingAdditions/System/Library/StartupItems/Library/StartupItems~/Library/Preferences/com.apple.loginitems.plistWeitere Informationen zum Start von Mac OS X finden Sie hier: http://www.malicious-streams.com/article/Mac_OSX_Startup.pdf
applications-AbschnittHasht installierte Anwendungen und sammelt Installationsverlauf von:
/Applications~/Applications/Library/Receipts/InstallHistory.plistquarantines-AbschnittQuarantänen sind im Grunde die Informationen, die notwendig sind, um die Frage 'Sind Sie sicher, dass Sie dies ausführen möchten?' anzuzeigen, wenn ein Benutzer versucht, eine aus dem Internet heruntergeladene Datei zu öffnen. Weitere Details finden Sie in der Apple-Support-Erklärung zu Quarantänen: http://support.apple.com/kb/HT3662
Dieser Abschnitt sammelt auch Informationen von der XProtect-hashbasierten Malware-Prüfung für Quarantänedateien. Das plist befindet sich unter:
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.plist
XProtect fügt auch Mindestversionen für Internet-Plugins hinzu. Dieses plist befindet sich unter:
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.meta.plist
downloads-AbschnittHasht alle heruntergeladenen Dateien der Benutzer von:
~/Downloads~/Library/Mail Downloads~/Library/Containers/com.apple.mail/Data/Library/Mail Downloadschrome-AbschnittSammelt die folgenden Informationen aus dem Google Chrome-Webbrowser:
Diese Daten werden aus ~/Library/Application Support/Google/Chrome/Default extrahiert
firefox-AbschnittSammelt Informationen aus den verschiedenen SQLite-Datenbanken in einem Firefox-Profil:
Diese Informationen werden aus ~/Library/Application Support/Firefox/Profiles extrahiert
Weitere Details zum Firefox-Profilordner finden Sie unter http://kb.mozillazine.org/Profile_folder_-_Firefox
safari-AbschnittSammelt Informationen aus den verschiedenen Plists und SQLite-Datenbanken in einem Safari-Profil:
accounts-AbschnittSammelt Informationen über Benutzerkonten:
/private/var/db/dslocal/nodes/Default/groups/admin.plist/private/var/db/dslocal/nodes/Default/users~/Library/Accounts/Accounts3.sqlite~/Library/Preferences/com.apple.recentitems.plistmail-AbschnittHasht Dateien in den Mail-App-Verzeichnissen:
~/Library/Mail~/Library/Mail Downloadsfull_hash-AbschnittHasht alle Dateien auf der Festplatte. Alle. Dies wird standardmäßig nicht ausgeführt. Es muss mit dem Folgenden ausgelöst werden:
$ sudo osxcollector.py -s full_hash
Forensische Analyse ist ein bisschen Kunst und ein bisschen Wissenschaft. Jeder Analyst wird eine etwas andere Geschichte sehen, wenn er die Ausgabe von OSXCollector liest. Das ist ein Teil dessen, was die Analyse unterhaltsam macht.
Im Allgemeinen wird die Sammlung auf einer Zielmaschine durchgeführt, weil etwas faul ist: Antivirus hat eine Datei gefunden, die es nicht mag, Deep Packet Inspection hat einen Aufruf beobachtet, Endpunktüberwachung hat ein neues Startobjekt bemerkt. Die Details dieser ersten Warnung – ein Dateipfad, ein Zeitstempel, ein Hash, eine Domain, eine IP usw. – das reicht aus, um loszulegen.
Einfaches Grepen ein paar Minuten vor und nach einem Zeitstempel funktioniert hervorragend:
$ cat INCIDENT32.json | grep '2014-01-01 11:3[2-8]'
Es ist dort drin. Ein Tool wie jq kann sehr hilfreich sein, um ausgefallene Ausgaben zu erstellen:
$ cat INCIDENT32.json | grep '2014-01-01 11:3[2-8]' | jq 'select(has("url"))|.url'
$ cat INCIDENT32.json | jq 'select(.osxcollector_username=="ivanlei")|.'
Das OSXCollector Output Filters-Projekt enthält Filter, die die Ausgabe von OSXCollector verarbeiten und transformieren. Das Ziel der Filter ist es, die Analyse der OSXCollector-Ausgabe zu vereinfachen.
Die Funktionalität von OSXCollector ist in einer einzigen Datei gespeichert: osxcollector.py. Der Sammler sollte auf einer nackten Installation von OS X ohne zusätzliche Pakete oder Abhängigkeiten laufen.
Stellen Sie sicher, dass alle OSXCollector-Tests bestanden werden, bevor Sie den Quellcode bearbeiten. Sie können die Tests mit make test ausführen.
Nachdem Sie Änderungen am Quellcode vorgenommen haben, führen Sie make test erneut aus, um zu überprüfen, ob Ihre Änderungen keine Tests beschädigt haben.
Diese Arbeit ist unter der GNU General Public License lizenziert und eine Ableitung von https://github.com/jipegit/OSXAuditor
Möchten Sie mehr über OS X-Forensik erfahren?
Ein paar andere interessante Tools:
versionsystem_infokextstartup
launch_agentsscripting_additionsstartup_itemslogin_itemsapplications
applicationsinstall_historyquarantinesdownloads
downloadsemail_downloadsold_email_downloadschrome
historyarchived_historycookieslogin_datatop_sitesweb_datadatabaseslocal_storagepreferencesfirefox
cookiesdownloadsformhistoryhistorysignonspermissionsaddonsextensioncontent_prefshealth_reportwebapps_storejson_filessafari
downloadshistoryextensionsdatabaseslocalstorageextension_filesaccounts
system_adminssystem_userssocial_accountsrecent_itemsmailfull_hash$ sudo osxcollector.py -s 'startup' -s 'downloads'
-c/--collect-cookies:
Sammelt den Wert von Cookies.
Standardmäßig gibt OSXCollector den Wert eines Cookies nicht aus, da er sensible Informationen enthalten kann (z.B. Session-ID).
-l/--collect-local-storage:
Sammelt die in den lokalen Speichern der Webbrowser gespeicherten Werte.
Standardmäßig gibt OSXCollector die Werte nicht aus, da sie sensible Informationen enthalten können.
-d/--debug:
Aktiviert ausführliche Ausgaben und Python-Breakpoints. Wenn etwas mit OSXCollector nicht stimmt, versuchen Sie dies.
$ sudo osxcollector.py -d