PDA

Показать полную графическую версию : [решено] Аудит AD


pogo
22-05-2014, 16:28
Спасибо за отзывы в теме (http://forum.oszone.net/thread-282461.html), но что-то готовые решения аудита оказались очень дорогими.
В итоге решил попробовать сделать подобное скриптом.
Как включить аудит для стандартных телодвижений в AD написано тут (http://winitpro.ru/index.php/2013/06/11/audit-izmeneniya-v-active-directory/)
В инете был найден скрипт и слегка модифицирован:

$objExcel = New-Object -comobject Excel.Application
$objExcel.visible = $True
$objWorkbook = $objExcel.Workbooks.Add()
$objSheet = $objWorkbook.Worksheets.Item(1)
$objSheet.Cells.Item(1,1) = "Server"
$objSheet.Cells.Item(1,2) = "LogName"
$objSheet.Cells.Item(1,3) = "Time"
$objSheet.Cells.Item(1,4) = "Source"
$objSheet.Cells.Item(1,5) = "EventID"
$objSheet.Cells.Item(1,6) = "Message"
$objSheet.Cells.Item(1,7) = "UserName"
$objSheetFormat = $objSheet.UsedRange
$objSheetFormat.Interior.ColorIndex = 19
$objSheetFormat.Font.ColorIndex = 11
$objSheetFormat.Font.Bold = $True

$row = 1

$servers = Get-Content D:\scripts\ps\servers.txt

foreach ($server in $servers)
{
$row = $row + 1
#$AppLog = Get-EventLog -LogName Application -computer $server -Newest 5
$SecLog = Get-EventLog -LogName Security -ComputerName $server -Newest 10 -ea SilentlyContinue | where {$_.EventID -eq 4624}
#$SysLog = Get-EventLog -LogName System -computer $server -Newest 5
#foreach ($cat in $AppLog,$Syslog,$Seclog)
foreach ($cat in $SecLog)
{
#if ($cat -is [array])
#{
#if ($AppLog -contains $cat[0]) {$Catname = "Application"}
if ($SecLog -contains $cat[0]) {$Catname = "Security"}
#if ($SysLog -contains $cat[0]) {$Catname = "System"}
Foreach ($event in $cat)
{
$objSheet.Cells.Item($row,1).Font.Bold = $True
$objSheet.Cells.Item($row,1) = $server
$objSheet.Cells.Item($row,2) = $Catname
$objSheet.Cells.Item($row,3) = $Event.TimeGenerated
$objSheet.Cells.Item($row,4) = $Event.Source
$objSheet.Cells.Item($row,5) = $Event.EventID
$objSheet.Cells.Item($row,6) = $Event.Message
#$objSheet.Cells.Item($row,7) = $Event.Message | where {$_ -match "(\s|^)Account\sName"} #Select-String "Account"
$row = $row + 1
}
#}
}
}

$objSheetFormat = $objSheet.UsedRange
$objSheetFormat.EntireColumn.AutoFit()
$objSheetFormat.RowHeight = 15Закомментированые строки нужны для того, что бы получать логи не только из журнала "Безопасность\Security", но для аудита они не нужны.
В процессе написания возникла проблема, которую пока не удалось решить.
Надо что бы в таблице было ещё одно поле, userName, что бы можно было сразу посмотреть, когда последний раз осуществляла логин какая-то учётка.
Для примера вот кусок сообщения $Event.Message от EventID=4624

New Logon:
Security ID: DOMAIL\user10
Account Name: user10
Account Domain: Domain
Logon ID: 0x533df4e2a0
Logon GUID: {c1fcf540-9843-1112-b2a8-8fds3c3dcfd}И надо что бы в это последнее поле userName записывалось значение Account Name, т.е. user10.
Подскажите пожалуйста, как это можно реализовать?

Kazun
22-05-2014, 17:05
$objSheet.Cells.Item($row,7) = $Event.ReplacementStrings[5]

pogo
23-05-2014, 09:31
Большое спасибо!! То что нужно.

dinovasya@vk
14-07-2014, 18:42
Как целиком теперь выглядит решение и куда его вставить чтоб заработало? новичек ))

Yspex
15-07-2014, 14:45
Выкладываю данный скрипт аудита, я пользуюсь им постоянно, при желании можно под себя заточить.

rudimko
16-07-2014, 09:20
Интересный, годный скрипт.
Я немного не в тему, но информация, может быть, будет полезной для аудита, которую можно использовать в дальнейшем.

У себя в домене я реализовал такую фичу:

Через GPO (нацеленную только на клиентские ОС по WMI фильтру) прописал в логон скрипт код на vb:
On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
Thiscomp.put "description", "Выход: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

В логофф скрипт:
On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
Thiscomp.put "description", "Вход: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

На выходе получаем:
В поле Description (которое потом можно использовать для каких-нибудь отчетов) компьютера в AD имеем что-то типа "Вход: Иван Иванович Иванов 16.07.2014 9:03:32" или "Выход:... Бла бла бла"

Куски скрипта где-то стащил, переделал под себя. А так, достаточно наглядно и эффективно.

Iska
16-07-2014, 10:23
Главное в ентом деле, чтоб связь не терялась, машины не зависали и свет не выключался :lol:.




© OSzone.net 2001-2012