Мониторинг событий в macOS с помощью eslogger (ESF)

Мониторинг системных событий macOS ESF

Операционная система macOS от Apple, как и любая другая ОС, генерирует множество событий в процессе работы. Мониторинг событий необходим для аудита безопасности и другое. В статье рассмотрим встроенное в macOS средство отслеживания системных событий, которое называется eslogger (ESF).

Еще по теме: Механизмы защиты macOS

Отслеживание системных событий в macOS

В ОС Windows хорошо изучены инструменты для мониторинга и журналирования событий. Множество руководств предлагают пошаговые инструкции по настройке централизованного сбора событий с помощью Windows Event Forwarding.

Однако гораздо меньше внимания уделяется отслеживанию событий в компьютерах на базе macOS. Причины понятны: немногие организации готовы тратиться на покупку Mac для сотрудников. Кроме того, на рынке мало специалистов по администрированию и обеспечению безопасности macOS, хотя угрозы существуют и для этой ОС.

Есть 3 спо­соба монито­рин­га событий в macOS:

  1. Osquery.
  2. Ком­мерчес­кий EDR.
  3. Eslogger (ESF).

Ути­литы вро­де Red Canary Mac Monitor исполь­зуют Endpoint Security API и дела­ют упор на визу­али­зацию и кра­соту.

Мониторинг событий в macOS с eslogger (ESF)

Решение, которое мы зап­ряжем в наш SOC, ори­енти­рует­ся на натив­ность, пол­ноту и безопас­ность. Это eslogger, ути­лита коман­дной стро­ки, она пре­дос­тавля­ет пря­мой дос­туп непос­редс­твен­но к генери­руемым ядром событи­ям и пос­тавля­ется со все­ми вер­сиями macOS выше Ventura. Эта­кий поис­ковик сре­ди событий.

Достоинства eslogger:

  • уже есть на каж­дой macOS Ventura;
  • не гру­зит сис­тему при исполь­зовании;
  • вы­дает лог в тек­сто­вом фор­мате, а не бинар­ном;
  • да­ет отличную видимость активнос­ти.

Сна­чала мы пос­мотрим спи­сок событий, на которые мож­но под­писать­ся:

Эта коман­да выведет нам вну­шитель­ный спи­сок. При­веду при­меры:

Наз­вание Пол­ное наз­вание Фун­кции
create es_event_create_t Соз­дание фай­ла
open es_event_open_t От­кры­тие фай­ла
write es_event_write_t За­пись в файл
unlink es_event_unlink_t Уда­ление фай­ла
utimes es_event_utimes_t Из­менение парамет­ров
access time
и modification time фай­ла
exec es_event_exec_t За­пуск про­цес­са
uipc_connect es_event_uipc_connect_t Под­клю­чение через сокет
kextload es_event_kextload_t Заг­рузка Kernel Extension
btm_launch_item_add btm_launch_item_add Соз­дание нового
объ­екта вхо­да (Launch Item)

Eslogger на практике

Пе­реве­дем наши упражне­ния в прак­тичес­кую плос­кость и при­меним их для решения кон­крет­ной задачи. В дирек­тории Logs лежит файл 2023.log. Туда записы­вают­ся чрез­вычай­но важ­ные дан­ные.

На компь­ютер Mac попал надо­едли­вый вре­донос­ный скрипт, который про­писал­ся как задача в /Library/LaunchAgents/ и пос­тоян­но, каж­дые пять минут, уда­ляет лог, который лежит в дирек­тории Logs.

Файл задачи с рас­ширени­ем .plist выг­лядит так:

А сам скрипт так:

Что­бы отло­вить этот скрипт, нам понадо­бит­ся сле­дующая коман­да eslogger:

Пред­положим, что у нас уже писались логи в момент зараже­ния. Нам не сос­тавит тру­да най­ти событие добав­ления скрип­та в авто­запуск. Боль­шая часть события была отбро­шена, оставле­ны толь­ко глав­ные стро­ки. В ори­гиналь­ных событи­ях мно­го информа­тив­ных полей, в том чис­ле и очень полез­ных для свя­зыва­ния событий друг с дру­гом ( btm_launch_item_add):

Да­лее мы най­дем момент запус­ка скрип­та ( exec):

Фи­наль­ный аккорд. Событие уда­ления фай­ла 2023.log ( unlink).

В общем, при наличии логов отыс­кать тре­буемое событие и получить све­дения о нем доволь­но прос­то.

Команда kill и eslogger

Как обе­зопа­сить­ся от того, что злоумышленник прос­то прибь­ет про­цесс eslogger коман­дой kill?

