EventReporterでWindowsセキュリティログを採取する(2)

はじめに

前回は、Windowsのセキュリティログについてセキュリティ監査設定の概要として、基本の監査と高度な(詳細な)監査、auditpolコマンドや、Windowsの既定の監査設定について説明しました。

今回は、MicrosoftがWebの「システム監査ポリシーの推奨事項」にはWindowsサーバーやクライアントでの推奨設定があります。しかし、表が多数あるので全体を把握しにくいので、それをまとめた表を作成しました。

またこの推奨設定を、Windowsサーバーやクライアントに設定するのはかなり面倒です。そこで簡単にできるPowerShellのスクリプトを作成しました。推奨設定をそのまま使いたい方や、それをベースにして設定したい方は是非お使いください。

Microsoftの推奨する監査設定(高度な監査レベル)

Microsoftの「システム監査ポリシーの推奨事項」には、既定値と「ベースラインの推奨値」と「より強力な推奨事項」の値が、「Windows クライアント」と「Windows Server」に対して記載されています。

表が非常に長いので、現時点(2025年8月)のものを以下の表にまとめなおしました。表の数字の定義は、前回ご紹介したauditpolコマンドのバックアップファイルの数値と同じです。

Microsoftの推奨システム監査ポリシー


サブカテゴリ
サーバー

既定値
サーバー

ベース
サーバー

強い推奨
クライア
ント
既定値
クライア
ント
ベース
クライア
ント
強い推奨
システムの整合性333333
セキュリティ システムの拡張3333
IPsec ドライバー3333
その他のシステム イベント33
セキュリティ状態の変更133133
特殊なログオン113113
IPsec メイン モードIF:3IF:3
アカウント ロックアウト1111
ネットワーク ポリシー サーバー33
その他のログオン/ログオフ イベント3
ログオフ111111
ログオン333333
プロセス作成1313
DPAPI アクティビティ33
MPSSVC ルールレベル ポリシーの変更33
ポリシーの変更の認証113113
ポリシーの変更の監査133133
その他のアカウント管理イベント3313
セキュリティ グループ管理3313
コンピューター アカウント管理1 DC:3313
ユーザー アカウント管理133113
ディレクトリ サービスの変更DC:3DC:3
ディレクトリ サービス アクセスDC:3DC:3
資格情報の確認3313
Kerberos サービス チケット操作33
その他のアカウント ログオン イベント33
Kerberos 認証サービス33
  • Microsoftの「システム監査ポリシーの推奨事項」の「オペレーティング システム別の推奨システム監査ポリシー」より作成
  • 全項目「推奨事項なし」のサブカテゴリはこの表には含めていない
  • 既定値の値は、上記表からののもので、実機で調査したところではこの値とは一致しない。第1回ブログを参照
  • 「ベースラインの推奨値」と「より強力な推奨事項」はそれぞれ、「ベース」、「強い推奨」の欄に記載

<凡例>

表記推奨内容
3一般的なシナリオで成功および失敗の監査を有効にする
1一般的なシナリオで成功の監査を有効にする
空欄推奨事項なし、もしくは一般的なシナリオで監査を有効にしない
DC:3ドメインコントローラ―で成功および失敗の監査を有効にする
IF:3特定のシナリオで必要な場合、または監査が必要な役割または機能がマシンにインストールされている場合に成功および失敗の監査を有効にする

推奨(及び既定値に戻す)監査設定を行うスクリプト

上記の表や第一回のブログで紹介したWindows サーバーやクライアントOSでのセキュリティ監査の既定値をauditpolコマンドで設定するPowerShellのスクリプトを作成しました。

以下のコードをコピペして、ファイル名を例えば”Set-Audit.ps1″として保存すれば、管理者権限のあるコマンドプロンプトからスクリプトとして実行できます。ただし、デフォルトではPowerShellのスクリプトは実行が許可されておりませんので、Set-ExecutionPolicyコマンドで、実行できるように設定する必要があります。

 param(
  [ValidateSet("DC","Server","Client","Help")][String]$Target="help",
  [ValidateSet("Default","Base","Strong","Initial")][String]$Recommend="Initial",
  [switch]$Merge,
  [switch]$IPsec,
  [switch]$Delbkup
  )


switch ($Target) {
    "Server" { $value = 0 }
    "DC"     { $value = 4 }
    "Client" { $value = 8 }
    "Help"   {
        Write-Host 'Usage: Set-Audit.ps1 [-Target] [<Target>] [-Recommend <Recommend>] [-Merge] [-IPsec] [-Delbkup]'
        exit
    }
}

switch ($Recommend) {
    "Default" { $value += 0 }
    "Base"    { $value += 1 }
    "Strong"  { $value += 2 }
    "Initial"  { $value += 3 }
}

# Options
Write-Host 'Target:' $Target
Write-Host 'Recommend:' $Recommend
Write-Host 'Merge:  ' $Merge
Write-Host 'IPsec:  ' $IPsec
Write-Host 'Delbkup:' $Delbkup

