基于软件漏洞成因导向的定向灰盒模糊测试方法及装置制造方法及图纸

技术编号:38221376 阅读:12 留言:0更新日期:2023-07-25 17:52
本发明专利技术公布了一种基于软件漏洞成因导向的定向灰盒模糊测试方法及装置,包括:构建漏洞成因知识库模块、漏洞区域识别模块、测试用例选择模块、模糊测试模块;通过提取软件漏洞成因特征,构建软件代码漏洞成因知识库;根据漏洞成因特征识别得到待测软件的漏洞区域;根据待测软件的漏洞区域选择定向灰盒模糊测试用例,进行定向灰盒模糊测试。本发明专利技术能够解决现有技术中对软件漏洞挖掘准确性及效率较低的问题,通过软件静态分析与动态模糊测试相结合,加快软件漏洞检出速度,提高灰盒模糊测试的有效性和准确性。的有效性和准确性。的有效性和准确性。

【技术实现步骤摘要】
基于软件漏洞成因导向的定向灰盒模糊测试方法及装置


[0001]本专利技术涉及软件测试
,尤其涉及一种基于软件漏洞成因导向的定向灰盒模糊测试方法及装置。

技术介绍

[0002]模糊测试作为目前漏洞挖掘领域中广泛使用的方法,通过给目标程序构建非预期的输入,然后将其传递给目标程序执行并监测目标程序接收输入后的异常状况,以此发现软件存在的缺陷或漏洞。模糊测试是软件安全开发中非常重要的一环,通过模糊测试可提升软件的安全性。
[0003]根据对程序源代码的依赖性和程序分析的程度,模糊测试可以分为白盒模糊测试、灰盒模糊测试和黑盒模糊测试。白盒模糊测试可以访问程序的源代码,因此可以通过对源代码进行分析以及收集测试用例影响程序运行状态信息。黑盒模糊测试会在不了解目标程序内部的情况下进行模糊测试。灰盒模糊测试介于白盒模糊测试与黑盒模糊测试之间。灰盒模糊测试会同时考虑代码程序的逻辑结构以及观察目标程序执行时的输出来获取一些有价值的测试信息,利用这些信息来更好地提升模糊测试的效果。根据探索程序的策略,模糊测试又可以分为定向模糊测试和基于覆盖的模糊测试。定向模糊测试旨在生成覆盖目标代码和程序目标路径的测试用例,而基于覆盖的模测试旨在生成覆盖尽可能多的程序代码的测试用例。
[0004]定向灰盒模糊测试的目标是测试用例执行能够到达目标软件预先确定的代码区域位置(可能有缺陷的部分代码),并将其大部分测试时间预算用于达到目标位置,而不浪费资源去测试不相关的部分。作为定向灰盒模糊测试中最具有代表性的工具AFLGo(AFL(American Fuzzy Lop)的扩展),其计算输入和预定义目标之间的距离。该距离被计算为执行轨迹与目标基本块的平均权重。执行轨迹的权重由程序的调用图和控制流图中的边的数量决定。然后,在运行时,AFLGo根据距离而不是新路径覆盖率来确定种子的优先级,并在基本块级别的距离上优先考虑更接近目标的种子。其距离的计算存在缺陷,更偏好短路径,而疏于关注更可能发现漏洞的长路径。同时,对于未测的软件,不识别漏洞所处于的代码区域位置,从而造成在使用定向灰盒模糊测试时效率低,测试结果准确性不高。

技术实现思路

