Mozilla组联盟推类容器WebAssembly纳米程序

Mozilla宣布与Fastly、英特尔和红帽共同组成Bytecode Alliance,要通过实例与提案新标准,来推动WebAssembly在浏览器之外的应用。Mozilla提到,现在的软件构建架构并非以安全为优先考量,而且恶意攻击活动越来越多,Bytecode Alliance提出了WebAssembly纳米程序(Nanoprocesses)解决方案,可以从程序根本架构,改进WebAssembly生态系统的安全发展。

目前许多应用程序都采用模块化构建方法,其中有80%的程序代码来自诸如npm、PyPI和crates.io等组件注册表,虽然这样的方式造就了兴盛的生态系统统,但因为架构根本上的原因,使得恶意攻击者有机可乘。

当用户信任应用程序,同时也信任了所有应用程序中使用的相依项目,但这些相依项目可能大有问题,可能包含有攻击者撰写的恶意程序代码,以及带有漏洞的程序代码,而用户却在不知情的状况下,信任这些程序代码。

面对这些安全威胁,开发者现在有几个手段可以应对。使用扫描仪来检测程序代码,以及相依项目中的问题,但有许多状况是自动化工具无法侦测的。以人工进行程序代码审查也是一种方法,但是每当相依项目更新时,开发者都需要重新审查程序代码,如果相依关系数中有数百个模块,则开发者需要花费大量的时间审查程序代码。

开发者也可以锁定模块,禁止模块自动更新,防止恶意代码无法被自动更新进应用程序项目,直到经过审核通过后才放行,但是当模块中存在漏洞时,也就无法获得即时修补,反将系统暴露在风险之中。当然也可以订阅监控服务,在发现相依项目有漏洞时,即时通知开发者,但这帮助也仅限于已经发现的目标漏洞,而且即便发现了漏洞,维护人员可能也无法即时的修补。

Mozilla表示,随着WebAssembly的发展,现在到了必须要来解决这些问题的时候,Mozilla提出一项解决方案,让程序执行在默认情况下就是安全的。但由于这个问题非常庞大,因此Mozilla组织联盟Bytecode Alliance来一同解决这个问题,以安全的基础让不受信任的程序代码,也能在云计算、PC机或是物联网设备上安全的运行,另外,也可以让开发人员安心地使用开源程序代码,不会使程序代码中的漏洞对用户产生威胁。

Mozilla为此提出了WebAssembly纳米程序的解决方案,WebAssembly可以提供轻量级的隔离,使系统可以安全地执行不受信任的程序代码,这个架构类似Unix的小型程序、容器或是微服务的概念,这种轻量级的隔离,不会使得程序沟通比常规函数调用慢,开发者可以使用纳米程序来打包单个WebAssembly模块实例,或是一群想要共享内存的模块实例。

由于WebAssembly纳米程序严格隔离了模块以及资源的取用,因此能够有效防止恶意程序代码或是漏洞威胁。WebAssembly模块默认就是在沙盒中执行,该模块默认无法访问API或是系统调用,需要提供明确地函数或是系统调用,模块才能使用,且纳米程序的内存模型隔离每个模块使用的内存,让恶意模块无法任意访问父模块的内存。另外,通过WebAssembly系统接口(WASI),让模块在彼此隔离的状况下,依然能赋给他们精细访问文件系统或是其他资源的权限。

WebAssembly纳米程序不只增加了程序的安全性,还可改进软件的兼容性,开发者可以将使用不同语言,或是同一语言不同版本撰写的服务组合在一起。Mozilla提到,WebAssembly纳米程序不仅只能用在相依项目中,Bytecode Alliance正在合作将这项技术应用在不同的案例上。