web-dev-qa-db-ja.com

Windowsサーバーでのファイルのアクセス許可の変更の追跡

何かまたは誰かが、Windows Server2003ドメインコントローラー上のファイルのファイルアクセス許可を時々変更しています。

これらの変更を追跡したいと思います。当初、デフォルトのドメインコントローラーポリシーを介した監査でこれを実行できると思っていましたが、ファイルアクセス監査はありますが、アクセス許可の変更を追跡する方法が見つからないようです。

パーミッションの変更が特定のファイルとディレクトリのセットで発生するかどうかを知りたいのですが、人間、アプリケーション/サービス、またはディスクエラーでさえ変更が行われます。何が変わったのか、いつ変わったのか、そしておそらく何が起こったのかを知りたいのですが。

これは可能ですか?

3
tcv

権限変更の組み込み監査は、「オブジェクトアクセスの監査」によって処理されます。ファイルシステムオブジェクトに構成できる監査の種類を見ると、「アクセス許可の変更」が監査可能な項目の1つであることがわかります。

ただし、「オブジェクトアクセスの監査」によって生成されたログデータは非常に冗長であり、解析が難しいことがわかります。実際のアクセス許可の変更(「WRITE_DAC」イベント-「随意アクセス制御」を意味するDAC)は、ハンドルIDのみを参照するため、ハンドルオープンイベントを見つけるには、WRITE_DACから逆方向に解析する必要があります。そのイベントは、WRITE_DACによって変更されているオブジェクトの名前を教えてくれます。かなり面倒...

同様の状況で CPTRAXファイルシステム監査証跡for Windows ユーティリティを使用して調査した1人の顧客がいました。彼らが実際にそれを実装したことはないと思いますが、彼らの調査の一環として、ドキュメントを確認したところ、少なくとも「正気」であるように見えました。個人的にはお勧めできませんが、メーカーの主張どおりに動作するようでした。

編集:

今夜は数分だったので、アクセス許可の変更を追跡するために、クレイジーで苦痛なCMDスクリプトを作成しました。イベントログの解析は面倒です(そして、それを正しく行うにはステートマシンが本当に必要です)ので、これは2番目に良い試みです。

スクリプトは、アクセス許可を追跡するためのファイルのファイル名と、監視されるアクセス許可を格納するためのファイルのパスと「ベース」ファイル名が渡されることを想定しています。偽の引数セットを想定しましょう:perm-track.cmd "C:\Program Files\Some Application\File To Track.exe" "C:\Permission Tracker\File to Track.exe"

スクリプトを初めて実行するとき(たとえば、2010年7月18日の12:51:30)、「C:\ ProgramFiles\SomeApplication\FileToTrack.exe」に設定されたアクセス許可がファイル「C」に保存されます。 :\ Permission Tracker\File to Track.exe.20100718_125130.permissions.txt "。

次回スクリプトを実行すると、同じ引数を使用して、最後に作成された「C:\ Permission Tracker\File toTrack.exe。*。permissions.txt」ファイルに保存されているアクセス許可が、の現在のアクセス許可と比較されます。 「C:\ ProgramFiles\Some Application\FileToTrack.exe」。変更がある場合、新しいアクセス許可は、「C:\ PermissionTracker」の適切な名前の「FiletoTrack.exe.ISODATE.permissions.txt」ファイルに保存されます。

これを配線してメールを送信するのは非常に簡単です。スケジュールされたタスクとして、またはループで実行することも非常に簡単です。

これは間違いなく手っ取り早いものであり、おそらくバグがありますが、このスクリプトは必要なことを実行する可能性があります。

@echo off

if "%~1"=="" goto syntax
if not exist "%1" goto syntax

if "%~2"=="" goto syntax

rem Get an ISO date (working around Shell silliness re: hours earlier than 10:00)
SET YEAR=%DATE:~10,4%
SET MONTH=%DATE:~4,2%
SET DAY=%DATE:~7,2%
SET /A HOUR=%TIME:~0,2%
SET HOUR=0%HOUR%
SET HOUR=%HOUR:~-2%
SET MINUTE=%TIME:~3,2%
SET SECOND=%TIME:~6,2%
SET ISODATE=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND%

SET TEMPFILE="%TEMP%\%RANDOM%.TXT"

rem Save current permissions into a temporary file
cacls %1 >%TEMPFILE%

rem Get filename of last set of permissions reported
set LASTFILE=
for /f "usebackq delims=" %%f in (`dir /od /b /s "%~2*.permissions.txt"`) do SET LASTFILE=%%f

rem Was there no last file? If so, put current temp file in place
if "%LASTFILE%"=="" (
  move %TEMPFILE% "%~2.%ISODATE%.permissions.txt"
) else (
  rem Compare current permission to last permission-- if it's different, annotate current permission
  fc %TEMPFILE% "%LASTFILE%"
  if errorlevel 1 move %TEMPFILE% "%~2.%ISODATE%.permissions.txt"
)

goto end

:syntax
echo Really, really poor man's permission change tracker.
echo.
echo Call with path of file to monitor on command-line as first argument,
echo path and base filename to store "report" files of permission changes
echo as the second argument.
echo.
echo example:
echo.
echo   perm-track.cmd "C:\Program Files\Some Application\File To Track.exe" "C:\Permission Tracker\File to Track"
echo.

:end
4
Evan Anderson

ホストベースのIDS を使用します。これは、ファイルシステムIDSと呼ばれることもあります。私は以前にWindowsに対して [〜#〜] aid [〜#〜] を正常に使用しました。 cygwinでコンパイルできます。

AIDEの代わりにOSSECがあります。これは Windowsポート のようです。

2
Warner

Varonis DatAdvantage for Windows は、この問題を解決するための優れた方法です。すべてのファイルシステムイベント(作成、開く、削除、移動、変更、権限の変更)を監視し、検索可能な監査証跡を作成します。 DCの権限変更や、誰かがドメイン管理者に昇格したときなど、トリガー基準に基づいて定期的なレポートまたはリアルタイムアラートを設定できます。

おそらく最良の部分は、DatAdvantageがネイティブ監査を必要とせず(時間がかかり、負担がかかる可能性があります)、監視するサーバー上のディスクに書き込むことがないため、オーバーヘッドが非常に低いことです。

(開示:私はVaronisで働いていますが、適切だと思わない場合は投稿しません。)

1
Rob Sobers