FileSystemWatcher超越了文件系统权限

Dev*_*xPP 7 c# security filesystemwatcher active-directory visual-studio

在尝试使用FileSystemWatcher时,我发现它以某种方式超越了我的用户帐户对文件和文件夹的权限,并且会引发更改事件,其中包含有关您甚至无法访问的文件和文件夹中已更改内容的信息.

我有两个问题:

1)为什么会这样?
2)这是AD配置中的问题吗?我如何解决它 ?
3)有没有办法收集这些文件,甚至创建它们的FileSystemInfo以获取有关文件的更多信息(不仅仅是对它们所做的更改)?

据我所知,只有FileSystemWatcher免受限制,我不能对它运行任何其他东西,这里是我尝试过的列表:

  • 文件已存在
  • Directory.Exists
  • 找到的文件上的FileInfo实例
  • 找到的文件上的DirectoryInfo实例
  • File.Copy
  • File.Delete

更新:尝试了helge的解决方案,有些类似于他的sugested,不是通过windows的api,而是通过命令提示符:

robocopy/B\myserver\folder c:\ somefolder

最好的命令名称.

你可以通过robocopy来检查/ B代表"备份模式",这就是帮助这种安全性超越的原因.

我会尝试任何东西,我想找出究竟是什么导致FileSystemWatcher能够观看我无权打开的文件夹.知道原因,我想学习如何阻止FileSystemWatcher,以及如何收集找到的文件.

如果我使用我的个人账户,我会进行调查.拜托,有人可以帮帮我吗?我将写一篇关于解决方案的博客文章,其中包括可能有助于未来同样怀疑的任何人.

Hel*_*ein 4

根据这个答案, FileSystemWatcher 基于 API 函数ReadDirectoryChangesW。如果这是真的,它就解释了您所目睹的行为 - 以及为什么这不是安全漏洞。

正如MSDN ReadDirectoryChangesW 上记录的那样,ReadDirectoryChangesW 需要特权 SeBackupPrivilege(这是由 CreateFile 的参数 FILE_FLAG_BACKUP_SEMANTICS 请求的)。如果以该模式打开文件,则返回的句柄将授予对该文件的完全访问权限,从而绕过访问检查。此功能专为需要能够读取磁盘上所有内容(无论权限如何)的备份程序而设计。

这不是一个安全漏洞,因为默认情况下,此功能所需的SeBackupPrivilege权限仅授予管理员。管理员,实际上是任何能够物理访问计算机的人,始终能够控制和读取每个文件 - 除非它已加密。

至于备份模式下可以用哪些函数来访问文件:至少有BackupRead来读取。使用 FindFirstFile/FindNextFile 可以轻松进行枚举。当然,这需要真正的Windows API,而不是残缺不全的.NET 文件系统功能。