标签: WebAssembly

字节码联盟成立,WebAssembly 生态将完善网络安全性

近日 Mozilla、Fastly、Intel 与 Red Hat 宣布成立联合组织 Bytecode Alliance(字节码联盟),该联盟旨在通过协作实施标准和提出新标准,以完善 WebAssembly 在浏览器之外的生态。 WebAssembly 也叫 Wasm,它是为基于栈的虚拟机设计的二进制指令格式,Wasm 作为可移植目标,用于编译高级语言(如 C/C++/Rust),从而可以在 Web 上部署客户端和服务器应用。 WebAssembly 描述了一种内存安全的沙箱执行环境,该环境甚至可以在现有 JavaScript 虚拟机内部实现。当嵌入到 Web 中时,WebAssembly 将强制执行浏览器的同源和权限安全策略。 目前 1.0 版本的 Wasm 已经支持 Chrome、Firefox、Safari 与 Edge 浏览器。 此次四家公司为什么结成 Bytecode Alliance 呢?Mozilla 官网博客上 Lin Clark 作了介绍。 Lin 表示,当前网络用户身处越来越大的风险中,目前大家在构建大规模的模块化应用,其中 80% 的代码库来自软件包注册中心,例如 npm、PyPI 与 crates.io。这样的方式当然使得生态繁荣,但是安全问题也在极速增加。 破坏这些安全的人利用的正是用户的信任,当用户使用应用时,他们并不清楚背后这些软件依赖关系,它们之中有没有恶意代码用户根本不知道,也无法明确是否可信任。 所以联盟想通过 WebAssembly 技术来推动这一个领域的安全性。Bytecode Alliance 将建立起可靠安全的基础,无论在云中、本地桌面,还是小型 IoT 设备上,都可以安全地使用不受信任的代码。开发人员可以以相同的方式使用开源代码,而不会给用户带来风险,而这些通用的可重用基础集可以单独使用,也可以嵌入其它库和应用中。   具体来说,所有这些因为依赖项而产生的安全问题都是因为不同软件/模块/文件有权限访问到其它内容,而基于 WebAssembly 可以提供某种隔离,这样就可以安全地运行不受信任的代码。 可以设计一个类似于 Unix 的小型进程或容器和微服务的架构,但是这种隔离十分轻量,它们之间的通信也不会比常规函数调用慢很多。 使用这样的模式,可以封装单个 WebAssembly 模块实例,或者封装一小部分想要在它们之间共享内存之类的模块实例。同时也不必放弃强大的编程语言特性,例如函数签名和静态类型检查。 Lin 介绍了目前 WebAssembly 的一些技术方案,包括几个要点: 每个 WebAssembly 模块默认都被沙箱化,默认情况下,模块无权访问 API 和系统调用。 内存模型,与直接编译为 x86 之类的普通二进制文件不同,WebAssembly 模块在其进程中无法访问所有内存,而是只能访问已分配给它的内存块。 接口类型,模块可以使用更复杂的值进行通信,比如 strings、sequences、records、variants,以及它们的嵌套组合。这使得两个模块可以轻松地交换数据,并且这种方式安全且快速。 具有权限概念的 API 和系统调用,以便它们可以为不同的模块赋予对不同资源的不同权限,也就是 WASI,WebAssembly 系统接口。它提供了一种方法,可以将不同的模块彼此隔离,并赋予它们对文件系统特定部分和其它资源的细粒度权限,以及对不同系统调用的细粒度权限。 这些是目前已经存在于 WebAssembly 技术中的技术,但目前还没有办法将这些安全控制向下传递给依赖树,这需要一种让父模块有赋予其依赖关系同样的安全控制的方法。 这也就是 Bytecode Alliance 目前在进行的工作,计划采用各个模块虚拟化的细粒度形式,研究人员已经在研究环境中验证了这一想法,目前正在努力将其引入 WebAssembly。 详细技术细节查看原博客: https://hacks.mozilla.org/2019/11/announcing-the-bytecode-alliance     (稿源:开源中国,封面源自网络。)

WebAssembly 新标准可能导致幽灵熔断修复程序无效

据 Forcepoint 的安全研究员 John Bergbom 称,即将增加的 WebAssembly 标准可能会使浏览器级别的一些针对 Meltdown 和 Specter 的修复程序无用。 WebAssembly(WA 或 WASM)目前支持所有主流浏览器,如 Chrome,Edge,Firefox 和 Safari。 该技术是一种二进制语言,浏览器将转换成机器码并直接在 CPU 上运行。浏览器制造商创建 WebAssembly 以提高 JavaScript 代码的交付速度和性能,他们还为开发人员创建了一种移植方法,可将来自其他高级语言( 如C,C++ 和其他)的代码移植到 WASM ,然后在浏览器中运行它。 总而言之,WebAssembly 标准在网络开发社区中被视为成功的标准,并且一直在为其提供赞誉。 但是像所有的技术一样,它也带来了一些无法预料的小麻烦和滥用案例。 对于初学者来说,浏览器内的加密货币矿工(cryptojacking 脚本)的兴起可以追溯到主要浏览器中添加 WebAssembly,因为所有浏览器中的矿工都运行在 WebAssembly 之上,而不是纯粹的 JavaScript。 现在,Bergbom 认为,WebAssembly 还会给 Web 用户带来另一个小麻烦: 一旦 WA 获得对共享内存线程的支持(这已经在 WA 路线图上),可以创建非常准确的[JavaScript]定时器,这可能会导致浏览器缓解某些 CPU 端通道攻击失效。 在这份声明中,Bergbom 更准确地提到了“定时攻击”,这是一类旁路攻击。定时攻击是一类密码攻击,第三方观察者可以通过记录和分析执行加密算法所花费的时间来推断加密数据的内容。 最近披露的 Meltdown 和 Spectre CPU 漏洞以及它们的许多变化都是其核心的定时攻击。他们依赖攻击者测量精确时间间隔的能力,这是执行侧向通道攻击所需的参数,并从加密的数据块中恢复足够的信息以确定其余部分。   稿源:开源中国,封面源自网络;