论文部分内容阅读
随着信息技术的高速发展和网络的快速普及,计算机软件系统在社会生活中扮演着越来越重要的角色。与此同时,各种程序漏洞仍然很普遍,在遗留软件系统中尤其如此。通过这些漏洞,攻击者可以劫持软件系统正常的控制流并将其转向自己预设的控制流,从而完成攻击。Return-Oriented Programming (ROP)是一种新的攻击技术,使用ROP不需要注入恶意代码,而是复用系统中已有的代码,如Iibc中的代码,从而成功绕过“W⊕X”防御机制。ROP复用系统中以ret指令结尾的指令序列,并因此而得名。ROP较细的代码复用粒度使之具有很强的表述能力,能进行任意计算。自ROP提出以来,人们对ROP进行了广泛而深入的研究:在各种软硬件平台上实现了ROP,提出了不使用ret结尾的指令序列的ROP,实现了ROP攻击的自动化。学术界和工业界提出了各种针对ROP攻击防御措施:基于缓冲区漏洞移除的防御方法;基于返回地址/函数指针保护的防御方法;基于随机化的防御方法;基于ROP攻击特征的检测方法;基于调用规约的防御方法;基于ROP攻击所需指令序列消除的防御方法。以上各种方法,除了地址空间随机化,都由于各有不足而没有得到实际应用。地址空间随机化是是一种工业界广泛应用的防御措施,能在一定程度上防御ROP攻击,但地址空间随机化的有以下不足:无法对可执行文件代码段起始地址进行随机化,在32位机器上随机化强度不够,使其对ROP攻击的防御有限。基于此,本文提出了一种函数粒度随机化防御方法。该方法随机重排二进制文件中的函数,从而使代码中指令序列的地址的实际值与攻击者的设想不一致,从而防御ROP攻击。本文给出了函数粒度随机化的理论分析和设计方案,并在32位x86架构的硬件环境和Linux的软件环境下给出了原型实现。在实验过程中,我们验证了函数随机化的正确性和对ROP攻击的防御效果;随机化了linux下的一些可执行程序;将函数粒度随机化与地址空间随机化做了对比,分析了函数粒度随机化的随机化强度。