~alip/syd (主分支): doc/toctou-or-gtfo.md - sourcehut git

这是一系列关于在 Linux 上用户空间沙箱状态的实验,主要涉及 Gentoo 的沙箱和 Exherbo 的 sydbox:

  • 版本信息:Gentoo 沙箱版本 3.2,Exherbo sydbox 版本 3.19.0。
  • PoC 1:chdir(2)指针修改

    • 攻击方式:通过在 chdir(2)系统调用上进行指针修改的时间检查到使用时间(TOCTOU)攻击,利用恶意线程反复覆盖 chdir(2)路径参数指针指向的内存区域,进入被拒绝的目标目录并尝试读取文件。
    • 实验结果:在 Gentoo 沙箱和 Exherbo sydbox 中,TOCTOU 攻击都能成功进入目标目录,但在 Exherbo sydbox 中最终读取文件时会出现“文件不存在”的错误,说明沙箱对文件访问进行了限制。
    • 应对措施:内核应提供安全的 API 用于 seccomp,如SECCOMP_CHDIR;可以通过终止进程、锁定 chdir(2)调用或使用挂载命名空间等方式进行缓解。
  • PoC 2:open(2) O_PATH 指针修改

    • 攻击方式:利用 open(2)系统调用的 O_PATH 标志进行指针修改的 TOCTOU 攻击,证明被沙箱隐藏的文件的存在。
    • 实验结果:在 Gentoo 沙箱和 Exherbo sydbox 中,TOCTOU 攻击都能成功证明文件的存在,但在 Exherbo sydbox 中默认会将 O_PATH 标志转换为 O_RDONLY 标志以避免 TOCTOU 向量,除非使用trace/allow_unsafe_open:1选项。
    • 应对措施:内核应提供安全的 API 用于 seccomp,如在SECCOMP_ADDFD的新文件描述符标志中传递 O_PATH 和 O_CLOEXEC 标志。
  • PoC 3:execve(2)指针修改

    • 攻击方式:通过在 execve(2)系统调用上进行指针修改的 TOCTOU 攻击,执行被沙箱拒绝的可执行文件。
    • 实验结果:在 Exherbo sydbox 中,使用trace/allow_unsafe_exec:1选项可以去除 ptrace 依赖,但会失去一些安全功能;默认情况下,sydbox 会应用有效的 TOCTOU 缓解措施,但仍存在一定的风险。
    • 应对措施:内核应提供安全的 API 用于 seccomp,如SECCOMP_EXEC
  • 结论:Gentoo 的沙箱主要用于检测包构建错误,防御能力有限;Exherbo 的 sydbox 试图作为安全边界,但仍易受 TOCTOU 攻击。需要 Linux 内核提供更安全的 API 来处理关键系统调用,同时结合其他安全措施来创建更安全的沙箱环境。
阅读 11
0 条评论