来自 Mozilla 的Lin Clark最近宣布创立字节码联盟(Bytecode Alliance)。字节码联盟是一个行业合作伙伴关系,旨在为 WebAssembly 生态系统提出和实现标准,以实现其在浏览器和其他环境中安全的发展。字节码联盟提出了微进程(nanoprocess),为运行第三方 Wasm 包提供了隔离和安全性。
为了进一步推动模块化 WebAssembly 生态系统,Mozilla、Fastly、英特尔和红帽公司携手成立了字节码联盟,为当前大量使用的第三方包可能存在的安全问题(例如恶意依赖、损坏的模块)提供补救措施。Clark 引述道,应用程序中大约有 80%的代码来自于包注册中心,例如npm、Pypy和crates.io。这些第三方包加速了应用程序的创建,但是也引入了安全问题。开发人员信任这些第三方包,为它们授予和应用程序相同的能力(capabilities),但是这些能力可能会被恶意包用于意想不到的目的。Clark 警告道:
作为一个社区,我们必须要作出选择。WebAssembly 生态系统可以提供一个解决方案,至少,我们应该选择一种默认情况下安全的方式进行设计。如果我们不这么做,WebAssembly 可能会让问题变得更糟糕。
随着 WebAssembly 生态系统的发展,我们需要解决这个问题。由于这个问题太大,难以单独解决,这就是字节码联盟成立的原因。
通过微进程提案,可以让包运行在独立环境中,只拥有预先定义的限定能力。字节码联盟试图通过这种方式,寻求让来自恶意软件包的安全漏洞失效。Clark 解释道:
总之,我们将建立牢固安全的基础设施,无论这些不信任的代码运行在何处,都能保其安全性。它们可能会运行在云端、任何人的本地电脑,甚至在小型 IoT 设备上。
通过这个提案,开发者仍然可以通过相同的方式使用开源代码,保持和现在一样的高效,同时不会带来风险。
微进程构建于 WebAssembly 和WASI已有或者已提出的面向安全的特性上(例如 WebAssembly 的沙箱和内存隔离,WASI 的基于能力安全模型),通过允许给第三方包传递细粒度能力实现。
WASI 应用程序安全性由能力(capabilities)提供,而非使用标识资源的可伪造引用(例如文件路径),但是没有指定资源的访问权限。在 WASI 模型下,代码可以只访问传递给它的目录。因此,运行时可以将文件描述付传递给应用程序上层代码使用,同时这个文件描述付会按照最小使用原则传播到系统的其他部分。
微进程在此基础上更进一步,它允许将一个微进程将自己接收到的能力(来自于运行时或者其父微进程)的子集传递给它依赖的微进程。Clark 在官宣博客中描绘了一张机制图:
感兴趣的读者可以去官宣博客了解关于 WebAssembly 微进程和其他额外预期优势的详细介绍。
字节码联盟已经在一系列现有项目进行合作,包括 WebAssembly 运行时(Wasmtime、Lucet,、WebAssembly Micro Runtime),运行时组件(Cranelift、WASI common)和语言工具(cargo-wasi、wat、wasmparser)。除此之外,字节码联盟还领导WASI标准和 Rust WebAssembly 工作组的工作。
字节码联盟有兴趣发展新成员并壮大联盟。感兴趣的团体可以给联盟发送电子邮件:hello@bytecodealliance.org。
原文链接:
https://www.infoq.com/news/2019/11/wasm-nanoprocesses-security/
评论 1 条评论