博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webassembly_提升WebAssembly的安全性
阅读量:2523 次
发布时间:2019-05-11

本文共 2229 字,大约阅读时间需要 7 分钟。

webassembly

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

在浏览器外部保护WebAssembly

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

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

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

WebAssembly的硬件抽象

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

How software layers sit on the hardware platforms

(Mike Bursell, )

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

  • 应用程序:这就是您编写的内容,无论选择哪种语言(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, )

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

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

(Mike Bursell, )

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

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

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

Future Enarx Wasm architecture

(Mike Bursell, )

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

下一步是什么?

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

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

翻译自:

webassembly

转载地址:http://npdzd.baihongyu.com/

你可能感兴趣的文章
《每日一博》——学习php
查看>>
custom.js
查看>>
Centos 7 中 QT出现QSqlDatabase: MYSQL driver not loaded
查看>>
在 IBM RAD 平台上基于 JAX-WS 开发 Web Services服务器端,客户端
查看>>
利用forwardInvocation实现消息重定向
查看>>
自定义维度与指标
查看>>
跟我一起玩Win32开发(13):握手对话框
查看>>
C#调用C/C++动态库 封送结构体,结构体数组
查看>>
ASP.NET MVC WebAPI 从入门到精通 (二)– 客户端和WebService之间文件传输
查看>>
卸载LabVIEW及其模块的方法
查看>>
[C/C++] C++中new的语法规则
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_1_函数式编程思想概述...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_12_创建多线程程序的第二种方式_实现Runnable接口...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_2_冗余的Runnable代码...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_13_Thread和Runnable的区别...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_14_匿名内部类方式实现线程的创建...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_1_线程安全问题的概述...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_2_线程安全问题的代码实现...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_3_编程思想转换&体验Lambda的更优写法...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_4_Object类中wait带参方法和notifyAll方法...
查看>>