为什么所有可全球写入的目录都应归特权组所有?

为什么所有可全球写入的目录都应归特权组所有?

我正在阅读为美国国防部开发的 Ubuntu 安全指南,这里。为 16.04 编写,但我认为这一特定项目没有太大变化。指南说,

组 ID(Vulid):V-75583

团体名称:SRG-OS-000480-GPOS-00227

规则 ID:SV-90263r2_规则

严重性:二级

规则版本(STIG-ID):UBTU-16-010840

规则标题:所有可全球写入的目录必须由 root、sys、bin 或应用程序组拥有。

漏洞讨论:如果一个全球可写的目录设置了粘滞位,并且不由特权组标识符 (GID) 组拥有,则未经授权的用户可能能够修改其他人创建的文件。

我不明白这里的逻辑。目录上的粘性位可防止文件被删除,而不是修改。我唯一的猜测是他们谈论的不是修改文件,而是读取文件、删除然后重新创建它。这种方案只有在文件首先是全世界可读的情况下才有效,如果它是敏感文件,它就不应该是全世界可读的。

总的来说,我很困惑。这条规则还有意义吗?

答案1

我唯一的猜测是,他们谈论的不是修改文件而是读取文件、删除然后重新创建文件。

是的,听起来他们说的就是这个。文件是否可读并不重要。删除文件并重新创建文件,并在其中添加任何内容,实际上与修改文件是一样的。当然,如果你想吹毛求疵,你可以争辩说它不是同一个文件,因为它可能有不同的 inode 或占用磁盘上的不同块,但这对安全性来说并不重要。无论哪种方式,它都具有相同的文件名和不同的内容,而这些内容与拥有它的用户所期望的不一样。这是一个安全风险。

例如,假设此目录是一个临时目录,任何正在运行的用户应用程序都可以在其中写入或读回自己的临时文件。只要没有人可以修改彼此的文件,这种方法就没问题。但一旦这种情况成为可能……无论它们是否可读……都会使这些应用程序受到各种攻击。如果攻击者了解应用程序的工作原理以及它希望从该临时文件中读取什么,那么他们可以在使用该应用程序的用户不知情的情况下替换该文件。在许多情况下,这允许他们控制应用程序的行为,使其做一些意想不到的事情,例如将使用它的用户发送到钓鱼网站而不是真实网站,甚至向其他人发送虚假电子邮件等。

即使文件不可读,这也是一个漏洞。但也有合法的情况,应用程序可能想要写出一个全世界都可以读取但只有创建者可以修改的文件。例如:一个公钥,用于向其他人识别他们,或允许其他应用程序向他们发送安全信息。

相关内容