ひとこと

― 今日のひとこと ―
起業しました。
(2024.4.24)

2015年11月14日土曜日

システム監査ポリシーをプログラムで編集したい

Windows Server 2012をいじっていて、監査ポリシーの設定について調べたこと。
ちなみに僕が編集したかったのは「詳細なファイル共有」「ログオン」「ログオフ」あたりで、成功の監査を有効にできないか模索した。


■監査ポリシーの設定がしばらくすると元に戻る・・・なにこれ・・・
secpol.mscのGUIで変更した内容はそのまま残るのに、
auditpolコマンドで変更した場合はなぜかしばらくして無効化されるという事態が発生。
しかもauditpolコマンドで変更した内容はsecpol.mscの画面には反映されない。
なぜだ?

→secpol.mscに表示されるのはセキュリティポリシーではなくグループポリシーだった!
(参考:https://support.microsoft.com/en-us/kb/2573113)

なにそれ。secpol.mscのウィンドウタイトルは「ローカル セキュリティポリシー」なのに。
ややこしいんだよ・・・
つまりsecpol.mscのGUIでセキュリティポリシーを変更したと思っていたが実はグループポリシーを変更していて、auditpolコマンドではセキュリティポリシーを編集していたってことだな。

ちなみにグループポリシーに上書きされるタイミングは「OS起動」「一定時間経過」など。
(参考:https://technet.microsoft.com/ja-jp/library/cc179176.aspx)

■セキュリティポリシーとグループポリシーの違いは?
まず適用の優先度が違うらしい。
セキュリティポリシーよりグループポリシーの設定が優先されるとか。
そしてグループポリシーはネットワークの管理者により一元管理できるもので、
セキュリティポリシーは各端末で個別に設定できるものとかなんとか。
セキュリティポリシーがグループポリシーに上書きされるのを防ぐこともできるらしいが、
正直よくわかってない。少なくともコマンドやプログラムでそうするのは難しそうだ。

プログラムでポリシーを変更したいなら、
要は端末に記録されたグループポリシーの設定を変えればいいってことだよね。
セキュリティポリシーだけ変えても上書きされるからね。


■グループポリシーを自動変更する方法
まず、ポリシーを変更する方法として4つの手段を試してみた。

①auditpolコマンドでサブカテゴリを編集
→auditpol.exe /set /subcategory:"詳細なファイル共有" successful:enableとかそんな感じのコマンドで直接編集したがグループポリシーに無慈悲な上書きを受け失敗。

②seceditコマンドで設定ファイルをインポート
→設定ファイルをエクスポートして好き勝手編集した後インポートするという企て。セキュリティポリシーしか変更できないと気付き頓挫。

③auditpolコマンドで設定ファイルをインポート
→auditpol /backup /file:{ファイル名}で設定ファイルをエクスポートして思うさま編集した後/resotreでインポートするという計画。これもグループポリシーに上書きされ失敗。

④gpupdateコマンドで設定ファイルを反映
→結論から書くと成功。やったぜ!手順は後述


■gpupdateでの設定ファイル反映の手順
もちろん管理者権限を使います。システム権限で実現できるかどうか確認してない。

1.まず現在の設定をエクスポートする。auditpol /backup /file:{ファイル名}
2.エクスポートした設定ファイルをプログラムで編集する。
設定ファイルはCSV形式。編集したいサブカテゴリのGUIDをキーにして1行ずつチェックしていき、
合致するGUIDを持つ行の「InclusionSetting」と「SettingValue」の列の値を、
それぞれ「成功」「1」に書き換える。
3.グループポリシーを上書きする。
グループポリシーの設定ファイルは↓のパスに格納されている。
%SYSTEMROOT%\system32\GroupPolicy\Machine\Microsoft\Windows NT\Audit\Audit.csv
このaudit.csv削除または移動し、2で編集したファイルを新たに格納する。
4.グループポリシーを強制反映する。gpupdate /force

これでグループポリシー(ローカルグループポリシー)を思うがままに編集できた。

(実装した後に気付いたんだけど、1はauditpolでエクスポートなんかしなくてもグループポリシーのファイルをコピーしてくればよかったんだよな。)

注意すべきこと。グループポリシーとセキュリティポリシーの設定ファイルの位置。
グループポリシーは上述の通りだがセキュリティポリシーは↓
C:\Windows\security\audit\audit.csv

どちらもaudit.csvなんだよな。ややこしい・・・
しかもそれぞれで言語が違う。動作に影響はないみたいだけどほんと統一感ないよな

ちなみにauditpolでサブカテゴリを直接編集したりすると、セキュリティポリシーのファイルだけが更新される。
その後gpupdateを実行するとグループポリシーのファイルでセキュリティポリシーのファイルが上書きされていた。



(2015.12.11追記)
auditpol /backupではなくグループポリシーのaudit.csvを編集してgpupdateするようにしてみたけどうまく動いた。
ただ、そことは直接は関係ないが問題が1点発覚。

OSインストールしたばかりであるなど、gpedit.mscなどのツールで1度もグループポリシーを編集していない状態だと、上記プログラムを実行すると「グループポリシーはうまく変更できているがセキュリティポリシーが変更されない」というおかしなことになるのだ。
gpedit.mscやsecpol.mscの画面上は変更されているように見えても、auditpol /get /subcategory"詳細なファイル共有"などで確認すると「監査なし」となっている。

それというのも、ツールで編集するまではグループポリシーのaudit.csvとセキュリティポリシーのaudit.csvが存在しない(作られない)ので、グループポリシーのaudit.csvを作ってgpupdateしても本来反映先となるはずのセキュリティポリシーが存在しないことが原因らしい。

ではセキュリティポリシーのaudit.csvも生成すればいいのでは?と実験してみたがこれではだめだった。

auditpol /restoreでグループポリシーのaudit.csvをセキュリティポリシーとしてリストアしたらうまくいった。