Google Project Zero团队上周发布一研究报告,指出微软于Windows 10 Creators Update中替Microsoft Edge所部署的“任意程序代码防护”(Arbitrary Code Guard, ACG)机制并不足以防范高明的黑客突破浏览器的沙箱,黑客得以通过攻击Edge中的JIT服务器而绕过各种安全机制。
当ACG被应用在Edge的内容程序(Content Process)时,便无法于程序中分配新的可执行内存或变更现有的可执行内存,让已取得浏览器内容程序某些能力的黑客更难展开程序攻击。 Edge中另有一个“代码完整性防护”( Code Integrity Guard,CIG)机制,规定所有进入内容程序的DLL文件都必须通过验证,以及Windows中用来限制应用程序所执行之程序代码来源的“内容流防卫”(Content Flow Guard,CFG)机制,它们共同保障了Edge的安全性。
另一方面,现代浏览器依赖了JavaScript的即时(Just-In-Time,JIT)编译引擎以达到更好的性能,然而,JIT中的程序代码编译却不兼容于ACG,因此,当一个定制化解决方案需要激活Edge中的ACG时,JIT引擎会自Edge内容程序中隔离,自成JIT程序(JIT Process)。
Project Zero团队在分析了Edge的安全机制之后指出,ACG最脆弱的部分在于JIT服务器的实现,当中含有许多问题,尽管这类的实现还在襁褓阶段,原本就可能出现问题,但更大的问题在于内容程序与JIT程序之间的安全界线并未被充分执行,JIT服务器在内存毁坏与逻辑问题上必须要加强。
此外,ACG的确能够避免执行内存的篡改或分配,但有鉴于ACG、CIG与CFG之间的相依性,再加上CFG的缺陷,光是ACG并无法充分防范高明黑客突破浏览器沙箱并执行其它攻击。
该团队已发布相关的检验工具与概念性验证程序,同时强调虽然该研究是针对Microsoft Edge,但相信其它企图部署程序外JIT的应用都会遇到类似的问题,至于微软也已修补了报告中所披露的部分漏洞。
今年2月Google即曾披露ACG的安全漏洞,该漏洞允许黑客绕过ACG,将未获签章的恶意程序借由Edge加载Windows。