Google通过新的缓解技术使Windows版Chrome能够更灵活地抵抗漏洞利用
从版本90开始,Chrome for Windows通过采用硬件强制的堆栈保护来提高抵御漏洞利用的能力。
借助Windows 10 20H1或更高版本中可用的缓解技术,在具有控制流实施技术(CET)的处理器上,处理器可以维护有效返回地址的影子堆栈,这使不良行为者更难编写漏洞利用程序。
与现有的保护措施一起,堆栈保护应减轻各种利用技术的影响,但如果与将自身加载到Chrome中的软件不兼容,则可能会影响稳定性。
尽管Data Execution Prevention长期以来一直阻止使堆栈或堆成为可执行文件,但使用面向返回的编程(ROP)可使攻击者指向他们可以滥用的另一段代码。
Chrome的多进程体系结构降低了渲染器中漏洞的严重性,但是Windows在进程中映射库的方式使攻击者可以在Chrome的二进制库和已加载的库中搜索ROP小工具。
使用堆栈保护时,CPU只能在现有堆栈旁边维护一个影子堆栈,该影子堆栈仅存储返回地址,而程序代码无法直接对其进行操作。返回地址被压入两个堆栈,并且RET(返回)指令验证其从正常堆栈中获取的返回地址与影子堆栈中存储的地址相同。
仅当两个返回地址匹配时,程序才能继续工作,否则会引发异常并被操作系统拦截,该操作系统可以选择更改阴影区域并允许程序运行。但是,通常情况下,异常应导致程序立即终止。
因此,即使攻击者设法成功跳入ROP小工具,当尝试返回其下一个小工具时,它们也会被阻止。
Google解释说某些软件可能与该机制不兼容,并且Stack Protection有一些限制,例如Chrome暂时不支持控制流实施的所有方向。
堆栈保护可强制调用图的后缘,但不会限制前缘。Google仍然可以在现有代码之间进行间接跳转,因为只有在遇到返回指令时才会验证堆栈保护,而未验证调用目标,” Google解释说。
此外,在某些情况下,有可能自身绕过堆栈保护,例如当攻击者替换包含函数指针的对象时,就会欺骗程序来调用该函数。但是,大多数功能对攻击者没有用。
该保护措施无法阻止实际的漏洞,尤其是当它们可能允许任意写入而被滥用以运行任意代码时,尤其如此。