一切旧的都是新的:WebAssembly的二进制安全

2020-08-20 06:24:11

我们在USENIX断言黑人的生命很重要:阅读USENIX关于种族主义和黑人、非裔美国人和非洲侨民融入的声明。

WebAssembly是一个日益流行的编译目标,旨在通过严格分离代码和数据、强制类型并限制间接控制流,在浏览器和其他平台上安全可靠地运行代码。不过,内存不安全的源语言中的漏洞可能会转化为WebAssembly二进制文件中的漏洞。在本文中,我们将分析WebAssembly二进制文件中的漏洞可被利用的程度,以及这与本机代码相比有何不同。我们发现,许多经典的漏洞,由于常见的缓解措施,在本地二进制文件中不再可利用,在WebAssembly中完全暴露出来。此外,WebAssembly还支持独特的攻击,例如覆盖假定的常量数据或使用堆栈溢出操作堆。我们提出了一组攻击原语,使攻击者能够(I)写入任意内存,(Ii)覆盖敏感数据,(Iii)通过转移控制流或操纵主机环境来触发意外行为。我们提供了一组易受攻击的概念验证应用程序以及完整的端到端攻击,涵盖了三个WebAssembly平台。对实际二进制代码和编译到WebAssembly的SPEC CPU程序进行的经验风险评估表明,我们的攻击原语在实践中可能是可行的。总体而言,我们的发现显示WebAssembly中可能存在令人惊讶的二进制安全性不足。我们将讨论潜在的保护机制,以减轻由此产生的风险。

Usenix致力于开放获取在我们活动中展示的研究成果。一旦活动开始,所有人都可以免费获得论文和会议记录。活动结束后发布的任何视频、音频和/或幻灯片也是免费的,对所有人开放。支持USENIX和我们对开放获取的承诺。