通过安全性提升 WebAssembly

Wasm 提供了平台独立性和易于集成性,这正是注重安全性的开发者和企业所寻求的。
56 位读者喜欢这篇文章。
Improve your DevOps security game with Ansible Vault

Opensource.com

WebAssembly(也称为 Wasm)正以迅猛之势席卷全球。它最初是作为浏览器的技术而出现,“正确地完成 JavaScript”,但现已发展成为远不止于此。它提供了一个平台独立的运行时,其二进制文件可以从多种不同的语言编译而来,并在任何具有运行时支持的平台上运行(无需任何进一步的更改或重新编译)。您可以在 Gordon Haff 和我撰写的一篇文章《为什么每个人都在谈论 WebAssembly》中找到更多关于 WebAssembly 以及它为何如此受欢迎的信息。在本文中,我将探讨安全运行 WebAssembly 的新一步。

在浏览器之外保护 WebAssembly 的安全

对于我们许多人来说,特别有趣的是 WebAssembly 系统接口(WASI)的兴起,这是一种在浏览器之外和经典服务器环境中运行 WebAssembly 的方式。

WebAssembly 和 WASI 已经有一些很棒的安全功能,但我参与了一个名为 Enarx 的项目(完全开源,当然!),我们正在寻求以这样一种方式改进工作负载的安全性,即使是管理员、内核或虚拟机监控程序也无法窥探其内部或影响其完整性。您将能够在您甚至不信任的主机上运行您的工作负载,除了 CPU 和相关的固件!

我们选择 WebAssembly 作为我们的运行时,因为它提供了我们重视的那种平台独立性和易于集成到现有开发环境中的特性,并且我们相信开发者和企业在设计和部署包含敏感材料(无论是数据还是算法)的工作负载时正在寻求这些特性。特别是 WASI,事实证明它非常适合我们为运行我们称之为“Keeps”的东西而定位的可信执行环境 (TEE):您的工作负载的运行时环境。

使用 WebAssembly 进行硬件抽象

然而,这是一项艰巨的工作,特别是当我们抽象出底层处理器架构(目前是两种:Intel 的 SGX 和 AMD 的 SEV)时,这样您(用户)就不需要担心它们——您需要做的就是编写和编译您的应用程序(当然是编译为 WebAssembly!),然后请求部署它。然后,Enarx 有很多移动部件,我们的一项关键任务是开始抽象出底层处理器架构的工作,以便我们可以准备顶层的运行时层。这是一张软件层及其如何位于硬件平台之上的总体图

让我们退后一步,简要检查一下这些层

  • 应用程序: 这是您使用您选择的任何语言(C、C++、Rust、Go、Python、Java、Haskell…)编写的内容,也是该项目的全部意义所在。
  • 语言绑定: 当您将应用程序编译为 WebAssembly 时,您使用的编译器会完成所有工作,以确保您的应用程序被正确编译为 WebAssembly,并拉取它需要的任何部分。
  • WASI(WebAssembly 系统接口): 这是允许您的 WebAssembly 应用程序在服务器类型环境中而不是在浏览器中执行的实现(这是 WebAssembly 的初始实现目标)。WASI 恰好非常适合 TEE 提供的功能。
  • WebAssembly: 这是 Wasm 的平台特定实现,为上面的层提供关键的运行时组件。
  • 基于进程的 Keep/基于 VM 的 Keep: 这是 Enarx 的许多实现正在发生的地方:为各种硬件选项(目前,我们专注于 Intel 的 SGX 和 AMD 的 SEV)提供一个基础层,WebAssembly 层可以位于其上并执行。

我们在 Red Hat 峰会上 宣布——并演示——的是,Enarx 现在有了代码的初始实现,允许我们抽象出基于进程和基于虚拟机类型的架构(SGX 和 SEV 的示例),因此我们可以做到这一点

这看起来似乎很简单,但隐藏在表面之下的内容比上图所示的要多。现实情况更像是这样

这提供了更多细节:在两种架构(左侧的 SGX,右侧的 SEV)上运行的应用程序是完全相同的 Linux 二进制文件(实际上,更具体地说,它是 ELF static-PIE 二进制文件 - 但这在这个详细程度上并不特别重要)。需要明确的是,这不仅是为不同平台编译的相同源代码,而且是具有完全相同哈希签名的完全相同的二进制文件。令人震惊的是,为了使其在两个平台上运行,工程团队必须编写两组非常底层的代码,包括相当多的汇编语言,以提供“管道”,使二进制文件能够在两个平台上运行。

一次一个系统调用地保护 WebAssembly 的安全

这是一件非常重要的事情,因为尽管我们只在每个平台上实现了一些系统调用——足以使我们的简单二进制文件运行并打印出一条消息,但我们现在有了一个我们知道可以构建的框架。接下来是什么?嗯,我们需要扩展该框架,以便我们可以构建 WebAssembly 层,这将允许 WebAssembly 应用程序在其之上运行

还有很长的路要走,但这个里程碑表明我们有一个可以改进和在其上构建的初始框架。

下一步是什么?

从我们的角度来看,这个里程碑令人兴奋之处在于,我们认为它使 Enarx 处于一个更多人可以加入和参与的阶段。仍然有很多底层工作要做,但将其分解并开始一些更高级别的工作也将更容易。Enarx 是完全开源的,我们所有的设计工作都是公开进行的,以及我们的每日站会。欢迎您浏览我们的文档、RFC(目前大多是草案),提出问题并加入我们的电话会议。您可以在 Enarx wiki 上找到更多信息,我们期待您的参与。

正如我在本文开头解释的那样,我们的目标是支持 WebAssembly 二进制文件,为您(希望部署应用程序的开发人员或企业)提供一个受硬件保护的运行时环境,您可以在其中执行您的工作负载,而无需信任运行它们的主机。如果您对此感兴趣,请联系我们;我们很乐意听到您的声音。

接下来阅读什么
User profile image.
自 1997 年左右以来,我一直身处开源领域,并且从那时起一直运行 (GNU) Linux 作为我在家和工作时的主要桌面:并非总是容易... 我是一名安全专家和架构师,Enarx 项目的联合创始人,目前是一家初创公司的 CEO

评论已关闭。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.