中文

Gobi:以 WebAssembly 作为库沙箱化的实用路径

密码学与安全 2019-12-06 v1

摘要

基于软件的故障隔离(SFI)是一种强有力的手段,用于降低 Firefox 和 Apache 等大型 C/C++ 应用程序中安全漏洞的影响。遗憾的是,实用的 SFI 工具尚未广泛可用。开发 SFI 工具链是一项重大的工程挑战。仅近年来浏览器厂商才投入构建生产级 SFI 工具(如 Native Client (NaCl))以沙箱化代码。此外,若无持续支持,这些工具便不可行,例如 NaCl 已被弃用,使依赖它的项目成为孤儿。WebAssembly (Wasm) 提供了一个有前景的解决方案——它可支持高性能沙箱化,且已被所有主流浏览器厂商采纳——因而似乎拥有可行的未来。然而,Wasm 目前仅提供针对移动代码的沙箱化方案。为原生应用(如 C/C++ 库)提供 SFI 还需额外步骤。为调和浏览器上 Wasm 与原生平台的不同世界,我们提出 Gobi。Gobi 是一套编译器修改与运行时支持系统,可用 Wasm 沙箱化普通 C/C++ 库——使其能被编译并链接进原生应用。Gobi 已在 libjpeg、libpng 和 zlib 上测试。基于开发 Gobi 的经验,我们以呼吁作结:呼吁 Wasm 社区与 SFI 研究社区将基于 Wasm 的模块沙箱化作为一等用例,并阐述这将如何显著惠及两个社区。补记:本短文最初写于 2019 年 1 月。此后,随着 Wasm 社区解决了文中提出的若干问题,Gobi 的实现与设计已大幅演进。然而若干挑战依然存在。因此我们基本保留原文,仅在最后一节简要更新截至 2019 年 11 月的 Wasm 工具链现状。

关键词

引用

@article{arxiv.1912.02285,
  title  = {Gobi: WebAssembly as a Practical Path to Library Sandboxing},
  author = {Shravan Narayan and Tal Garfinkel and Sorin Lerner and Hovav Shacham and Deian Stefan},
  journal= {arXiv preprint arXiv:1912.02285},
  year   = {2019}
}