随着每次新的安全机制的发布,研究人员和黑客都会想法设法地找到破解或者通过它的方式,此次CFG也不能例外。
微软在Win 8.1 Update 3以及Win 10中启用了一种抵御内存泄露攻击的新机制,即Control Flow Guard(CFG)——控制流防护。这项技术是为了弥补此前不完美的保护机制,例如地址空间布局随机化(ASLR)导致了堆喷射的发展,而数据执行保护(DEP)造成了漏洞利用代码中返回导向编程(ROP)技术的发展。
百科:控制流防护(CFG)
控制流防护(CFG)作为Win 8.1+的新安全保护机制,其实并不知名。它被用于阻止针对可执行文件间接调用的恶意利用。CFG保护十分高效,同时它是一种编译器和操作系统相结合的防护手段。
影响IE,微软却不修?
来自云安全公司Bromium的研究人员Jared DeMott周五将发表一个关于绕过CFG的演说,DeMott告诉记者,早在8月份的Blackhat举办之前,公司就将这个发现提交给了微软公司,但是微软决定不去修复这个问题,并认为这也不值得发放漏洞奖金。
微软拒绝对此进行评论。据DeMott介绍,微软认为这样的绕过并没有影响所有系统,并且是个很难被利用的攻击向量:
“微软说这仅仅影响到64位系统下的32位程序,因此并不影响整个系统。而我的回答则是,IE就是64位系统下的32位程序,如此一来便可以影响浏览器。”
这并不是微软首次公开表示保护机制被绕过不是漏洞,早在2010年Verizon Business发布了一份报告,详细列出了他们的发现“逃离微软IE保护模式”,IE7和IE8的保护模式都可以被绕过,攻击者能提高其用户权限。微软当即表示这份报告中发现的问题并不是一个漏洞,它只是绕过安全防护的一种方法。
研究人员:绕过保护机制的危害也很大
DeMott说这样的绕过利用了微软选择不在CFG中部署Control Flow Integrity(CFI),即控制流完整性。
“当CFI执行时,它在一个函数指针调用以及受到返回地址之前增加了额外检查,使得这些返回地址都是有效的。而微软并不认为这样的完整性是十分必要的,CFG仅仅保护了函数指针,而不检测返回地址。”
作为一项Visual Studio技术,CFG同时也被内置于微软的新浏览器Edge中。而此前CFG的一个绕过已经由Core Security的研究人员在三月份发布。
微软在一份报告中描述了Edge浏览器的安全特性:
“(CFG)编译检测代码会根据指针地址来进行间接跳转,这也就使得攻击者控制系统程序的过程变得更加的困难。”
内存崩溃攻击:一场捕鼠游戏
DeMott坦言,这种绕过技术的关键在于攻击者是否能够搞崩溃一个返回地址,并切断导致返回导向编程技术链(ROP)的一系列事件,这是很多内存崩溃攻击的核心所在。Bromium称之为Stack Desync,依赖于使用不同的函数调用协议。
“当你调用一个函数指针的时候,系统期望收到的是一个符合标准协议的指针地址,而程序却返回一个任意的指针地址。如果你不保护返回地址,对应的模块便会遭到破坏,也就意味着系统所有的操作被暴露出来了,攻击者便有机会破坏系统堆栈中的数据,并且当系统调用指针地址的时候,返回的就不是一个有效地址了,而这便是攻击的前奏。”
这样的绕过技术并非不重要的,更有可能成为国家级情报机构获取情报的重要手段。攻击者可以由此入侵网络,进行二次攻击,从而进一步盗窃数据并越权操作。
DeMott总结道:
“内存崩溃攻击一场新型的捕鼠游戏,所有这些实验成果,尽管听起来不是好消息,但是它推动了信息安全行业整体的发展,同时也为攻击者实施攻击提供了障碍。微软公司选择不去修复这个问题,还认为他们已经完成了力所能及的一切。除此之外,因为这样的技术并非所有人都能够得到的,微软认为这个问题造成的安全风险很低。”