$AuditBkup = "Audit_Result_" + ( Get-Date -Format "yyMMddHHmmss" ) + ".csv"
auditpol /backup /file:$AuditBkup > $null
$Before = Import-Csv $AuditBkup -Header Machine,Target,Subcategory,GUID,Inclusion,Exclusion,Value -Encoding OEM


$list = @{
"12"="3,3,3,3,3,3,3,3,3,3,3,3";     # システムの整合性
"11"=",3,3,0,,3,3,0,,3,3,0";           # セキュリティ システムの拡張
"13"=",3,3,0,,3,3,0,,3,3,0";           # IPsec ドライバー
"14"="3,,,3,3,,,3,3,,,3";                # その他のシステム イベント
"10"="1,3,3,1,1,3,3,1,1,3,3,1";     # セキュリティ状態の変更
"1B"="1,1,3,1,1,1,3,1,1,1,3,1";     # 特殊なログオン
"18"=",,0,0,,,0,0,,,0,0";                # IPsec メイン モード
"17"="1,,1,1,1,,1,1,1,,1,1";           # アカウント ロックアウト
"43"="3,,,3,3,,,3,3,,,3";                # ネットワーク ポリシー サーバー
"1C"=",,3,0,,,3,0,,,,0";                  # その他のログオン/ログオフ イベント
"16"="1,1,1,1,1,1,1,1,1,1,1,1";     # ログオフ
"15"="3,3,3,3,3,3,3,3,3,3,3,3";     # ログオン
"2B"=",1,3,0,,1,3,0,,1,3,0";           # プロセス作成
"2D"=",,3,0,,,3,0,,,3,0";                # DPAPI アクティビティ
"32"=",,3,0,,,3,0,,,3,0";                # MPSSVC ルールレベル ポリシーの変更
"30"="1,1,3,1,1,1,3,1,1,1,3,1";     # ポリシーの変更の認証
"2F"="1,3,3,1,1,3,3,1,1,3,3,1";     # ポリシーの変更の監査
"3A"=",3,3,0,,3,3,0,,1,3,0";           # その他のアカウント管理イベント
"37"=",3,3,1,,3,3,1,,1,3,1";           # セキュリティ グループ管理
"36"=",1,3,1,,3,3,1,,1,3,0";           # コンピューター アカウント管理
"35"="1,3,3,1,1,3,3,1,1,1,3,1";     # ユーザー アカウント管理
"3C"=",0,0,0,,3,3,0,,,,0";              # ディレクトリ サービスの変更
"3B"=",0,0,1,,3,3,1,,,,0";              # ディレクトリ サービス アクセス
"3F"="0,3,3,1,0,3,3,1,0,1,3,0";     # 資格情報の確認
"40"=",,3,1,,,3,1,,,3,0";                # Kerberos サービス チケット操作
"41"=",,3,0,,,3,0,,,3,0";                # その他のアカウント ログオン イベント
"42"=",,3,1,,,3,1,,,3,0";                # Kerberos 認証サービス
}


if ( -Not($Merge) ) { auditpol /clear /y > $null }

if ( $IPsec ) { $list["18"] = "3,3,3,3,3,3,3,3,3,3,3,3" }

foreach($key in $list.keys){
    $arr = $list[$key].split(",")
    $BeforeValue = ( $Before | Where-Object {$_.'GUID' -match "0CCE92$key"} | Select-Object -ExpandProperty 'Value' ) 
    $ModifiedValue = 0
    $ModifiedValue = $ModifiedValue -bor $arr[$value] 
    if ( $Merge ) { $ModifiedValue = $arr[$value] -bor $BeforeValue }
    $key = '{0CCE92' + $key + '-69AE-11D9-BED3-505054503030}' 
#   Write-Host "$key $ModifiedValue $value"
    switch ($ModifiedValue) {
        0 { auditpol /set /subcategory:`"$key`" /success:disable /failure:disable > $null }
        1 { auditpol /set /subcategory:`"$key`" /success:enable /failure:disable > $null }
        2 { auditpol /set /subcategory:`"$key`" /success:disable /failure:enable > $null }
        3 { auditpol /set /subcategory:`"$key`" /success:enable /failure:enable > $null }
    }
}

$After = auditpol /get /category:"*" 

$i = 0
$BeforeAfter = foreach ( $row in $After ) {
    if ( $i -ne 0 ) {
        if ( $row -match "^(?<Name>\S+(\s\S+)?)$"  ) {
            [pscustomobject]@{
                'Category/Subcategory' = $($Matches['Name'])
            }
        }
        elseif ( $row -match "^(?<Name>\s+(?<Sub>\S+(\s\S+){0,3}))\s\s+(?<Value>\S+(\s\S+){0,2})$" ) {
            [pscustomobject]@{
                'Category/Subcategory' = $($Matches['Name'])
                AuditBefore    = $Before | Where-Object {$_.'Subcategory' -eq $($Matches['Sub'])} | Select-Object -ExpandProperty 'Inclusion'
                AuditAfter     = $($Matches['Value'])
            }
        }
    }
    $i++
}


$BeforeAfter | Format-Table  @{Label="Category/Subcategory";Expression={$_.'Category/Subcategory'};Width=54}, @{Label="AuditBefore";Expression={$_.AuditBefore};Width=20}, AuditAfter 

if ( $Delbkup ) { Remove-Item $AuditBkup }

推奨監査設定スクリプトの実行例

このコマンドの実行結果のサンプルは以下の通りです。

このコマンドは、最初にオプションの値を表示し、次に PS> auditpol /backup /file:<ファイル名>で変更前の監査設定をバックアップします。ファイルはローカルのディレクトリに、”Audit_Result_yyMMddHHmmss.csv”という名前でできます。yyMMddHHmmssの部分はコマンドを実行した年月日と時刻が入ります。

次に、PS> auditpol /clear /y で全てのサブカテゴリの監査を無効にした後、オプションに応じた監査設定を最初の表にあるサブカテゴリ毎に実行します。最後に PS> auditpol /get /category:”*” を実行して変更後の監査設定を取得し、変更前後の設定を一覧表にして表示します。

推奨監査設定スクリプトの使い方

このスクリプトの使い方は以下の通りです。変更前の監査設定をバックアップしているので、PS> auditpol /respore /file:<ファイル名>で元の監査設定に戻せます。

> ./Add-Audit.ps1 [-Target] <Target> [-Recommend <Recommend>] [-Merge] [-IPsec] [-Delbkup] 

スクリプトを置いたディレクトリで、管理者権限のあるコマンドプロンプトかPowerShellのコンソールで ./Add-Audit.ps1 (←このスクリプのファイル名) で実行してください。

オプション説明
-Target DC, Server, Client, Helpの4つが有効です。DCはドメインコントローラー、ServerはサーバーOS向け、CilentはクライアントOS向けの推奨値を選択します
既定値は Help です
-Target は省略できます
何も-Targetオプションを指定しないと Helpが表示されます
-RecommendDefault, Base, Strong, Initailが有効です。Defualtは、Microsoftのオンラインガイドにあった既定値で、今回のブログの表の「既定値」に対応しています。Base, Strongは、同様に表のそれぞれ「ベース」「強い推奨」の値に対応しています。Initialは、前回のブログで紹介した、最近のサーバーで当方で調べた初期値(既定値)です
既定値は Initial です
-Mergeスイッチパラメーターで、既定値は無効(False)です。有効にすると、既に設定されている監査と設定しようとする監査をマージします
無効の場合は、一度 PS> auditpol /clear /y で全部削除してから新たに監査設定を行います
このとき最初の表にないサブカテゴリも含めてすべてが「監査なし」にされますので、特に表にないサブカテゴリに監査を設定している場合など注意してください
-IPsecスイッチパラメーターで、既定値は無効(False)です。これを指定すると、監査サブカテゴリの「IPsec メイン モード」の「成功および失敗」の監査が有効となります
-Delbkup スイッチパラメーターで、規定値は無効(False)です。無効の場合は、スクリプト実行の最初にバックアップしたcsvファイルを残します。有効にするとスクリプトの最後で消去します

注意事項:このスクリプトは、日本語版と英語版のWindows Server 2025で動作を検証しておりますが、実施は自己責任でお願いします。詳しくは、弊社サイトポリシー(4. 免責事項について)をご参照ください。

監査を有効にするればするほどログ量が増えます。必要性とログ量のバランスを考えて監査設定することが重要です。次回はMicrosoftのサイトにある、サブカテゴリ毎のログ量の目安もご紹介しますので、設定に当たっては参考にしてください。

リファレンス

今回参考にしたWebページなどのリンクです。PowerShellの正規表現を使った文字列のキャプチャーは、「PowerShellの正規表現について」を参考に名前付きにしました。

おわりに

最後までお読みいただき、ありがとうございました。少しでもセキュリティ監査設定を楽に正確に行うことに役立てば幸いです。

次回は、デフォルトの設定や推奨の設定で採取できるイベントIDや、逆にあるイベントIDを採取するにはどのサブカテゴリの監査を有効にすればよいかを整理してご紹介する予定です。

30日無償で利用いただける評価版を以下のダウンロードリンクに用意しております。簡単に検証が開始できますので、ぜひお気軽にお試しください。

こんな記事も読まれています

最新記事

おすすめ記事

  1. WSUS後継問題の見落とし 潜む更新管理のリスクと解決策

  2. インターネット速度を見える化!「PRTG」×「Speedtest」で通信速度のかんたん自動モニタリング

  3. 次世代ファイアウォールPalo Alto(Prisma)のログをSOCへ転送!syslog-ng Store Box (SSB)で課題解決!

製品カテゴリー

その他の情報

TOP