Сенсор в prtg для детекта брутфорса аккаунта/ов ActiveDirectory
#by me ;)
#анализ делаем на выборке из 2000 событий из security журнала.
#из этих 2000 отбираем те у кторых ID = 4768 (auth event) и если в поле message есть код отлупа 0x6
#то получаем сколько за минуту пришло подобных отказов. Если их больше чем ТРИ в минуту, то высока вероятность подбора (бывает и 20 в минуту)
$domaincontrollers = ("my-DC01","my-DC02", "my-DC03")
$script = {
$rawevents = Get-WinEvent -LogName 'Security' -MaxEvents 2000
$events = $rawevents | where{$_.id -eq 4768} | where{$_.message -like '*Код результата:*0x6*'} | sort-object TimeCreated
if($events -eq $null){
return 0}
$minutes = ($events[-1].TimeCreated - $events[0].TimeCreated).Minutes
return [float]$events.Count/$minutes
}
$maxcount = 0
foreach($domaincontroller in $domaincontrollers){
$result = [float](Invoke-Command -Computername $($domaincontroller) -ScriptBlock $script)
if($maxcount -lt $result){
$maxcount = $result
}
}
$prtg = '<?xml version="1.0" encoding="Windows-1252" ?>
<prtg>'
$prtg+="
<result>
<channel>Bruteforce AD channel</channel>
<unit>Custom</unit>
<customUnit>per minute</customUnit>
<float>0</float>
<value>"+$([int]$maxcount)+"</value>
<warning>0</warning>
<showChart>1</showChart>
<showTable>1</showTable>
<LimitMode>1</LimitMode>
<LimitMaxError>3</LimitMaxError>
<LimitErrorMsg>Bruteforce AD account? On average blocks $([int]$maxcount) per minute</LimitErrorMsg>
</result>
</prtg>"
$prtg
#by me ;)
#анализ делаем на выборке из 2000 событий из security журнала.
#из этих 2000 отбираем те у кторых ID = 4768 (auth event) и если в поле message есть код отлупа 0x6
#то получаем сколько за минуту пришло подобных отказов. Если их больше чем ТРИ в минуту, то высока вероятность подбора (бывает и 20 в минуту)
$domaincontrollers = ("my-DC01","my-DC02", "my-DC03")
$script = {
$rawevents = Get-WinEvent -LogName 'Security' -MaxEvents 2000
$events = $rawevents | where{$_.id -eq 4768} | where{$_.message -like '*Код результата:*0x6*'} | sort-object TimeCreated
if($events -eq $null){
return 0}
$minutes = ($events[-1].TimeCreated - $events[0].TimeCreated).Minutes
return [float]$events.Count/$minutes
}
$maxcount = 0
foreach($domaincontroller in $domaincontrollers){
$result = [float](Invoke-Command -Computername $($domaincontroller) -ScriptBlock $script)
if($maxcount -lt $result){
$maxcount = $result
}
}
$prtg = '<?xml version="1.0" encoding="Windows-1252" ?>
<prtg>'
$prtg+="
<result>
<channel>Bruteforce AD channel</channel>
<unit>Custom</unit>
<customUnit>per minute</customUnit>
<float>0</float>
<value>"+$([int]$maxcount)+"</value>
<warning>0</warning>
<showChart>1</showChart>
<showTable>1</showTable>
<LimitMode>1</LimitMode>
<LimitMaxError>3</LimitMaxError>
<LimitErrorMsg>Bruteforce AD account? On average blocks $([int]$maxcount) per minute</LimitErrorMsg>
</result>
</prtg>"
$prtg
Комментариев нет:
Отправить комментарий