Windows 2003 аудит логов безопасности
Каждый хоть раз сталкивался с компрометацией пароля административных учетных записей. Иногда это выплывает сразу, иногда через какое то время, иногда слишком поздно и системе нанесен непоправимый вред.
Поэтому речь сегодня пойдет не о том как ломать и даже не о профилактике или рекомендациях, поговорим об анализе журналов безопасности и выявлению возможных проблем.
Изначально, считаем мы занимаемся анализом логов Windows Server 2003 и что у нас имеется настроенный аудит.
Из множества событий, необходимые нам описаны в статье базы знаний Микрософт можно выделить нужные нам:
- Event ID – 528. Успешный вход в систему.
- 2 интерактивный вход
- 3 сетевой вход в систему (например при использовании команды net use)
- 8 вход через сеть с паролем переданным как ClearText
- 10 Вход через службу терминалов
- 11 Кэшированный вход в систему (например на ноутбуке вне сети предприятия)
- Event ID 529. Отказ входа в систему. Попытка входа в систему с неизвестным именем пользователя или с известным именем, но неправильным паролем.
коды событий такие же как и для 528 события. - Event ID 538. Пользователь вышел из системы
- 2 интерактивный выход из системы
Создаем скрипт (основа и идея взята из источника) условно назовем его logParse.ps1.
$event = New-Object System.Management.Automation.PSObject
$event | Add-Member NoteProperty Event ($null)
$event | Add-Member NoteProperty Code ($null)
$event | Add-Member NoteProperty Time ($null)
$event | Add-Member NoteProperty UserName ($null)
$event | Add-Member NoteProperty Address ($null)
$log | %{
$event.Event = $_.eventid
$event.Code = ($message | ?{$_ -like "*Logon Type:*"} | %{$_ -replace "^.+`t *"})
$event.time = $_.TimeGenerated; $message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}
$event.UserName = ($message | ?{$_ -like "User Name:*"} | %{$_ -replace "^.+`t *"})
$event.Address = ($message | ?{$_ -like "Source Network Address:*"} | %{$_ -replace "^.+`t *"})
$event
}
Вызываем его следующим образом:
В результате получим полный лог событий входа что удалось вытащить из журнала безопасности.
Event : 528 Code : 10 Time : 05.04.2010 15:02:35 UserName : administrator Address : 192.168.100.24 Event : 538 Code : 10 Time : 05.04.2010 14:45:16 UserName : user1 Address : Event : 528 Code : 10 Time : 05.04.2010 14:45:16 UserName : user2 Address : 192.168.100.148
Для выборки событий за определенный период времени необходимо воспользоваться следующими скриптами:
1. получение событий отказа за последние 12 часов
2. получение событий входа за последние 12 часов
Похожие статьи
Приглашаю присоединиться ко мне в следующих сервисах:
Вы можете оставить комментарий.

Немного переделал данный скрипт по логи windows 2008, но есть одно для event id 4624 не получается вытащить из текста сообщения Account Name, т.к. их два одно в теле Subject второе в New Logon, в первом указывается системный параметр и только во-втором имя пользователя
пример лога:
Subject:
Security ID: SYSTEM
Account Name: SP$
Account Domain: WG
Logon ID: 0x3e7
Logon Type: 7
New Logon:
Security ID: SP\user9
Account Name: user9
Account Domain: SP
Logon ID: 0x596e33e
Logon GUID: {00000000-0000-0000-0000-000000000000}
Как вытащить в отчет Account Name из тела New Logon???
gogisunЦитировать
вот измененный скрипт:
$log = Get-EventLog security | ?{$_.eventid -eq 4624 -or $_.eventid -eq 4634 -and $_.message -like «*Logon Type:`t`t`t10*» -or $message -like «*Logon Type:`t`t`t3*»}
$event = New-Object System.Management.Automation.PSObject
$event | Add-Member NoteProperty Event ($null)
$event | Add-Member NoteProperty Code ($null)
$event | Add-Member NoteProperty Time ($null)
$event | Add-Member NoteProperty UserName ($null)
$event | Add-Member NoteProperty Address ($null)
$log | %{
$event.Event = $_.eventid
$event.Code = ($message | ?{$_ -like «*Logon Type:*»} | %{$_ -replace «^.+`t *»})
$event.time = $_.TimeGenerated; $message = $_.message.split(«`n») | %{$_.trimstart()} | %{$_.trimend()}
$event.UserName = ($message | ?{$_ -like «New Logon:*Account Name:*»} | %{$_ -replace «^.+`t *»})
$event.Address = ($message | ?{$_ -like «Source Network Address:*»} | %{$_ -replace «^.+`t *»})
$event
}
gogisunЦитировать
Строка
$event.UserName = ($message | ?{$_ -like «New Logon:*Account Name:*»} | %{$_ -replace «^.+`t *»})
меняется на
$user=($message | ?{$_ -like «*Account Name:*»} | %{$_ -replace «^Account Name:`t`t *»})
$event.UserName = $user[1]
события лучше всего собирать по типу 10 и по типу 2
adminЦитировать
спасибо ))
не подскажешь как сделать чтоб первая строчка не писалась в отчет:
#TYPE System.Management.Automation.PSCustomObject – вот эта!
Event,Code,Time,UserName,Address
4624,,»25.05.2010 14:44:01″,user0,x.x.x.x
4624,10,»25.05.2010 13:54:17″,user3,x.x.x.x
4624,10,»25.05.2010 13:36:41″,user1,x.x.x.x
4624,10,»25.05.2010 11:00:29″,user0,x.x.x.x
gogisunЦитировать
сори ошибся! все ок! старый лог взял просто!
gogisunЦитировать
welcome,why script dont return for first event - code ?
rocafellaЦитировать
What do you mean by the first code?
Сергей МариничевЦитировать