Windows 2003 аудит логов безопасности

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

Поэтому речь сегодня пойдет не о том как ломать и даже не о профилактике или рекомендациях, поговорим об анализе журналов безопасности и выявлению возможных проблем.

Изначально, считаем мы занимаемся анализом логов Windows Server 2003 и что у нас имеется настроенный аудит.

Из множества событий, необходимые нам описаны в статье базы знаний Микрософт можно выделить нужные нам:

  1. Event ID – 528. Успешный вход в систему.
    • 2 интерактивный вход
    • 3 сетевой вход в систему (например при использовании команды net use)
    • 8 вход через сеть с паролем переданным как ClearText
    • 10 Вход через службу терминалов
    • 11 Кэшированный вход в систему (например на ноутбуке вне сети предприятия)
  2. Event ID 529. Отказ входа в систему. Попытка входа в систему с неизвестным именем пользователя или с известным именем, но неправильным паролем.
    коды событий такие же как и для 528 события.
  3. Event ID 538. Пользователь вышел из системы
    • 2 интерактивный выход из системы

Создаем скрипт (основа и идея взята из источника) условно назовем его logParse.ps1.

$log = Get-EventLog security | ?{$_.eventid -eq 528 -or $_.eventid -eq 529 -or $_.eventid -eq 538 -and $_.message -like "*Logon Type:`t10*" -or $_.message -like "*Logon Type:`t2*"}

$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
}

Вызываем его следующим образом:

LogParse.ps1 | Out-File report.txt

В результате получим полный лог событий входа что удалось вытащить из журнала безопасности.

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 часов

get-eventlog Security | ?{ $_.EventID -eq 529 -and $_.TimeGenerated -gt (Get-date).AddHours(-12)} | select EventID,UserName,Domain,EntryType,TimeGenerated, Message

2. получение событий входа за последние 12 часов

get-eventlog Security | ?{ $_.EventID -eq 528 -and $_.message -like "*Logon Type:`t2*" -or $_.message -like "*Logon Type:`t10*" -and $_.TimeGenerated -gt (Get-date).AddHours(-12)} | select EventID,UserName,Domain,EntryType,TimeGenerated, Message

Информация об авторе

Сергей Мариничев.
Вы можете присоединиться ко мне в Facebook или в Twitter.

Если Вам понравилась статья, то вы можете подписаться на RSS.
А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.

Получать обновления на email

Вы можете оставить комментарий.

7 Комментариев »

 
  • 1# gogisun (4 комм.):

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

      Цитировать

  • 2# gogisun (4 комм.):

    вот измененный скрипт:

    $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
    }

      Цитировать

    • 3# admin (36 комм.):

      Строка
      $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

        Цитировать

  • 4# gogisun (4 комм.):

    спасибо ))

    не подскажешь как сделать чтоб первая строчка не писалась в отчет:

    #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

      Цитировать

  • 5# gogisun (4 комм.):

    сори ошибся! все ок! старый лог взял просто!

      Цитировать

  • 6# rocafella (1 комм.):

    welcome,

    why script dont return for first event - code ?

      Цитировать

 

Добавить комментарий

XHTML: Вы можете использовать тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>