CN108647145A - 软件内存安全检测方法及系统 - Google Patents
软件内存安全检测方法及系统 Download PDFInfo
- Publication number
- CN108647145A CN108647145A CN201810444279.0A CN201810444279A CN108647145A CN 108647145 A CN108647145 A CN 108647145A CN 201810444279 A CN201810444279 A CN 201810444279A CN 108647145 A CN108647145 A CN 108647145A
- Authority
- CN
- China
- Prior art keywords
- variation
- preset
- seed
- seeds
- software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 36
- 238000012360 testing method Methods 0.000 claims abstract description 119
- 238000000034 method Methods 0.000 claims abstract description 67
- 230000035772 mutation Effects 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 26
- 238000012216 screening Methods 0.000 claims description 16
- 238000004891 communication Methods 0.000 claims description 15
- 238000003860 storage Methods 0.000 claims description 5
- 230000005540 biological transmission Effects 0.000 claims description 3
- 239000000306 component Substances 0.000 description 19
- 230000006870 function Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000004880 explosion Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 239000008358 core component Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000005728 strengthening Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013100 final test Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种软件内存安全检测方法及系统,所述方法通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。本发明实施例提供的软件内存安全检测方法及系统,充分利用了符号执行产生的测试用例文件。同时,对模糊测试中的变异进行改进,得到导向性变异方法。将符号执行与导向性变异结合,对所有初始输入种子中满足条件的种子进行导向性变异,提高了变异的有效性,进而节约了资源。
Description
技术领域
本发明实施例涉及计算机软件分析技术领域,更具体地,涉及软件内存安全检测方法及系统。
背景技术
软件是计算机实现功能的载体,软件的安全直接关系到计算机系统和网络的安全。利用软件的缺陷和漏洞对计算机系统进行攻击是黑客的惯用手段之一,而这往往会泄露关键信息,造成经济损失。内存安全问题是软件开发中最容易被忽视,也是最容易产生的问题。然而,一个简单的内存安全问题很有可能对软件的安全造成极大的威胁,因此,保障软件的内存安全极为重要。通过对软件进行内存安全检测,可以发现软件中各种不合法的内存操作,保障软件的合理平稳运行,增强软件的可靠性。
模糊测试是目前针对内存安全问题最有效的检测手段之一,它的关键思想是产生尽可能多的输入以探索程序的各种执行路径,以这些输入来执行程序,同时不断的监测程序在运行中是否会产生内存错误。产生输入的方式通常包括基于直接生成和基于变异的方法。基于直接生成的模糊测试一般针对的是具有严格输入格式或规则的软件,利用这些严格输入格式或规则来产生用于测试的输入。此方法需要用户对被测试软件有较强的领域知识,熟悉各种规则。这造成了两个缺点,一是它需要大量的人工参与,难以做到自动化;二是针对每个软件都需要建立一套新的生成机制,无法通用。另外,这种方法也难以保证软件中程序的覆盖率。而基于变异的模糊测试,是通过变异现有输入以产生新的、有意义的输入。在这种方法中,产生一个有意义的输入往往要经过大量的变异尝试,效率不高,且软件中程序的覆盖率也难以得到保证。
由于许多的程序中对输入均有严格的检查机制,而普通的变异方式难以生成可以通过这些复杂检查的输入。目前已经有工具比如Driller和Mayhem等采用将动态的符号执行与基于变异的模糊测试相结合的程序分析技术,正常情况下并不进行动态的符号执行,只有在执行变异的过程中出现卡顿或者不能生成可以通过这些复杂检查的输入时,才试图通过整合符合执行技术来指导变异过程,通过符号执行将输入进行符号化,收集约束条件,可以求解出通过这些检查的输入。但这些工具产品并没有对符号执行产生的输入进行充分的利用,导致资源浪费。
发明内容
为克服上述问题或者至少部分地解决上述问题,本发明实施例提供了一种软件内存安全检测方法及系统。
一方面,本发明实施例提供了一种软件内存安全检测方法,包括:
S1,通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;
S2,基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。
另一方面,本发明实施例还提供了一种软件内存安全检测系统,包括:符号执行模块和模糊测试模块。其中,
符号执行模块用于通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;
模糊测试模块用于基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。
另一方面,本发明实施例还提供了一种软件内存安全检测设备,包括:至少一个处理器、至少一个存储器、通信接口和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述通信接口用于该检测设备与显示装置的通信设备之间的信息传输;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述所述的方法。
另一方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述所述的方法。
本发明实施例提供的软件内存安全检测方法及系统,所述方法通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。本发明实施例提供的软件内存安全检测方法及系统,充分利用了符号执行产生的测试用例文件。同时,对模糊测试中的变异进行改进,得到导向性变异方法,将符号执行与导向性变异结合,对所有初始输入种子进行筛选,仅仅对所有初始输入种子中满足条件的种子才进行变异,可以不需要对所有初始输入种子均进行变异,去除了无效的变异,提高了变异的有效性,缩短了模糊测试过程中变异的种子具有新的覆盖范围的过程,进而节约了资源。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的一种软件内存安全检测方法的流程示意图;
图2为本发明另一实施例提供的一种软件内存安全检测方法中重合结果示意图;
图3为本发明另一实施例提供的一种软件内存安全检测方法的整体流程图;
图4为本发明另一实施例提供的一种软件内存安全检测系统的结构示意图;
图5为本发明另一实施例提供的一种软件内存安全检测系统的整个分层操作界面示意图;
图6为本发明另一实施例提供的一种软件内存安全检测设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明一实施例提供了一种软件内存安全检测方法,包括:
S1,通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;
S2,基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。
具体地,由于现有技术中的工具比如Driller和Mayhem等在正常情况下并不进行动态的符号执行,只有在执行变异的过程中出现卡顿或者不能生成可以通过这些复杂检查的输入时,才试图通过整合符合执行技术来指导变异过程,通过符号执行将输入进行符号化,收集约束条件,可以求解出通过这些检查的输入。但这些工具产品并没有对符号执行产生的输入进行充分的利用,导致资源浪费。所以本发明实施例中,为充分利用符号执行产生的输入,并不是只有在执行变异的过程中出现卡顿或者不能生成可以通过这些复杂检查的输入时,才试图通过整合符合执行技术来指导变异过程,而是首先基于符号执行,确定多个预设测试用例文件,并将所述多个预设测试用例文件转换为基于导向性变异的模糊测试的初始输入种子。符号执行过程可以通过预设符号执行组件实现。首先需要为符号执行构建一套第一类二进制版本,第一类二进制版本主要用于构建第一可执行文件。第一类二进制版本可基于动态符号执行工具KLEE中LLVM中间表示(Intermediate Representation,IR)的符号化产生,第一类二进制版本被传递到预设符号执行组件中以生成高质量的第一可执行文件,即多个测试用例文件。这里需要说明的是,多个测试用例文件可以是一个,也可以是两个或大于两个,测试用例文件的个数与符号执行的执行过程有关,本发明实施例中在此不作具体限定。
由于符号执行涉及到大量模拟的环境交互,预设符号执行组件中生成的多个预设测试用例文件中每一预设测试用例文件都是包含有环境模拟信息和输入信息在内的复合格式文件,这并不能作为基于导向性变异的模糊测试的初始输入种子,不能直接被模糊测试所采用。所以本发明实施例中需要将生成的多个预设测试用例文件分别进行转换,以使转换后的预设测试用例文件可以作为基于导向性变异的模糊测试的初始输入种子,转换的方法为将每一预设测试用例文件中的输入信息分别提取出来,单独的输入信息即可直接作为基于导向性变异的模糊测试的初始输入种子。
确定了所有初始输入种子后,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。这里需要说明的是,虽然确定的所有初始输入种子均可作为基于导向性变异的模糊测试,但是所有初始输入种子中还包括了一些没有变异价值的种子,也就是说,所有初始输入种子中存在一些这样的种子,即使经过变异,得到的变异种子对待测试软件的模糊测试并没有实质性的帮助,并不会增加对待测试软件中程序的覆盖范围。所以本发明实施例中采用导向性变异,根据所述待测试软件中程序的覆盖范围,对所有初始输入种子进行选择性变异,根据变异后的种子更新待测试软件中程序的覆盖范围,再根据新的待测试软件中程序的覆盖范围对变异后的种子进行选择性变异。如此重复,直至每一种子的变异次数分别达到预设次数,此时待测试软件中程序的覆盖范围可以包括程序的大部分主要分支或程序的全部分支。
本发明实施例提供的软件内存安全检测方法,通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。本发明实施例提供的软件内存安全检测方法及系统,充分利用了符号执行产生的测试用例文件。同时,对模糊测试中的变异进行改进,得到导向性变异方法,将符号执行与导向性变异结合,对所有初始输入种子进行筛选,仅仅对所有初始输入种子中满足条件的种子才进行变异,可以不需要对所有初始输入种子均进行变异,去除了无效的变异,提高了变异的有效性,缩短了模糊测试过程中变异的种子具有新的覆盖范围的过程,进而节约了资源。
在上述实施例的基础上,S2具体包括:
S211,将所有初始输入种子依次存储至预设种子池内,基于种子在执行时对所述待测试软件中程序的覆盖范围,从所述预设种子池内筛选出满足第一预设条件的种子进行导向性变异,并基于种子在执行时对所述待测试软件中程序的覆盖范围,从变异产生的种子中筛选出满足所述第一预设条件的种子存储至所述预设种子池中以更新所述预设种子池;
S212,对更新后的所述预设种子池内的所有种子重复上述筛选及变异过程,直至更新后的所述预设种子池内满足所述第一预设条件的每一种子的变异次数分别达到预设次数;
S213,基于更新后的所述预设种子池内的所有种子,对所述待测试软件进行测试;
其中,若判断获知所述预设种子池或更新后的所述预设种子池内任一种子在执行时对所述待测试软件中程序的覆盖范围,与所述任一种子执行时刻之前执行的种子对应的覆盖范围之和之间的重合结果为不完全重合,则确定所述任一种子满足所述第一预设条件。
具体地,确定了初始输入种子后,并不能直接将初始输入种子进行导向性变异,而是需要对初始输入种子进行筛选,所以首先将所有初始输入种子依次存储至预设种子池内,然后根据每一初始输入种子在执行时对所述待测试软件中程序的覆盖范围,从所述预设种子池内筛选出满足第一预设条件的种子进行导向性变异,并基于种子在执行时对所述待测试软件中程序的覆盖范围,从变异产生的种子中筛选出满足所述第一预设条件的种子存储至所述预设种子池中以更新所述预设种子池。其中,筛选的目的是为了使变异的效果更明显,也就是说,在初始输入种子中,存在许多变异后不能有效实现模糊测试的无用种子,筛选的过程就是要剔除这些无用种子,保留有用的种子,即满足第一预设条件的种子。
这里,步骤S2中的过程并不是单一的过程,即需要使预设种子池内满足第一预设条件的种子进行多次变异,每次变异均会产生一变异输入种子,根据产生的变异输入种子对待测试软件进行测试。测试完成后,还需要再次对变异输入种子进行变异,然后再次产生变异输入种子,再次对待测试软件进行测试。如此进行预设次数的变异后得到的测试结果才是最终的测试结果。
预设种子池内在测试开始时存储的是初始输入种子,从预设种子池内筛选出满足第一预设条件的种子,具体通过如下方法实现:对于预设种子池中的任一初始输入种子A,确定初始输入种子A在执行时对所述待测试软件中程序的覆盖范围a1,以及在初始输入种子A执行时刻之前执行的初始输入种子对应的覆盖范围之和a2,确定a1与a2之间的重合结果。如果重合结果为不完全重合,则可确定初始输入种子A为满足第一预设条件的种子。
在测试开始后,更新后的预设种子池内存储的种子包括初始输入种子以及每次变异产生的满足第一预设条件的种子,从更新后的预设种子池内筛选出满足第一预设条件的种子,具体通过如下方法实现:对于更新后的预设种子池中的任一种子B,确定种子B在执行时对所述待测试软件中程序的覆盖范围b1,以及在种子B执行时刻之前执行的所有种子对应的覆盖范围之和b2,确定b1与b2之间的重合结果。如果重合结果为不完全重合,则可确定种子B为满足第一预设条件的种子。
这里需要说明的是,其中不完全重合的情况包括:完全不重合和部分重合。即如图2所示,图2为本发明实施例中提供的一种软件内存安全检测方法中重合结果示意图,图2中种子B的覆盖范围为圆圈21,在种子B之前执行的所有初始输入种子的覆盖范围之和为圆圈22,由于圆圈21与圆圈22仅为部分重合,所以种子B为满足第一预设条件的种子。
在上述实施例的基础上,S2还具体包括:
S221,将所有初始输入种子依次存储至预设种子池内,基于种子变异属性、种子执行速度、种子大小以及种子命中程序分支属性,从所述预设种子池内筛选满足预设条件的种子进行导向性变异,并基于种子变异属性、种子执行速度、种子大小以及种子命中程序分支属性,从变异产生的种子中选取满足所述预设条件的种子存储至所述预设种子池中以更新所述预设种子池;
S222,对更新后的所述预设种子池内的所有种子重复上述筛选及变异过程,直至更新后的所述预设种子池内满足所述预设条件的每一种子的变异次数分别达到预设次数;
S223,基于更新后的所述预设种子池内的所有种子,对所述待测试软件进行测试。
具体地,上述实施例中提供的基于种子在执行时对待测试软件中程序的覆盖范围,从预设种子池内筛选出满足第一预设条件的种子进行导向性变异的方案,可以从另一个角度进行理论支撑。
对于预设种子池内的初始输入种子来说,并不是所有初始输入种子都能够进行变异,所以需要对预设种子池内的初始输入种子进行筛选,筛选的过程具有一定标准,即需要满足预设条件,为将此预设条件与上述的第一预设条件进行区分,本发明实施例中将预设条件记为第二预设条件。第二预设条件通过预设种子池内的初始输入种子的种子变异属性、种子执行速度、种子大小以及种子命中程序分支属性确定。
对于筛选出的初始输入种子进行导向性变异,从变异后的种子中再次以第二预设条件为标准筛选出种子存储至预设种子池内,以更新预设种子池。然后再对更新后的预设种子池内的所有种子重复上述筛选及变异过程,直至更新后的预设种子池内满足预设条件的每一种子的变异次数分别达到预设次数,基于更新后的预设种子池内的所有种子,对所述待测试软件进行测试。
这里需要说明的是,对于不同的种子,需要设置不同的变异次数,所以对于每一种子来说,预设变异次数是不同的,所以上述重复过程的终止条件是更新后的预设种子池内满足预设条件的每一种子的变异次数分别达到预设次数。
在上述实施例的基础上,所述预设条件具体为:所述种子变异属性为未经变异、所述种子执行速度与所述种子大小的乘积最小以及所述种子命中程序分支属性为命中所述待测试软件中程序的稀有分支;
所述稀有分支为:所述待测试软件中程序对应预设命中次数的分支。
具体地,这里的预设条件是指上述的第二预设条件。为方便描述,本发明实施例中将种子执行速度与所述种子大小的乘积最小的种子记为第一类目标种子,将种子命中程序分支属性为命中所述待测试软件中程序的稀有分支的种子记为第二类目标种子。
首先,由于已经经过变异的种子价值较低,所以并不是导向性变异的合适选择,但是本发明实施例中并不是以100%的概率将已经经过变异的初始输入种子跳过,而是以99%的概率将已经经过变异的初始输入种子跳过。跳过即是不满足第二预设条件,不进行导向性变异。这里所述的种子既指初始输入种子,也指经变异后的种子。当种子是指经变异后的种子时,已经经过变异的种子是指经变异后的种子本身是否再次发生变异。
其次,对于判断种子是否属于第一类目标种子来说,具体方法为:对于所述待测试软件中程序的任一分支,若判断获知命中所述任一分支的任一种子的执行速度与种子大小的乘积,均小于命中所述任一分支的其他种子的执行速度与种子大小的乘积,则确定所述任一种子属于第一类目标种子。即如果对于所述待测试软件中程序的任一分支a,如果命中分支a的一个种子C的执行速度*种子大小的值是在能命中分支a的所有种子中的最小值,则可确定种子A属于第一类目标种子。需要说明的是,本发明实施例中并不是以100%的概率将不属于第一类目标种子的初始输入种子跳过,而是以99%的概率将不属于第一类目标种子的初始输入种子跳过。
最后,对于判断种子是否属于第二类目标种子来说,具体方法为:判断种子是否命中所述待测试软件中程序的稀有分支,如果命中稀有分支,则该初始输入种子属于第二类目标种子。这里需要说明的是,本发明实施例中并不是以100%的概率将不属于第二类目标种子的初始输入种子跳过,而是以99%的概率将不属于第二类目标种子的初始输入种子跳过。
在判断待测试软件中程序的分支是否为稀有分支时,首先需要确定待测试软件中程序的每一分支的命中次数,命中次数为预设命中次数的分支为稀有分支。其中,预设命中次数具有一定的取值范围,具体的取值范围可通过如下公式表示:
其中,d为预设命中次数,n为待测试软件中程序的分支中命中次数最少的分支对应的命中次数。本发明实施例中也可将待测试软件中程序的分支中命中次数最少的分支称为最稀有分支,所以n也可称为最稀有分支的命中次数。
在S2之前还包括为基于导向性变异的模糊测试构建一套第二类二进制版本,第二类二进制版本主要用于构建第二可执行文件。第二类二进制版本可基于动态符号执行工具KLEE中LLVM中间表示(Intermediate Representation,IR)的符号化产生,第二类二进制版本应用于导向性变异的模糊测试,此版本将利用程序插桩来构建强化的第二可执行文件。即通过程序插桩在第二可执行文件加入了内存安全检测程序,可以检测出包括堆栈溢出在内的各种类型的内存安全问题。
本发明实施例中,基于符号执行产生多个预设测试用例文件,并将所述多个预设测试用例文件作为基于导向性变异的模糊测试的初始输入种子;基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试。本发明实施例提供的软件内存安全检测方法及系统,充分利用了符号执行产生的测试用例文件。同时,对模糊测试中的变异进行改进,得到导向性变异方法,将符号执行与导向性变异结合,对所有初始输入种子进行筛选,仅仅对所有初始输入种子中满足条件的种子才进行变异,可以不需要对所有初始输入种子均进行变异,去除了无效的变异,提高了变异的有效性,缩短了模糊测试过程中变异的种子具有新的覆盖范围的过程,进而节约了资源。
在上述实施例的基础上,所述通过符号执行确定待测试软件的多个预设测试用例文件具体包括:
将所述待测试软件进行符号执行,从所述符号执行输出的所有测试用例文件中选取对应于符号执行中预设路径探索深度的测试用例文件,确定多个预设测试用例文件。
具体地,由于在进行符号执行时可以各个路径探索深度的测试用例文件,对于一些路径探索深度较浅的测试用例文件来说,并不是一个很好的初始输入种子,而且如果将符号执行产生的各个路径探索深度的测试用例文件均作为初始输入种子,很容易导致路径爆炸的问题,同时会使符号执行的强度变大,将会在符号执行过程消耗大量时间以及巨大的计算资源,造成检测效率低下。所以本发明实施例中采用轻量级的符号执行,即调整符号执行的路径探索策略,重点集中在预设路径探索深度的深度路径上,避免受到路径爆炸问题的影响。而且,选择在较深的深度路径上进行符号执行,可以提升系统的运行效率。本发明实施例中,将预设路径探索深度设置为至少两层选择嵌套语句。
同时,本发明实施例中为尽可能的减少符号执行的运行时间,将符号执行所占用的资源进行严格的监控和限制,将符号执行的最大时间设定为预设时间,预设时间的取值可根据进行设定。本发明实施例中通过大量实验验证,且综合考虑符号执行的充分性及符号执行占用的资源,可将预设时间设置为20min。
本发明实施例中,预设种子池实际上是一个先进先出的队列。
在上述实施例的基础上,所述程序的稀有分支具体通过如下方法确定:
获取当前时刻所述程序的每一分支的命中次数,从所述程序的所有分支中选取预设命中次数的分支作为所述稀有分支。
具体地,一般情况下,程序由多个不同的程序块构成,程序在执行时会在各个程序块之间进行迁移或变迁,这种迁移或变迁即为程序的分支。程序在执行种子时,会经过程序不同的分支以形成路径,种子经过的分支即为该种子能够触发的分支,即命中的分支。
由于在本发明实施例中,程序的稀有分支是指程序中命中次数为预设命中次数的分支。在进行导向性变异的过程中,不同时刻对应的程序的稀有分支并不相同。所以要确定某一时刻的程序的稀有分支可以通过获取当前时刻程序的每一分支的命中次数,从程序的所有分支中选取预设命中次数的分支作为程序的稀有分支。
对于初始情况下,即初始输入种子并没有发生导向性变异的情况下,则可在对初始输入种子进行筛选后,将会产生新的覆盖范围的初始输入种子存储在预设种子池中。然后随机从会产生新的覆盖范围的初始输入种子中选取的一个种子进行预设次数次变异,利用待测试软件分别执行每次变异得到的种子,根据待测试软件中程序的每一分支的命中次数,确定待测试软件中初始情况下的程序的稀有分支。
设预设次数为1000次,从预设种子池中随机选取一种子C,并对选取的种子进行1000次变异,会得到1000个变异种子,将1000个变异种子分别输入至待测试软件,以使待测试软件分别执行每一变异种子,并根据待测试软件中程序的每一分支的命中次数,即每一分支被多少个变异种子命中,确定待测试软件中程序的稀有分支。例如待测试软件中程序有三个分支,分别为分支b、c和d,分支b的命中次数为255,分支c的命中次数为273,分支d的命中次数为232,则待测试软件中程序的稀有分支为分支d。
本发明实施例中为稀有分支的确定提供了一种可行性的方案。其中,由于预设种子池为先进先出的队列,为节约资源和时间,可直接选取预设种子池中第一个进入的种子进行变异。
在上述实施例的基础上,S2中所述导向性变异具体包括:确定性变异和导向性随机变异;
所述确定性变异包括:对满足所述预设条件的种子按位进行翻转、替换或进行算数运算;
所述导向性随机变异包括:随机筛选满足所述预设条件的种子的变异位数及变异位置,并基于所述变异位置处字节的变异属性,对满足所述预设条件的种子的变异位置处字节进行变异。
具体地,本发明实施例中,针对如何对筛选出的种子进行变异进行详细说明。导向性变异的过程主要分为两个阶段,第一阶段为确定性变异,即在第一阶段的变异方式是固定的,具体的变异方式可包括将每一种子按位进行翻转、替换或进行算数运算,得到第一类变异目标种子。其中,按位进行翻转具体可包括单个位按位翻转和多个位按位翻转。单个位按位翻转是指单独翻转每一种子中的每一个二进制位,将0翻转为1,1翻转为0。多个位按位翻转是指同时翻转每一种子中的多个二进制位,多个二进制位具体可包括2位,4位,8位,16位和32位,或者其他2的指数次幂个位。按位进行替换包括经典值替换和字典值替换,其中经典值替换是利用已知的经典值,例如用0,MAX_INT等对种子中的每个二进制位进行替换;字典值替换是利用用户定义的字典单词对种子中的一个或多个二进制位进行替换。算数运算则是对种子中的每个二进制位进行加减操作。
导向性变异的第二阶段为导向性随机变异,即第二阶段的变异方式是随机的,具体的变异方式可包括随机选择所述第一类变异目标种子的变异位数及变异位置,基于所述第一类变异目标种子变异位置处字节的变异属性,对所述第一类变异目标种子变异位置处字节进行变异,得到第二类变异目标种子,完成最后的变异。
这里所述的字节的变异属性包括可前插入的、可删除的和可替换的。可前插入的是指可在该字节前插入一个随机的字节。可删除的是指可直接删除该字节。可替换的是指将该字节替换为随机的字节。如果一个字节同时具有多个属性,则随机选择一种属性进行变异。
字节的变异属性的判断,即导向性随机变异的前期准备工作,寻找字节的变异方式,也就是判断字节是可替换的、可在前插入的还是可删除的字节通过如下方法进行:首先产生一个随机的字节m并利用字节m分别去替换每一个第一类目标种子的每一个字节,如果替换后生成的种子和原始的第一类目标种子的最稀有分支相同,则把此字节的属性设置为可替换的字节。接着用一个随机产生的字节插入到每一个第一类目标种子的每一个字节之前,如果生成的种子和原始的第一类目标种子的最稀有分支相同,则把此字节设置为可在前插入的字节。最后按顺序单独删除输入的每一个第一类目标种子中的每一个字节,若生成的种子和原始的第一类目标种子的最稀有分支相同,则把此字节设置为可删除的字节。
最后的变异方式是切片和重组。即选择多个第一类目标种子,对每个第一类目标种子进行切片,之后选择若干切片随机组合在一起以形成新的变异种子。
本发明实施例中,通过两次变异阶段,而且基于字节的变异属性进行变异,为导向性变异提供了一种新方法,可以提高变异效率,使变异后的种子更有利用价值。
在上述实施例的基础上,所述方法还包括:
将更新后的所述预设种子池内的所有种子分别输入至所述待测试软件,以使所述待测试软件分别执行更新后的所述预设种子池内的每一种子;
若判断获知更新后的所述预设种子池内的所有种子中的任一种子在执行时触发所述待测试软件的问题,则将所述任一种子存储至预设文件中,以产生崩溃报告。
具体地,本发明实施例中将更新后的所述预设种子池内的所有种子分别输入至所述待测试软件,如果判断出种子在执行时对所述待测试软件中程序的覆盖范围,与执行此种子之前执行的种子对应的覆盖范围之和之间的重合结果为不完全重合,即说明此种子具有利用价值,可再次被变异,并将变异后的产生的种子存储至所述预设种子池中,以进行再次判断是否满足第二预设条件进行变异。如果判断出种子在执行时触发待测试软件的问题,则将此种子存储至预设文件中,以产生崩溃报告。需要说明的是,预设文件用于存储可触发待测试软件的问题的种子。
在上述实施例的基础上,S2中通过所述导向性变异对所有初始输入种子中的第一类目标种子进行变异的变异次数通过如下公式计算:
其中,α(i)为更新后的所述预设种子池内满足所述预设条件的种子i的基本变异次数;β和M均为常数;s(i)为更新后的所述预设种子池内满足所述预设条件的种子截止至当前时刻从所述预设种子池或更新后的所述预设种子池中被选取的次数;f(i)为更新后的所述预设种子池内满足所述预设条件的种子i覆盖的所述待测试软件中程序的路径被执行的总次数。
具体地,为保证高效性,在确定好满足第二预设条件的种子和变异方式后,还需要确定对满足第二预设条件的种子进行导向性随机变异的变异次数,不同的种子变异次数会进行动态的变化,确定变异次数的过程被称为能量调度。变异过程可建模为马尔科夫链模型,根据种子大小、种子执行速度、种子命中程序分支数和种子覆盖的路径深度等。首先根据种子执行速度,种子命中程序分支数和种子覆盖的路径深度确定每一个种子的基本变异次数。种子执行速度越快、种子命中程序分支数越多、种子覆盖的路径深度越深,基本变异次数越大。然后采用如上公式确定最终的变异次数。作为优选方案,可将β设置为1,将M设置为32。
本发明实施例中,通过计算出适当的变异次数,给与能具有新的覆盖范围的种子更多的变异次数,尽量减少对无利用价值种子的变异。
本发明所提供的基于符号执行与导向性变异的软件内存安全检测方法可由一系列功能组件组成,包括:工具链组件、符号执行组件和导向性变异组件。
工具链组件为符号执行和模糊测试分别构建不同的第一类二进制版本和第二类二进制版本。第一类二进制版本被传递到轻量级的符号执行组件以生成多个预设测试用例文件。第二类二进制版本应用于模糊测试,此版本将利用插桩技术来构建强化的二进制文件。强化的二进制文件可以使动态执行达到最好的效果,检测出堆溢出等各种内存安全问题。
符号执行组件为导向性变异组件提供了初始输入种子。经过轻量级符号执行,缓解路径爆炸问题的影响,生成可以探索到程序深出的初始输入种子,即优质种子。
导向性变异组件在初始输入种子中满足第二预设条件的种子的基础上不断进行导向性变异,不断扩大对程序状态空间的覆盖。该组件应实现了导向性模糊测试算法,包括公平的种子筛选,给予能命中稀有分支的种子更高的选择权重;有效的种子变异,既要保证变异能够发现新的覆盖范围,还要保证可命中稀有分支的种子在变异后仍能命中变异前的种子命中的稀有分支;适当的变异次数,给予能产生新的覆盖范围的种子更多的变异次数,尽量减少无效变异。
本发明所提供的基于符号执行与导向性变异的软件内存安全检测,通过轻量级的符号执行,生成蕴含合理模糊测试方向的初始输入种子,在此基础上实现了具有导向性的公平快速的模糊测试的变异。相比传统工具,本发明将符号执行和模糊变异测试结合的更加紧密,缓解了符号执行路径爆炸的问题,更充分的利用了符号执行的结果,充分考虑了包括种子所覆盖分支的稀有性在内的多种因素,提升了内存安全检测的效率和效果。
如图3所示,图3为本发明实施例中提供的软件内存安全检测方法的整体流程图。工具链组件可包括系统工具链,工具链组件内设置有编译选项,通过输入源程序文件,产生中间表示,启动符号执行引擎进行符号执行,以生成初始输入种子,输入至模糊测试工具中。对于待检测软件产生的问题生成崩溃报告。另一方面,模糊测试工具通过第二可执行文件构建。初始输入种子的生成主要利用了KLEE工具,本发明实施例对符号执行过程进行了自动化配置和优化处理。工具链组件会自动的将源程序代码转化为LLVM表示的中间代码,同时解决了系统解决系统调用等不存在现有源程序代码的外部接口的适配问题。本发明实施例中采用的符号执行组件可兼容系统C函数库的实用工具函数,以及常用的POSIX API,可以让大多数程序在较小的改动下符号执行。
在上述实施例的基础上,如图4所示,本发明另一实施例提供了一种软件内存安全检测系统,包括:符号执行模块41和模糊测试模块42。其中,
符号执行模块41用于通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;
模糊测试模块42用于基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。
具体地,本发明实施例提供的软件内存安全检测系统中各模块的功能及操作流程与上述方法类实施例是一一对应的,本发明实施例中在此不再赘述。
如图5所示为本发明实施例中提供的软件内存安全检测系统的整个分层操作界面示意图。本发明实施例中采用分层理念,在减小开发和环境适配成本的同时,向用户提供友好的操作界面。整个系统共分为三层,分别为接口层51、工具层52和支持层53。
接口层51是系统对软件测试人员提供的操作外部接口。接口层封装了工具内部的复杂组件。一方面,提供了类似于系统原生编译工具链的操作方法,降低了软件测试人员构建待测程序时所需的学习成本;另一方面,自动化配置了模糊测试工具和符号执行工具的运行参数和运行环境,降低了软件测试人员运行工具时所需的学习成本。
工具层52由程序构建和测试运行阶段所依赖的核心组件组成包括符号执行部分和动态执行部分。符号执行部分,包括符号执行引擎、SMT求解引擎、外部环境模拟接口。符号执行引擎是符号执行部分的核心,用于加载源代码、中间代码、二进制代码等约定的程序表示形式,初始化内存模型,按照优化后的探索策略符号化执行程序,最后输出测试用例。SMT求解引擎,基于内置的定理集合,将符号执行引擎在程序执行路径上收集的符号限制条件,转化为实际输入值。外部环境模拟接口,用于符号化建模系统C函数库、网络和文件等待测程序外的交互行为,提供操作系统级别符号执行外更高效率的执行环境。
动态执行部分,包括基本块追踪插桩组件、安全强化插桩组件、基础编译器平台,测试入口程序,还有模糊测试引擎构成。基本块追踪插桩组件,用于收集程序在基本块间的有向跳转,并在标识全局程序执行状态的位图中体现出来。安全强化插桩组件,用于尽快捕捉程序在运行期间以内存安全问题为代表的未定义行为,防止程序的执行状态被污染后,在其他地方执行时崩溃,难以定位问题的源头。基础编译器平台,提供了可定制的模块化插桩接口,是上述两种插桩组件的运行基础。测试入口程序,用于接收模糊测试引擎的测试指令,同时导出基本块追踪插桩组件生成的位图信息,从本进程的内存共享到模糊测试引擎中。模糊测试引擎,是上文详细描述的核心组件,采用了优化的种子调度算法和变异算法。
支持层53是系统能够在工业环境部署的顺利部署并运行的保证。支持层包括系统准备实用工具和第三方库环境。系统准备实用工具,用于将整个测试系统快速安装到工业环境中,同时下载配置依赖的软件包。第三方库环境,包含了测试系统所使用,但各操作系统未包含的第三方库。
在上述实施例的基础上,如图6所示,本发明另一实施例提供了一种软件内存安全检测设备,包括:至少一个处理器61、至少一个存储器62、通信接口63和总线64;其中,所述处理器61、存储器62、通信接口63通过所述总线64完成相互间的通信;所述通信接口63用于该检测设备与显示装置的通信设备之间的信息传输;所述存储器62存储有可被所述处理器执行的程序指令,所述处理器61调用所述程序指令能够执行如图1所述的方法。
在上述实施例的基础上,本发明另一实施例提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如图1所述的方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种软件内存安全检测方法,其特征在于,包括:
S1,通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;
S2,基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。
2.根据权利要求1所述的方法,其特征在于,S2具体包括:
S221,将所有初始输入种子依次存储至预设种子池内,基于种子变异属性、种子执行速度、种子大小以及种子命中程序分支属性,从所述预设种子池内筛选满足预设条件的种子进行导向性变异,并基于种子变异属性、种子执行速度、种子大小以及种子命中程序分支属性,从变异产生的种子中选取满足所述预设条件的种子存储至所述预设种子池中以更新所述预设种子池;
S222,对更新后的所述预设种子池内的所有种子重复上述筛选及变异过程,直至更新后的所述预设种子池内满足所述预设条件的每一种子的变异次数分别达到预设次数;
S223,基于更新后的所述预设种子池内的所有种子,对所述待测试软件进行测试。
3.根据权利要求2所述的方法,其特征在于,所述预设条件具体为:所述种子变异属性为未经变异、所述种子执行速度与所述种子大小的乘积最小以及所述种子命中程序分支属性为命中所述待测试软件中程序的稀有分支;
所述稀有分支为:所述待测试软件中程序对应预设命中次数的分支。
4.根据权利要求2所述的方法,其特征在于,S2中所述导向性变异具体包括:确定性变异和导向性随机变异;
所述确定性变异包括:对满足所述预设条件的种子按位进行翻转、替换或进行算数运算;
所述导向性随机变异包括:随机筛选满足所述预设条件的种子的变异位数及变异位置,并基于所述变异位置处字节的变异属性,对满足所述预设条件的种子的变异位置处字节进行变异。
5.根据权利要求2所述的方法,其特征在于,还包括:
将更新后的所述预设种子池内的所有种子分别输入至所述待测试软件,以使所述待测试软件分别执行更新后的所述预设种子池内的每一种子;
若判断获知更新后的所述预设种子池内的所有种子中的任一种子在执行时触发所述待测试软件的问题,则将所述任一种子存储至预设文件中,以产生崩溃报告。
6.根据权利要求2所述的方法,其特征在于,所述更新后的所述预设种子池内满足所述预设条件的每一种子对应的预设次数通过如下公式计算:
其中,α(i)为更新后的所述预设种子池内满足所述预设条件的种子i的基本变异次数;β和M均为常数;s(i)为更新后的所述预设种子池内满足所述预设条件的种子截止至当前时刻从所述预设种子池或更新后的所述预设种子池中被选取的次数;f(i)为更新后的所述预设种子池内满足所述预设条件的种子i覆盖的所述待测试软件中程序的路径被执行的总次数。
7.根据权利要求1-6中任一项所述的方法,其特征在于,S1中所述通过符号执行确定待测试软件的多个预设测试用例文件具体包括:
将所述待测试软件进行符号执行,从所述符号执行输出的所有测试用例文件中选取对应于符号执行中预设路径探索深度的测试用例文件,确定多个预设测试用例文件。
8.一种软件内存安全检测系统,其特征在于,包括:
符号执行模块,用于通过符号执行确定待测试软件的多个预设测试用例文件,并将所述多个预设测试用例文件分别转换为基于导向性变异的模糊测试的初始输入种子;
模糊测试模块,用于基于所有初始输入种子,对所述待测试软件进行基于导向性变异的模糊测试,所述导向性变异为根据所述待测试软件中程序的覆盖范围进行的变异。
9.一种软件内存安全检测设备,其特征在于,包括:
至少一个处理器、至少一个存储器、通信接口和总线;其中,
所述处理器、存储器、通信接口通过所述总线完成相互间的通信;
所述通信接口用于该检测设备与显示装置的通信设备之间的信息传输;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1-7中任一项所述的方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810444279.0A CN108647145B (zh) | 2018-05-10 | 2018-05-10 | 软件内存安全检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810444279.0A CN108647145B (zh) | 2018-05-10 | 2018-05-10 | 软件内存安全检测方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108647145A true CN108647145A (zh) | 2018-10-12 |
CN108647145B CN108647145B (zh) | 2020-01-03 |
Family
ID=63754376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810444279.0A Active CN108647145B (zh) | 2018-05-10 | 2018-05-10 | 软件内存安全检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108647145B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109460662A (zh) * | 2018-11-05 | 2019-03-12 | 杭州安恒信息技术股份有限公司 | 一种基于路径反馈的Javascript引擎模糊测试方法和装置 |
CN109992507A (zh) * | 2019-03-22 | 2019-07-09 | 北京信息科技大学 | 基于模拟执行的程序模糊测试方法及装置 |
CN110147310A (zh) * | 2019-04-02 | 2019-08-20 | 中国科学院信息工程研究所 | 一种基于变异策略的并行模糊测试调度方法及装置 |
CN110348220A (zh) * | 2019-06-28 | 2019-10-18 | 北京威努特技术有限公司 | 一种漏洞挖掘方法、漏洞修复验证方法、装置及电子设备 |
CN111124926A (zh) * | 2019-12-25 | 2020-05-08 | 支付宝(杭州)信息技术有限公司 | 模糊测试方法、装置、电子设备及存储介质 |
CN111625448A (zh) * | 2020-05-06 | 2020-09-04 | 清华大学 | 协议包生成方法、装置、设备及存储介质 |
CN111694741A (zh) * | 2020-06-05 | 2020-09-22 | 中国工程物理研究院计算机应用研究所 | 一种基于路径深度覆盖的测试用例设计方法 |
CN111858307A (zh) * | 2020-06-18 | 2020-10-30 | 三星(中国)半导体有限公司 | 模糊测试方法和设备 |
CN111858374A (zh) * | 2020-07-28 | 2020-10-30 | 杭州安恒信息技术股份有限公司 | 一种实现字体模糊测试的方法、装置和介质 |
CN112363954A (zh) * | 2020-12-08 | 2021-02-12 | 南京大学 | 基于对象状态一致性的软件动态更新测试方法 |
CN115080978A (zh) * | 2022-05-20 | 2022-09-20 | 南方科技大学 | 一种基于模糊测试的运行时漏洞检测方法及系统 |
CN115794651A (zh) * | 2022-12-21 | 2023-03-14 | 北京水木羽林科技有限公司 | 一种支持多二进制的无冲突插桩方法和系统 |
CN116225962A (zh) * | 2023-03-31 | 2023-06-06 | 四川邦辰信息科技有限公司 | 用于模糊测试的json变异方法 |
WO2024178567A1 (zh) * | 2023-02-27 | 2024-09-06 | 华为技术有限公司 | 一种软件测试用例生成方法及相关装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102087631A (zh) * | 2011-03-09 | 2011-06-08 | 中国人民解放军国发科学技术大学 | 一种面向状态协议实现软件的模糊测试方法 |
CN104375942A (zh) * | 2014-12-11 | 2015-02-25 | 无锡江南计算技术研究所 | 一种面向二进制的混合模糊测试方法 |
CN105808369A (zh) * | 2016-03-29 | 2016-07-27 | 北京系统工程研究所 | 一种基于符号执行的内存泄漏检测方法 |
CN105938451A (zh) * | 2015-11-26 | 2016-09-14 | 北京匡恩网络科技有限责任公司 | 不完全反馈模糊测试框架 |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
-
2018
- 2018-05-10 CN CN201810444279.0A patent/CN108647145B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102087631A (zh) * | 2011-03-09 | 2011-06-08 | 中国人民解放军国发科学技术大学 | 一种面向状态协议实现软件的模糊测试方法 |
CN104375942A (zh) * | 2014-12-11 | 2015-02-25 | 无锡江南计算技术研究所 | 一种面向二进制的混合模糊测试方法 |
CN105938451A (zh) * | 2015-11-26 | 2016-09-14 | 北京匡恩网络科技有限责任公司 | 不完全反馈模糊测试框架 |
CN105808369A (zh) * | 2016-03-29 | 2016-07-27 | 北京系统工程研究所 | 一种基于符号执行的内存泄漏检测方法 |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
Non-Patent Citations (1)
Title |
---|
韩鹍 等: ""一种动静结合的高代码覆盖率模糊测试方法"", 《信息安全研究》 * |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109460662B (zh) * | 2018-11-05 | 2020-12-18 | 杭州安恒信息技术股份有限公司 | 一种基于路径反馈的Javascript引擎模糊测试方法和装置 |
CN109460662A (zh) * | 2018-11-05 | 2019-03-12 | 杭州安恒信息技术股份有限公司 | 一种基于路径反馈的Javascript引擎模糊测试方法和装置 |
CN109992507A (zh) * | 2019-03-22 | 2019-07-09 | 北京信息科技大学 | 基于模拟执行的程序模糊测试方法及装置 |
CN109992507B (zh) * | 2019-03-22 | 2022-06-24 | 北京信息科技大学 | 基于模拟执行的程序模糊测试方法及装置 |
CN110147310A (zh) * | 2019-04-02 | 2019-08-20 | 中国科学院信息工程研究所 | 一种基于变异策略的并行模糊测试调度方法及装置 |
CN110348220A (zh) * | 2019-06-28 | 2019-10-18 | 北京威努特技术有限公司 | 一种漏洞挖掘方法、漏洞修复验证方法、装置及电子设备 |
CN111124926A (zh) * | 2019-12-25 | 2020-05-08 | 支付宝(杭州)信息技术有限公司 | 模糊测试方法、装置、电子设备及存储介质 |
CN111124926B (zh) * | 2019-12-25 | 2022-09-16 | 支付宝(杭州)信息技术有限公司 | 模糊测试方法、装置、电子设备及存储介质 |
CN111625448A (zh) * | 2020-05-06 | 2020-09-04 | 清华大学 | 协议包生成方法、装置、设备及存储介质 |
CN111625448B (zh) * | 2020-05-06 | 2021-09-21 | 清华大学 | 协议包生成方法、装置、设备及存储介质 |
CN111694741A (zh) * | 2020-06-05 | 2020-09-22 | 中国工程物理研究院计算机应用研究所 | 一种基于路径深度覆盖的测试用例设计方法 |
CN111694741B (zh) * | 2020-06-05 | 2023-09-29 | 中国工程物理研究院计算机应用研究所 | 一种基于路径深度覆盖的测试用例设计方法 |
CN111858307A (zh) * | 2020-06-18 | 2020-10-30 | 三星(中国)半导体有限公司 | 模糊测试方法和设备 |
CN111858307B (zh) * | 2020-06-18 | 2024-04-19 | 三星(中国)半导体有限公司 | 模糊测试方法和设备 |
CN111858374A (zh) * | 2020-07-28 | 2020-10-30 | 杭州安恒信息技术股份有限公司 | 一种实现字体模糊测试的方法、装置和介质 |
CN111858374B (zh) * | 2020-07-28 | 2024-04-09 | 杭州安恒信息技术股份有限公司 | 一种实现字体模糊测试的方法、装置和介质 |
CN112363954A (zh) * | 2020-12-08 | 2021-02-12 | 南京大学 | 基于对象状态一致性的软件动态更新测试方法 |
CN115080978A (zh) * | 2022-05-20 | 2022-09-20 | 南方科技大学 | 一种基于模糊测试的运行时漏洞检测方法及系统 |
CN115794651B (zh) * | 2022-12-21 | 2023-08-18 | 北京水木羽林科技有限公司 | 一种支持多二进制的无冲突插桩方法和系统 |
CN115794651A (zh) * | 2022-12-21 | 2023-03-14 | 北京水木羽林科技有限公司 | 一种支持多二进制的无冲突插桩方法和系统 |
WO2024178567A1 (zh) * | 2023-02-27 | 2024-09-06 | 华为技术有限公司 | 一种软件测试用例生成方法及相关装置 |
CN116225962A (zh) * | 2023-03-31 | 2023-06-06 | 四川邦辰信息科技有限公司 | 用于模糊测试的json变异方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108647145B (zh) | 2020-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108647145B (zh) | 软件内存安全检测方法及系统 | |
Russell et al. | Automated vulnerability detection in source code using deep representation learning | |
CN108595341B (zh) | 测试用例自动生成方法及系统 | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN109271780A (zh) | 机器学习恶意软件检测模型的方法、系统和计算机可读介质 | |
Sethi et al. | A novel malware analysis framework for malware detection and classification using machine learning approach | |
CN103761481A (zh) | 一种恶意代码样本自动处理的方法及装置 | |
EP3264274A1 (en) | Input discovery for unknown program binaries | |
CN109918296A (zh) | 软件自动化测试方法及装置 | |
US9495542B2 (en) | Software inspection system | |
Mohi-Aldeen et al. | Application of Negative Selection Algorithm (NSA) for test data generation of path testing | |
CN113468524B (zh) | 基于rasp的机器学习模型安全检测方法 | |
CN111400713A (zh) | 基于操作码邻接图特征的恶意软件族群分类方法 | |
Lin et al. | Browser fuzzing by scheduled mutation and generation of document object models | |
CN111309589A (zh) | 一种基于代码动态分析的代码安全扫描系统及方法 | |
CN116702157B (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
CN111625448B (zh) | 协议包生成方法、装置、设备及存储介质 | |
Cai et al. | Automatic software vulnerability detection based on guided deep fuzzing | |
CN114780967B (zh) | 基于大数据漏洞挖掘的挖掘评估方法及ai漏洞挖掘系统 | |
Dang et al. | Multi-task optimization-based test data generation for mutation testing via relevance of mutant branch and input variable | |
Ahn et al. | Data embedding scheme for efficient program behavior modeling with neural networks | |
Zhang et al. | Machine Learning-based Fuzz Testing Techniques: A Survey | |
Jiang et al. | An exploitability analysis technique for binary vulnerability based on automatic exception suppression | |
Larson | Program analysis too loopy? Set the loops aside | |
Schweiger et al. | Malware analysis on the cloud: Increased performance, reliability, and flexibilty |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |