本文共 2229 字,大约阅读时间需要 7 分钟。
webassembly
WebAssembly(也称为 )席卷全球。 它最初是作为浏览器技术“正确地执行JavaScript”开始的,但现在已经发展了很多。 它提供了一个独立于平台的运行时,其二进制文件可以从许多不同的语言进行编译,并且可以在运行时支持的任何平台上运行(无需任何进一步的更改或重新编译)。 在我和Gordon Haff撰写的文章的文章中,您可以找到有关WebAssembly的更多信息,以及为什么它如此受欢迎。 在本文中,我将探索安全运行WebAssembly的新步骤。
对我们许多人来说,特别有趣的是WebAssembly系统接口( )的兴起,这是一种在浏览器外部和经典服务器环境中运行WebAssembly的方式。
(当然是完全开源!),我们正在寻求以这样的方式提高工作负载的安全性,即使得管理员,内核或管理程序也无法查看它们的内部或影响其完整性。 除了CPU和关联的固件之外,您还可以在不信任的主机上运行工作负载!我们选择WebAssembly作为我们的运行时,因为它提供了与平台无关的功能,并且易于集成到我们重视的现有开发环境中,并且我们相信开发人员和企业在设计和部署包含敏感材料的工作负载时正在寻找它们,无论是数据或算法。 尤其是WASI,非常适合我们旨在运行所谓的“ Keeps”(即工作负荷的运行时环境)的可信执行环境(TEE)。
但是,这是一项艰巨的工作,尤其是在我们抽象出底层处理器体系结构(当前是两种:Intel的SGX和AMD的SEV)时,这样您,用户就不必担心它们—您所需的一切要做的就是编写和编译您的应用程序(当然是到WebAssembly!),然后请求将其部署。 因此,Enarx有很多活动的部分,对我们来说,关键任务之一就是开始工作,以抽象化底层处理器体系结构,以便我们可以在顶层准备运行时层。 这是软件层及其在硬件平台之上的定位的总体示意图:
让我们退后一步,简要检查一下这些层:
我们在三月底的Red Hat Summit上并进行了演示,是因为Enarx现在具有代码的初始实现,使我们能够抽象出基于流程和基于虚拟机的架构类型(包括SGX和SEV的示例) ),因此我们可以执行以下操作:
这看似看似简单,但是幕后所发生的事情远比上图所揭示的要多。 现实更像这样:
这提供了更多细节:在两种体系结构上运行的应用程序(左侧为SGX,右侧为SEV)是相同的Linux二进制文件(实际上,具体来说,它是ELF静态PIE二进制文件-但这并不是特别重要)在此详细程度)。 需要明确的是,这不仅是为不同平台编译的相同源代码,而且是具有完全相同的哈希签名的完全相同的二进制文件。 令人惊讶的是,为了使其能够在两个平台上运行,工程团队不得不编写两组严重的底层代码,包括多于一种的汇编语言,以提供“连接”以使二进制文件能够同时运行。
这是非常重要的事情,因为尽管我们在每个平台上仅实现了少数系统调用,足以进行简单的二进制运行并打印出一条消息,但现在我们有了一个可以构建的框架。 接下来呢? 好吧,我们需要扩展该框架,以便我们可以构建WebAssembly层,从而允许WebAssembly应用程序在顶部运行:
还有很长的路要走,但是这个里程碑表明我们拥有一个可以改进并可以建立的初始框架。
从我们的角度来看,这个里程碑令人兴奋的是,我们认为它使Enarx处于一个可以吸引更多人参与的阶段。 仍有许多底层工作要做,但拆分和开始一些更高层次的工作也将变得更加容易。 Enarx是完全开源的,我们会在日常工作中公开进行所有设计工作。 欢迎您浏览我们的文档RFC(目前主要是草稿),提出问题并加入我们的电话。 您可以在上找到更多负载信息,我们期待您参与该项目。
正如我在本文开头所解释的那样,目标是支持WebAssembly二进制文件,从而为您(想要部署应用程序的开发人员或企业)提供一个受硬件保护的运行时环境,您可以在其中执行工作负载而不必信任主机。他们正在运行。 如果您对此感兴趣,请 ; 我们很乐意听取您的意见。
翻译自:
webassembly
转载地址:http://npdzd.baihongyu.com/