
Инструментарий для сбора и анализа криминалистических доказательств для OS X

OSXCollector — это набор инструментов для сбора и анализа криминалистических данных на OS X.
Скрипт сбора запускается на потенциально заражённой машине и создаёт JSON-файл, описывающий целевую систему. OSXCollector собирает информацию из plist-файлов, баз данных SQLite и локальной файловой системы.
Имея на руках результаты сбора, аналитик может ответить на такие вопросы:
Компания Yelp автоматизирует анализ большинства сеансов OSXCollector, преобразуя его вывод в легко читаемое и применимое на практике резюме, содержащее только подозрительные объекты. Ознакомьтесь с проектом OSXCollector Output Filters, чтобы узнать, как максимально эффективно использовать автоматизированный анализ вывода OSXCollector.
osxcollector.py — это один Python-файл, который работает без каких-либо зависимостей на стандартной машине OS X. Это упрощает запуск сбора на любой машине — не нужно возиться с brew, pip, конфигурационными файлами или переменными окружения. Просто скопируйте единственный файл на машину и запустите его:
Для запуска достаточно sudo osxcollector.py.
$ sudo osxcollector.py
Wrote 35394 lines.
Output in osxcollect-2014_12_21-08_49_39.tar.gz
Если вы просто клонировали репозиторий GitHub, osxcollector.py находится внутри каталога osxcollector/, поэтому его нужно запускать так:
$ sudo osxcollector/osxcollector.py
ВАЖНО: убедитесь, что команда python на вашем Mac OS X использует стандартный интерпретатор Python, поставляемый с системой, и не переопределена, например, версией Python, установленной через brew. OSXCollector опирается на несколько нативных привязок Python к библиотекам OS X, которые могут быть недоступны в других версиях Python, кроме той, что была установлена изначально в системе.
В качестве альтернативы вы можете запустить osxcollector.py, явно указав нужную версию Python:
$ sudo /usr/bin/python2.7 osxcollector/osxcollector.py
Вывод сборщика в формате JSON вместе с некоторыми вспомогательными файлами (например, системными журналами) упаковывается в архив .tar.gz для передачи аналитику.
osxcollector.py также имеет множество полезных опций для изменения работы сборщика:
-i INCIDENT_PREFIX/--id=INCIDENT_PREFIX:
Задаёт идентификатор, который используется как префикс имени выходного файла. Значение по умолчанию — osxcollect.
$ sudo osxcollector.py -i IncontinentSealord
Wrote 35394 lines.
Output in IncontinentSealord-2014_12_21-08_49_39.tar.gz
Проявите фантазию с именами инцидентов — так легче пережить боль с улыбкой.
-p ROOTPATH/--path=ROOTPATH:
Задаёт путь к корню файловой системы, на которой выполняется сбор. Значение по умолчанию — /. Это удобно для сбора на образе диска.
$ sudo osxcollector.py -p '/mnt/powned'
-s SECTION/--section=SECTION:
Запускает только часть полного сбора. Может быть указано несколько раз. Полный список разделов и подразделов:
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:
Собирает значения cookie.
По умолчанию OSXCollector не выгружает значение cookie, так как оно может содержать конфиденциальную информацию (например, идентификатор сессии).
-l/--collect-local-storage:
Собирает значения, хранящиеся в локальном хранилище веб-браузеров.
По умолчанию OSXCollector не выгружает эти значения, так как они могут содержать конфиденциальную информацию.
-d/--debug:
Включает подробный вывод и точки останова Python. Если с OSXCollector что-то не так, попробуйте эту опцию.
$ sudo osxcollector.py -d
Сборщик создаёт архив .tar.gz, содержащий все собранные артефакты. В архиве находится JSON-файл с основной информацией. Кроме того, в него включается набор полезных журналов из целевой системы.
Каждая строка JSON-файла содержит 1 единицу информации. Существуют общие ключи, присутствующие в каждой JSON-записи:
osxcollector_incident_id: Уникальный идентификатор, общий для всех записей.osxcollector_section: Раздел или тип данных, которые содержит эта запись.osxcollector_subsection: Подраздел или более детальное описание типа данных, которые содержит эта запись.Для записей, представляющих файлы, имеется несколько полезных ключей:
atime: Время последнего доступа к файлу.ctime: Время создания файла.mtime: Время последнего изменения файла.file_path: Абсолютный путь к файлу.md5: MD5-хэш содержимого файла.sha1: SHA1-хэш содержимого файла.sha2: SHA2-хэш содержимого файла.Для записей, представляющих загруженные файлы:
xattr-wherefrom: Список, содержащий URL-адреса источника и реферера для загруженного файла.xattr-quarantines: Строка, описывающая, какое приложение загрузило файл.Для записей, представляющих строку базы данных SQLite:
osxcollector_table_name: Имя таблицы, из которой взята строка.osxcollector_db_path: Абсолютный путь к файлу SQLite.Для записей, представляющих данные, связанные с конкретным пользователем:
osxcollector_username: Имя пользователя.OSXCollector пытается преобразовать метки времени в удобочитаемые строки даты/времени в формате YYYY-mm-dd hh:MM:ss. Для автоматического определения различных типов меток используются эвристики:
versionТекущая версия OSXCollector.
system_infoСобирает основную информацию о системе:
kextСобирает расширения ядра из:
/System/Library/Extensions/Library/ExtensionsstartupСобирает информацию о LaunchAgents, LaunchDaemons, ScriptingAdditions, StartupItems и других элементах входа из: