论文部分内容阅读
现代软件规模庞大、架构复杂、功能多样化等特点导致软件漏洞的存在不可避免,给信息系统的可靠性和安全性带来严重威胁,直接影响国家战略安全以及个人隐私和财产安全。快速挖掘软件中存在的漏洞并验证其可利用性,可以尽早发现信息系统的安全缺陷并进行针对性防护,从而更好地保障自身信息系统安全。因此,研究如何自动挖掘和验证软件中的漏洞具有重要的学术价值和现实意义。论文围绕软件漏洞自动挖掘和验证中的关键技术展开研究。通过梳理发现,在软件漏洞自动挖掘方面,现有方法仅能挖掘位于软件浅层状态空间的漏洞,难以对深层状态空间进行测试;在软件漏洞自动验证方面,现有方法仅支持触发机理简单、且可单步骤直接利用的漏洞,难以自动处理触发机理和利用过程较为复杂的漏洞。据此,论文以主流符号执行、模糊测试为技术支撑,对如何提升漏洞挖掘效率、扩展复杂漏洞自动利用能力等问题进行了深入研究。论文的主要工作和创新点如下:1、提出了基于智能模糊测试的源代码软件漏洞挖掘方法。首先通过插桩技术动态收集程序运行时信息,实现对程序中条件分支覆盖情况进行细粒度分析;然后,对于半覆盖的条件分支,提出基于操作数感知的关键字段识别方法,以较小开销筛选出与分支约束相关的输入字段,达到缩小变异空间的目的;最后,将半覆盖分支的突破问题转化为优化问题,并在约减的变异空间中进行智能搜索,实现对复杂条件分支的快速穿透。相比于传统覆盖率反馈的灰盒测试方法,提出的智能模糊测试方法可以有效提升对目标程序的覆盖率,发掘位于深层状态空间的漏洞。2、提出了基于符号执行和模糊测试融合的二进制软件漏洞挖掘方法。针对融合过程中符号执行处理符号指针和符号循环时导致的状态爆炸问题,通过基于延迟分化的符号指针推理方法和基于桶的符号循环边界控制方法,在避免产生过多冗余状态的同时最大程度上确保对未覆盖状态空间的探索。针对模糊测试种子队列无优先级导致调用符号执行效率低下的问题,提出基于距离的种子文件调度方法,通过计算种子文件在状态空间中的相对距离,优先调度最有可能触发新路径覆盖的种子,从而保证有限测试时间内符号执行可以辅助产生更多的有效测试用例。相比于现有融合测试工具以及其它漏洞挖掘工具,改进的融合挖掘方法可有效提升路径覆盖率,挖掘更多的软件异常。3、提出了基于状态迁移组合的堆漏洞利用模式构建方法。针对现有漏洞利用模式仅能刻画简单、单步骤漏洞利用过程,无法满足包含多个中间状态转换的堆漏洞利用过程描述需求的问题。首先利用布尔谓词对高度结构化内存对象的属性、数值关系和结构关系进行表示,支撑对中间步骤内存空间布局的精准分析。然后,在深入分析典型人工利用堆漏洞过程的基础上,提炼利用方法的关键步骤,研究基于状态迁移组合的堆漏洞利用模式构建方法。最后,以典型堆漏洞利用方法为例,介绍了如何通过状态迁移组合形成可以指导利用代码生成的堆漏洞利用模式。4、提出了利用模式导向的堆漏洞自动验证方法。首先将典型的内存操作建模为读、写、分配、释放和执行五种操作原语。然后,针对漏洞利用模式中的状态迁移关系,采用基于随机搜索的状态间迁移路径构造方法,生成可能的迁移路径。随后,综合控制流可达和数据流可达两个目标,提出基于导向模糊测试的状态间迁移路径自动驱动技术,实现对迁移路径的自动驱动。最后,设计实现了堆漏洞自动验证系统。实验结果表明,系统可针对多种漏洞利用方法实现利用代码自动生成,且支持对利用方法的动态扩展。