Создание Windows EventLog Channel

В предыдущей статье по теме Windows Event Forwarding я описывал настройку подписки и клиентских машин, которые отправляют логи по данной подписке на сервер.
Как же быть, если подписок на сервере у нас несколько – для разных групп хостов, например – для серверов и рабочих станций. А еще есть необходимость разделять логи security и логи приложений в отдельные EventLog’и Windows. «Из-коробки» в Windows есть только один лог канал (Event Log Channel) для получаемых от хостов событий – “Forwarded Events”. Конечно, можно собираемые события класть в логи Security, Application и прочие, но это будет похоже на кучу малу, когда в один лог канал у Вас будут сыпаться множество событий от разных источников.

Задача, решаемая в данной статье – создание нескольких отдельных каналов EventLog Channels для перенаправления в них событий, получаемых от разных групп хостов (согласно подпискам) и разных типов логов.

Рассмотрим на конкретном примере. У нас есть две группы хостов – servers и workstations. С каждой группы собираются 2 типа логов – лог security и лог sysmon. Итого нам нужно создать на сервере WEC 4 лог канала – Servers Security Log; Servers Sysmon Log; Workstations Security Log и Workstations Sysmon Log.

Сразу оговорюсь, что есть весьма простое решение данной задачи – софт от Ultimatewindowssecurity.com под названием Windows Supercharger который позволяет создавать дополнительные каналы Event Log в ОС Windows, подписки, фильтры плюс куча другого функционала для настройки логирования. Стоит недорого и цену свою вполне оправдывает. Даже есть бесплатная 30-дневная версия. Но у него есть одно серьезное ограничение – установка возможна только на серверные ОС Windows начиная с Win 2008R2. Т.е. на обычную 10-ку он не встанет.

Есть еще одно, на этот раз абсолютно бесплатное, решение — фреймворк скриптов под названием Project Sauron, с помощью которого я и создавал каналы Event Log «вручную». Однако, как у многих бесплатных решений, у этого проекта не достаточно документации. Цель данной статьи — подробнее разъяснить себя и всем интересующимся технологию создания дополнительных каналов Event Log.

Общая последовательность действий для создания канала Event Log

Для создания канала Event Log с помощью Project Sauron необходимо выполнить следующие действия:

  1. Скопировать папку с файлами проекта на машину на которой нужно создать Event Log;
  2. Установить Windows SDK (описано в разделе 2);
  3. Подготовить CSV файл, описывающий каналы Event Log, которые будут созданы (описано в разделе 3);
  4. Выполнить несколько команд, которые позволят создать объекты (описано в разделе 4).

1 Скопировать файлы на машину

Тут все просто. Идем на страничку Project Sauron на Github и забираем файлы проекта.

2 Установка Windows SDK

Установка SDK производится из стандартного пакета-установщика, который можно загрузить на портале Microsoft. Из пакета SDK нам понадобятся только файлы rc.exe, mc.exe и rcdll.dll. Можно, конечно, установить SDK на каждую машину, где будут создаваться новые лог каналы ИЛИ скопировать перечисленные файлы с машины на которой уже установлен SDK в папку Project Sauron и запускать их (mc.exe, rc.exe) оттуда. Проверено, данный вариант 100% рабочий, главное что необходимо соблюсти – одинаковые ОС на обеих машинах.

3 Подготовка CSV файла

Под CSV файлом имеется ввиду файл, который находится в папке ProjectSauron и который содержит описание создаваемых каналов (пример данного файла носит название DCEvents.csv, можно создать свой собственный с любым именем.).

Для того, чтобы можно было ссылаться на новый канал в меню создания подписок «Subscriptions», он должен быть связан с объектом Event Log Provider, который выполняет функции маппинга данных из EventLog в объекты WMI и представления событий. Поэтому необходимо каждый создаваемый объект Event Log Channel сразу же связывать с Event Log Provider. Данные, описывающие эти объекты как раз и надо внести в CSV файл.
Образец заполнения полей CSV файла для решения задачи из нашего примера приведено в таблице (для наглядности) ниже. А сам CSV файл здесь.

Описание объекта типа «Provider» Описание объекта типа «Channel»  
ProviderSymbol ProviderName ProviderGUID ChannelSymbol ChannelName QueryPath Query TargetGroup
WS_EVENTS Workstations Logs {57EE544A-1408-4D96-80D2-C9E0F8DA51F2} WS_SECURITY Forwarded Windows EventLogs/Workstations Security Log Security <Select Path=»Security»>*</Select> Workstations
WS_EVENTS Workstations Logs {57EE544A-1408-4D96-80D2-C9E0F8DA51F2} WS_SYSMON Forwarded Windows EventLogs/Workstations Sysmon Log Security <Select Path=»Security»>*</Select> Workstations
SRV_EVENTS Servers Logs {F0EC04B7-EF45-4AF0-8B4A-C69189688E64} SRV_SECURITY Forwarded Windows EventLogs/Servers Security Log Security <Select Path=»Security»>*</Select> Servers
SRV_EVENTS Servers Logs {F0EC04B7-EF45-4AF0-8B4A-C69189688E64} SRV_SYSMON Forwarded Windows EventLogs/Servers Sysmon Log Security <Select Path=»Security»>*</Select> Servers
Таблица 1 — Подготовка CSV для создания лог каналов

Каждая строка файла описывает один объект Event Log Channel. Перечислим поля строки:

ProviderSymbol – обозначение лог-провайдера. Выбор этого значения произволен. Здесь важно понимать, что один объект типа Provider может включать в себя несколько объектов типа Channel (они описаны ниже.). В моем примере я сделал 2 Provider – по одному для каждой группы хостов (servers и workstations) и по два объекта Channel (один для логов seсurity, один – для sysmon) для каждого Provider. Обратите внимание, что каждому ProviderName соответствует один (и только один) ProviderGuid. Но каждой комбинации ProviderName — ProviderGUID может соответствовать несколько (в примере выше -два) ChannelName’а.

ProviderName – имя провайдера логов. Произвольное значение.

ProviderGUID – идентификатор провайдера (я брал идентификатор из образца CSV файла из Project Sauron).

ChannelSymbol – символьное обозначение канала. Произвольное значение.

ChannelName – имя канала. Произвольное значение. Определяет где в иерархии Windows Event Log будет располагаться создаваемый канал. Для наглядности привожу пример на рисунке ниже.

Рисунок 1 — Новые лог каналы в иерархии EventLog

QueryPath – данное значение также взято из оригинального CVS из ProjectSauron.

Query – сам запрос, который позволяет выполнять фильтрацию событий (если в этом есть необходимость) по разным признакам (EventID, значения различных полей из лога). Если фильтрация не нужна – как в моем случае, то данный параметр будет иметь вид <Select Path=»Security»>*</Select>.

TargetGroup – группа. Значение произвольно.

После создания CSV файла переходим к созданию каналов Event Log.

4 Создание каналов EventLog

  1. Запускаем powershell от имени учетной записи, имеющей права локального администратора.
  2. Из папки, в которую был скопирован Project Sauron и созданный на этапе 3 файл CSV, запускаем .\Create-Manifest.ps1, когда попросит – вводим имя CSV файла.
  3. Запускаем CMD от имени учетной записи, имеющей права локального администратора. Далее выполняем «C:\Program Files (x86)\Windows Kits\10\bin\x64\mc.exe» «путь к файлу <file.man> созданному на шаге 2»    **Если mc.exe был просто скопирован на машину, а не установлен из SDK, то путь нужно поменять соответственно.
  4. Выполняем «C:\Program Files (x86)\Windows Kits\10\bin\x64\mc.exe» -css «NameSpace» «путь к файлу <file.man> созданному на шаге 2»
  5. Выполняем «C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe» «путь к <file.rc> созданному на шаге 4»
  6. Выполняем «C:\Windows\Microsoft.NET\Framework64\v0.30319\csc.exe» /win32res:»путь к файлу <file.res> созданному на шаге 5″ /unsafe /target:library /out:»путь к файлу <file.dll> который будет создан в результате выполнения команды» «путь к файлу <file.cs> созданному на шаге 4»
  7. Копируем файлы <file.man> и <file.dll> в C:\Windows\System32
  8. Загружаем созданные каналы в систему командой «c:\windows\system32\wevtutil.exe» im «C:\Windows\System32\<file>.man»

После этого каналы должны будут появиться в иерархии EventLog как показано на рисунке 1 выше. Для активации канала нужно кликнуть по нему правой клавишей мышки и выбрать «Enable Channel». Также рекомендуется сразу увеличить размер канала в меню «свойства» также по правой клавишей мыши.

Все, каналы готовы, можно использовать их в Ваших подписках.

Для удаления каналов, если вдруг что-то пошло не так, ошиблись в названии или еще что-то, можно использовать команду:

wevtutil um c:\windows\system32\<file>.man