论文部分内容阅读
面向返回编程(Return Oriented Programming,ROP)是一种攻击技术,通过重用并链接内存中已存在的代码片段(gadget,以ret、jmp、call跳转指令结尾)组成攻击程序,能够实现任意的攻击行为。目前针对ROP攻击提出的防御方法主要集中于内存代码布局信息的隐藏和控制流监控,但实现的方法都存在一定的局限性,仍不能全面且有效的防御ROP攻击。 通过对ROP攻击中使用的gadget进行特征分析,提出了基于基本块(由两条跳转指令之间的可顺序执行的多条指令组成)计数的ROP攻击防御方法。该方法跟踪系统中程序运行时的指令执行过程,通过对有限长度指令范围内的基本块计数来判断运行程序是否是ROP攻击程序。特别针对以ret指令结尾的gadget和传统函数调用返回方式的不同,提出call和ret指令匹配的检测方法。经过深入搜索和研究发现,仍然存在特殊gadget能够绕过以上提出的一般的ROP攻击防御方法,如超大指令数gadget、可直接执行系统函数的one gadget等,因此提出了针对特殊gadget的ROP攻击防御方法。 根据以上提出的方法,以开源虚拟机DECAF为平台,构建基于基本块计数的ROP攻击防御原型系统,结合虚拟机中的VMI和动态二进制插装,对系统和程序运行时的指令和基本块进行插装计数检测、ret指令返回违反函数调用策略的检测及特殊gadget的执行检测,并实现算法离线搜索识别gadget。 经过实际的攻击防御实验,原型系统能够检测到利用CVE-2012-1889漏洞构建的ROP攻击程序及利用特殊gadget构建的绕过攻击程序,CPU性能平均损耗为30.4%,文件系统性能平均损耗为46.3%。实验测试结果表明我们的方法能够在性能损耗可接受的范围内全面且有效、可靠的防御ROP攻击。