论文部分内容阅读
软件漏洞(Software Vulnerability)是信息安全风险的主要根源之一,是网络攻防对抗中的重要目标。无论从国家层面的网络安全战略,还是社会层面的信息安全防护,安全漏洞已经成为信息对抗双方博弈的核心问题之一。软件安全漏洞的检测及防护技术已经成为各国在信息安全领域的重点研究方向。相对源码漏洞挖掘技术,面向二进制程序的漏洞挖掘技术面临更多的挑战。一方面,二进制程序缺少函数、变量、变量类型等语义信息,导致在对二进制程序进行漏洞挖掘时,基于源码的漏洞挖掘技术将不能直接使用。另一方面,基于静态分析的漏洞挖掘误报率高,需要大量的人工参与,严重制约着静态漏洞挖掘技术的应用范围。而基于符号执行与约束求解的动态漏洞挖掘技术,虽然可以从一定程度上缓解误报率高的问题,但又面临着路径爆炸问题。本文围绕二进制程序漏洞挖掘问题,研究了有导的二进制程序漏洞挖掘方法,以及源码缺陷模式与二进制代码缺陷模式的协同分析模型。本文主要贡献如下:1.提出了一种基于遗传算法的有导二进制程序漏洞挖掘方法。本文首先提出了对二进制程序进行控制流提取的算法,然后设计了遗传算法的适应度函数,利用构造的适应度函数来指导测试用例的生成过程。该方法和基于模糊测试(Fuzz Testing)的漏洞挖掘技术相比,生成的测试用例能快速命中二进制程序的漏洞。2.为了进一步提高漏洞挖掘效率,提出了一种基于目标评价与动态污染分析的二进制程序漏洞挖掘方法。利用其中所提出的细粒度动态污染分析方法,可以识别出可能触发漏洞的二进制程序输入文件中的关键字节,并只对这些关键字节进行变异生成新的测试用例。在测试用例的生成过程中,本文进一步提出了对测试用例进行过滤的多目标评价算法,该算法可以引导下一轮测试中使用评价值高的测试用例进行测试。该方法与基于模糊测试的漏洞挖掘技术相比,缩小了二进制程序需要进行变异的输入空间,同时使用多目标评价算法引导测试用例生成,提高了测试用例生成的效率。3.提出了一种基于关键代码区域覆盖的二进制程序漏洞挖掘方法。本文首先提出了二进制程序关键代码区域的定义和识别算法。利用本文提出的基于关联矩阵和邻接矩阵的双向路径搜索算法,可以识别出从二进制程序输入位置到关键代码区域的路径。然后,基于本文提出的符号执行与实际执行的路径引导方法,可以为相应的路径生成测试用例。该方法核心在于生成测试用例覆盖被测试二进制程序中的关键代码区域。与基于全路径遍历的二进制程序漏洞挖掘技术相比,该方法从一定程度上缓解了符号执行技术面临的路径爆炸问题。4.提出了一种源码安全缺陷模式与二进制代码安全缺陷模式的协同分析模型,该模型可以解决源码安全缺陷检测技术研究与二进制代码安全缺陷检测技术研究处于割裂状态的现状。本文从源码、二进制代码两个不同层面提出了描述软件安全缺陷本质特征的形式化描述方法。通过源码安全缺陷模式与二进制代码安全缺陷模式的关联关系分析,基于安全缺陷触发条件相同的特点,提出了统一缺陷模式集的定义。基于统一安全缺陷模式集,把源码安全缺陷的检测方法与二进制代码安全缺陷的检测方法进行了统一。