【问题标题】:Why is it common for binary (ELF) SUID executables to also allow READ access?为什么二进制 (ELF) SUID 可执行文件也允许 READ 访问很常见?
【发布时间】:2015-05-18 22:54:47
【问题描述】:

作为最近的“rowhammer”漏洞利用概念证明的一部分,使用了 read-suid-exec 工具“ping”来创建更精细的概念证明。

所以我的问题 - 为什么各种发行版都准备 suid(尤其是 root)可执行文件作为可读和可执行文件?

我的推测包括:

  1. 方便与“ldd”一起使用
  2. 允许tripwire 或软件包更新检查软件以非root 身份运行
  3. 没关系,因为大多数发行版都是公开的,任何人都可以获取 ELF 二进制文件(安装到 VM 中等)
  4. 可以使用 selinux 使这无关紧要
  5. 懒惰的开发者

在 (3) 中,隐藏公共发行版的二进制文件仅提供了一个安全保障 - 而 (5) 几乎是在骂人。

【问题讨论】:

  • (3) 已经足够回答了,不是吗?下载包本身,运行与rpm2cpio 等效的相应程序,您就拥有了二进制文件——不需要VM 或root 权限。
  • 顺便说一句,security.stackexchange.com 可能是这个问题的更好的地方。
  • 感谢您推荐 SECURITY.STACKEXCHANGE.COM。鉴于安全性必须分层,拥有一个无花果可能是值得的(因为访问模式实施起来很便宜)——如果只是因为它需要任何恶意软件来编码更多信息。

标签: unix executable binaryfiles suid readable


【解决方案1】:

这是“没关系”(3)和“懒惰的开发者”(5)的混合体。

最好关闭不必要的权限,例如对 SUID 可执行文件的读取权限,因为它通常可以减少攻击面,但在许多情况下并没有太大区别。

正如您在 (3) 中所说,隐藏程序数据并不能阻止攻击者搜索 ROP 小工具等,因为这些数据通常在二进制文件来自的公共发行版中可见。

请注意,这不适用于Project Zero blog post 中描述的基于 rowhammer 的漏洞利用。为此,该漏洞利用并不想读取 SUID 可执行文件中的数据,它只想使用/proc/self/pagemap 了解哪些物理地址包含可执行文件的数据。

然而,正如博文所说,如果攻击者无法 open() SUID 可执行文件,它可以只 open() 它使用的库,例如 /lib64/ld-linux-x86-64.so.2,然后将漏洞应用程序应用于该库。所以限制对 SUID 可执行文件的读取权限并没有帮助。我们无法删除这些库的读取权限,否则它们将无法使用。

【讨论】:

    【解决方案2】:

    不是一个完整的答案,但我发现如果 setuid 根程序存储在 NFS 服务器上,我需要使它们可读。

    让我再说一遍:在本地文件系统上 chmod 4711 对于 setuid root 程序来说已经足够了,但在 NFS 上,所需的模式是 4755

    【讨论】:

    • 你的例子也提出了为什么“4711”而不是“4111”的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2011-09-27
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    相关资源
    最近更新 更多