Windowsログのイベントの監視と警告:Windows Server 2012 R2の電子メール

少し前までは、PCI DSS標準への準拠に関する監査に合格するには、Windowsサーバーイベントの監査を有効にし、最も重要なこととして、重要なイベントの通知を電子メールに送信するように構成する必要がありました。 Linuxサーバーの場合、 OSSECをインストールして構成することで問題は解決します(まあ、 syslog ws loganalyzerauditdが必要な場合があります)。方法)。 そこで、他の方法を探すことにしました...



最初に行うことは、ドメインポリシーに必要なすべての操作(アカウント管理とファイル整合性制御)の監査を含めることです。 Active Directoryオブジェクトの操作の監査ですべてが簡単な場合は、ファイル操作の監査をいじる必要があります。 ちなみに、Netwrix社(広告ではカウントしないで、同社は商用監査ソフトウェアの作成者です)がすばらしい記事「ファイルサーバー監査の構成:詳細な指示とチートシート」 (.pdf)を作成しました。



しかし、「クランチ」に戻ります。 必要なすべての操作の監査を正常にアクティブ化し、 Windowsログで関心のあるイベントを検出した後、監視サーバーにそれらを送信するという疑問が生じました...組み込みツールを使用するのは理にかなっています)、しかし、ここでMicrosoftからの最初の好奇心が強い不快な瞬間がポップアップします- 「電子メールの送信とメッセージの表示は、Windows Server 2012およびWindows 8から非推奨です」



電子メールを送信する(非推奨)




...



Microsoftからの推奨事項によると、組み込みの「非推奨」機能の代替として、詳細な手順があるため、 PowerShellスクリプトを使用してログをフィルタリングし、電子メールで送信することにしました。

「Powershell Active Directory Audit with Change Notification」

「削除とファイルへのアクセスを監査し、Powershellを使用してイベントをログファイルに書き込む」

しかし、ここで異なる性質の複雑さが生じました:上記のスクリプトはイベントのヘッダー(トピック)のみを電子メールに送信し、メッセージ本文は空でした:意図したとおり!



「アカウントがブロックされています」というイベントに関する通知を送信するスクリプトの例-イベント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. 関心のあるイベントのタスクをタスクスケジューラに追加します(ジャーナル「 セキュリティ 」から直接「 このイベントにタスクをアタッチ...



  2. アクションではwevtutilユーティリティを使用して、ログから選択行い、結果をファイルに保存するスクリプトの起動指定します。



    スクリプトの例-イベント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. 2番目のステップでは、sendEmailユーティリティを使用して、保存したファイルを宛先に送信します。



    sendEmail startコマンドの引数の例:
     -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
          
          











結果は次のようになります。







PS先に示したソースのすべての著者に感謝します!



All Articles