How to get Security Log with non-administrative user

6rgwgoq8uj0pdgj55qvbho853o0.png

Привет Хабр! Читайте под катом как получить доступ к логу безопасности Windows без прав администратора. Эта будет не первая статья на Хабре связанная с логами Windows и наверно не самая оригинальная, но на мой взгляд я потратил слишком много времени на поиск простого решения для чтения логов обычным пользователем, вот я и решил поделиться «историей своего успеха».

Также пришлось сравнить скорость работы Powershell командлетов Get-WinEvent и Get-EventLog.

Все что находится под катом актуально для Windows Server 2008R2/2012R2, Windows 10 Pro (1809), на других версиях я не проверял, думаю что с продуктами 2016 и 2019 годов ситуация аналогичная.
И так, по умолчанию у рядового пользователя прав на чтение логов безопасности нет.
При попытке получить логи вы получите ошибку.

tru5amug5opyml5m2uwccqzphv4.png

И через Event Viewer в доступе также будет отказано.

zzpqt2n8cqinjjdfzqh5_jnsol4.png

SHOWTIME


Добавим пользователя в локальную группу Event Log Readers.

herskov85ujmkznbl-xaxvpvw3g.png

Далее предоставляем права на чтение ветки реестра MACHINE\System\CurrentControlSet\Services\Eventlog\Security.

ekdkoyan2ehlnqmffgzmyylkike.png

Без изменения прав на эту ветку реестра, прочитать параметры лога безопасности не получится, соответственно не получится узнать место расположение и имя файла с логами. Security, это единственный раздел сервиса Eventlog который не наследует права доступа от корня.

Вот как выглядят права для MACHINE\System\CurrentControlSet\Services\Eventlog.

khyf4yzyj4-fmracetnke09hii8.png

Проверяем, оба командлета Get-WinEvent и Get-EventLog работают!
Позже вернусь к сравнению этих командлетов…

kvqhk7rhkuqkthroai-woyyr3j4.png

Manage auditing and security log


Если пользователю необходимо предоставить права на отчистку лога, вам придется отредактировать групповую политику. Пользователю или группе пользователей необходимо добавить права Manage auditing and security log.

Находится данная группа тут Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment.

mjuhv-c7oepigz4a-udcghbxdki.png

Более подробно про 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.


Проверяем, все работает как и было обещано, логи были отчищены…

oktgdvazbwkc4e3xysh6vtntgjw.png

Другие логии отчистить прав нету.

r4a8hpa50zk05f0of_vr6irpese.png

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

Get-WinEvent VS Get-EventLog


Пришло время сравнить эти два командлета

Get-EventLog

Description:

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.


Get-WinEvent

Description:

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 я остановил.

hhd6cazbmhdj9a6-ehwwbfism8i.png

Но есть одно но, производительность имеет значение, сравните время выполнения запросов.

ene2sevfu73x9fgruzygvmdtkki.png

Время работы 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.

4-aludgi7l7a3jbftpmh_kxihwc.png

И еще один пример, уже чуть более осмысленный, получения событий с кодом 4624 An account was successfully logged on.

8or2n2s091lkggo4vkb-z9i7kue.png

Что тут сказать, цифры не врут…

Non-administrator access to DC Event logs


И на заключение я оставил тему получения доступа к логам безопасности на домен контроллере.

Все выше написанное актуально и для домен контроллера с некоторыми поправками.

1 — Группу Event Log Readers вы найдете в объектах Built-in security principals.

t9eeqvxlytphrijofbrbzvfnimq.png

Добавляя пользователя в данную группу вы даете права только на чтение логов на домен контроллерах.

И не забывайте что на каждом из домен контроллеров необходимо дать права на чтение ветки реестра MACHINE\System\CurrentControlSet\Services\Eventlog\Security.

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

kh1xib0-2darlcw-ked4ltduv4a.png

2 — Для добавления прав на отчистку логов необходимо редактировать политику Default Domain Controllers Policy.

3 — Для разрешения запуска заданий от имени пользователя на домен контроллере необходимо также редактировать Default Domain Controllers Policy и дать пользователю права Log on as a batch job.

4 — Будьте предельно внимательными при редактировании дефолтных политик домена!

P.S.

Краткий список ресурсов, которые мне помогли:
На мой взгляд полезные публикации на Habr, темы которых касаются логов Windows:

The End

© Habrahabr.ru