当前位置: 首页 > 专利查询>清华大学专利>正文

软件内存安全检测方法及系统技术方案

技术编号:19139753 阅读:20 留言:0更新日期:2018-10-13 08:37
本发明专利技术实施例提供了一种软件内存安全检测方法及系统,所述方法通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。本发明专利技术实施例提供的软件内存安全检测方法及系统,充分利用了符号执行产生的测试用例文件。同时,对模糊测试中的变异进行改进,得到导向性变异方法。将符号执行与导向性变异结合,对所有初始输入种子中满足条件的种子进行导向性变异,提高了变异的有效性,进而节约了资源。

Software memory security detection method and system

The embodiment of the present invention provides a software memory security detection method and a system, the method determines a plurality of default test case files of the software to be tested by symbolic execution, and converts the plurality of default test case files into the initial input seeds of fuzzy testing based on directional variation, respectively; and based on all the initial inputs Input seeds, fuzzy testing based on directional variation is performed on the software to be tested, which is a variation based on the coverage of the program in the software to be tested. The software memory security detection method and system provided by the embodiment of the invention make full use of the test case file generated by symbol execution. At the same time, the mutation in fuzzy test is improved to get the directional mutation method. The symbolic execution and directional variation are combined to make directional variation on all the seeds satisfying the initial input conditions, which improves the effectiveness of the variation and consequently saves resources.