[0005]为了克服现有定向灰盒模糊测试技术的漏洞发现精准性不高的不足,本专利技术提供一种基于软件漏洞成因导向的定向灰盒模糊测试方法及装置,用于解决现有技术中对软件漏洞挖掘准确性及效率较低的问题,与软件定向模糊测试结合,使得软件静态分析与动态模糊测试相结合,加快软件漏洞检出速度,提高灰盒模糊测试的有效性和准确性。
[0006]第一方面,本专利技术提供一种基于软件漏洞成因导向的定向灰盒模糊测试方法,包括如下步骤:1) 构建软件代码漏洞成因知识库;
2) 依据漏洞成因特征识别待测软件的漏洞出现区域;3)根据待测软件漏洞区域选择定向灰盒模糊测试用例,进行定向灰盒模糊测试。
[0007]步骤1)中,构建软件代码漏洞成因知识库,具体为:11)获取已公布软件安全漏洞信息。
[0008]软件安全漏洞信息是从网络多个途径所获取的包括CVE(Common Vulnerabilities and Exposures)、NVD(NATIONAL VULNERABILITY DATABASE)、CWE(Common WeaknessEnumeration)、CNNVD(China National Vulnerability Database of Information Security)、CNVD(China NationalVulnerability Database)、GitHub等相关漏洞信息,漏洞信息包括漏洞类型、漏洞POC(Proof of Concept,用于检验是否存在相应漏洞)以及漏洞代码,漏洞代码包括软件的包含有已知漏洞的代码片段或者软件完整的程序(漏洞程序)。
[0009]12)对软件安全漏洞信息进行合并、去重、筛选处理,同时纠正存在的错误。
[0010]13)对软件安全漏洞进行分类,得到相应的漏洞类型。
[0011]本专利技术根据漏洞的生成机理,所关注的漏洞包括但不限于缓冲区溢出、整数溢出、除零漏洞、数组越界、格式化字符串、释放后重用、双重释放、空指针解引用、不正确的输入验证、断言失败、内存溢出、内存泄漏等漏洞类型,还可对这些漏洞类型进行更细的划分,例如,对于缓冲区溢出漏洞可分细分为堆溢出漏洞、栈溢出漏洞、数据段溢出漏洞。
[0012]14)提取漏洞成因特征。
[0013]首先对同一类型漏洞的漏洞代码进行静态分析,找出漏洞点,标识出漏洞代码中导致漏洞的具体位置;其中大部分已公布软件安全漏洞信息都会对漏洞位置(漏洞点所在的位置)进行标注,对于未标注的漏洞代码,则使用Cppcheck等静态分析工具进行处理,输出一个漏洞报告,包括漏洞点所在的位置和行号信息;之后提取漏洞代码中影响漏洞成因的特征。定位到漏洞点所在的位置,将漏洞点位置对应的代码语句进行处理,其处理方法是根据模糊测试能够发现漏洞类型,然后针对不同漏洞类型,抽取漏洞标识,作为漏洞成因特征,具体按以下情形处理:(1) 函数误用引发的漏洞。包括缓冲区溢出漏洞、格式化字符串漏洞和不正确的输入验证漏洞等类型,方法是将漏洞点代码语句中函数具体的参数部分进行删除或者替换,保留函数名称(漏洞标识)作为漏洞成因特征。例如,使用strcpy()函数因不比较目标缓冲区和源字符串的大小而导致缓冲区漏洞发生,漏洞点的代码语句为:strcpy(dest,src),则将strcpy()函数dest、src参数删除,提取strcpy()为该漏洞代码的漏洞成因特征;(2) 除数为零引发的漏洞。方法是把漏洞点代码语句中进行除法计算的代码转换成正则表达式,该正则表达式作为漏洞成因特征。例如,漏洞点代码语句为int r = m / n,n为零可能导致程序崩溃,则int r = m / n语句转换成的正则表达式int\s+(\w+)\s*=\s*(\w+)\s*/\s*(\w+)为该漏洞代码的漏洞成因特征;(3) 整数溢出漏洞类型。方法是把漏洞点代码语句中对整数进行计算的代码转换成正则表达式,该正则表达式作为漏洞成因特征。例如,漏洞点代码为int a = INT_MAX;int b = a+1,会造成程序崩溃,则intb=a+1语句转换成的正则表达式为int\s+(\w+)\s*=\s*(\w+)\s*\+\s*(\w+), 将其作为该漏洞代码的漏洞成因特征;
(4) 数组越界漏洞类型。方法是将对数组操作语句转化成正则表达式作为漏洞成因特征,例如,漏洞点代码为int array[3] = {1, 2, 3};array[5]=10,导致程序崩溃,对数组中元素赋值的语句是array[5] = 10,其正则表达式\b(\w+)\s*\[\s*(\w+)\s*\]\s*=为该漏洞代码的漏洞成因特征;(5) 断言失败漏洞类型。方法是对漏洞点代码语句中具体的参数进行删除或替换,保留其断言操作作为漏洞成因特征。例如,漏洞点代码为int x = 5;assert(x&本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于软件漏洞成因导向的定向灰盒模糊测试方法,其特征是,包括如下步骤:1)提取软件漏洞成因特征,构建软件代码漏洞成因知识库;包括:11)获取已公布软件安全漏洞信息;12)对软件安全漏洞信息进行合并、去重、筛选、纠错处理;13)对软件安全漏洞进行分类,得到相应的漏洞类型;14)针对不同的漏洞类型,提取得到漏洞成因特征;包括:141)找出软件漏洞点,标识出漏洞代码中导致漏洞的位置即漏洞点所在的位置;142)定位到软件漏洞点所在的位置,将对应的代码语句进行处理,针对不同漏洞类型抽取得到漏洞标识,作为漏洞成因特征,包括:函数误用引发漏洞;除数为零引发漏洞;整数溢出漏洞;数组越界漏洞;断言失败漏洞;内存操作不当引发漏洞;指针错误使用引发漏洞;15)设计漏洞成因知识库的结构为<漏洞类型、漏洞代码、漏洞POC、漏洞成因特征>四元组形式,根据相应数据生成软件代码漏洞成因知识库;2)根据漏洞成因特征识别得到待测软件的漏洞区域;包括:21)确定待测软件的软件类型和相应的漏洞类型;22)通过软件代码漏洞成因知识库,得到相应漏洞类型的漏洞代码信息;再根据漏洞代码信息,从软件代码漏洞成因知识库中获取相应的漏洞成因特征,并与待测软件代码进行匹配,找出待测软件代码中的漏洞区域;3)根据待测软件的漏洞区域选择定向灰盒模糊测试用例,进行定向灰盒模糊测试。2.如权利要求1所述基于软件漏洞成因导向的定向灰盒模糊测试方法,其特征是,步骤11)中,漏洞信息包括漏洞类型、漏洞POC以及漏洞代码;漏洞代码包括软件的包含有已知漏洞的代码片段或软件完整的程序。3.如权利要求1所述基于软件漏洞成因导向的定向灰盒模糊测试方法,其特征是,漏洞类型包括但不限于缓冲区溢出、整数溢出、除零漏洞、数组越界、格式化字符串、释放后重用、双重释放、空指针解引用、不正确的输入验证、断言失败、内存溢出、内存泄漏漏洞类型。4.如权利要求3所述基于软件漏洞成因导向的定向灰盒模糊测试方法,其特征是,还包括细化分的漏洞类型;缓冲区溢出漏洞细划分的漏洞类型包括堆溢出漏洞、栈溢出漏洞、数据段溢出漏洞。5.如权利要求1所述基于软件漏洞成因导向的定向灰盒模糊测试方法,其特征是,获取软件漏洞点所在位置的方法,具体是使用静态分析工具Cppcheck对软件代码进行处理,得到软件漏洞点所在的位置和行号信息。6.如权利要求1所述基于软件漏洞成因导向的定向灰盒模糊测试方法,其特征是,步骤142)中,针对不同漏洞类型抽取得到漏洞标识,作为漏洞成因特征;包括:函数误用引发漏洞的情形:对于缓冲区溢出漏洞、格式化字符串漏洞和不正确的输入验证漏洞类型,将漏洞点代码语句中函数的函数名称作为漏洞成因特征;除数为零引发漏洞的情形:将有除数为零的代码语句转换成正则表达式,将该正则表达式作为漏洞成因特征;整数溢出引发漏洞的情形:对整...

【专利技术属性】
技术研发人员:李远金程超郭永康程泽凯高利文胡陈勇
申请(专利权)人:北京中科卓信软件测评技术中心
类型:发明
国别省市:

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

1