论文部分内容阅读
网络攻击自从上世纪八十年代Morris蠕虫出现以来,一直给互联网和用户带来严重威胁。造成各种攻击的根源是软件漏洞。虽然工业界和学术界提出各种技术保护软件及操作系统安全,但攻击数量仍有增无减;而漏洞攻击技术也不断发展,从缓冲区溢出到最近的Return-Oriented-Programming(ROP)攻击。漏洞攻击检测是信息安全领域的研究热点,特别是如何在二进制代码级检测攻击更是业界关注的焦点,但x86指令的复杂性和WYSINWYX(What You See Is Not What YouExecute)给检测带来诸多挑战。在二进制代码级检测攻击不仅可用于攻击防御,而且能为漏洞分析和zero-day漏洞挖掘提供帮助,同时有助于设计更有效的编译器和操作系统级防御机制。然而当前漏洞攻击检测技术存在若干问题:首先,相当部分的防御检测手段都需要源码,但商业软件不提供源码;其次,大部分防御技术都是纯粹的静态或动态分析,牺牲了准确性或效率,没有将两者结合起来,特别是对于最新的ROP攻击,目前还未找到一种合适的检测方法。总的来说,当前漏洞攻击的发展给攻击检测提出了新的要求,而以Stack canary、NX、特征码匹配为代表的经典防御技术已不能满足对于目前攻击的检测需求。本文对动态污点分析、控制流安全以及复杂shellcode三个方面进行了深入细致的研究,取得了四方面成果:1.提出了若干种技术加强动态污点分析,能够准确检测一种重要类型的攻击--内存溢出攻击,并提高了系统效率。首先,设计和实现了一种高效shadowmemory,能够在较低时间复杂度和空间复杂度存储查询shadow bit。提出了x86指令层次化结构分析,有效克服了x86指令的复杂性,通过它制定准确污点传播策略。传统污点分析只在指令级传播污点,缺乏过程级传播,为此提出了两种技术加强过程级污点传播的准确性与效率,分别是函数局部变量残留污点清除与函数摘要。基于动态插桩工具实现了原型系统MANGO,并对真实攻击进行了测试,实验结果表明MANGO能有效检测内存溢出攻击,并且系统效率得到提升。2.提出了一种新的ROP攻击检测方法。当前检测技术依赖ROP某些特征检测攻击,但无法准确区分正常指令执行与ROP攻击,因此误报率较高。本文通过分析实际ROP代码,确定了ROP的表现特征与功能特征,并依赖它们作为检测依据。同时,纯粹的动态分析对程序性能影响较大,并且无法在gadget执行前阻止攻击,本文提出了黑盒模拟gadget思想加强检测效率与效果。原型系统通过动态插桩工具实现,通过自动化工具对真实shellcode生成ROP攻击样本,并对其进行测试,实验结果表明我们提出的方法在检测准确性和效率都优于当前ROP攻击检测方法。3.提出了一种基于地址完整性检查的函数指针攻击检测方法FPGuard,其思想是判断间接跳转指令的目标地址是否位于合法函数范围。FPGuard与CFI的最大区别是前者的检查代码位于程序外部,能有效分析间接跳转指令。除了传统注入攻击,攻击者仍有可能利用函数指针覆盖进行ROP攻击,同时本文在实验中发现C++程序存在多函数入口点。提出了两阶段方法检测攻击,第一步是粗粒度的range check,第二步是细粒度的黑盒模拟gadget(用于检测ROP攻击)。通过测试真实攻击,FPGuard能准确检测注入代码与ROP攻击。并且由于FPGuard采用高效数据结构存储查询函数地址信息,保证了较高的效率。FPGuard是目前首个能同时检测(通过覆盖函数指针)注入代码攻击与ROP攻击的技术。4.提出了一种有效的自修改多态shellcode(SMPS)检测方法。通过实际SMPS样本,我们观察到SMPS的一个重要特点是动态代码字节生成,基于此特点提出一种有效的静态与动态结合检测算法。首先用反汇编得到静态代码字节,然后将payload放入模拟器执行,比较两者之间差异,如果不同则检测到SMPS。为了过滤正常payload,实现了一种简单有效的过滤机制。对Metasploit提供的真实SMPS样本进行测试,实验结果表明检测效果非常好,同时对正常网络流进行了误报率测试,实验结果显示误报率较低。