|全局可写的文件实际上是一个安全漏洞


|全局可写的文件实际上是一个安全漏洞

如果 , 我是说如果 , 每当有用户为一项新功能提出建议 , 但是这项新功能实际上是一个安全漏洞时 , 我就可以得到一枚金币的话 , 我估计会有很多金币 。
举个例子 , ”我希望一个文件是全局可写的 , 也就是说 , 任何用户都可以往里面写入数据 。 这压痕我的程序就可以把它当做一个通用数据库来使用了” 。
【|全局可写的文件实际上是一个安全漏洞】这实际上是一个安全漏洞 。 首先 , 我们假设一个用户以独占方式打开了这个文件 , 并永远不关闭它 , 这就相当于发起了一项拒绝服务攻击 。 另外 , 还有可能出现一种数据篡改攻击 , 具体就是 , 用户打开这个文件后 , 使用大量的无效数据覆盖整个文件 , 或者只是对文件进行细小的改动 。 导致的结果是 , 你的音乐索引中丢失所有小甜甜班兰妮的歌曲 。 (话又说回来 , 也许这是件好事 。 偷偷摸摸是编辑索引 , 这样当有人试图播放布兰妮斯皮尔斯的歌曲时 , 他们听到的是麦当娜的歌 。 )
关于这项设计 , 我的一位安全团队的同事指出来另外一个问题:磁盘配额 。 即使文件中的大部分条目属于其他人 , 创建该文件的人仍需为该文件所消耗的磁盘空间付费 。 如果你在安装程序中创建该文件 , 那么它很可能由管理员所拥有 。 管理员不受配额限制 , 这意味着每个人都可以免费将他们的数据加入文件中! (使用备用数据流 , 这样你就可以将数据存储在那里 , 而不会影响文件的普通用户 。 )如果文件在系统分区上(可能是这样) , 那么用户可以尝试填满所有可用磁盘空间并使系统崩溃 。
如果你有一个共享资源想共享给其他用户使用 , 一种方法就是使用服务 。 这样设计的好处是 , 用户不直接访问资源 , 而是通过服务接口来访问 。 该服务决定允许用户对资源做什么 。 也许一些用户只允许增加”播放次数”计数器 , 而其他用户则允许编辑歌曲名称 。 如果用户正在占用资源 , 服务器可能会在一段时间内拒绝来自该用户的连接 。
文件不会让你对它的访问控制实施精细化的控制 。 如果你授予用户对一个文件的写入权限 , 则该用户可以写入文件的任何部分 。 该用户可以以独占模式打开文件并防止其他任何人访问它 。 另外 , 用户还可以将无效数据写入到文件中 , 试图迷惑机器上的其他用户 。
换句话说 , 用户可以对系统进行更改 , 从而影响其他用户如何使用该系统 。 这种”影响其他用户”的能力是为管理员保留的 。 在一个优秀的操作系统里 , 一个没有特殊权限的用户应该只被允许”搞砸”自己的生活 , 他不应该被允许扰乱其他用户的生活 。
总结现实世界是一个有级别的世界 , 所以我们在虚拟的数字世界里 , 也需要设计一个层次化的系统 。
权限的设计不能太紧 , 但也不能太松 。
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《When people ask for security holes as features: World-writable files》