Моніторинг та оповіщення про події в журналах Windows: надсилання на E-mail в Windows Server 2012 R2

Не так давно, для успішного проходження аудиту на відповідність стандартів PCI DSS, потрібно включити аудит подій Windows серверів і що саме головне — налаштувати відправку повідомлень про критичні події на E-mail. Для Linux серверів питання вирішується установкою і налаштуванням OSSEC (ну ще можуть знадобитися syslog ws loganalyzer та auditd), для Windows Server 2012 R2 та ще й російській версії він не підійшов (надалі нам таки вдалося його адекватно налаштувати, якщо буде цікаво — можу описати як). Так що вирішили шукати інші способи…

Першим справу слід включити аудит всіх необхідних операцій (управління обліковими записами і контроль цілісності файлів) в доменній політиці. І якщо з аудитом операцій над об'єктами Active Directory все просто, то ось з аудитом файлових операцій доведеться повозитися. Тут, як не можна до речі, компанія Netwrix (не вважайте за рекламу, — компанія автор комерційного софта для аудиту) підготувала чудову статтю: «Настройка аудиту файлових серверів: докладна інструкція і шпаргалка» (.pdf).

Але повернемося до наших «милиць». Після успішної активації аудиту всіх необхідних операцій і виявлення в журналах Windows цікавлячих нас подій, постало питання про їх відправлення на сервер моніторингу… Логічно було б скористатися вбудованими інструментами ("Attach Task To This Event" не самий інформативний інструмент, зате «рідний» для Windows), але тут спливає перший цікавий і не приємний момент від Microsoft — «Send an email and Display a message are deprecated for from Windows Server 2012 and Windows 8».

Send an e-mail (deprecated)

Згідно з рекомендаціями від Microsoft, як заміну вбудованому «deprecated» функціоналу вирішили використовувати скрипти PowerShell для фільтрації журналів і відправки по E-mail, благо є докладні інструкції:
«Аудит Active Directory засобами Powershell з оповіщенням про зміни».
«Аудит видалення і доступу до файлів і запис подій в лог-файл засобами Powershell»
Але тут виникла складність іншого характеру: наведені вище скрипти відсилали на E-mail тільки заголовки (теми) подій, тіло листа було порожнім :( При всьому при цьому — якщо скрипт PowerShell запустити в PowerShell ISE «as Administrator», то приходить повне повідомлення, як і було задумано!

приклад скрипта відправлення повідомлення про подію 'Заблоковано акаунт' — Event ID 4725:
$time = (get-date) - (new-timespan-min 60)

$Subject = “Заблоковано акаунт" 
$Theme = "Тільки що був заблокований аккаунт" 
$Server = “smtp.server.local" 
$From = "AD@domain.local" 
$To = "support@domain.local" 
$encoding = [System.Text.Encoding]::UTF8

#Вибирається останнім подію, що сталася з таким ID.
$TimeSpan = new-TimeSpan-sec 1
foreach($event in $events)
{
$PrevEvent = $Event.Запис
$PrevEvent = $PrevEvent - 1
$TimeEvent = $Event.TimeCreated
$TimeEventEnd = $TimeEvent+$TimeSpan
$TimeEventStart = $TimeEvent- (new-timespan-sec 1)

$Body=Get-WinEvent-maxevents 1-FilterHashtable @{LogName="Security";ID=4725;StartTime=$TimeEventStart;} | Select TimeCreated,@{n="Account Name";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name-eq "TargetUserName"} |%{$_.'#text'}}},@{n="Computer";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name-eq "TargetDomainName"}| %{$_.'#text'}}} 
$body = $body-replace "@{" -replace "}" -replace "=", ": " -replace ";","`n" -replace "TimeCreated","Час події" -replace "^","`n" 
$BodyM = $Body
}
Send-MailMessage-From $From-To $To-SmtpServer $server-Body "$BodyM `n$Theme" -Subject $Subject-Encoding $encoding 

Загалом, якщо у вас є реально робочі скрипти для такого випадку — милості прошу в коментарі.

Ми ж перейшли до іншого способу (надихнула ось ця стаття: "Моніторинг та оповіщення про події в журналах Windows: тригери подій" і виручила ця утиліта: sendEmail):

  1. Додаємо у Task Scheduler завдання з цікавого для нас події (прямо з журналу "Security" -> "Attach Task To This Event..."

  2. Actions вказуємо запуск скрипта, в якому за допомогою утиліти wevtutil робимо вибірку із журналу і зберігаємо результат у файл.

    приклад скрипта — вибірка подій Event ID 4726
    del c:\Audit\query_ID4726.txt
    wevtutil qe Security /q:"*[System[(EventID=4726)]]" /f:text /rd:true /c:1 > c:\Audit\query_ID4726.txt
    


  3. Другою дією, за допомогою утиліти sendEmail відправляємо збережений файл за призначенням:

    приклад аргументів для команди запуску sendEmail:
    -f audit_AD@domain.local -s smtp.domain.local:25-t support@domain.local -m "AD User Account Management - Event ID 426 - Account was Deleted" -a C:\Audit\query_ID4726.txt
    



В результаті повинні отримувати щось типу цього:



P. S. Дякую всім авторам джерел, зазначених раніше!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.