【技术实现步骤摘要】
软件内存安全检测方法及系统
本专利技术实施例涉及计算机软件分析
,更具体地,涉及软件内存安全检测方法及系统。
技术介绍
软件是计算机实现功能的载体,软件的安全直接关系到计算机系统和网络的安全。利用软件的缺陷和漏洞对计算机系统进行攻击是黑客的惯用手段之一,而这往往会泄露关键信息,造成经济损失。内存安全问题是软件开发中最容易被忽视,也是最容易产生的问题。然而,一个简单的内存安全问题很有可能对软件的安全造成极大的威胁,因此,保障软件的内存安全极为重要。通过对软件进行内存安全检测,可以发现软件中各种不合法的内存操作,保障软件的合理平稳运行,增强软件的可靠性。模糊测试是目前针对内存安全问题最有效的检测手段之一,它的关键思想是产生尽可能多的输入以探索程序的各种执行路径,以这些输入来执行程序,同时不断的监测程序在运行中是否会产生内存错误。产生输入的方式通常包括基于直接生成和基于变异的方法。基于直接生成的模糊测试一般针对的是具有严格输入格式或规则的软件,利用这些严格输入格式或规则来产生用于测试的输入。此方法需要用户对被测试软件有较强的领域知识,熟悉各种规则。这造成了两个缺点,一是它需要大量的人工参与,难以做到自动化;二是针对每个软件都需要建立一套新的生成机制,无法通用。另外,这种方法也难以保证软件中程序的覆盖率。而基于变异的模糊测试,是通过变异现有输入以产生新的、有意义的输入。在这种方法中,产生一个有意义的输入往往要经过大量的变异尝试,效率不高,且软件中程序的覆盖率也难以得到保证。由于许多的程序中对输入均有严格的检查机制,而普通的变异方式难以生成可以通过这些复杂检查的输入。目前已经有工具比如Driller和Mayhem等采用将动态的符号执行与基于变异的模糊测试相结合的程序分析技术,正常情况下并不进行动态的符号执行,只有在执行变异的过程中出现卡顿或者不能生成可以通过这些复杂检查的输入时,才试图通过整合符合执行技术来指导变异过程,通过符号执行将输入进行符号化,收集约束条件,可以求解出通过这些检查的输入。但这些工具产品并没有对符号执行产生的输入进行充分的利用,导致资源浪费。
技术实现思路
为克服上述问题或者至少部分地解决上述问题,本专利技术实施例提供了一种软件内存安全检测方法及系统。一方面,本专利技术实施例提供了一种软件内存安全检测方法,包括:S1,通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;S2,基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。另一方面,本专利技术实施例还提供了一种软件内存安全检测系统,包括:符号执行模块和模糊测试模块。其中,符号执行模块用于通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;模糊测试模块用于基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。另一方面,本专利技术实施例还提供了一种软件内存安全检测设备,包括:至少一个处理器、至少一个存储器、通信接口和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述通信接口用于该检测设备与显示装置的通信设备之间的信息传输;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述所述的方法。另一方面,本专利技术实施例还提供了一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述所述的方法。本专利技术实施例提供的软件内存安全检测方法及系统,所述方法通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。本专利技术实施例提供的软件内存安全检测方法及系统,充分利用了符号执行产生的测试用例文件。同时,对模糊测试中的变异进行改进,得到导向性变异方法,将符号执行与导向性变异结合,对所有初始输入种子进行筛选,仅仅对所有初始输入种子中满足条件的种子才进行变异,可以不需要对所有初始输入种子均进行变异,去除了无效的变异,提高了变异的有效性,缩短了模糊测试过程中变异的种子具有新的覆盖范围的过程,进而节约了资源。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术一实施例提供的一种软件内存安全检测方法的流程示意图;图2为本专利技术另一实施例提供的一种软件内存安全检测方法中重合结果示意图;图3为本专利技术另一实施例提供的一种软件内存安全检测方法的整体流程图;图4为本专利技术另一实施例提供的一种软件内存安全检测系统的结构示意图;图5为本专利技术另一实施例提供的一种软件内存安全检测系统的整个分层操作界面示意图;图6为本专利技术另一实施例提供的一种软件内存安全检测设备的结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。如图1所示,本专利技术一实施例提供了一种软件内存安全检测方法,包括:S1,通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;S2,基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。具体地,由于现有技术中的工具比如Driller和Mayhem等在正常情况下并不进行动态的符号执行,只有在执行变异的过程中出现卡顿或者不能生成可以通过这些复杂检查的输入时,才试图通过整合符合执行技术来指导变异过程,通过符号执行将输入进行符号化,收集约束条件,可以求解出通过这些检查的输入。但这些工具产品并没有对符号执行产生的输入进行充分的利用,导致资源浪费。所以本专利技术实施例中,为充分利用符号执行产生的输入,并不是只有在执行变异的过程中出现卡顿或者不能生成可以通过这些复杂检查的输入时,才试图通过整合符合执行技术来指导变异过程,而是首先基于符号执行,确定多个预设测试用例文件,并将所述多个预设测试用例文件转换为基于导向性变异的模糊测试的初始输入种子。符号执行过程可以通过预设符号执行组件实现。首先需要为符号执行构建一套第一类二进制版本,第一类二进制版本主要用于构建第一可执行文件。第一类二进制版本可基于动态符号执行工具KLEE中LLVM中间表示(IntermediateRepre本文档来自技高网
...

【技术保护点】
1.一种软件内存安全检测方法,其特征在于,包括:S1,通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;S2,基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。

【技术特征摘要】
1.一种软件内存安全检测方法,其特征在于,包括:S1,通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;S2,基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。2.根据权利要求1所述的方法,其特征在于,S2具体包括:S221,将所有初始输入种子依次存储至预设种子池内,基于种子变异属性、种子执行速度、种子大小以及种子命中程序分支属性,从所述预设种子池内筛选满足预设条件的种子进行导向性变异,并基于种子变异属性、种子执行速度、种子大小以及种子命中程序分支属性,从变异产生的种子中选取满足所述预设条件的种子存储至所述预设种子池中以更新所述预设种子池;S222,对更新后的所述预设种子池内的所有种子重复上述筛选及变异过程,直至更新后的所述预设种子池内满足所述预设条件的每一种子的变异次数分别达到预设次数;S223,基于更新后的所述预设种子池内的所有种子,对所述待测试软件进行测试。3.根据权利要求2所述的方法,其特征在于,所述预设条件具体为:所述种子变异属性为未经变异、所述种子执行速度与所述种子大小的乘积最小以及所述种子命中程序分支属性为命中所述待测试软件中程序的稀有分支;所述稀有分支为:所述待测试软件中程序对应预设命中次数的分支。4.根据权利要求2所述的方法,其特征在于,S2中所述导向性变异具体包括:确定性变异和导向性随机变异;所述确定性变异包括:对满足所述预设条件的种子按位进行翻转、替换或进行算数运算;所述导向性随机变异包括:随机筛选满足所述预设条件的种子的变异位数及变异位置,并基于所述变异位置处字节的变异属性,对满足所述预设条件的种子的变异位置处字节进行变异。5.根据权利要求2所述的方法,其特征在于,还包括:将更新后的所述预设种子池内的所有种子分别输入至所述待测试软件,以使所述待测试软件分别执行更新后的所述预设种子池内的每一种子;...

【专利技术属性】
技术研发人员:姜宇梁杰王明哲陈元亮顾明孙家广
申请(专利权)人:清华大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1