论文部分内容阅读
代码重用攻击日益成为主流的漏洞利用技术,然而现有的攻击在构造和执行过程中具有异常的控制流特征,可以被控制流完整性(CFI)方法防御,为此本文构建了一种采用函数调用形式的控制流特征的攻击方法。另外,地址空间布局随机化(ASLR)面临JIT-ROP攻击的威胁,现有的防御要么无法抵御间接形式的攻击,要么需要源码和修改编译器,为此本文还提出了一种基于静态二进制改写的分支指令隐藏的防御方法以提高安全性和兼容性。本文主要的研究工作如下:(1)分析和总结了现有的控制流完整性防御及其安全增强型防护shadow stack的防御策略,由此得出粗粒度的CFI和shadow stack相结合是当前控制流完整性检测领域有效的防御措施。并分析了当前的代码重用攻击方法在设计时存在的异常的控制流特征,无法绕过当前的防御策略。由此,构建一种代码重用攻击方法LOP,其控制流跳转采用函数调用形式,即call和ret指令配对的原则,绕过CFI策略。(2)构建了loop gadget和functional gadget两大模块。由于loop gadget含有特殊的循环结构且functional gadget是完整的函数体,使得LOP的控制流保持函数调用形式,保证了安全性。另外,验证了loop gadget的普遍性和functional gadget的图灵完备性,使得LOP可以跨平台使用,具有良好的通用性。并利用IE浏览器的漏洞成功实施攻击,证明有效性。(3)分析和总结了JIT-ROP的攻击原理。得出当前的防御方法存在的问题:只考虑到传统的直接攻击形式而对最新的间接攻击无效,需要源码并修改编译器和操作系统但这很难应用于商用软件的保护。对此,提出了基于二进制改写的分支指令隐藏的防御方法BIHide。隐藏程序中所有的直接和间接分支指令,保证安全性;利用Windows平台下二进制文件中的重定位表结构实施静态二进制改写,保证兼容性和实用性。(4)在二进制文件下,结合细粒度的地址空间随机化技术来实施分支指令的重写。实验结果表明,成功实现了所有分支指令的隐藏,并保证了合理的时间和空间开销。最后,还分析了BIHide抵御不同形式的代码重用攻击的能力。