论文部分内容阅读
计算机系统安全已经作为国家基本战略纳入了各国的发展规划中。而作为计算机系统智能载体的计算机软件,是攻击者入侵计算机系统的最重要途径之一,它的安全性在网络空间(Cyberspace)的攻防博弈中扮演着日益重要的角色。 针对软件的攻击中,控制流劫持攻击是最常见的一种。该类型攻击发生时,攻击者通过构造特定攻击载体,触发并利用目标软件中的具有内存读写能力的漏洞,篡改程序中的控制数据,并绕过现有安全控制机制,进而劫持程序控制流并执行恶意代码,最终实现入侵目标计算机系统、窃取机密或者破坏系统的目的。 控制流劫持攻击的流行引起了安全研究人员的极大关注,相关学术界和业界研究人员相继提出了众多的防御方案,如现阶段被主流操作系统采用的地址空间布局随机化(ASLR)和数据执行保护(DEP)等。这些安全防护方案能够极大地提升系统的安全性,阻止了大部分控制流劫持攻击的发生。然而,现阶段攻击者仍然可以通过利用一些漏洞(如内存泄漏),采用一些高级攻击技术(如返回到库函数return-to-libc和面向返回编程ROP等技术)绕过这些防护,并发起控制流劫持攻击。 本文通过对控制流劫持攻击的工作流程进行剖析,指出了控制流劫持攻击的关键要素包括:可供利用的内存破坏漏洞、可被篡改的控制数据、以及可被绕过的安全控制机制。由此,本文对控制流劫持攻击展开了针对性的防御技术研究,即:内存破坏漏洞的消除技术研究,控制数据的完整性保护技术研究,以及安全控制机制增强及实用化技术研究。 本文提出并实现了一个系统化的防护方案,能够有效消减可被利用的整数溢出导致缓冲区溢出(简称IO2BO)内存漏洞,可以有效保护函数指针这类控制数据的完整性,同时提出了一种新的实用化的控制流完整性实现方案并能够极大增强现有的安全控制机制。该系统化防护方案在关注实用性的同时,能够对软件提供高强度的安全防护,可以有效防御控制流劫持攻击,包括现阶段最常用的高级攻击技术return-to-libc和ROP等。具体而言,本文主要贡献如下: 1.提出了基于类型理论的自动化消减IO2BO漏洞的方法。本文指出了整数溢出漏洞自动化消除和手工修补的挑战性,并根据IO2BO漏洞的特征构建了一个新的类型系统,通过在编译阶段的类型推演和数据流分析挖掘源代码中潜在的IO2BO漏洞,进而植入安全检查消减运行时IO2BO漏洞。该方法能够不依赖于开发人员的安全意识和编码能力,对软件自动化地进行安全加固,极大地减轻了开发人员的负担并提高了程序的安全性。本文基于LLVM编译器框架实现了该方案的一个原型IntPatch,与其他防御方法相比,它的性能损失、误报率以及漏报率都很低。 2.提出了基于编码和二进制改写技术的保护函数指针完整性的方法。本文指出了现有函数指针完整性防护方案的实用化局限性:二进制兼容性、模块化支持、后向兼容性、以及性能损失。本文提出了一个新的函数指针完整性保护方法FPGate,可以克服上述局限性。FPGate采用了一种新的基于重定位表机制的反汇编算法,能够高效且准确地对二进制程序进行反汇编分析及改写。FPGate通过对目标函数指针进行编码改写和完整性验证,并引入跳床代码区有效地解决了后向兼容性问题。与其他函数指针完整性保护方案相比,该方案在安全性、兼容性以及性能上达到了良好的平衡,是一个可实用的函数指针完整性保护方案。 3.提出了基于内存布局和二进制改写技术的实用化控制流完整性实现方案。控制流完整性安全控制机制能够有效抵御所有控制流劫持攻击,包括ROP和return-to-libc攻击,而现有的实现方案的实用性和安全性问题限制了其在实际系统中的部署。本文提出并实现了一种新的控制流完整性实现方案CCFIR,通过引入独立的代码区Springboard,并限制所有的间接跳转指令只能跳转到Springboard中,从而有效阻止攻击者劫持控制流到非法目标,保护程序控制流的完整性。此外,CCFIR对Springboard内部代码进行了更细粒度的区分,确保不同类型的间接跳转指令的跳转目标不同。CCFIR还对敏感函数的使用也进行了限制,并引入了随机化防御,更进一步提高攻击者攻击的难度。实验结果表明,该方案能够提供实用的控制流完整性安全控制机制,能够有效抵御绝大部分控制流劫持攻击,包括ROP和return-to-libc攻击。与现有的Abadi等人提出的控制流完整性实现方案相比,CCFIR具有良好的兼容性和性能,是一个可实用的控制流完整性保护方案。