FileSystemWatcher超越了文件系统权限

时间:2011-01-07 12:11:44

标签: c# visual-studio security active-directory filesystemwatcher

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

我有两个问题:

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

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

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

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

robocopy / B \ myserver \文件夹c:\ somefolder

最好的命令名称。

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

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

如果我使用个人帐户,我会进行调查。拜托,有人可以帮帮我吗?我将写一篇关于解决方案的博客文章,以及其他可能对将来有同样疑问的人提供帮助。

1 个答案:

答案 0 :(得分:4)

根据this answer on SO,FileSystemWatcher基于API函数ReadDirectoryChangesW。如果这是真的,它会解释您所见证的行为 - 以及为什么这不是安全漏洞。

由于documented on MSDN ReadDirectoryChangesW需要特权SeBackupPrivilege(参数FILE_FLAG_BACKUP_SEMANTICS为CreateFile请求)。如果在该模式下打开文件,则返回的句柄将授予对文件的完全访问权限,从而绕过访问检查。此功能专为backup programs而设计,无论权限如何,都需要能够读取磁盘上的所有内容。

这不是安全漏洞,因为默认情况下,只有管理员才能使用此工作所需的权限SeBackupPrivilege。管理员,实际上任何对机器具有物理访问权限的人,总是能够控制和读取每个文件 - 除非它是加密的。

关于在备份模式下可以使用哪些功能来访问文件:至少有BackupRead可供阅读。 FindFirstFile / FindNextFile可以轻松实现枚举。当然,这需要真正的Windows API,而不是瘫痪的.NET文件系统功能。