本日も乙

ただの自己満足な備忘録。

Windowsの監査ログを設定する(PowerShellスクリプト付き)

[toc]

前回 はWinlogbeatを設定して、Windowsの監査ログをFluentdへ転送する設定を行いました。順序は逆になってしまいましたが、今回はログオン・ログオフ及びファイル・フォルダに対する監査ログをイベントログに出力させてみます。以下のOSで動作確認しています。

設定はGUIでできるのですが、今回はPowerShellでやってみます。PowerShellで設定するメリットは、設定漏れやミスが起こりづらいことと、複数サーバに対しても効率よく適用することができるからです。

監査ポリシーのバックアップ、クリア

監査ポリシーを設定する前に、以前の設定を戻すことがあるかもしれないのでバックアップを取ります。

PS> auditpol /backup /file:C:\audit.csv

C:¥audit.csv に現在設定している監査ポリシーが出力されます。 なお、現在設定している監査ポリシーは以下のコマンドで一覧表示できます。

PS> auditpol /get /category:*

監査ポリシーをクリアするには以下のコマンドを実行します。

PS> auditpol /clear /y

監査ポリシーを設定した後に、OS再起動すると設定が戻っている場合があります。その場合は以下のようにファイルを削除しておいてください。

PS> Remove-Item "C:\Windows\security\audit\audit.csv"
PS> Remove-Item "C:\Windows\System32\GroupPolicy\Machine\Microsoft\Windows NT\Audit\audit.csv"

ファイル監査の有効化

ファイル監査の有効化は NTFSSecurityモジュール が提供されているのでこれを使います。

PS> Install-Module NTFSSecurity

Install-Moduleが使えない場合は直接ダウンロードしてPowerShellモジュールパスに置きます。 予めモジュールをダウンロードして C:\NTFSSecurity.zip に配置してください。

PS> New-Item C:\Windows\system32\WindowsPowerShell\v1.0\Modules\NTFSSecurity -itemType Directory
PS> Expand-Archive -Path C:\NTFSSecurity.zip -DestinationPath C:\Windows\system32\WindowsPowerShell\v1.0\Modules\NTFSSecurity\
PS> Remove-Item C:\NTFSSecurity.zip

ZIPファイルを解凍する Expand-Archive コマンドですが、PowerShellのバージョンがv5.0以降でないと使えないため、v5.0より以前の環境下では以下の関数を定義して利用します。

# Refer to http://qiita.com/kmr_hryk/items/5dfe87c0035887cbd8e4
function psunzip {
   $Expcom = New-Object -ComObject Shell.Application
   $zipFile = $Expcom.NameSpace($args[0])
   $tgtDir = $Expcom.NameSpace($args[1])
   $zipFile.Items() | ForEach-Object {
      $tgtDir.CopyHere($_.path)
   }
}

PS> psunzip C:\NTFSSecurity.zip C:\Windows\system32\WindowsPowerShell\v1.0\Modules\NTFSSecurity\

インストールが正常にできたかは以下のコマンドで確認できます。

PS> Get-Module -ListAvailable | Select-String "NTFSSecurity"
NTFSSecurity

ファイル監査を有効にします。以下のコマンドを見てください。C:¥以下すべてのファイル・フォルダに対して監査を有効にしています。アクセス権は Read(読み)、Write(書き)、Delete(削除)、CreateFiles(ファイル作成)、CreateDirectories(フォルダ作成)、ExecuteFile(ファイル実行)です。対象ユーザはドメインに参加しているユーザにしています。

PS> Add-NTFSAudit -Account "Domain Admins" -Path "C:\" -AccessRights "Read, Write, Delete, CreateFiles, CreateDirectories, ExecuteFile" -InheritanceFlags "ContainerInherit, ObjectInherit" -PropagationFlags "InheritOnly"

監査ポリシーの設定

以下の図のような監査ポリシーを有効にします。

Windows file audit 001 Windows file audit 002

PS> auditpol /set /subcategory:"ログオン" /success:enable /failure:enable
PS> auditpol /set /subcategory:"ログオフ" /success:enable /failure:enable
PS> auditpol /set /subcategory:"特殊なログオン" /success:enable /failure:enable
PS> auditpol /set /subcategory:"その他のログオン/ログオフ イベント" /success:enable /failure:enable
PS> auditpol /set /subcategory:"ファイル システム" /success:enable /failure:enable
PS> auditpol /set /subcategory:"ハンドル操作" /success:enable /failure:enable

サブカテゴリ名はOSの言語環境に依存します。当環境は日本語だったのでそれを指定しています。 なお、私の場合、複数のWindows Serverに対してPowerShellスクリプトを実行する場合、EC2 Run Commandを多用するのですが、その場合GUIDを指定しないと動かないので注意が必要です。

# ログオン
PS> auditpol /set /subcategory:"{0CCE9215-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable
# ログオフ
PS> auditpol /set /subcategory:"{0CCE9216-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable
# 特殊なログオン
PS> auditpol /set /subcategory:"{0CCE921B-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable
# その他のログオン/ログオフ イベント
PS> auditpol /set /subcategory:"{0CCE921C-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable
# ファイルシステム
PS> auditpol /set /subcategory:"{0CCE921D-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable
# ハンドル操作
PS> auditpol /set /subcategory:"{0CCE9223-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable

GUIDは以下のコマンドで調べることができます。

PS> auditpol.exe /list /subcategory:* /v

監査ポリシーが適用されたか確認します。

PS> auditpol /get /category:*

GUI上(ローカルセキュリティポリシー)だと有効にならない(未構成)になっていますが、以下のコマンドで有効(成功および失敗)になっていれば問題ありません(なぜGUICUIで結果が異なるかはわかりません)。

最後にイベントログのセキュリティ欄を見て、ログオンやログオフ、ファイル・フォルダへの操作に対するログが記録されていれば完了です。

最後に

Windowsのログオン・ログオフやファイル監査を有効にし、監査ログに出力する設定をPowerShellで行いました。設定は簡単なのですが、ファイル監査を有効にするとほんの少し操作するだけでも大量のイベントログが出てきてしまい、ユーザがどんな操作をしているのかを追うことが難しい気がしています。調べて見ると別途イベントビューアを通して確認するより他がないようです。その辺りのノウハウをどなたかご教示いただきたいです。

参考URL