Firefox采用新的沙盒技术,可安全地执行第三方函数库

Firefox开始采用了一种称为RLBox的方法,来增加Firefox的安全性。RLBox是一种新的沙盒技术,可有效率地转换现有Firefox组件,使其在WebAssembly沙盒中执行,目前Mozilla已经将这项技术集成到Firefox程序代码库中,会先用于Graphite字体塑形函数库中。

Mozilla提到,像Firefox这种复杂且经高度优化的系统,维持内存安全是重要且困难的工作,由于Firefox主要是用C和C++开发而成,但这两个语言恶名昭彰地难以安全使用,任何错误都可能导致程序被入侵。为此Mozilla目前采取了两种方法,来提高Firefox的安全性,一种是将程序代码打散进多个沙盒程序中,并降低其权限,另外一种则是以更安全的程序语言Rust重写程序代码。

不过这两种方法都有其限制,程序级的沙盒会消耗大量的系统资源,必需要谨慎使用,而数百万行的C++程序代码要以Rust重写,则是一个大工程。因此Mozilla引入了第三种的方法RLBox沙盒技术,来提升Firefox安全性。

RLBox能以最大程度降低Firefox要以安全的方式,执行不受信任程序代码的负担,其在C++类型系统中,强迫采用静态信息流和轻量级动态检查。RLBox通过软件的故障隔离与多核程序隔离,来完成有效的沙盒化。研究人员提到,RLBox付出的性能成本适度且短暂,对页面的延迟影响很小,而现在RLBox已经被集成到Firefox中,对Graphite字体塑形函数库进行沙盒处理。

Firefox利用Graphite来正确呈现部分复杂的字体,而之所以先对Graphite使用RLBox,Mozilla提到,是因为Graphite太小以致于无法放在自己的程序中处理,但因为其存在内存安全上的隐忧,即便是在网站隔离程序架构,也无法阻止恶意人士通过有漏洞的网页,让浏览器加载恶意字体。不过,重写和维护这部分的程序代码,也不是Mozilla目前开发资源能够应对的。

除了字体塑形函数库,RLBox也可以用在其他函数库上,即便是性能吃重的运算任务也没问题,像是图像解码函数库、视频解码函数库、音频解码函数库,或是zlib解压缩函数库等。

有了WebAssembly沙盒核心基础设施,Mozilla接下来便会扩大其在Firefox中的应用,除了在更多平台上支持外,也会应用在更多的组件上,目前的重点摆在和Firefox捆绑一起的第三方函数库上,未来也会扩大应用到第一方程式代码。这项隔离技术将会先在Linux的Firefox 74,和MacOS的Firefox 75版本上提供,不久之后也会部署到Windows版本上。