WebAssembly安全属性详解:沙盒与内存保护

发布于 6 小时前  1 次阅读


WebAssembly的安全模型有两个重要目标:(1)保护用户免受有缺陷或恶意模块的侵害;(2)在(1)的约束下,为开发人员提供有用的原语和缓解措施,以开发安全的应用程序。

用户安全

每个WebAssembly模块在隔离的沙盒环境中执行,与主机运行时分离。这意味:

  • 应用程序独立执行,无法逃脱沙盒
  • 应用程序通常以确定性方式执行

开发人员安全

WebAssembly的设计通过从执行语义中消除危险功能,同时保持与为C/C++编写的程序的兼容性,来促进安全程序。

控制流完整性

模块必须在加载时声明所有可访问函数及其关联类型。即使使用动态链接也是如此。这允许通过结构化控制流隐式执行控制流完整性(CFI)。

由于编译代码是不可变的且在运行时不可观察,WebAssembly程序受到保护,免受控制流劫持攻击。

间接函数调用

间接函数调用在运行时受类型签名检查;所选间接函数的类型签名必须与调用站点指定的类型签名匹配。

内存安全

与传统C/C++程序相比,这些语义消除了WebAssembly中的某些内存安全错误。

缓冲区溢出

当数据超过对象的边界并访问相邻内存区域时,无法影响存储在索引空间中的局部或全局变量,因为它们是固定大小的并按索引寻址。

指针安全

WebAssembly消除了指针语义用于函数调用和具有固定静态范围的变量,允许对任何索引空间中的无效索引的引用在加载时触发验证错误,或在运行时最坏情况下触发陷阱。

安全限制

虽然攻击者无法执行直接代码注入攻击,但有可能使用针对间接呼叫的代码重用攻击来劫持模块的控制流。然而,传统的返回导向编程(ROP)攻击在WebAssembly中是不可能的,因为控制流完整性确保呼叫目标是加载时声明的有效函数。

侧信道攻击

可能发生侧信道攻击,例如针对模块的计时攻击。未来可能会提供额外的保护,如代码多样化或内存随机化。

来源:WebAssembly.org | 编译整理:JSVMP


点击体验一键VMP加密 |下滑查看JSVMP相关文章