近段时间以来,主要软件供应商(例如Adobe和微软)一直侧重于提高攻击者编写漏洞利用代码的成本,而不是努力减少其产品中的漏洞数量。供应商在意识到完美软件不可能实现后,开始将重心放在缓解攻击工作上,他们努力使攻击者的漏洞利用代码编写变得更耗时间且利润更低。
在Windows 8更新的安全功能中,我们看到微软在这个方面取得了重大飞跃。即将在10月份推出的新版本操作系统中,增强的内存保护功能将能够抵御缓冲区溢出攻击,这种攻击主要导致针对应用程序或内核的特权提升攻击。
Coverity公司的高级安全科学家兼研究员Chris Valasek和Azimuth安全公司的高级漏洞研究员Tarjei Mandt对Windows 8的早期公开发布版本(从开发者预览版到最新的发布预览版)进行了研究,特别是Windows 8的堆安全功能。在黑帽2012大会上,这两位研究人员将展示他们的研究结果。
“从堆损坏(heap corruption)漏洞的角度来看,如果我是攻击者,我更愿意为Windows 7编写漏洞利用代码,而不是Windows 8,”Valasek表示,“微软已经走过了漫长的道路,他们为此投入了不少心思。”
堆缓冲区溢出比基于堆栈的缓冲区溢出更难以实现。基于堆的攻击通过恶意可执行文件来超出内存空间的限额,并在根本上“欺骗”操作系统来执行该命令。通常情况下,攻击者可以远程攻击系统,并且,如果缓冲区溢出攻击成功的话,攻击者能够获取与被攻击应用程序相同的系统特权,或者能够获得对内核的根级访问权限。
Windows 8新增功能包括更新的内存管理器、Windows堆管理器(Heap Manager)和Windows内核池分配器(Kernel Pool Allocator)。堆管理器随机分配内存空间,这让攻击者很难预测缓冲区溢出攻击应该在哪里注入恶意代码。而在以前版本的Windows系统中,内存空间分配不是随机的。Windows 8还包括AppContainers,这是为Windows应用程序确定权限的安全沙盒。Valasek表示,与Windows Vista或者Windows 7相比,Windows 8的应用程序受到更严格的控制,毕竟Windows Vista和Windows 7依赖于完整性级别(Integrity Level)来控制应用程序功能,要知道,完整性级别比AppContainers更加宽松。
Windows 8这些更新的安全功能并不是微软第一次向操作系统内置安全保护功能。从Windows Vista开始,微软就使用地址空间布局随机化(ASLR)和数据执行保护(DEP)加强应用程序安全和内核保护。ASLR和DEP并不是默认启用的,这与Windows 8的内存保护不同。“这些缓解措施已经部署到位以解决安全问题,”Valasek表示,“它们确实让利用技术更难实现了。然而,漏洞利用是无时不在的。”