Нап­ример, мож­но соз­дать новую учет­ку на компь­юте­ре и наз­вать ее с ниж­ним под­черки­вани­ем _brew, добавить при­виле­гии, что­бы обыч­ный поль­зователь не мог при­бить про­цес­сы, запущен­ные от ее име­ни.

Ожи­дает­ся, что злоумышленик, ког­да захочет узнать всех поль­зовате­лей в сис­теме, отфиль­тру­ет вывод, уби­рая записи с ниж­ними под­черки­вани­ями, потому что так называ­ются сис­темные учет­ки для внут­ренне­го фун­кци­они­рова­ния сис­темы. А даже если он выведет все учет­ные записи, _brew замас­киру­ется под пакет­ный менед­жер, который сто­ит поч­ти на каж­дом «маке» прог­раммис­та. Таким обра­зом мы и защитим­ся от коман­ды kill.

Ну или вто­рой вари­ант — наз­вать _ftp_server. Это объ­яснит столь высокие сис­темные пол­номочия у учет­ки.

Использование eslogger в инфраструктуре

Как все это раз­ворачи­вать?

Кон­крет­ную пошаго­вую инс­трук­цию выдать не получит­ся прос­то потому, что у всех раз­ные инфраструк­туры и очень по‑раз­ному адми­нис­три­руют­ся «маки», но под­кинуть пару идей я могу.

  1. У вас навер­няка есть ПО для управле­ния Mac по типу Jamf Pro. Вы можете соз­дать зап­ланиро­ван­ную задачу, запус­кающую скрипт пересыл­ки дан­ных из фай­ла соб­ранных логов.
  2. Ес­ли у вас есть какой‑то агент на компь­юте­рах, то про­верьте, не может ли он собирать допол­нитель­но и файл логов.
  3. Обя­затель­но нуж­но нас­тро­ить ротацию фай­ла с логом, что­бы пос­ле пересыл­ки, нап­ример, в SIEM, он чис­тился, ина­че он может доволь­но быс­тро вырас­ти до сущес­твен­ных раз­меров.

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

Ка­кова наг­рузка на сис­тему? Нез­начитель­ная. Одна­ко EPS может быть боль­шим, если дол­жным обра­зом не нас­тро­ить филь­тра­цию событий.

На­поми­наю, что решение бес­плат­ное и всех удобств «из короб­ки» не гаран­тиру­ет. Филь­тра­ция тут обя­затель­на.

Нормализация и фильтрация

Сра­зу уточ­ню, что пред­ложен­ный ниже вари­ант лишь вари­ация на тему «как это мож­но делать». Итак, для нор­мализа­ции будем исполь­зовать инс­тру­мент под наз­вани­ем fx.

Для филь­тра­ции возь­мем дру­гой инс­тру­мент — jq.

При­ведем JSON в нор­маль­ный вид с помощью скрип­та на Python 3:

На­пол­ненный логами файл мы про­гоним через наш нор­мализа­тор:

Нор­мализо­ван­ный файл теперь необ­ходимо отфиль­тро­вать. Я, нап­ример, исклю­чу все события, свя­зан­ные с про­цес­сом Finder:

Под­ска­жу пути, которые мож­но (точ­но так же, как и Finder) исклю­чить из зах­вата через eslogger, что­бы не соз­давать мусор. Мно­гие из путей могут показать­ся важ­ными для монито­рин­га. Одна­ко в 2015 году Apple добави­ла механизм System Integrity Protection (SIP), а поз­же, в 2019-м, раз­делила диск на защищен­ный и незащи­щен­ный раз­делы.

SIP пре­дох­раня­ет сис­темные кри­тичес­ки важ­ные дирек­тории от вме­шатель­ства, и поэто­му хакер не смо­жет ничего изме­нить в них, если толь­ко вы не отклю­чили SIP вруч­ную. Поэто­му и монито­рить их не нуж­но. Най­ти спи­сок путей для исклю­чения мож­но в этом репози­тории (репозиторий удален автором).

Заключение

Мы рас­смот­рели работу ESF, узна­ли о решени­ях, которые дают дос­туп к низ­коуров­невым событи­ям в сис­теме, а так­же об осо­бен­ностях работы с ними.

Хоть ути­лита eslogger и клас­сная, но она не лишена недос­татков. При­ходит­ся при­менять зап­латки, что­бы это зарабо­тало в мас­шта­бах SOC, но зато eslogger не тре­бует денег и не усту­пает в 90% слу­чаев ком­мерчес­ким EDR-решени­ям (видимость сетевых под­клю­чений там, конеч­но, гораз­до луч­ше).

ПОЛЕЗНЫЕ ССЫЛКИ:

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий