CN102385550A - 一种针对软件缺陷的检测方法 - Google Patents

一种针对软件缺陷的检测方法 Download PDF

Info

Publication number
CN102385550A
CN102385550A CN2010102668067A CN201010266806A CN102385550A CN 102385550 A CN102385550 A CN 102385550A CN 2010102668067 A CN2010102668067 A CN 2010102668067A CN 201010266806 A CN201010266806 A CN 201010266806A CN 102385550 A CN102385550 A CN 102385550A
Authority
CN
China
Prior art keywords
node
test case
program
tested
code
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
Application number
CN2010102668067A
Other languages
English (en)
Other versions
CN102385550B (zh
Inventor
胡昌振
秦强
王崑声
闫怀志
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Technology BIT
Original Assignee
Beijing Institute of Technology BIT
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Technology BIT filed Critical Beijing Institute of Technology BIT
Priority to CN2010102668067A priority Critical patent/CN102385550B/zh
Publication of CN102385550A publication Critical patent/CN102385550A/zh
Application granted granted Critical
Publication of CN102385550B publication Critical patent/CN102385550B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种针对软件缺陷(software vulnerability)的检测方法,属于信息安全技术领域。其具体操作步骤如下:①收集包含已知缺陷的软件源代码程序;②获取缺陷代码表;③获取待测试程序的控制流图CFG和汇编代码;④确定待测试程序汇编代码中的重点分析代码段并通过待测试程序的控制流图CFG获取经过重点分析代码段对应的节点的所有路径;⑤对每条可疑路径,利用改进的Fuzzing测试方法进行检测,得到待测试程序的检测结果。本发明在确定适应度函数时,消除了对被测程序的源代码的依赖,并保持了信息的可用性;消除了抽象语法树中的冗余信息并保持有用信息的完整性因此具有更好的实用性和更高的效率。

Description

一种针对软件缺陷的检测方法
技术领域
本发明涉及一种针对软件缺陷(software vulnerability)的检测方法,属于信息安全技术领域。
背景技术
随着计算机技术的迅速发展,人类社会的信息化程度越来越高,整个社会的政治、经济、军事、文化以及其他领域对计算机信息系统的依赖程度也越来越高。在这种情况下,计算机系统的安全性得到了人们越来越多的关注。然而,大型软件、系统的编写需要许许多多程序员共同完成,他们将一个软件或系统分成若干板块,分工编写,然后再汇总,测试;最后再修补、发布,因此在软件中存在安全漏洞几乎是不可避免的。软件缺陷包括软件安全漏洞和其它软件错误。软件安全漏洞是在软件设计实现过程中被引入的、在数据访问或行为逻辑等方面的错误并被攻击者利用,从而使程序行为违背一定的安全策略。其它软件错误是相对于基于软件安全漏洞来讲不能够威胁到软件系统安全的那些软件错误。
按照检测过程中是否需要执行程序的标准,软件安全漏洞检测技术分为动态检测和静态检测。
(1)动态测试
动态测试是在程序运行过程中注入测试数据,通过对程序的运行环境(包括环境变量、内存、堆和栈等)进行分析,观察程序运行是否正常、程序行为是否满足要求,来检测程序是否存在漏洞。动态检测技术的优点是不直接面对源代码,不需要修改目标程序源代码,这在一定程度上提高程序的保密性。但其缺点是仅关注程序运行的外部表现,因此,定位不准确、漏报率高,不能很好地发现隐藏在程序中的漏洞。动态测试主要应用于软件生命周期的测试阶段。
(2)静态检测
静态检测主要应用于软件生命周期的编码阶段。静态检测不编译运行程序,而是通过对程序源代码进行分析以发现其中的错误。静态检测的目标不是证明程序完全正确,而是作为动态测试的补充,在程序运行前尽可能多地发现其中隐含的错误,提高程序的可靠性和健壮性。对一些状态有限且对稳定性要求很高的软件来说,采用适当的静态检测技术是非常有必要的。但静态检测也有局限性,对于程序的某些性质(比如和指针运算、动态存储分配等相关的性质),用静态检测难以奏效。因此,静态检测并不能完全替代动态测试。
目前对软件安全漏洞检测技术的研究有很多,这些方法可用于对软件缺陷进行检测,但其检测的不够全面,基本检测不到与软件安全漏洞对应的其它软件错误。
本发明提出的方法中使用到两项重要的已有技术:遗传算法和Fuzzing技术。
遗传算法是近年来发展迅速的一种启发式搜索算法。自上世纪70年代美国Michigan大学的John Holland教授提出遗传算法(genetic algorithms,GA)的概念体系以来,遗传算法在许多领域得到了高度关注和广泛应用。遗传算法是一种借鉴生物界自然选择和自然遗传机制的高度并行、随机、自适应搜索算法。它借用了生物遗传学的观点,通过自然选择、遗传、变异等作用机制,实现各个个体的适应性的提高,体现了自然界中“物竞天择、适者生存”的进化过程。天然并行性和对全局信息的有效利用能力是遗传算法的两大显著特点。遗传算法不需要梯度信息,对目标函数性质没有过多要求。采用遗传算法来求解搜索问题,是充分发挥该算法并行、在满足一定条件上进行高效搜索的优点。
一个串行运算的遗传算法描述如下:
(1)对待解决问题进行编码;
(2)随机初始化种群X(0)=(x1,x2,…xk);k为初始种群数量;
(3)对当前群体X(t)(t为迭代次数)中的每个个体xi,计算其适应度Fit(xi)的值,适应度表示了该个体的性能好坏;
(4)应用选择算子产生中间代Xr(t);
(5)对Xr(t)应用其它的算子,产生新一代群体X(t+1),这些算子的目的在于扩展有限个体的覆盖面,体现全局搜索的思想;
(6)判断是否满足终止条件,如果满足,输出结果,结束;否则,t=t+1;返回(3)。
遗传算法中最常用的算子有如下几种:
(1)选择算子(selection/reproduction):选择算子从群体中按某一概率成对选择个体,某个体xi被选择的概率与其适应度值成正比。最通常的实现方法是轮盘赌(roulette wheel)模型。
(2)交叉算子(Crossover):交叉算子将被选中的两个个体的基因链按概率pc进行交叉,生成两个新的个体,交叉位置是随机的。其中pc是一个系统参数。
(3)变异算子(Mutation):变异算子将新个体的基因链的各位按概率pm进行变异。
Fuzzing是一种基于缺陷注入的自动软件测试技术。通过编写fuzzer工具向目标程序提供某种形式的输入并观察其响应来发现问题,这种输入可以是完全随机的或精心构造的。Fuzzing测试通常以大小相关的部分、字符串、标志字符串开始或结束的二进制块等为重点,使用边界值附近的值对目标进行测试。
主要有两种类型的fuzzing技术:
1.dumb fuzzing:这种测试无需了解协议或文件本身格式,通过提供完全随机的输入或简单改变某些字节去发现问题。这种方法实现起来较简单,容易快速触发错误,但它的完全随机性会导致产生大量无效的输入或格式。
2.Intelligent fuzzing:研究目标应用程序的协议或文件格式、功能配置,了解各类漏洞的成因,有目的地编写fuzzer。编写有效的fuzzer需要花费时间,但能够对某些感兴趣的部分集中测试,因此更有效。在对目标进行fuzzing的过程中,也可能存在各种问题:校验和、加密、压缩等措施会大大增加fuzzer工具的编写难度;编写智能化的fuzzer依赖目标程序的协议文档,因此协议文档的完整性影响fuzzing测试的效果,等等。
Fuzzing测试过程中需要采取措施记录目标的状态,通常通过日志的方式记录下各种信息,以便后续分析。目前比较有名的fuzzer工具有SPIKE和Peach,它们提供了对许多协议接口的支持,现有的许多fuzzer都是基于这两个框架实现的。
概括的讲,Fuzzing测试过程如下:
第1步:生成大量的数据作为测试用例。
第2步:将测试用例输入到程序中,看程序是否发生异常。
第3步:监测并记录任何引发程序崩溃或者异常的恶意输入。
第4步:审查测试日志,继续深入分析。
发明内容
本发明的目的是针对上述已有技术存在的不足,提出一种针对软件缺陷的检测方法。
本发明的目的是通过下述技术方案实现的。
一种针对软件缺陷的检测方法,其具体操作步骤如下:
步骤一、收集包含已知缺陷的软件源代码程序。
步骤二、获取缺陷代码表。
对步骤一中所述的软件程序进行处理,确认引发缺陷的相关代码,并利用反汇编工具得到引发缺陷的相关代码的汇编代码,构造缺陷代码表。
步骤三、获取待测试程序的控制流图CFG和汇编代码。
分析待测试程序的可执行文件,利用反汇编工具可得到待测试程序的控制流图CFG(Control Flow Graph)和汇编代码。控制流图CFG表示为G=<N,E>,其中N为控制流图CFG中的节点的集合,E为控制流图CFG中的边的集合。控制流图CFG中的每个节点对应待测试程序的可执行文件中的一个汇编代码段;控制流图CFG中的每条边表示各节点之间的跳转关系。然后为集合N建立一张节点起始地址表,其记录每个节点对应的汇编代码段的起始地址。
步骤四、确定待测试程序汇编代码中的重点分析代码段并通过待测试程序的控制流图CFG获取经过重点分析代码段对应的节点的所有路径。具体为:
步骤4.1:根据步骤二得到的缺陷代码表,在步骤三得到的待测试程序的汇编代码中查找缺陷代码表中的代码;如果在待测试程序的汇编代码中出现缺陷代码表中的代码,则记录其位置,确定其为重点分析代码段。
步骤4.2:在待测试程序的控制流图CFG中标记该重点分析代码段对应的节点位置。
步骤4.3:获取经过标记节点的所有路径,称之为可疑路径。
步骤五、对每条可疑路径,利用改进的Fuzzing测试方法进行检测,得到待测试程序的检测结果。
所述改进的Fuzzing测试方法与已有Fuzzing测试方法的区别在于:对已有Fuzzing测试方法的第1步生成的测试用例采用遗传算法,从中挑选出仅经过可疑路径的测试用例,并通过多次迭代不断生成经过可疑路径的测试用例。
其具体过程如下:
步骤5.1:将迭代次数generation的初始值为0,并随机生成一组测试用例X(generation)={x1,x2,……,xs};s为正整数,表示生成的测试用例的数量。设置记录X(generation)中的测试用例经过节点i的次数mi的初始值为0;表示节点i转向节点h的次数ni,h的初始值为0;节点i∈N;节点h∈N。
步骤5.2:设置遗传算法中使用到的参数值,包括:交叉概率CrossoverRate、变异概率Mutation Rate和最大迭代次数Max的值。
步骤5.3:设置表示测试用例序号j(j为正整数)的初始值为1。
步骤5.4:将待测试程序的控制流图CFG中每个节点的状态参数设置为0,表示测试用例未经过该节点。
步骤5.5:输入测试用例xj,并对测试用例xj在执行过程中所经过每个节点,作如下操作:
步骤5.5.1:在节点i,测试用例xj是否使待测试程序出现异常退出或出错的情况,如果使待测试程序出现异常退出或出错,则结束对该条可疑路径的检测,开始对下一条可疑路径的检测;否则,执行步骤5.5.2的操作。
步骤5.5.2:当测试用例xj使程序从节点i转向下一节点时,判断下一节点的起始地址是否出现在步骤三中所述节点起始地址表中,如果出现在步骤三中所述节点起始地址表中,称下一节点为节点h,同时mi和ni,h的值均增加1,并且如果节点h的状态参数为0,则将其状态更新为1;然后执行步骤5.6的操作;如果该节点的转向地址不在步骤三中所述节点起始地址表中,结束对该条可疑路径的检测,开始对下一条可疑路径的检测。
步骤5.6:j的值增1,并判断j>s是否成立,如果成立,则执行步骤5.7;否则,重复执行步骤5.4。
步骤5.7:判断generation≥Max是否成立,如果成立,则认为当前可疑路径上不存在潜在缺陷,结束对当前路径的检测;如果不成立,则执行步骤5.8。
步骤5.8:使用公式1,依次计算待测试程序的控制流图CFG中的节点i到节点i的下一节点h的适应度值f:
f ( i , h ) = n i , h m i - - - ( 1 )
步骤5.9:计算每个测试用例经过的路径的适应度值F′,计算方法为:将该测试用例经过的所有节点i到其下一节点h的适应度值的和或乘积作为该测试用例的适应度值F′。
步骤5.10:计算可疑路径的适应度值F;计算方法为:将该可疑路径上的所有节点i到其下一节点h的适应度值的和或乘积作为该可疑路径的适应度值F。
步骤5.11:在X(generation)中删除适应度值F′不等于可疑路径的适应度值F的测试用例。
步骤5.12:在X(generation)中进一步删除测试用例经过路径的第二个节点与可疑路径经过路径的第二个节点不同的测试用例。
步骤5.13:对X(generation)中的每一个测试用例转换成二进制编码。
步骤5.14:在X(generation)中随机选取两个测试用例xp和xq,采用单点交叉的策略,将测试用例xp和xq的二进制编码中的第r(r为正整数)位上的值以交叉概率Crossover Rate互换,生成两个新的子测试用例xp’和xq’,将其保存在X(generation+1)中;其中交叉位置r随机生成,并且确保测试用例xp和xq的二进制编码中的第r位上的值不相等。
步骤5.15:重复步骤5.14,直到X(generation)中的测试用例都被选中为止。
步骤5.16:在X(generation)中随机选取一个测试用例xa,在测试用例xa的二进制编码中的第v(v为正整数)位上的值,以变异概率Mutation Rate取反,生成一个子测试用例xa’,将其保存在X(generation+1)中,其中v随机生成。
步骤5.17:将X(generation+1)中的测试用例的二进制编码转换成原编码方式。
步骤5.18:迭代次数generation增加1;重复执行步骤5.3到步骤5.18的操作,直到完成对该可疑路径的检测。
重复执行步骤5.1到步骤5.18的操作,直到完成对所有可疑路径的检测;
经过上述步骤的操作,即可检测出待测试程序是否存在缺陷。
有益效果
本发明提出的方法与已有技术相比较,有如下优点:
①本发明在原有Fuzzing测试方法中,使用了遗传算法,确保了测试用例的有效性,是检测更实用、有效;
②在确定适应度值时,消除了对待测试程序的源代码的依赖;
③本发明不仅可以检测出待测试程序中潜在的漏洞进行检测,而且可以发现其中的其它缺陷问题,使检测结果更为全面。
附图说明
图1为关于本发明的针对软件缺陷的检测方法的一种具体实施方式中的操作流程示意图;
图2为关于本发明的针对软件缺陷的检测方法的一种具体实施方式中的控制流CFG图;
图3为关于本发明的针对软件缺陷的检测方法的一种具体实施方式中包含有节点适应度值的控制流CFG图。
具体实施方式
下面结合附图和具体实施例对本发明技术方案进行详细描述。
本实施例采用本发明方法对一个大小为172KB的待测试可执行程序进行测试,该可执行程序的功能是实现对密码的验证,如果验证结果为正确,则输出Access granted,如果验证结果为错误,则输出Access denied。
其操作流程如图1所示,具体为:
步骤一、收集包含已知缺陷的软件源代码程序。
收集已知的具有缺陷的软件程序及其源代码,共32个。其中包括缓冲区溢出、格式化字符串、整数溢出等漏洞程序和已知相关缺陷的程序。
步骤二、获取缺陷代码表。
对步骤一中所述的软件程序进行处理,确认引发缺陷的相关代码,并利用反汇编工具得到引发缺陷的相关代码的汇编代码,构造有32条记录的缺陷代码表。
步骤三、获取待测试程序的控制流图CFG和汇编代码。
经IDA pro分析待测试程序后,得到其CFG图,如图2所示。其中节点集N={A,B,C,D,E},边集E={AB,AE,BC,BD,CE,DE}。节点起始转向地址表如下:
表1节点起始转向地址表
  节点   起始地址
  A   00401070
  B   00401098
  C   004010CB
  D   004010DA
  E   004010E7
其中,节点A包含的汇编码如下:
sub_401070 proc near
var_50=byte ptr-50h
var_10=byte ptr-10h
var_4=dword ptr-4
push    ebp
mov     ebp,esp
sub     esp,50h
push    ebx
push    esi
push    edi
lea     edi,[ebp+var_50]
mov     ecx,14h
mov     eax,0CCCCCCCCh
rep stosd
mov     [ebp+var_4],0
mov     eax,1
test    eax,eax
jz      short loc_4010E7
节点B包含的汇编码如下:
push   offset aPleaseInputPas;″please input password:\t\t″
call   _printf
add    esp,4
lea    ecx,[ebp+var_10]
push    ecx
push    offset Format;″%s″
call    _scanf
add     esp,8
lea     edx,[ebp+var_10]
push    edx
call    sub_401005
add     esp,4
mov     [ebp+var_4],eax
cmp     [ebp+var_4],0
jz      short loc_4010DA
节点C包含的汇编码如下:
push    offset aIncorrectPassw
call    _printf
add     esp,4
jmp     short loc_4010E7
节点D包含的汇编码如下:
push    offset aCongratulation
call    _printf
add     esp,4
节点E包含的汇编码如下:
loc_4010E7:
pop     edi
pop     esi
pop     ebx
add     esp,50h
cmp     ebp,esp
call    _chkesp
mov     esp,ebp
pop     ebp
retn
sub_401070 endp
步骤四、确定待测试程序汇编代码中的重点分析代码段并通过待测试程序的控制流图CFG获取经过重点分析代码段对应的节点的所有路径。具体为:
步骤4.1:经过分析可确定,一段具有缓冲区溢出缺陷的汇编代码段出现在了节点B中,故将节点B进行标记。
步骤4.2:获取经过标记节点B的所有路径,A→B→C→E和A→B→D→E。
步骤五、对每条可疑路径,利用改进的Fuzzing测试方法进行检测。得到待测试程序的检测结果。
对路径A→B→C→E进行检测的具体过程如下:
步骤5.1:设置generation=0,并随机生成30个测试用例,使X(0)={x1,x2,……,x30}。设置mi=0,ni,h=0。
步骤5.2:设置交叉概率Crossover Rate=80%,变异概率MutationRate=75%,最大迭代次数Max=50。
步骤5.3:设置表示测试用例序号j的初始值为1。
步骤5.4:将待测试程序的控制流图CFG中每个节点的状态参数设置为0。
步骤5.5:输入测试用例xj,并记录测试用例xj在执行过程中所经过每个节点。
步骤5.6:当步骤5.1产生的30个测试用例执行完以后,根据步骤5.5的记录结果,执行步骤5.7。
步骤5.7:判断generation≥50是否成立,不成立,因此执行步骤5.8。
步骤5.8:使用公式1,得到待测试程序的控制流图CFG中的节点i到节点i的下一节点h的适应度值,f(A,B)=0.93;f(A,E)=0.07;f(B,C)=0.9;f(B,D)=0.1;f(C,E)=1;f(D,E)=1。
步骤5.9:使用步骤5.8得到的结果,分别计算30个测试用例经过的路径的适应度值F′,计算方法为:某一个测试用例经过的所有节点i到其下一节点h的适应度值的乘积即为该测试用例的适应度值F′。
步骤5.10:计算可疑路径A→B→C→E的适应度值F。
F=0.93×0.9×1=0.837
步骤5.11:在X(0)中删除适应度值不等于0.873测试用例。
步骤5.12:在X(0)中进一步删除测试用例经过路径的第二个节点不是节点B的测试用例。
步骤5.13:对X(0)中的每一个测试用例转换成二进制编码,如测试用例93547转换成二进制编码后为1001 0011 0101 0100 0111。
步骤5.14:随机选取两个测试用例x1、x7进行交叉操作,如下表所示:
  父测试用例   子测试用例
  1001 0011 0101 0100 0111   1001 0011 0101 0100 0101
  1010 0110 0101 0111 0100   1010 0110 0101 0111 0110
步骤5.15:重复步骤5.14,直到X(generation)中的测试用例都被选中为止。
步骤5.16:随机选取一个测试用例x29进行变异操作,在测试用例x29的二进制编码中,随机生成v值,本次操作中v=7,即将测试用例x29的二进制编码中第7位上的值,以变异概率90%取反,生成一个子测试用例x29’,如010001110001经过变异后为0100 0101 0001,将其保存在X(generation+1)中。
步骤5.17:将X(generation+1)中的测试用例的二进制编码转换成原编码方式。
步骤5.18:迭代次数generation增加1;重复执行步骤5.3到5.18的操作。经过多次的重复操作,在第9次迭代,即X(9),执行测试用例376242872765中,该测试程序出现了异常退出,确定节点B具有缓冲区溢出的缺陷。
重复执行步骤5.1到步骤5.18的操作,直到完成对所有可疑路径的检测。
使用本发明方法,共生成73个测试用例即检测出该待测试可执行文件的缺陷类型及所在位置。
为说明本发明效果,使用已有的Fuzzing测试方法对相同的待测试可执行文件进行测试,共生成2876个测试用例,该测试程序出现了异常退出。
上述实施例发现,在确定适应度值时没有利用待测试程序的源代码信息,也保持了检测结果的准确性;同时与传统的Fuzzing技术相比,两种方法生成的测试用例数量之比为73∶2876,也说明本发明方法的效率高。

Claims (1)

1.一种针对软件缺陷的检测方法,其特征在于:其具体操作步骤如下:
步骤一、收集包含已知缺陷的软件源代码程序;
步骤二、获取缺陷代码表;
对步骤一中所述的软件程序进行处理,确认引发缺陷的相关代码,并利用反汇编工具得到引发缺陷的相关代码的汇编代码,构造缺陷代码表;
步骤三、获取待测试程序的控制流图CFG和汇编代码;
分析待测试程序的可执行文件,利用反汇编工具可得到待测试程序的控制流图CFG和汇编代码;控制流图CFG表示为G=<N,E>,其中N为控制流图CFG中的节点的集合,E为控制流图CFG中的边的集合;控制流图CFG中的每个节点对应待测试程序的可执行文件中的一个汇编代码段;控制流图CFG中的每条边表示各节点之间的跳转关系,并为集合N建立一张节点起始地址表,其记录每个节点对应的汇编代码段的起始地址;
步骤四、确定待测试程序汇编代码中的重点分析代码段并通过待测试程序的控制流图CFG获取经过重点分析代码段对应的节点的所有路径;具体为:
步骤4.1:根据步骤二得到的缺陷代码表,在步骤三得到的待测试程序的汇编代码中查找缺陷代码表中的代码;如果在待测试程序的汇编代码中出现缺陷代码表中的代码,则记录其位置,确定其为重点分析代码段;
步骤4.2:在待测试程序的控制流图CFG中标记该重点分析代码段对应的节点位置;
步骤4.3:获取经过标记节点的所有路径,称之为可疑路径;
步骤五、对每条可疑路径,利用改进的Fuzzing测试方法进行检测,得到待测试程序的检测结果;
所述改进的Fuzzing测试方法与已有Fuzzing测试方法的区别在于:对已有Fuzzing测试方法的第1步生成的测试用例采用遗传算法,从中挑选出仅经过可疑路径的测试用例,并通过多次迭代不断生成经过可疑路径的测试用例;
其具体过程如下:
步骤5.1:将迭代次数generation的初始值为0,并随机生成一组测试用例X(generation)={x1,x2,……,xs};s为正整数,表示生成的测试用例的数量;设置记录X(generation)中的测试用例经过节点i的次数mi的初始值为0;表示节点i转向节点h的次数ni,h的初始值为0;节点i∈N;节点h∈N;
步骤5.2:设置遗传算法中使用到的参数值,包括:交叉概率CrossoverRate、变异概率Mutation Rate和最大迭代次数Max的值;
步骤5.3:设置表示测试用例序号j的初始值为1;j的取值范围为正整数;
步骤5.4:将待测试程序的控制流图CFG中每个节点的状态参数设置为0,表示测试用例未经过该节点;
步骤5.5:输入测试用例xj,并对测试用例xj在执行过程中所经过每个节点,作如下操作:
步骤5.5.1:在节点i,测试用例xj是否使待测试程序出现异常退出或出错的情况,如果使待测试程序出现异常退出或出错,则结束对该条可疑路径的检测,开始对下一条可疑路径的检测;否则,执行步骤5.5.2的操作;
步骤5.5.2:当测试用例xj使程序从节点i转向下一节点时,判断下一节点的起始地址是否出现在步骤三中所述节点起始地址表中,如果出现在步骤三中所述节点起始地址表中,称下一节点为节点h,同时mi和ni,h的值均增加1,并且如果节点h的状态参数为0,则将其状态更新为1;然后执行步骤5.6的操作;如果该节点的转向地址不在步骤三中所述节点起始地址表中,结束对该条可疑路径的检测,开始对下一条可疑路径的检测;
步骤5.6:j的值增1,并判断j>s是否成立,如果成立,则执行步骤5.7;否则,重复执行步骤5.4;
步骤5.7:判断generation≥Max是否成立,如果成立,则认为当前可疑路径上不存在潜在缺陷,结束对当前路径的检测;如果不成立,则执行步骤5.8;
步骤5.8:使用公式1,依次计算待测试程序的控制流图CFG中的节点i到节点i的下一节点h的适应度值:
f ( i , h ) = n i , h m i - - - ( 1 )
步骤5.9:计算每个测试用例经过的路径的适应度值F′,计算方法为:将该测试用例经过的所有节点i到其下一节点h的适应度值的和或乘积作为该测试用例的适应度值F′;
步骤5.10:计算可疑路径的适应度值F;计算方法为:将该可疑路径上的所有节点i到其下一节点h的适应度值的和或乘积作为该可疑路径的适应度值F;
步骤5.11:在X(generation)中删除适应度值F′不等于可疑路径的适应度值F的测试用例;
步骤5.12:在X(generation)中进一步删除测试用例经过的路径的第二个节点与可疑路径经过路径的第二个节点不同的测试用例;
步骤5.13:对X(generation)中的每一个测试用例转换成二进制编码;
步骤5.14:在X(generation)中随机选取两个测试用例xp和xq,采用单点交叉的策略,将测试用例xp和xq的二进制编码中的第r(r为正整数)位上的值以交叉概率Crossover Rate互换,生成两个新的子测试用例xp’和xq’,将其保存在X(generation+1)中;其中交叉位置r随机生成,并且确保测试用例xp和xq的二进制编码中的第r位上的值不相等;
步骤5.15:重复步骤5.14,直到X(generation)中的测试用例都被选中为止;
步骤5.16:在X(generation)中随机选取一个测试用例xa,在测试用例xa的二进制编码中的第v(v为正整数)位上的值,以变异概率Mutation Rate取反,生成一个子测试用例xa’,将其保存在X(generation+1)中,其中v随机生成;
步骤5.17:将X(generation+1)中的测试用例的二进制编码转换成原编码方式;
步骤5.18:迭代次数generation增加1;重复执行步骤5.3到步骤5.18的操作,直到完成对该可疑路径的检测;
重复执行步骤5.1到步骤5.18的操作,直到完成对所有可疑路径的检测;
经过上述步骤的操作,即可检测出待测试程序是否存在缺陷。
CN2010102668067A 2010-08-30 2010-08-30 一种针对软件缺陷的检测方法 Expired - Fee Related CN102385550B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102668067A CN102385550B (zh) 2010-08-30 2010-08-30 一种针对软件缺陷的检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102668067A CN102385550B (zh) 2010-08-30 2010-08-30 一种针对软件缺陷的检测方法

Publications (2)

Publication Number Publication Date
CN102385550A true CN102385550A (zh) 2012-03-21
CN102385550B CN102385550B (zh) 2012-10-31

Family

ID=45824980

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102668067A Expired - Fee Related CN102385550B (zh) 2010-08-30 2010-08-30 一种针对软件缺陷的检测方法

Country Status (1)

Country Link
CN (1) CN102385550B (zh)

Cited By (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103455759A (zh) * 2012-06-05 2013-12-18 深圳市腾讯计算机系统有限公司 一种页面漏洞检测装置及检测方法
CN104536894A (zh) * 2015-01-09 2015-04-22 哈尔滨工程大学 针对两层软件老化现象的基于维护费用的全局优化方法
CN105204997A (zh) * 2015-09-30 2015-12-30 首都师范大学 软件缺陷检测方法及装置
CN105205002A (zh) * 2015-10-28 2015-12-30 北京理工大学 一种基于测试工作量的软件安全缺陷发现模型的建模方法
CN105302719A (zh) * 2015-10-26 2016-02-03 北京科技大学 一种变异测试方法及装置
CN105808435A (zh) * 2016-03-08 2016-07-27 北京理工大学 一种基于复杂网络的软件缺陷评估模型的构建方法
CN107193731A (zh) * 2017-05-12 2017-09-22 北京理工大学 使用控制变异的模糊测试覆盖率改进方法
CN107194252A (zh) * 2017-05-09 2017-09-22 华中科技大学 一种完全上下文敏感的程序控制流完整性保护方法和系统
CN107346391A (zh) * 2016-05-06 2017-11-14 阿里巴巴集团控股有限公司 一种生成概念验证数据的方法及系统
CN107634939A (zh) * 2017-08-30 2018-01-26 国家电网公司 一种适用于376.1协议安全缺陷检测的模糊测试方法及系统
CN108268371A (zh) * 2016-12-30 2018-07-10 南京理工大学 面向Android应用的智能模糊测试方法
CN108427643A (zh) * 2018-03-21 2018-08-21 北京理工大学 基于多种群遗传算法的二进制程序模糊测试方法
CN108647520A (zh) * 2018-05-15 2018-10-12 浙江大学 一种基于脆弱性学习的智能模糊测试方法与系统
CN109063483A (zh) * 2018-06-21 2018-12-21 北京大学 一种基于路径追踪的漏洞检测方法及系统
CN109558166A (zh) * 2018-11-26 2019-04-02 扬州大学 一种面向缺陷定位的代码搜索方法
CN109840916A (zh) * 2019-01-22 2019-06-04 中国海洋大学 高频地波雷达舰船目标跟踪算法的测评方法
CN109885479A (zh) * 2019-01-07 2019-06-14 中国人民解放军战略支援部队信息工程大学 基于路径记录截断的软件模糊测试方法及装置
CN111125714A (zh) * 2019-12-18 2020-05-08 支付宝(杭州)信息技术有限公司 一种安全检测方法、装置及电子设备
CN111124723A (zh) * 2019-11-04 2020-05-08 北京轩宇信息技术有限公司 基于干扰变量的中断驱动型程序整数溢出模型检测方法
CN111143853A (zh) * 2019-12-25 2020-05-12 支付宝(杭州)信息技术有限公司 一种应用安全的评估方法和装置
CN111949984A (zh) * 2020-08-24 2020-11-17 北京天融信网络安全技术有限公司 一种漏洞防御方法及电子装置
CN113760700A (zh) * 2020-08-06 2021-12-07 北京京东振世信息技术有限公司 程序死循环检测方法、装置、电子设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101286132A (zh) * 2008-06-02 2008-10-15 北京邮电大学 一种基于软件缺陷模式的测试方法及系统
CN101710378A (zh) * 2009-10-10 2010-05-19 北京理工大学 一种基于序列模式挖掘的软件安全漏洞检测方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101286132A (zh) * 2008-06-02 2008-10-15 北京邮电大学 一种基于软件缺陷模式的测试方法及系统
CN101710378A (zh) * 2009-10-10 2010-05-19 北京理工大学 一种基于序列模式挖掘的软件安全漏洞检测方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
赵刚: "程序脆弱性发现中的测试数据生成方法研究", 《计算机工程与设计》 *
郑亮: "《Fuzzing漏洞挖掘技术分析》", 《全国计算机安全学术交流会议文集(第二十四卷)》 *
郭瑞杰: "《软件安全性测试技术研究》", 《第三届全国软件测试会议与移动计算、栅格、智能化高级论坛论文集》 *

Cited By (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103455759B (zh) * 2012-06-05 2017-03-15 深圳市腾讯计算机系统有限公司 一种页面漏洞检测装置及检测方法
CN103455759A (zh) * 2012-06-05 2013-12-18 深圳市腾讯计算机系统有限公司 一种页面漏洞检测装置及检测方法
CN104536894A (zh) * 2015-01-09 2015-04-22 哈尔滨工程大学 针对两层软件老化现象的基于维护费用的全局优化方法
CN104536894B (zh) * 2015-01-09 2017-08-04 哈尔滨工程大学 针对两层软件老化现象的基于维护费用的全局优化方法
CN105204997A (zh) * 2015-09-30 2015-12-30 首都师范大学 软件缺陷检测方法及装置
CN105204997B (zh) * 2015-09-30 2018-10-19 首都师范大学 软件缺陷检测方法及装置
CN105302719B (zh) * 2015-10-26 2017-11-28 北京科技大学 一种变异测试方法及装置
CN105302719A (zh) * 2015-10-26 2016-02-03 北京科技大学 一种变异测试方法及装置
CN105205002B (zh) * 2015-10-28 2017-09-29 北京理工大学 一种基于测试工作量的软件安全缺陷发现模型的建模方法
CN105205002A (zh) * 2015-10-28 2015-12-30 北京理工大学 一种基于测试工作量的软件安全缺陷发现模型的建模方法
CN105808435A (zh) * 2016-03-08 2016-07-27 北京理工大学 一种基于复杂网络的软件缺陷评估模型的构建方法
CN107346391A (zh) * 2016-05-06 2017-11-14 阿里巴巴集团控股有限公司 一种生成概念验证数据的方法及系统
CN108268371B (zh) * 2016-12-30 2021-03-02 南京理工大学 面向Android应用的智能模糊测试方法
CN108268371A (zh) * 2016-12-30 2018-07-10 南京理工大学 面向Android应用的智能模糊测试方法
CN107194252A (zh) * 2017-05-09 2017-09-22 华中科技大学 一种完全上下文敏感的程序控制流完整性保护方法和系统
CN107194252B (zh) * 2017-05-09 2019-11-22 华中科技大学 一种完全上下文敏感的程序控制流完整性保护方法和系统
CN107193731B (zh) * 2017-05-12 2020-10-27 北京理工大学 使用控制变异的模糊测试覆盖率改进方法
CN107193731A (zh) * 2017-05-12 2017-09-22 北京理工大学 使用控制变异的模糊测试覆盖率改进方法
CN107634939A (zh) * 2017-08-30 2018-01-26 国家电网公司 一种适用于376.1协议安全缺陷检测的模糊测试方法及系统
CN108427643A (zh) * 2018-03-21 2018-08-21 北京理工大学 基于多种群遗传算法的二进制程序模糊测试方法
CN108427643B (zh) * 2018-03-21 2020-12-08 北京理工大学 基于多种群遗传算法的二进制程序模糊测试方法
CN108647520A (zh) * 2018-05-15 2018-10-12 浙江大学 一种基于脆弱性学习的智能模糊测试方法与系统
CN109063483B (zh) * 2018-06-21 2020-05-12 北京大学 一种基于路径追踪的漏洞检测方法及系统
CN109063483A (zh) * 2018-06-21 2018-12-21 北京大学 一种基于路径追踪的漏洞检测方法及系统
CN109558166A (zh) * 2018-11-26 2019-04-02 扬州大学 一种面向缺陷定位的代码搜索方法
CN109558166B (zh) * 2018-11-26 2021-06-29 扬州大学 一种面向缺陷定位的代码搜索方法
CN109885479A (zh) * 2019-01-07 2019-06-14 中国人民解放军战略支援部队信息工程大学 基于路径记录截断的软件模糊测试方法及装置
CN109885479B (zh) * 2019-01-07 2022-02-01 中国人民解放军战略支援部队信息工程大学 基于路径记录截断的软件模糊测试方法及装置
CN109840916A (zh) * 2019-01-22 2019-06-04 中国海洋大学 高频地波雷达舰船目标跟踪算法的测评方法
CN111124723A (zh) * 2019-11-04 2020-05-08 北京轩宇信息技术有限公司 基于干扰变量的中断驱动型程序整数溢出模型检测方法
CN111124723B (zh) * 2019-11-04 2023-04-14 北京轩宇信息技术有限公司 基于干扰变量的中断驱动型程序整数溢出模型检测方法
CN111125714A (zh) * 2019-12-18 2020-05-08 支付宝(杭州)信息技术有限公司 一种安全检测方法、装置及电子设备
CN111143853A (zh) * 2019-12-25 2020-05-12 支付宝(杭州)信息技术有限公司 一种应用安全的评估方法和装置
CN111143853B (zh) * 2019-12-25 2023-03-07 支付宝(杭州)信息技术有限公司 一种应用安全的评估方法和装置
CN113760700A (zh) * 2020-08-06 2021-12-07 北京京东振世信息技术有限公司 程序死循环检测方法、装置、电子设备及存储介质
CN111949984A (zh) * 2020-08-24 2020-11-17 北京天融信网络安全技术有限公司 一种漏洞防御方法及电子装置
CN111949984B (zh) * 2020-08-24 2021-10-15 北京天融信网络安全技术有限公司 一种漏洞防御方法及电子装置

Also Published As

Publication number Publication date
CN102385550B (zh) 2012-10-31

Similar Documents

Publication Publication Date Title
CN102385550B (zh) 一种针对软件缺陷的检测方法
Danglot et al. A snowballing literature study on test amplification
Resch et al. Benchmarking quantum computers and the impact of quantum noise
Ouni et al. The use of development history in software refactoring using a multi-objective evolutionary algorithm
CN102508780B (zh) 一种用于软件测试的交叉式动态法和装置
CN103036730B (zh) 一种对协议实现进行安全测试的方法及装置
Gong et al. Evolutionary generation of test data for many paths coverage based on grouping
CN105868116A (zh) 基于语义变异算子的测试用例生成和优化方法
Beaman et al. Fuzzing vulnerability discovery techniques: Survey, challenges and future directions
Li et al. Deeplv: Suggesting log levels using ordinal based neural networks
CN110245085B (zh) 利用在线模型检验的嵌入式实时操作系统验证方法及系统
CN110110529B (zh) 一种基于复杂网络的软件网络关键节点挖掘方法
CN104635144A (zh) 一种不依赖基准曲线的硬件木马检测方法
He et al. Enhancing spectrum-based fault localization using fault influence propagation
Amar et al. Using finite-state models for log differencing
Sun et al. Multi-objective test case prioritization for GUI applications
Kim et al. Predictive mutation analysis via the natural language channel in source code
Ghiduk Using evolutionary algorithms for higher-order mutation testing
Zheng et al. An empirical study of high-impact factors for machine learning-based vulnerability detection
CN110162472A (zh) 一种基于fuzzing测试的测试用例生成方法
Kiefer et al. Apex: An analyzer for open probabilistic programs
Lambers et al. Model-based testing of read only graph queries
CN101930398A (zh) 基于Fuzzing技术的变异多维输入的软件脆弱性分析方法
Qiu et al. Chemfuzz: Large language models-assisted fuzzing for quantum chemistry software bug detection
Watkins et al. Using genetic algorithms and decision tree induction to classify software failures

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20121031

Termination date: 20140830

EXPY Termination of patent right or utility model