V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
lolcat
V2EX  ›  Linux

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

  •  
  •   lolcat · 2020-04-22 18:19:11 +08:00 · 1821 次点击
    这是一个创建于 1677 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 不支持粗体和斜体吗?

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:26 · PVG 03:26 · LAX 11:26 · JFK 14:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.