跟踪Windows服务器上的文件权限更改

有些东西或某些人偶尔会在Windows Server 2003域控制器上的文件上更改文件权限

我想跟踪这些变化。 最初我以为可以通过默认域控制器策略进行审计,但在进行文件访问审核时,似乎无法find任何types的权限更改跟踪。

我想知道是否权限的变化发生在一个文件和目录,无论人或应用程序/服务,甚至磁盘错误发生变化。 我希望看到什么改变了,什么时候改变了,可能是什么改变了。

这可能吗?

内置的权限更改审计通过“审计对象访问”进行处理。 如果您查看可以在文件系统对象上configuration的审计types,则会看到“更改权限”是可审计项目之一。

您将会发现,“审计对象访问”生成的日志数据非常冗长,难以parsing。 实际权限更改(“WRITE_DAC”事件–DAC意为“自由访问控制”)将只引用句柄ID,因此您必须从WRITE_DAC向后parsing以查找句柄打开事件。 该事件将告诉您WRITE_DAC正在修改的对象的名称。 颇有些烦人

我有一个客户,他们使用CPTRAX文件系统审计跟踪for Windows实用程序来探索相似的情况。 我不相信他们曾经实际执行过它,但作为他们探索的一部分,我回顾了文档,发现至less它看起来是“理智的”。 我不能给出任何forms的个人build议,但是看起来它会做制造商声称的。

编辑:

今晚我有几分钟的时间,所以我写了一个疯狂的,痛苦的CMD脚本来跟踪权限的变化。 parsing事件日志是痛苦的(而且确实需要一个状态机才能正确),所以这是第二好的尝试。

该脚本希望传递一个文件的文件名以跟踪文件的权限,以及一个文件的path和“基本”文件名来存储观察到的权限。让我们假设一组伪造的参数: 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:\ Program Files \ Some Application \ File To Track.exe”上设置的权限将被存储在文件“C :\ Permission Tracker \ File to Track.exe.20100718_125130.permissions.txt“。

下次运行脚本时,使用相同的参数,最近创build的“C:\ Permission Tracker \ File to Track.exe。*。permissions.txt”文件中存储的权限将与当前的权限进行比较“C:\ Program Files \一些应用程序\文件到Track.exe”。 如果发生更改,则新权限将存储在“C:\ Permission Tracker”中的一个名为“File to Track.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 

使用基于主机的IDS ,有时也称为文件系统IDS。 之前,我已经成功地使用了AIDE 。 它可以用cygwin编译。

AIDE的替代品是OSSEC,它似乎有一个Windows端口 。

用于Windows的Varonis DatAdvantage是解决此问题的好方法。 它监视所有文件系统事件(创build,打开,删除,移动,修改,权限更改)并构build可search的审计跟踪。 您可以根据触发标准设置定期报告或实时警报,例如您的数据中心的权限更改,或者某人升级到域pipe理员时。

也许最好的部分是,DatAdvantage不需要本地审计(这可能是缓慢的和税收),并永远不会写在您监视的服务器上的磁盘,所以它是超低的开销。

(披露:我为Varonis工作,但如果我不认为这是合适的话,不会发表这个意见。)