Поддержка Консалтинг Обучение Jamf Pro Блог

Мониторинг macOS инструментами OpenSource

Антон Конобеев 13.04.2023

Это перевод статьи.

Местами вольный. Оригинал можно найти тут.

Предположим, что одно из устройств в вашей компании заражается вредоносным софтом. Как вы это обнаружите? Как вы узнаете что происходит на этом устройстве? Что делает злоумышленник? Крадет ли он пароли браузера? Какие соединения устанавливает? Может он ищет криптовалюту? Имея в распоряжении хорошую телеметрию и средство мониторинга для ваших девайсов, вы можете собирать с них все те данные, которые необходимы для ответа на заданные вопросы.

Правильный мониторинг хостов macOS может быть довольно сложным для некоторых организаций. Может быть тяжело найти стоящие инструменты, которые проактивно обнаруживают угрозы безопасности. Даже если нашлось подходящее, оно может вызвать такие проблемы с производительностью клиентских машин, что нормально использовать их в работе станет довольно сложно; не говоря уже о возможных экранах смерти — средства защиты часто встраиваются довольно глубоко в систему и не всегда делают это хорошо. И к тому же редко обладают адекватным инструментарием для траблшутинга — если даже вы сможете выяснить в чем причина нестабильной работы, не факт, что вы сможете всё сконфигурировать так, чтобы проблема ушла. Дропбокс, столкнувшись в подобными сложностями, начал искать альтернативные решения.

Одной из первых вещей в этом поиске стал список требований:

  • Стабильность и минимальное влияние на производительность
    • Экраны смерти, откровенные фризы и прочие тормоза совершенно неприемлемы
  • Мониторинг интересующей нас активности
    • Запуск процессов
    • Изменения в файловой системе
    • Сетевая активность
    • Детали конфигурации и установленные приложения
  • Мониторинг некоторых деталей этой активности, например:
    • Дата и время
    • Отношения между наблюдаемыми объектами (такие как родитель-наследник между процессами, например)
    • Другие дополнительные вещи которые расскажут нам о связности и эффектах событий

Ни один софт, который мы пробовали использовать в рамках этого поиска, не смог закрыть все наши хотелки, хотя все они так или иначе закрывали какую-то их часть. В итоге мы решили, что не хотим изобретать велосипед и скомпоновали несколько решений в комплекс, который хорошо подошел под наши задачи.

Мы остановились на трех инструментах — osquery, Santa и OpenBSM/Audit:

  • osquery делает слепки состояний, которые описывают изменения в конфигурации
  • Santa показывает запуски процессов в реальном времени, сопровождая их некоторыми деталями
  • OpenBSM/AUDIT в реальном времени мониторит ядро macOS и может рассказать, что происходит с сетью, файлами, запросами паролей и прочими системными вещами

osquery

Osquery это опенсорсный фреймворк для операционных систем Windows, macOS, Linux и FreeBSD, разрабатываемый Facebook. Он представляет операционную систему как высокопроизводительную реляционную базу данных и позволяет создавать запросы в синтаксисе SQL для получения низкоуровневых данных о системе.

С помощью этого софта можно:

  • выгрузить настройки и содержимое конфигурационных файлов
  • получить список установленных приложений и расширений браузера
  • посмотреть запущенные процессы
  • проверить наличие файла по пути
  • много чего еще :)

Всё это может оказаться полезным, например, при отслеживании подозрительных приложений или необходимости узнать есть ли на клиентской нужный нам файл конфигурации — с такими возможностями придумать сценарии не так уж и сложно, но даже если фантазия подводит, то разработчики заботливо положили в репозиторий некоторые полезные запросы. Немаловажно и то, что фреймворк постоянно обновляется и получает новые функции.

Вот, кстати, пример того, как выглядит запрос, ищущий вредонос Proton:

В общем, вещь стоящая и может снабдить нас большим количеством данных о состоянии клиентских машин. Но при этом она не работает в реальном времени, а значит мы не знаем, что происходит между запросами. Но этот пробел закроет Santa.

Santa

Santa это еще один опенсорс-фреймворк, разработанный Google специально для macOS. Он снабжает информацией о запущенных процессах и некоторых событиях файловой системы, например:

  • хэши sha256 запущенных бинарников
  • URL, с которых бинарники были загружены
  • ID процессов
  • ID родительских процессов
  • поле “Common Name” и хэш sha256 серта, которым подписан бинарник

А еще здорово то, что он умеет блокировать запуск приложений — как по логике черного списка, так и белого.

Используя данные, которые мы собираем Сантой, мы можем отслеживать большинство событий запуска приложений на клиентской машине. Возвращаясь к примерам с Proton, вот так мы можем заметить процесс вывода им данных с клиентской машины:

И даже то, что именно он пытается вывести:

А еще мы можем взять хэши бинарника:

И проверить его, например, на Virustotal:

Волшебно!

OpenBSM/Audit

Вместе с osquery и Santa у нас уже есть довольно полная картина того, что происходит с хостом. Однако, у нас всё ещё нет информации о том, что делают приложения в отношении сетевых соединений и работы с файловой системой. Osquery может дать некоторую информацию с помощью своих таблиц process_open_files и process_open_sockets, но это снова будут данные не в реальном времени, к сожалению.

Тут к нам на помощь и приходит Audit. Это подсистема ядра macOS, основанная на OpenBSM, которая отдает поток информации о событиях хоста. В процессе конфигурирования мы отмечаем, какие из классов аудита системных вызовов мы хотим мониторить. Например, если нас интересуют события сети, тогда мы работаем с классом аудита “nt” — он будет отдавать поток данных в двоичном формате, из которого можно отфильтровать нужные события с помощью утилиты auditreduce и затем сконвертировать вывод в логи в формате XML.

После выбора нужных нам классов, можно сконфигурировать Audit так, чтобы он генерировал вывод для нужных вещей. Так можно поступить для событий файловой системы (чтение/создание/запись файлов) и сети, чтобы лучше понимать активность процессов в системе. Для примера — вот так Proton сохраняет украденные креды до того, как вывести их:

И вот так выглядят перехваченные Audit события сети:

Все эти события отлично выглядят поодиночке, но агрегация тоже доступна. Вот так выглядит пример дерева процессов для вредоносного документа:

Такие деревья создаются с помощью связок данных о времени, ID процессов, ID родителей процессов, событий сети и файловой системы. Пример выше — обычная техника атаки с использованием документов со встроенными макросами, загружающими вредоносный код из сети. Имея перед собой подобное дерево, мы можем довольно удобно понять что за действия совершает приложения и решить, подозрительные они или нет.

И, в заключение, некоторые ссылки: