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 часов
Похожие статьи
Информация об авторе
|
|
Сергей Мариничев. Вы можете присоединиться ко мне в Facebook или в Twitter. |
А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.
Вы можете оставить комментарий.

Немного переделал данный скрипт по логи 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?
Сергей МариничевЦитировать