我的目标是确定哪些用户在本地文件共享中的文件上设置了隐藏属性。
根据本文,我已启用文件共享访问审核。简而言之:添加了一个组策略条目,以使某些访问能够写入事件日志 + 为所有访问类型启用文件夹级别的审核。
结果,我在事件日志中得到了这样的条目:
Subject:
Security ID: Domain\Username
Account Name: Username
Account Domain: Domain
Logon ID: 0x329558
Object:
Object Server: Security
Object Type: File
Object Name: E:\share\filename.xml
Handle ID: 0xfc4
Resource Attributes: S:AI
Process Information:
Process ID: 0x4
Process Name:
Access Request Information:
Accesses: WriteAttributes
Access Mask: 0x100
用户究竟设置了什么属性?是资源属性中列出的内容吗?它们看起来不像是“隐藏”的意思,而且我在 WriteAttributes 类型的事件日志中没有得到任何其他条目(我通过 PowerShell 彻底搜索)。并且某些进程肯定会设置此隐藏标志。
问题:
- 此事件日志条目是否包含有关应用程序实际设置的属性的信息?
- 我还能如何跟踪此活动?Process Monitor 没有捕获单个 SetBasicinformationFile 事件,但文件仍然隐藏!
文件/共享审核不提供更改内容的完整详细信息。资源属性用于动态访问控制功能,以提供有关导致审计事件的 DAC 分类标准的详细信息。
服务器上的 ProcMon 可能会工作,但您需要注意它的配置方式。它应该被配置为丢弃过滤的事件,只收集文件事件,保存到支持文件(不是虚拟内存),以及特定的操作(SetBasicInformationFile),可能还有路径。然后,您可以将配置导出到 PMC 文件并在启动时使用该文件。以秒为单位指定 /Runtime 也是一个好主意,然后在文件结束并重新启动时移动/重命名文件,因为 ProcMon 偶尔会脱落并可能对系统产生不利影响。
您应该能够通过一个简单的批处理脚本来完成此操作,您可以在其中重复执行
dir /b /a:h
然后评估错误级别。该/b
开关是可选的,但以最低限度的格式显示目录输出。当您运行此命令时,如果没有找到隐藏文件,它将返回 ERRORLEVEL 1,这正是您想要的。如果一个文件被隐藏,那么它将返回一个 0 的 ERRORLEVEL,这是您不想要的,这就是您可以触发某些东西的地方。
现在,这不会告诉你是谁隐藏了文件,但如果你经常调用它(比如每 30 秒),那么你至少会有一个关于它何时发生的时间框架,然后你应该能够关联它大约在那个时候发生了 4663 个事件。我假设您已经在此文件夹中进行了审核?
您可以使用任何调度程序调用此脚本,尽管这实际上是EventSentry Light实用程序的一个很好的方案,它具有一个内置调度程序,可以根据您运行的任何脚本的错误级别触发电子邮件警报。它甚至包括脚本的输出。该功能称为“应用程序调度程序”。当然,您也可以编写自己的脚本并使用 PowerShell、VBScript 或类似 blat.exe 的东西触发电子邮件。
如果 Windows 审计不够精细,无法捕捉到某人只是隐藏文件,那么审计部分可能是最棘手的。但即便如此,对父文件夹的审核也应该显示一些活动,例如目录列表。