Артефакты macOS
plist, Unified Logs, FSEvents, Spotlight и Keychain — где macOS хранит конфигурацию, события и следы активности.
plist (property list) — стандартный для Apple формат хранения настроек и метаданных в виде структуры ключ-значение; бывает в XML- и в бинарном виде.
macOS оставляет богатый набор артефактов, но раскиданы они иначе, чем в Linux. Эта карта помогает следователю при законном анализе — своего Mac или разрешённого образа. Полнодисковое шифрование FileVault и защита SIP означают, что доступ к данным обычно требует пароля/ключа владельца; обход чужой защиты недопустим и наказуем.
Зачем это знать защитнику
Корпоративный парк всё чаще — это Mac, и инциденты на них реальны. Знание, что plist хранит автозапуск, Unified Logs — поток системных событий, а FSEvents — историю изменений каталогов, позволяет восстановить действия вредоноса и понять масштаб компрометации. Без этой карты аналитик упускает следы, которые на macOS просто лежат в других местах, чем привычные /var/log.
plist: конфигурация и настройки
Файлы .plist — это «реестр» macOS, рассыпанный по файловой системе. Системные настройки лежат в /Library/Preferences/, пользовательские — в ~/Library/Preferences/. Для следователя ценны: списки недавних документов, настройки приложений, привязанные устройства, а главное — элементы автозапуска (о них в следующем уроке). Многие plist бинарные, поэтому их конвертируют или читают штатной утилитой:
# Прочитать бинарный plist в человекочитаемом виде
plutil -p ~/Library/Preferences/com.apple.dock.plist
# Конвертировать бинарный plist в XML
plutil -convert xml1 -o - com.apple.example.plist
Unified Logs — поток системных событий
Начиная с macOS 10.12, текстовые логи заменены Unified Logging — высокопроизводительной бинарной системой. Данные хранятся в /var/db/diagnostics/ (файлы .tracev3) и читаются командой log. Это аналог journald: запуски процессов, сетевые события, аутентификация. Тонкость — многие чувствительные значения помечены как <private> и по умолчанию скрыты, что важно учитывать при разборе.
# Показать события за последний час
log show --last 1h
# Отфильтровать по процессу и уровню
log show --predicate 'process == "sshd"' --info --last 1d
Из образа диска файлы .tracev3 копируют и разбирают офлайн специализированными парсерами — это даёт детальный таймлайн без обращения к живой системе. После разбора одна строка журнала выглядит примерно так:
2026-06-20 14:31:07.512 com.apple.securityd process <installer> signature check: not notarized
2026-06-20 14:31:08.004 kernel AMFI: code signature invalid for /tmp/.cache/helper
Принципиально понимать модель Unified Logging: это потоковая система с кольцевым буфером и собственной политикой хранения. Часть событий держится в памяти и сбрасывается на диск пачками, отладочные сообщения по умолчанию не сохраняются. Значит, у журнала ограниченная глубина — на загруженном хосте старые события вытесняются за часы или дни. Для следователя отсюда два вывода: образ снимают как можно раньше, а отсутствие ожидаемого события не всегда означает, что его не было, — оно могло просто выйти за окно хранения.
FSEvents — история изменений файловой системы
macOS ведёт журнал изменений каталогов в скрытом каталоге /.fseventsd/ на каждом томе. FSEvents не хранит имена отдельных файлов и содержимое, но фиксирует, что в таком-то каталоге что-то создавалось, менялось или удалялось, с порядковыми идентификаторами событий. Для следователя это золото: даже если файл удалён и затёрт, FSEvents может подтвердить сам факт его появления и удаления в определённом каталоге.
# Логическая запись FSEvents (после разбора парсером)
id=0x1A2B3C path=Users/anna/Downloads flags=Created,Removed,IsFile
Spotlight: метаданные файлов
Поисковый индекс Spotlight хранит расширенные метаданные о файлах в служебной базе .Spotlight-V100 на томе. Через них следователь узнаёт о файле даже больше, чем из самой ФС: дату использования, источник загрузки, автора документа. Ключевой атрибут — kMDItemWhereFroms: для скачанного файла он содержит URL и страницу-источник.
# Все метаданные Spotlight по файлу
mdls ~/Downloads/installer.dmg
# Откуда файл был загружен
mdls -name kMDItemWhereFroms ~/Downloads/installer.dmg
Keychain: где хранятся секреты
Keychain — защищённое зашифрованное хранилище паролей, токенов и ключей. Пользовательский keychain лежит в ~/Library/Keychains/, системный — в /Library/Keychains/. Принципиально: данные внутри зашифрованы и доступны только при наличии пароля владельца; криминалистическая ценность keychain — в самом факте наличия учётных данных и метаданных (когда создан элемент, к какому сервису). Извлечение содержимого чужого keychain без законных оснований недопустимо. Метаданные элемента (без секрета) можно перечислить штатной утилитой на своей системе:
# Перечислить элементы keychain (метаданные, не сами секреты)
security dump-keychain ~/Library/Keychains/login.keychain-db | head
Прочие следы активности приложений
Помимо системных хранилищ macOS, следователь проверяет следы конкретных программ в каталоге ~/Library/. Особенно информативны: ~/Library/Containers/ и ~/Library/Application Support/ (рабочие данные приложений, в том числе мессенджеров и браузеров), кэши недавних документов в ~/Library/Application Support/com.apple.sharedfilelist/, а также артефакты браузеров — история и загрузки. Например, Safari хранит историю в SQLite-базе ~/Library/Safari/History.db, а список загрузок — в Downloads.plist; это связывает «откуда пришёл файл» с «когда он был скачан». Поскольку многое здесь лежит в SQLite, базы копируют из образа и читают офлайн запросами SELECT, не запуская приложения.
Как это работает под капотом
Общая логика Apple — бинарные структурированные хранилища вместо текстовых файлов: plist, tracev3, базы Spotlight, FSEvents. Это быстро и компактно, но требует специализированных парсеров и аккуратной работы с образом. Поэтому метод тот же, что и в Linux: создать образ, проверить хэш, монтировать только для чтения и разбирать копии артефактов офлайн, не запуская команды на потенциально скомпрометированном Mac.
Как защититься
- Включите FileVault. Полнодисковое шифрование защищает все эти артефакты от извлечения при краже устройства.
- Собирайте Unified Logs централизованно. Пересылка логов с парка Mac в SIEM сохраняет следы, даже если локальный журнал ротировался или был очищен.
- Мониторьте kMDItemWhereFroms и Downloads. Источник загрузки помогает быстро отследить, откуда пришёл подозрительный установщик.
- Не отключайте SIP без причины. System Integrity Protection ограничивает изменение системных областей и затрудняет закрепление вредоноса.
Итоги
- plist — «реестр» macOS: настройки и автозапуск; бинарные plist читают через
plutil. - Unified Logs (tracev3) заменили текстовые логи; читаются командой
log, часть данных скрыта как<private>. - FSEvents фиксирует факт изменений в каталогах (без имён файлов) и подтверждает появление/удаление данных.
- Spotlight хранит метаданные, включая источник загрузки (
kMDItemWhereFroms); Keychain — зашифрованные секреты, доступные лишь по паролю владельца. - Все хранилища бинарные — анализируют образ read-only офлайн; защита строится на FileVault, централизации логов и SIP.