webassembly_提升WebAssembly的安全性

webassembly

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

在浏览器外部保护WebAssembly

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

Enarx (当然是完全开源!),我们正在寻求以这样的方式提高工作负载的安全性,即使得管理员,内核或管理程序也无法查看它们的内部或影响其完整性。 除了CPU和关联的固件之外,您还可以在不信任的主机上运行工作负载!

我们选择WebAssembly作为我们的运行时,因为它提供了与平台无关的功能,并且易于集成到我们重视的现有开发环境中,并且我们相信开发人员和企业在设计和部署包含敏感材料的工作负载时正在寻找它们,无论是数据或算法。 尤其是WASI,非常适合我们旨在运行所谓的“ Keeps”(即工作负荷的运行时环境)的可信执行环境(TEE)。

WebAssembly的硬件抽象

但是,这是一项艰巨的工作,尤其是在我们抽象出底层处理器体系结构(当前是两种:Intel的SGX和AMD的SEV)时,这样您,用户就不必担心它们—您所需的一切要做的就是编写和编译您的应用程序(当然是到WebAssembly!),然后请求将其部署。 因此,Enarx有很多活动的部分,对我们来说,关键任务之一就是开始工作,以抽象化底层处理器体系结构,以便我们可以在顶层准备运行时层。 这是软件层及其在硬件平台之上的定位的总体示意图:

How software layers sit on the hardware platforms

(Mike Bursell, CC BY-SA 4.0

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

  • 应用程序:这就是您编写的内容,无论选择哪种语言(C,C ++,Rust,Go,Python,Java,Haskell等),这都是项目的重点。
  • 语言绑定:将应用程序编译为WebAssembly时,使用的编译器会完成所有工作,以确保为WebAssembly正确编译应用程序并提取所需的任何部分。
  • WASI(WebAssembly系统接口):这是允许您的WebAssembly应用程序在服务器类型的上下文中而不是在浏览器(这是WebAssembly的最初实现目标)中执行的实现。 WASI恰好非常适合TEE提供的功能。
  • WebAssembly:这是Wasm的特定于平台的实现,它提供了其上方各层的关键运行时片段。
  • 基于流程的Keep /基于VM的Keep:这是现在Enarx大量实现的地方:为WebAssembly上的各种硬件选项(当前,我们专注于Intel的SGX和AMD的SEV)提供基础层层可以坐下来执行。

我们在三月底的Red Hat Summit上宣布并进行了演示,是因为Enarx现在具有代码的初始实现,使我们能够抽象出基于流程和基于虚拟机的架构类型(包括SGX和SEV的示例) ),因此我们可以执行以下操作:

Enarx abstracts away process-based and VM-based architecture

(Mike Bursell, CC BY-SA 4.0

这看似看似简单,但是幕后所发生的事情远比上图所揭示的要多。 现实更像这样:

Detail about Enarx abstracting away process-based and VM-based architecture

(Mike Bursell, CC BY-SA 4.0

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

一次确保WebAssembly一次系统调用的安全

这是非常重要的事情,因为尽管我们在每个平台上仅实现了少数系统调用,足以进行简单的二进制运行并打印出一条消息,但现在我们有了一个可以构建的框架。 接下来呢? 好吧,我们需要扩展该框架,以便我们可以构建WebAssembly层,从而允许WebAssembly应用程序在顶部运行:

Future Enarx Wasm architecture

(Mike Bursell, CC BY-SA 4.0

还有很长的路要走,但是这个里程碑表明我们拥有一个可以改进并可以建立的初始框架。

下一步是什么?

从我们的角度来看,这个里程碑令人兴奋的是,我们认为它使Enarx处于一个可以吸引更多人参与的阶段。 仍有许多底层工作要做,但拆分和开始一些更高层次的工作也将变得更加容易。 Enarx是完全开源的,我们会在日常工作中公开进行所有设计工作。 欢迎您浏览我们的文档RFC(目前主要是草稿),提出问题并加入我们的电话。 您可以在Enarx Wiki上找到更多负载信息,我们期待您参与该项目。

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

翻译自: https://opensource.com/article/20/5/wasm-security

webassembly

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值