Mozilla 开始实施 RLBox 库隔离技术

来自斯坦福大学、加州大学圣地亚哥分校和德克萨斯大学奥斯汀分校的研究人员 已经发展 工具 RL盒子,它可以用作额外的隔离层来阻止函数库中的漏洞。 RLBox旨在解决不受信任的第三方库的安全问题,这些第三方库不受开发人员控制,但其漏洞可能会危及主项目。

Mozilla公司 计划 在 Firefox 74 的 Linux 版本和 Firefox 75 的 macOS 版本中使用 RLBox 来隔离库执行 石墨,负责渲染字体。 然而,RLBox 并不是 Firefox 特有的,可以用来隔离任意项目中的任何库。 发展 RL盒子 传播 根据麻省理工学院的许可。 RLBox 目前支持 Linux 和 macOS 平台,预计稍后支持 Windows。

Механизм RLBox 的工作归结为将独立库的 C/C++ 代码编译为低级中间 WebAssembly 代码,然后将其设计为 WebAssembly 模块,其权限仅与该模块相关(例如,一个库)用于处理字符串将无法打开网络套接字或文件)。 将 C/C++ 代码转换为 WebAssembly 是使用 wasi-sdk.

为了直接执行,WebAssembly 模块使用编译器编译为机器代码 卢塞特 并在与应用程序内存的其余部分隔离的单独“纳米进程”中运行。 Lucet编译器基于与JIT引擎相同的代码 吊车,在 Firefox 中用于执行 WebAssembly。

组装后的模块在单独的内存区域中运行,并且无法访问其余的地址空间。 如果利用库中的漏洞,攻击者将受到限制,无法访问主进程的内存区域或将控制权转移到隔离环境之外。

Mozilla 开始实施 RLBox 库隔离技术

为开发人员提供高级信息 API,它允许您在隔离模式下调用库函数。 WebAssembly 处理程序几乎不需要额外的资源,与它们的交互并不比调用普通函数慢多少(库函数以本机代码的形式执行,只有在与隔离环境交互期间复制和检查数据时才会产生开销成本)。 孤立的库函数不能直接调用,必须使用
层invoke_sandbox_function()。

反过来,如果需要从库中调用外部函数,则必须使用 register_callback 方法显式定义这些函数(默认情况下,RLBox 提供对函数的访问) 标准库)。 为了保证内存安全,代码执行隔离是不够的,还需要检查返回的数据流。

在隔离环境中生成的值被标记为不可信并限制使用 污点 为了“清洁”,他们需要 验证 并复制到应用程序内存。
如果不进行清理,尝试在需要常规数据的上下文中使用受污染的数据(反之亦然)会导致在编译时生成错误。 小函数参数、返回值和结构通过进程内存和沙箱内存之间的复制来传递。 对于大型数据集,内存在隔离环境中分配,并将直接沙箱引用指针返回到主进程。

来源: opennet.ru

添加评论