Три слона, на которых держится логирование в Windows

Анастасия Кузнецова, Security Vision

Данное исследование было проведено в рамках проработки агентской истории для целой группы продуктов.

Продолжаем наш цикл статей о типах и методах работы сборщиков данных с конечных точек, или, как принято их называть — агентов. В первой статье мы познакомились с этой сущностью и изучили основные нюансы сбора данных с их помощью. Так как мы в рамках разработки своих продуктов занимаемся и лог-менеджментом, и сбором событий, то хочется поделиться продолжением нашей обширной аналитики в quickstart формате. Поэтому в этом выпуске подробнее разберем функционал и используемые инструменты источников на ОС Windows.

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

Если мы хотим собирать данные с конечных точек на ОС Windows, то существует три основных инструмента. Первым является подсистема аудита Windows, хранящая события в формате EventLog. Это средство журналирования событий Windows, в котором регистрируются сообщения операционной системы. События делятся на несколько групп — журналов:

e0cc17edbd95ff4fb8fb6470e967f8d6.png

К тому же, некоторые приложения пишут свои собственные события в отдельную папку, к примеру:

94a0918bc81ba5a3a4cfd578a1b02528.png

В этой папке могут оказаться логи как процессора, так и ПО (звуковых драйверов или того же Kaspersky).

Также существуют отдельные журналы для:

События системных журналов в формате EventLog уже имеют некоторую начальную нормализацию и содержат следующие поля:

  • Дата в формате: месяц, день, время и год

  • Категория события как целое число

  • Уровень события

  • ID безопасности Windows

  • Источник Windows

  • Ключевые слова журнала событий Windows

  • Идентификатор событий Windows

  • Текст сообщения

Для журналов событий существует возможность изменять права доступа на чтение, запись и очистку. В этом смысле особняком стоит журнал безопасности (Security) — право записи в него зарезервировано исключительно для локального органа безопасности Windows (LSASS). Также есть возможность добавлять типы событий в журнал Безопасности и назначать источник из зарегистрированных приложений.

Для первичной аналитики, а тем более расследования инцидентов, информации только с EventLog не всегда бывает достаточно. В связи с этим активно используется другая утилита с расширенными функциями аудита событий — Sysmon, входящий в пакет Sysinternals. По сути, она является системной службой Windows, которая отдает подробные данные о приходящих событиях, сетевых подключениях и драйверах, изменениях файлов и многом другом. Я нашла вот такую карту интересных данных, которые можно собирать с помощью Sysmon (для подробностей рекомендую заглянуть сюда.

d3d9c2c5937057e5ad5b8bfab9d92afc.png

Для обеспечения дополнительного уровня безопасности Sysmon обычно устанавливается вместе с другими решениями для защиты конечных точек, такими как традиционный антивирус, система управления событиями (SIEM) или средство обнаружения и реагирования на конечных точках (EDR). Драйвер этой службы позволяет осуществлять сбор сразу при включении устройства, т.е. до запуска основных компонентов компьютера.
Вдобавок, данный инструмент довольно хорошо описан и популярен, а значит, на просторах интернета существует множество готовых конфигураций под различные требования аудита событий.
Единственный существенный недостаток Sysmon — слабая совместимость с классом ОС Linux. Для таких ОС регистрируется только некоторая часть событий, регистрируемых в Windows системах (Event ID 1, 3, 4, 5, 9, 11, 16, 23).
Искать логи в интерфейсе «Просмотра событий» следует в журнале Applications and Services Logs\Microsoft\Windows\Sysmon. Вот пример события:

11ad2f7840c2ceb8bccb86b6e82ebf79.png

И наконец, замыкает тройку первостепенных технологий сбора событий средство Event Tracing for Windows (ETW) — трассировка событий Windows. Технология предоставляется в самой ОС по умолчанию и осуществляется на уровне ядра. ETW фиксирует журналы событий, создаваемых драйверами ядра и пользовательскими приложениями. Тот же Sysmon формирует часть своих событий на его основе. Для понимания сути ETW нам понадобится использовать несколько понятий:

  • Провайдеры (providers, поставщики событий) — это приложения (например, DLL), у которых есть функции регистрации событий. Именно провайдер отслеживает состояния приложений (или системы) и отправляет события в сессию.

  • Сессии (sessions, сеанс трассировки, логгер) — сущности, которые собирают события от провайдеров и передают их потребителям. Одна сессия может потреблять события от одного или нескольких провайдеров. Также сессии сортируют события между собой, чтобы передавать их нужным потребителям.

  • Контроллеры (controllers) — это приложения, которые управляют сессиями. Могут создавать или удалять сессии, а также изменять их параметры.

  • Потребители событий (consumers) — приложения, которые могут получать и как‑то обрабатывать события от одной или нескольких сессий, а также из файлов.

Провайдеры формируют и передают события о состояниях, происходящих внутри процессов или ядра, а потребители используют эти события для собственных целей (например, для анализа производительности). Схему процесса передачи данных вендор представляет следующим образом:

4d65890095a4bbaf12d98b23246f213f.png

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

События от этого источника можно обнаружить в дереве Applications and Services Logs и Windows Logs\Security.

Если вы хотите углубиться в логику работы и базовое администрирование ETW, рекомендую изучить следующую статью, где понятным языком описаны внутренние процессы службы трассировки.

Итак, мы разобрались, откуда и с помощью чего мы можем собирать данные, но какими должны быть сами логи? Ведь, как правильно сказал комментатор под прошлой статьей известно, для корректной работы инфраструктуры и последующего анализа событий недостаточно просто собирать «все, что вижу». Так велик риск засорить процессинг устройств, и при этом сделать оперативное реагирование на события невозможным. Так что предлагаю некоторые критерии оценки качества передаваемых данных:

  • События должны быть достоверными, то есть нужно быть уверенными, что записанные события действительно случились и что атрибуты событий являются верными;

  • Лог событий должен быть завершенным, то есть предоставлять полную картину действий;

  • У любых записываемых событий должна быть четко определенная семантика, то есть разнотипные события должны различаться.

Данная статья носит исключительно ознакомительный характер и ни в коем случае не говорит о том, какие именно средства сбора событий должны использовать именно вы. Статья скорее будет полезна тем, кто только погружается в аудит событий конечных устройств Windows — друзья, теперь вы знаете, куда копать дальше. А в следующей статье расскажем о журналировании в ОС класса Linux.

© Habrahabr.ru