论文部分内容阅读
互联网的日益普及使得各类软件系统得到广泛应用,同时信息安全问题也变得越来越突出。软件作为信息系统功能的重要载体,其中存在的漏洞是绝大多数信息安全问题的根源。为确保信息系统的安全性,需检测软件中存在的漏洞,并准确评估其危害性。目前漏洞检测与漏洞危害性评估方法自动化程度较低,需要依靠人工参与才能完成该过程。在软件规模与复杂度不断增大,以及漏洞类型与原理多样化的形势下,通过人工分析已难以应对上述挑战。为了提高软件安全性评估的效率,本文在对二进制漏洞原理与程序分析方法进行研究的基础上,提出了一种基于二进制程序的漏洞自动化利用方法,通过检测程序中存在的缓冲区溢出漏洞,并从攻击者角度利用漏洞以验证程序的安全性。该方法使用符号执行引擎虚拟运行目标程序,运行过程中根据检测规则判断当前程序状态是否存在漏洞,对可利用的漏洞构造利用约束表达式,通过求解约束表达式实现自动构造利用数据。论文的主要研究内容包括以下几个方面:(1)分析与总结手工方式构造漏洞利用数据的过程并建立漏洞利用模型,将漏洞利用过程抽象为漏洞约束表达式与利用约束表达式,以实现自动生成利用数据。(2)设计了脆弱点导向的漏洞检测方法。针对漏洞检测过程中分析效率低的问题,使用基于程序切片的静态分析获取包含脆弱点路径的可疑代码片段,从而减小需分析的代码空间,提高了漏洞检测过程的针对性;该方法使用符号执行检测漏洞,为缓解符号执行中存在的状态爆炸问题,根据可疑代码片段对符号执行过程进行状态修剪,避免分析无关路径,从而提高了漏洞检测效率。(3)设计了基于约束求解的利用生成方法。抽象代码注入利用、使用跳板指令绕过ASLR和return-to-libc绕过NX三种漏洞利用过程为利用约束表达式,通过求解约束表达式实现自动生成利用数据。其中,针对代码注入利用中可控内存空间不够存放shellcode的问题,提出分段注入的方法,改进代码注入利用时攻击代码的布局方式,将其分段存放在多个内存块中完成攻击,提高了漏洞利用系统的适用性。(4)设计与实现了二进制漏洞自动化利用系统AutoExp,并使用已披露漏洞对系统进行测试。实验结果表明,本文研究的漏洞自动化利用系统能够自动检测漏洞并构造利用数据,可提高软件安全性评估的效率,并且相对已有方法具有更好的适用性。