- Event Log Reader Класс
- Определение
- Примеры
- Конструкторы
- Свойства
- Методы
- Kazun
- Заметки о PowerShell.
- Как делегировать пользователю возможность чтения журнала Security с помощью Get-WinEvent?
- How to get Security Log with non-administrative user
- SHOWTIME
- Manage auditing and security log
- Get-WinEvent VS Get-EventLog
- Non-administrator access to DC Event logs
Event Log Reader Класс
Определение
Позволяет считывать события из журнала событий в соответствии с запросом события. Enables you to read events from an event log based on an event query. События, считываемые данным объектом, возвращаются в качестве объектов EventRecord. The events that are read by this object are returned as EventRecord objects.
Примеры
Конструкторы
Инициализирует новый экземпляр класса EventLogReader, указывая запрос событий. Initializes a new instance of the EventLogReader class by specifying an event query.
Инициализирует новый экземпляр класса EventLogReader, указывая запрос событий и закладку, используемую в качестве начальной позиции для запроса. Initializes a new instance of the EventLogReader class by specifying an event query and a bookmark that is used as starting position for the query.
Инициализирует новый экземпляр класса EventLogReader, указывая активный журнал событий, из которого следует извлечь события. Initializes a new instance of the EventLogReader class by specifying an active event log to retrieve events from.
Инициализирует новый экземпляр класса EventLogReader, указывая имя журнала событий, из которого следует извлечь события, или путь к файлу журнала, из которого следует извлечь события. Initializes a new instance of the EventLogReader class by specifying the name of an event log to retrieve events from or the path to a log file to retrieve events from.
Свойства
Получает или задает количество событий, извлекаемых из потока событий при каждой операции считывания. Gets or sets the number of events retrieved from the stream of events on every read operation.
Получает состояние каждого журнала событий или файла журнала событий, связанного с запросом события в данном объекте. Gets the status of each event log or log file associated with the event query in this object.
Методы
Отменяет текущую операцию запроса. Cancels the current query operation.
Освобождает все ресурсы, используемые этим объектом. Releases all the resources used by this object.
Освобождает неуправляемые ресурсы, используемые этим объектом. Кроме того, возможно освобождение управляемых ресурсов. Releases the unmanaged resources used by this object, and optionally releases the managed resources.
Определяет, равен ли указанный объект текущему объекту. Determines whether the specified object is equal to the current object.
(Унаследовано от Object)
Служит хэш-функцией по умолчанию. Serves as the default hash function.
(Унаследовано от Object)
Возвращает объект Type для текущего экземпляра. Gets the Type of the current instance.
(Унаследовано от Object)
Создает неполную копию текущего объекта Object. Creates a shallow copy of the current Object.
(Унаследовано от Object)
Считывает следующее событие, возвращенное из запроса события в данном объекте. Reads the next event that is returned from the event query in this object.
Считывает следующее событие, возвращенное из запроса события в данном объекте. Reads the next event that is returned from the event query in this object.
Путем указания события закладки изменяет позицию в потоке событий, из которого поступит следующее считываемое событие. Changes the position in the event stream where the next event that is read will come from by specifying a bookmark event. События, зарегистрированные до события закладки, извлечены не будут. No events logged before the bookmark event will be retrieved.
Путем указания события закладки и числа смещения событий из закладки изменяет позицию в потоке событий, из которого поступит следующее считываемое событие. Changes the position in the event stream where the next event that is read will come from by specifying a bookmark event and an offset number of events from the bookmark. События, зарегистрированные до события закладки с учетом смещения, извлечены не будут. No events logged before the bookmark plus the offset will be retrieved.
Путем указания начальной позиции и смещения от начальной позиции изменяет позицию в потоке событий, из которого поступит следующее считываемое событие. Changes the position in the event stream where the next event that is read will come from by specifying a starting position and an offset from the starting position. События, зарегистрированные до начальной позиции с учетом смещения, извлечены не будут. No events logged before the starting position plus the offset will be retrieved.
Возвращает строку, представляющую текущий объект. Returns a string that represents the current object.
Kazun
Заметки о PowerShell.
Как делегировать пользователю возможность чтения журнала Security с помощью Get-WinEvent?
8 марта, 2016 Автор: Kazun
Начиная с Windows Server 2008 / Windows Vista была добавлена группа Event Log Readers (Читатели журнала событий) , которая позволяет получить доступ на чтение к журналу Security.
- Добавим пользователя в группу Event Log Readers (Читатели журнала событий)
- net localgroup «Event Log Readers» TestUser /Add
- Производим выход и повторный вход пользователям в систему ,и проверяем если права на чтение журнала Security.
- Воспользуемся оснасткой Event Viewer(Просмотр событий) , как видим все отрабатывает.
- Откроем консоль PowerShell и выполним командлет Get-WinEnvent. В этот раз мы получаем ошибку , что доступ запрещен.
- Попробуем стандартную утилиту wevtutil. Все отрабатывает, как нужно.
- Попробуем через WMI класс Win32_NTLogEvent. И тоже все хороршо.
- Теперь посмотрим, может быть нам поможет старенький командлет Get-EvetLog. Тоже выкидывает ошибку, но дает полезное диагностическое сообщение.
Остается узнать, какой ключ реестра отвечает. С этим нам поможет, замечательная утилиту Procces Monitor .
Теперь зная путь HKLM\System\CurrentControlSet\services\eventlog\Security и требуемые права Read, назначим их группе Event Log Readers (Читатели журнала событий). Из статьи Well-known security identifiers in Windows operating systems получим SID этой группы.
SID: S-1-5-32-573
Name: BUILTIN\Event Log Readers
Description: A Builtin Local group. Members of this group can read event logs from local machine.
Проверим работу командлетов Get-WinEvent/Get-EventLog. После добавления прав, оба командлета отрабатывают успешно.
Можно более детально раздать права — Giving Non Administrators permission to read Event Logs Windows 2003 and Windows 2008 . Но тут потребуется работа с SDDL.
Для преобразования формата SDDL в более читаемый вид, возьмем функцию от Matthew Graeber ConvertFrom-SDDL .
Для примера изменим S-1-5-32-573 на 0x5(ReadData,AppendData) ,как у группы Администраторы.
wevtutil sl Security /ca:»O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x5;;;S-1-5-32-573)»
How to get Security Log with non-administrative user
Привет Хабр! Читайте под катом как получить доступ к логу безопасности Windows без прав администратора. Эта будет не первая статья на Хабре связанная с логами Windows и наверно не самая оригинальная, но на мой взгляд я потратил слишком много времени на поиск простого решения для чтения логов обычным пользователем, вот я и решил поделиться «историей своего успеха».
Также пришлось сравнить скорость работы Powershell командлетов Get-WinEvent и Get-EventLog.
Все что находится под катом актуально для Windows Server 2008R2/2012R2, Windows 10 Pro (1809), на других версиях я не проверял, думаю что с продуктами 2016 и 2019 годов ситуация аналогичная.
И так, по умолчанию у рядового пользователя прав на чтение логов безопасности нет.
При попытке получить логи вы получите ошибку.
И через Event Viewer в доступе также будет отказано.
SHOWTIME
Добавим пользователя в локальную группу Event Log Readers.
Далее предоставляем права на чтение ветки реестра MACHINE\System\CurrentControlSet\Services\Eventlog\Security.
Без изменения прав на эту ветку реестра, прочитать параметры лога безопасности не получится, соответственно не получится узнать место расположение и имя файла с логами. Security, это единственный раздел сервиса Eventlog который не наследует права доступа от корня.
Вот как выглядят права для MACHINE\System\CurrentControlSet\Services\Eventlog.
Проверяем, оба командлета Get-WinEvent и Get-EventLog работают!
Позже вернусь к сравнению этих командлетов…
Manage auditing and security log
Если пользователю необходимо предоставить права на отчистку лога, вам придется отредактировать групповую политику. Пользователю или группе пользователей необходимо добавить права Manage auditing and security log.
Находится данная группа тут Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment.
Более подробно про Manage auditing and security log можно прочитать тут
This policy setting determines which users can specify object access audit options for individual resources such as files, Active Directory objects, and registry keys. These objects specify their system access control lists (SACL). A user who is assigned this user right can also view and clear the Security log in Event Viewer. For more info about the Object Access audit policy, see Audit object access.
Проверяем, все работает как и было обещано, логи были отчищены…
Другие логии отчистить прав нету.
Честно говоря, не могу придумать сценарий где пользователю нужно выдать права на отчистку логов безопасности, но такая возможность присутствует.
Get-WinEvent VS Get-EventLog
Пришло время сравнить эти два командлета
The Get-EventLog cmdlet gets events and event logs on the local and remote computers.
You can use the cmdlet’s parameters and property values to search for events. This cmdlet gets events that match the specified property values.
The cmdlets that contain the EventLog noun work only on classic event logs. To get events from logs that use the Windows Event Log technology in Windows Vista and later Windows versions, use Get-WinEvent.
The Get-WinEvent cmdlet gets events from event logs, including classic logs, such as the System and Application logs, and the event logs that are generated by the Windows Event Log technology introduced in Windows Vista. It also gets events in log files generated by Event Tracing for Windows (ETW).
Without parameters, a Get-WinEvent command gets all the events from all the event logs on the computer. To interrupt the command, press CTRL + C.
Get-WinEvent also lists event logs and event log providers. You can get events from selected logs or from logs generated by selected event providers. And, you can combine events from multiple sources in a single command. This cmdlet allows you to filter events by using XPath queries, structured XML queries, and simplified hash-table queries
Согласно описания, Get-WinEvent умеет работать с большим количеством журналов которые появились в WIndows Vista.
Для наглядности вот списки с которыми работают эти командлеты, вывод для Get-WinEvent я остановил.
Но есть одно но, производительность имеет значение, сравните время выполнения запросов.
Время работы Get-WinEvent просто поражает, обратите внимание на количество записей в логах Applocation и Security, количество событий примерно одинаковое 3400-3600, но при этом разница по времени выполнения почти 20 раз…
Get-WinEvent тратит 127 секунд против 52 секунд Get-EventLog для чтения событий Application.
И шах и мат, Get-WinEvent тратит 2020 секунд против 45 секунд Get-EventLog для чтения событий Security.
Если выполнить те же команды локально все выглядит не так уж и плохо, но даже локально Get-EventLog работает с логами безопасности в 50 раз быстрее чем Get-WinEvent.
И еще один пример, уже чуть более осмысленный, получения событий с кодом 4624 An account was successfully logged on.
Что тут сказать, цифры не врут…
Non-administrator access to DC Event logs
И на заключение я оставил тему получения доступа к логам безопасности на домен контроллере.
Все выше написанное актуально и для домен контроллера с некоторыми поправками.
1 — Группу Event Log Readers вы найдете в объектах Built-in security principals.
Добавляя пользователя в данную группу вы даете права только на чтение логов на домен контроллерах.
И не забывайте что на каждом из домен контроллеров необходимо дать права на чтение ветки реестра MACHINE\System\CurrentControlSet\Services\Eventlog\Security.
Вот пример, прочитать лог рядового сервера разрешений нет, если вам нужно читать логи с других машин домена, используйте групповые политики, для добавления пользователей или групп пользователей в локальные группы Event Log Readers.
2 – Для добавления прав на отчистку логов необходимо редактировать политику Default Domain Controllers Policy.
3 – Для разрешения запуска заданий от имени пользователя на домен контроллере необходимо также редактировать Default Domain Controllers Policy и дать пользователю права Log on as a batch job.
4 — Будьте предельно внимательными при редактировании дефолтных политик домена!
Краткий список ресурсов, которые мне помогли: