斯坦福大学研究人员的, 美国加州大学 在圣地亚哥 y la 德州大学 在奥斯丁 他们发展了 他们命名为的一组工具 «RLBox», 该 可用作额外的绝缘等级 阻止功能库中的漏洞。
RLBox旨在解决第三方库的安全性问题 不受信任,不受开发人员控制,但是主项目可能会破坏这些漏洞。
Mozilla计划在用于Linux的Firefox 74版本中使用RLBox, 的汇编 Firefox 75中的macOS 隔离Graphite库的执行,它负责表示来源。
同时,RLBox并非特定于Firefox,可用于隔离任意项目中的任何库。
关于RLBox
运行机制 RLBox归结为将C / C ++代码从隔离的库编译为中间WebAssembly代码 低级,然后作为WebAssembly模块发布,其权限设置为仅绑定到此模块(例如,用于处理字符串的库无法打开套接字或网络文件)C / C ++代码转换使用wasi-sdk完成WebAssembly。
对于直接执行, 使用Lucet编译器将WebAssembly模块编译为机器代码 它在与应用程序其余内存分开的“纳米进程”中运行。 Lucet编译器基于与Firefox中用于运行WebAssembly的Cranelift JIT引擎相同的代码。
组装后的模块在单独的存储区中工作 并且它无权访问其余的地址空间。 在利用库中的漏洞的情况下,攻击者将受到限制,并且将无法访问主进程的内存区域或将控制权转移到沙箱外部。
为开发人员提供了高级API,使您可以在隔离模式下调用库函数。
MGI WebAssembly控制器几乎不需要其他资源 并且与它们的交互并不比调用普通函数慢(库函数以本机代码形式运行,并且仅在与沙盒环境交互的过程中复制和验证数据时才会发生重载) 。
隔离库的功能不能直接调用,要访问它们,您必须使用该层 invoke_sandbox_function()。
反过来,如果它们需要从库中调用外部函数,则必须使用register_callback方法显式定义这些函数(默认情况下,RLBox提供对标准库函数的访问)。
为了确保安全的内存操作, 隔离代码执行是不够的 而且 您需要提供对返回数据流的验证。
在隔离的环境中生成的值被标记为不可靠,受污染标签的限制,并且需要验证并复制到应用程序内存以进行``清理''。
如果不进行清理,尝试在需要常规数据的上下文中使用污染数据(反之亦然)会导致在编译阶段生成错误。
小型函数参数,返回值和结构是通过在进程内存和沙箱内存之间进行复制来传递的。 对于大型数据集,将在隔离的环境中分配内存,并将直接的“沙盒引用”指针返回到主进程。
RLBox开发在MIT许可下分发。 RLBox当前支持Linux和macOS 并有望在以后与Windows兼容。
如果您想了解有关Mozilla计划在Firefox中实现的这项新技术的更多信息,可以咨询其开发并测试API。 在下面的链接中。