计划将质押隔离机制移植到Linux

最近 Cosmopolitan C 标准库的作者 Redbean 平台通过 宣布,为 Linux 实现了 promise() 隔离机制。

最初由 OpenBSD 项目开发 y 允许您有选择地禁止应用程序访问未使用的系统调用 (为应用形成一种系统调用白名单,禁止其他调用)。 与 Linux 上可用的系统调用访问控制机制(例如 seccomp)不同,质押机制从一开始就被设计为尽可能地对用户友好。

使用 systrace 机制在 OpenBSD 基础环境中隔离应用程序的失败举措表明,在单个系统调用级别的隔离过于复杂和耗时。

作为替代方案,提出了认捐,其中 允许创建隔离规则而无需详细介绍和操作准备好的访问类.

例如,提供的类有 stdio(输入/输出)、rpath(只读文件)、wpath(写入文件)、cpath(创建文件)、tmppath(处理临时文件)、inet(套接字网络)、unix(unix 套接字)、dns(DNS 解析)、getpw(对用户数据库的读取访问权限)、ioctl(ioctl 调用)、proc(进程控制)、exec(启动进程)和 id(权限控制)。

使用系统调用的规则 以注释的形式指定,其中包括允许的系统调用类列表 以及允许访问的文件路径数组。 编译并运行修改后的应用程序后,内核将接管监视是否符合指定规则的工作。

另外,FreeBSD 的质押实现正在开发中,其特点是能够在不更改代码的情况下隔离应用程序,而在 OpenBSD 中质押调用旨在与基础环境紧密集成并在代码中添加注释每一个。

当老板说我们应该使用像Linux这样的东西时,承诺就像我们都渴望的禁果。 为什么这很重要? 这是因为承诺()实际上使安全性可以理解。 Linux 从来没有真正拥有普通人可以理解的安全层。

Linux 承诺移植开发人员从 FreeBSD 中获得启发 他们没有更改代码,而是准备了一个来自承诺.com 的附加实用程序,允许您在不更改应用程序代码的情况下应用限制。 例如,要运行仅访问 stdio、rpath、inet 和 threadstdio 系统调用类的 curl 实用程序,只需运行“./pledge.com -p 'stdio rpath inet thread' curl http://example.com » .

该实用程序适用于自 RHEL6 以来的所有 Linux 发行版 并且不需要root访问权限。 此外,基于 cosmopolitan 库,提供了一个 API 用于管理 C 语言程序代码中的限制,除其他外,它允许创建 enclave 以选择性地限制与应用程序的某些功能相关的访问。

过去已经有一些开发人员尝试过这个。 我不会点名,因为这些项目中的大多数都没有完成。 说到 SECOMP,在线教程只解释了如何将系统调用列入白名单,因此大多数人在弄清楚如何过滤参数之前就失去了兴趣。 向前推进的项目也有一些疏忽,比如允许更改 setuid/setgid/sticky 位。 因此,不应使用任何当前的替代方案。 我认为这种努力使我们比以往任何时候都更接近拥有承诺()。

实现不需要内核更改:实用程序约束被转换为 SECCOMP BPF 规则并使用 Linux 的本机系统调用隔离机制进行处理。 例如,调用 promise("stdio rpath", 0) 将转换为 BPF 过滤器

最后,如果你有兴趣了解更多,可以咨询详情 在下面的链接中。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。