Главная

Saturday, 2 June 2018

Аудит журналов безопасности с помощью PowerShell.

Всем привет.

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

Разумеется я уже писал что с помощью PowerShell можно легко осуществлять парсинг событий журнала безопасности.
Например так:
$Events = Get-EventLog Security | ?{$_.eventid -eq 4624}

В условия отбора можно поставить и код события, и время, и много чего еще. Более того, вы можете выполнить выборку  с удаленного компьютера, и даже выполнить так называемую Подписку на интересующие вас события. Однако про Подписку позже.

С некоторой версии PowerShell появился командлет Get-WinEvent, который можно использовать не только для определения имен журналов в Windows.

В нем предыдущий запрос будет выглядеть так:
$filter = "*[System[EventID=4624]]"
Get-WinEvent -FilterXPath $filter -LogName Security

Так вот, один спец решил украсить себе жизнь и наваял скрипт который не просто парсит журнал Security, но и выделяет цветами результат. С тех пор прошло немало времени поэтому скрипт в части палитры надо поправить. Иначе на выходе получите 0.



Сейчас myscript.ps1 выглядит так:

$time = [int](New-TimeSpan ([datetime]::Today) (get-date)).TotalMilliseconds
$filter = "*[System[TimeCreated[timediff(@SystemTime) < $time] and EventID=4624] and EventData[Data[Name='LogonType']=10]]"

#for last 48 hours
#$filter = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime) <= 172800000]]]"

Get-WinEvent -FilterXPath $filter -LogName Security | Foreach {
$evt = $_
$addr = $evt.Properties[18].Value
$textcolor = $host.ui.rawui.foregroundcolor
$host.ui.rawui.foregroundcolor = "red"

if ($addr -like "::1*")  {$host.ui.rawui.foregroundcolor = "DarkGreen"}
if ($addr -like "127.*") {$host.ui.rawui.foregroundcolor = "DarkBlue"}
if ($addr -like "10.*")  {$host.ui.rawui.foregroundcolor = "Yellow"}
if ($addr -like "-")     {$host.ui.rawui.foregroundcolor = "Magenta"}

"" | Select-Object @{n="Time";e={$evt.TimeCreated}},@{n="UserName";e={$evt.Properties[5].Value}},@{n="Address";e={$addr}}

$host.ui.rawui.foregroundcolor = $textcolor
}

Внимание, если хотите получить палитру по условиям запроса, то запускайте его только из консоли Powershell или из строки:
powershell -ExecutionPolicy bypass -File .\myscript.ps1

Как то так.

No comments:

Post a Comment

А что вы думаете по этому поводу?