https://static.jiayezz.com/55/397fdb2377f4db7dc02275ad0c32e9

微软公司在Windows 8.1 的Update 3版本以及Windows 10中引入了控制流保护(CFG)机制,这种机制也是微软公司为了防御内存崩溃攻击所开发出的最新的缓解方案。它是一种编译器和操作系统相结合的防护手段,目的在于防止不可信的间接调用。

然而,随着现在安全防护产品的普及,研究人员和黑客们也在一直努力尝试去寻找新型的攻击方法和绕过方法。

当然了,控制流保护机制也难逃厄运。

上周五,Bromium公司的安全研究人员Jared Demott在路易斯维尔的DerbyCon大会上发表了一次关于CFG绕过的演讲。Demott告诉Threatpost称,我们Bromium公司已经在黑帽黑客大会开始之前将具体的绕过技术细节报告给了微软公司,但微软公司却决定不去修复这个问题,而且他们还认为这个问题还不足以让他们颁发漏洞奖励金

目前,微软公司仍然拒绝对此事件进行评论。Demott表示,微软公司告诉Bromium公司称,这种绕过技术并不能影响所有的操作系统,而且这种攻击方式的难度也非常的大。

DeMott说到:“微软公司认为,这个问题只会影响运行在64位操作系统中的32位应用程序,而且这个问题并不会影响所有的操作系统和设备。而我对他们这种态度的回应是,在64位Windows操作系统的默认情况下,系统运行的是32位的IE浏览器,所以这个问题完全会影响到系统的浏览器。”

DeMott还表示,他的这种绕过技术还得益于微软公司的一个错误选择,即没有在控制流保护中加入控制流完整性(CFI)机制。

DeMott说到:“如果加入了控制流完整性机制,那么它将会在一个函数指针被调用之前以及系统接收到一个返回地址的时候进行一次额外的安全检测,这就可以保证程序返回给系统的地址都是有效的。但是微软公司并不觉得这一机制的引入是必要的;控制流保护机制只会保护函数指针,而不会检测返回地址。”

控制流保护是一种Visual Studio自带的保护技术,而微软公司也将这一技术引入了新版的Edge浏览器(微软公司在今年夏天的早些时候发布了这款新型的浏览器)之中。在此之前,Core Security公司的安全研究人员就曾在三月份的时候发表过一篇关于CFG绕过的文章。

微软公司在一份报告中向公众解释了新款Edge浏览器的安全特性,该公司在报告中说到:“CFG防护方法需要在编译链接阶段来完成准备工作,同时需要操作系统的支持。CFG编译检测代码会根据指针地址来进行间接跳转,这也就使得攻击者控制系统程序的过程变得更加的困难。”

DeMott还说到:“这种绕过技术的关键在于,攻击者能否使返回地址崩溃,以及能否切段返回导向编程技术(ROP)的一系列处理事件,而这样的能力是很多内存崩溃攻击中的核心技术。”

DeMott表示:“如果你不保护系统的返回地址,那么相应的系统模块将会被破坏。当你调用一个函数指针的时候,系统期望的是接收到一个符合标准协议的指针地址,但程序返回的却是一个任意的指针地址。”

“如果你不保护系统的返回地址,也就意味着你将系统所有的操作行为暴露了出来。攻击者就有可能破坏系统堆栈中的数据,并且当系统调用指针地址的时候,返回的就不是一个有效的地址了,而这也就是攻击开始的前奏。”

这种绕过技术并非无关紧要的,而且还很有可能成为国家级的情报机构获取情报的重要跳板。这种攻击将会给予攻击者进入目标网络的切入点,而且也为攻击者的二次攻击提供了一个敞开的大门,从而进一步导致数据泄漏和权限提升。

DeMott说到:“内存崩溃攻击将会是一种崭新的猫捉老鼠的游戏。所有的这些研究成果,虽然听起来并不是什么好事,但它们却能够推动整个信息安全领域的发展,同时也将提高攻击者实施攻击的成本。微软公司选择不去修复这个问题,而且他们还认为他们已经将所有能做的都做了。除此之外,他们还认为这种问题所带来的安全风险是非常低的,因为这样的技术并不是所有人都能够得到的。”

文章原文链接:https://www.anquanke.com/post/id/82463