apue3.3 节,怎样理解"openat 函数可以避免 TOCTTOU"?

2020-04-22 18:19:11 +08:00
 lolcat

openat 函数原型:

int openat(int dirfd, const char *pathname, int flags);

查了一些关于 TOCTTOU 的资料

这篇博客说的很详细了---关于 TOCTTOU 攻击的简介,摘抄其中一段关于 openat 可以避免 TOCCTOU 的内容:

现在考虑这样一种攻击,“setuid 受害者”进程会在 open() 中使用了相对路径 ./foo.txt 打开一个文件,并随后进行操作。** 攻击者可以将“受害者”进程的工作目录修改指向为敏感目录,从而修改不同文件。 **但如果我们能够保证有一个确定合法的文件夹句柄(文件描述符),然后使用 openat() 访问相对的文件,那么即使攻击者修改了“那个”目录,我们在进程中依然可以确保访问文件夹 /文件是合法的。

我不懂的是

foo.txt 文件已经打开了,这个文件的句柄就不会改变了,就算攻击者将这个程序的工作目录修改指向为其他目录,再对这个句柄操作,操作的还是 foo.txt 这个文件啊,怎么就可以修改不同文件了?

apue 中 TOCTTOU 的介绍:

OCTTOU 错误的基本思想是:如果有两个基于文件的函数调用, 其中第二个调用依赖于第一个调用的结果,那么程序是脆弱的.因为两 个调用并不是原子操作,在两个函数调用之间文件可能改变了,这样也 就造成了第一个调用的结果就不再有效,使得程序最终的结果是错误 的。文件系统命名空间中的 TOCTTOU 错误通常处理的就是那些颠覆文件系统权限的小把戏,这些小把戏通过骗取特权程序降低特权文件的权限控制或者让特权文件打开一个安全漏洞等方式进行。Wei 和 Pu[2005]在 UNIX 文件系统接口中讨论了 TOCTTOU 的缺陷。

另外问个问题,v2ex 的 markdown 不支持粗体和斜体吗?

1822 次点击
所在节点    Linux
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665077

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX