CN101930398B - 基于Fuzzing技术的变异多维输入的软件脆弱性分析方法 - Google Patents
基于Fuzzing技术的变异多维输入的软件脆弱性分析方法 Download PDFInfo
- Publication number
- CN101930398B CN101930398B CN2010102166056A CN201010216605A CN101930398B CN 101930398 B CN101930398 B CN 101930398B CN 2010102166056 A CN2010102166056 A CN 2010102166056A CN 201010216605 A CN201010216605 A CN 201010216605A CN 101930398 B CN101930398 B CN 101930398B
- Authority
- CN
- China
- Prior art keywords
- macrochromosome
- fuzzing
- test case
- genetic algorithm
- analysis method
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于Fuzzing技术的变异多维输入的软件脆弱性分析方法,属于软件测试领域。该方法首先确定了不安全函数的位置,然后通过I/O分析技术建立起输入元素和不安全函数之间的影响关系,最后变异相应的输入元素触发程序中的软件脆弱性。该发明可以分析到当前Fuzzing技术分析不到的软件脆弱性,且不会带来组合爆炸的问题。
Description
技术领域
本发明涉及一种软件脆弱性分析方法,尤其涉及一种基于Fuzzing技术的变异多维输入的软件脆弱性分析方法。
背景技术
1989年到2002年早期的Fuzzing技术本质上是随机测试技术,测试数据多数是随机产生的畸形数据,随机测试技术难以深入测试软件,也没有较高的代码覆盖率,所以会遗漏很多软件脆弱性。为了提高软件脆弱性分析能力,Fuzzing测试呈现出两个不同的发展方向:基于知识的Fuzzing技术和基于软件测试技术的Fuzzing技术。2002年,首次提出把文件格式知识和协议知识融入到了Fuzzing技术测试用例的构造当中,大大的提高了Fuzzing测试用例的有效性,其开发的工具SPIKE发现了许多未知软件脆弱性。2007年通过把静态分析技术、符号执行技术,具体执行技术等多种技术与Fuzzing技术相结合,从而在达到一个较高的代码覆盖率的测试基础上进行Fuzzing测试。基于软件测试技术的Fuzzing技术通过借助软件测试中的技术使Fuzzing技术得到一个不错的代码覆盖率。该方法的缺点是仍然无法克服符号执行中的状态爆炸问题,也无法突破应用程序中的验证或检查(像固定字段、校验和、长度计算、个数计算、hash值计算、加密解密算法等)进行更为深入的Fuzzing测试;另外,该方法采用了类似于穷搜索的思路,每次执行需要大量的时间,效率低;而且每次执行都需要复杂的符号运算,从而消耗了大量的时间。尝试着在利用遗传算法提高测试覆盖率的基础上再进行Fuzzing测试,由于遗传算发本质上是一种弱搜索的智能算法,也难以突破应用程序中的强验证,所以上述方法对于简单的没有强验证的实验程序是可行的,对于实际的带有强验证的应 用软件则不可行。通过以上的分析可以知道,基于知识的Fuzzing技术更容易突破程序中的验证,从而达到更好的测试效果。
当前的基于知识的Fuzzing技术只能实施一维的变异操作,即每次只能够对单个输入元素实施变异操作,即每次只能够对单个输入元素实施变异操作然后生成测试用例,因为如果实施多维变异操作,则会带来组合爆炸的问题;但是,现实软件当中确实存在需要多维变异才能触发的软件脆弱性。因此,当前的基于知识的Fuzzing技术存在分析不到多维变异技术才能分析到的软件脆弱性。
发明内容
本发明的目的是提供基于Fuzzing技术的变异多维输入的软件脆弱性分析方法,能够更快速、有效的分析现有软件脆弱性分析方法所分析不到的软件脆弱性。
该基于Fuzzing技术的变异多维输入的软件脆弱性分析方法,包括以下步骤:
第一步:定位不安全函数位置,形成不安全函数集
V={V1,V2,...,VK,...,VM};
第二步:查找影响VK的输入元素集合 ;
第三步:从V中顺序获取VK;
第五步:检查遗传算法是否运行超过最大代数,且是否分析到VK中的潜在软件脆弱性;如果超过最大代数或分析到软件脆弱性,跳转第三步;否则进行第六步;
第六步:应用遗传算法的选择算子,对 的大染色体进行选择操作,生成下一代染色体中的部分个体;应用遗传算法的变异算子,对 的大染色体进行变异操作,生成下一代染色体的部分个体;应用遗传算法的修补算 子,对 的大染色体进行修补操作,生成下一代染色体的部分个体;
第七步:运行新一组染色体组成的测试用例,并通过监控信息计算该组测试用例的适应度值,并跳转至第五步进行检查。
其中第一步中所述的不安全函数的定位通过静态分析方法来实现,不安全函数包括库中的标准函数和其它的目标应用程序中的不安全函数。
其中第三步中所述的顺序获取方法是通过二进制插桩方法和动态跟踪方法来实现;动态的二进制插桩方法获取不安全函数的输入参数的值用来计算每个测试用例的适应度值。
其中第六步中所述的把每个输入元素设计成一个小染色体,把多个输入元素对应的小染色体级连成一个大染色体,所述的遗传算法直接对大染色体进行选择、交叉、变异和修补操作,大染色体的交叉、变异和修补操作则分解到各个对应的小染色体进行相关的交叉、变异和修补操作。
上述的小染色体表示方法包括二进制表示方法和实值表示方法;二进制表示方式中小染色体分为两个域,一个域是位数域,表示后面二进制数值表示的位数;一个域是值域,表示实际的数值对应的二进制数值,实值表示方法中数值型输入元素的所有候选值按照从小到大排序组成的集合,集合中元素的个数为|C|,该编码方式中的染色体分为两个域,一个是次序域,表示该实值元素在候选集合C中的次序;一个是值域,表示该输入元素的值。
本发明的有益效果:
该发明给出了一套针对不安全函数的多维输入Fuzzing技术方案,在不带来组合爆炸问题的前提下,可以有效地分析到当前的Fuzzing技术(如Peach和Sulley)分析不到的软件脆弱性。因为该技术首先确定了不安全函数的位置,然后通过I/O分析技术建立起输入元素和不安全函数之间的影响关系,最后通过GAMutator变异相应的输入元素触发程序中的软件脆弱性。显然,该方法产生的测试用例数目与不安全函数的数目成线性关系,因此,该发明在可以分析到当前Fuzzing技术分析不到软件脆弱性的情况下,而不会带来 组合爆炸的问题。
附图说明
图1是本发明的一种基于Fuzzing技术的变异多维输入的脆弱性分析方 法的整体框架图;
具体实施方式
下面结合附图和实施例对本发明做详细描述。
基于Fuzzing技术的变异多维输入的软件脆弱性分析方法通过下列主要模块来实现:调度引擎,XFuzzing工具模块,程序分析模块(Program Analyzer),数据映射模块(Data Mapper)和GAMutator算子。基于Fuzzing技术的变异多维输入的软件脆弱性分析方法的整体框架图如图1所示,程序分析模块,数据映射模块,GAMutator,程序监控模块都通过数据库进行通信,引擎与代理之间是一对多的关系,从而可以并发地对目标程序进行Fuzzing测试,从而提高Fuzzing测试的效率。
调度引擎负责调度一次完整的Fuzzing流程,它首先用普通变异算子实施一维Fuzzing;然后用GAMutator实施多维Fuzzing。XFuzzing工具用来测试文件格式应用程序和网络协议应用程序。它具有许多的优点,比如使用xml脚本描述输入元素的类型,大小以及各个元素之间的关系,比如根据结点的语义属性设计普通的变异算子;同时,它也可以搜集和分析测试结果。
程序分析模块(Program Analyzer)通过静态的方法来确定二进制可执行文件当中不安全函数地址,也可以通过二进制动态插装的方法对目标程序进行插装来搜集其中的运行信息。数据映射模块(Data Mapper)被用来寻找样本数据中的元素和不安全函数集合中的元fe之间的影响关系。影响关系存储在数据库中的一张表当中。运行时信息通过在进行第一次Fuzzing测试的获取的。GAMutator基于遗传算发来产生新的测试用例。它通过Data Mapper 来得到影响关系,并变异影响不安全函数的输入元素,不安全函数的运行信息通过程序分析器(Program Analyzer)监控获得。
如果我们把输入节点当作输入,把不安全函数的动态参数信息输出当作输出,通过分析和他们相关的执行记录,我们就可以构建它们之间的影响关系。这个技术被称之为I/O分析技术。I/O分析技术可以分为静态分析技术和面向执行的动态分析技术。前者会产生大量的冗余信息,例如FTSG基于样本数据覆盖不到的不安全函数和更多的由于符号执行固有的高虚报率而带来的输入元素和不安全函数之间的影响关系;而后者面向执行的分析技术得到的分析结果则简单、准确的多。
由于某个不安全函数fe可能存在多个参数和返回值,不妨设这些参数和返回值组成集合Oe,令Oe={o1,o2,…,ok,…,oh},当输入元素ni影响Oe中的任意一个元素时,则称ni影响ve。
ni影响ok,当且仅当存在下列测试用例(t1,t2,t3)和ok的输出结果(u1,u2,u3):
第一个测试用例为t1=(a1,a2,…,ai,…,an),ok的输出结果为u1;
第二个测试用例为t2=(a1,a2,…,ai,…,an),ok的输出结果为u2;
第三个测试用例为t3=(a1,a2,…,ai’,…,an),ok的输出结果为u3;
其中,as≠as’,u1=u2,u2≠u3;ai∈D(ni),ai′∈D(ni),D(ni)表示输入元素ni的值域。
之所以运行两个相同的测试用例t1和t2,因为有些不安全函数的参数不是受外部输入变化的影响会自己变化;
本发明把每个输入元素设计成一个小染色体,把多个输入元素对应的小染色体级连成一个大染色体,文中设计的遗传算法直接对大染色体进行选择(select),交叉(crossover),变异(mutate)和修补(mend)操作,大染色体的选择操作根据适应度值来选择,大染色体的交叉、变异和修补操作则分解到各个对应的小染色体进行相关的交叉、变异和修补操作,如大染色体 的交叉操作:设两个大染色体A和B都有m个参数,当进行交叉操作的时候,A中第i个参数的染色体和B中第i个参数的染色体进行交叉操作,其中i∈[1,m],交叉完后生成的孩子小染色体再组合成大染色体。设存在m个输入元素影响某个潜在脆弱点,第i行表示第i个参数,该行存在两个域,一个域表示第i个输入参数的类型ti,且ti∈{Number,String};另外一个域表示第i个输入元素对应的染色体argi_chromosome。
在实际软件脆弱性分析操作过程中,往往由于时间的原因或者分析的目标文件格式或网络协议非常复杂,并不能得到各个结点之间的所有约束关系,在经过选择,交叉,变异之后,很有可能产生不可行解,从而使产生的测试用例不能有效地覆盖脆弱语句,为了提高整体遗传算法的效率,针对各种类型的输入元素都添加了一个修补算子。修补操作是指判断产生的解是否达到最差适应度值,如果达到,则通过该变异算子基于样本文件中的初始值重新生成一个解,直到生成可行解(通过适应度函数来计算,可行解的适应度值通常优于最差适应度值)为止。由于样本文件中是正常的正确输入元素的组合,从其中抽取出来的输入元素都是正确的,基于该输入元素变异生成新的可行解的概率高,因此该修补操作可以整体提高GAMutator生成解的半有效性。
Claims (3)
1.一种基于Fuzzing技术的变异多维输入的脆弱性分析方法,其特征在于,包括以下步骤:
第一步:定位不安全函数位置,形成不安全函数集V={V1,V2,...,Vk,...,VM};
第二步:查找影响Vk的输入元素集合
第三步:从V中顺序获取Vk;
第五步:检查遗传算法是否运行超过最大代数,且是否挖掘到Vk中的潜在漏洞;如果超过最大代数或挖掘到漏洞,跳转第三步;否则进行第六步;
第六步:应用遗传算法的选择算子,对的大染色体进行选择操作,生成下一代染色体中的部分个体;应用遗传算法的变异算子,对的大染色体进行变异操作,生成下一代染色体的部分个体;应用遗传算法的修补算子,对的大染色体进行修补操作,生成下一代染色体的部分个体;
第七步:运行新一组染色体组成的测试用例,并通过监控信息计算该组测试用例的适应度值,并跳转至第五步进行检查;
把每个输入元素设计成一个小染色体,把多个输入元素对应的小染色体级连成一个大染色体,所述的遗传算法直接对大染色体进行选择、交叉、变异和修补操作,大染色体的交叉、变异和修补操作则分解到各个对应的小染色体进行相关的交叉、变异和修补操作;所述小染色体表示方法包括二进制表示方法和实值表示方法;二进制表示方式中小染色体分为两个域,一个域是位数域,表示后面二进制数值表示的位数;一个域是值域,表示实际的数值对应的二进制数值,实值表示方法中数值型输入元素的所有候选值按照从小到大排序组成的集合,集合中元素的个数为|C|,该编码方式中的染色体分为两个域,一个是次序域,表示该实值元素在候选集合C中的次序;一个是值域,表示该输入元素的值。
2.根据权利要求1所述的一种基于Fuzzing技术的变异多维输入的脆弱性分析方法,其特征在于,其中第一步中所述的不安全函数的定位通过静态分析方法来实现,不安全函数包括库中的标准函数和其它的目标应用程序中的不安全函数。
3.根据权利要求1或2所述的一种基于Fuzzing技术的变异多维输入的脆弱性分析方法,其特征在于,其中第三步中所述的顺序获取方法是通过二进制插桩方法和动态跟踪方法来实现;动态的二进制插桩方法获取不安全函数的输入参数的值用来计算每个测试用例的适应度值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102166056A CN101930398B (zh) | 2010-07-02 | 2010-07-02 | 基于Fuzzing技术的变异多维输入的软件脆弱性分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102166056A CN101930398B (zh) | 2010-07-02 | 2010-07-02 | 基于Fuzzing技术的变异多维输入的软件脆弱性分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101930398A CN101930398A (zh) | 2010-12-29 |
CN101930398B true CN101930398B (zh) | 2012-02-08 |
Family
ID=43369589
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010102166056A Expired - Fee Related CN101930398B (zh) | 2010-07-02 | 2010-07-02 | 基于Fuzzing技术的变异多维输入的软件脆弱性分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101930398B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617114B (zh) * | 2013-10-23 | 2016-03-02 | 江苏大学 | 基于条件与参数变异的第三方构件脆弱性测试方法 |
CN105991517B (zh) * | 2015-01-28 | 2019-08-20 | 中国信息安全测评中心 | 漏洞发掘方法和装置 |
CN109857637B (zh) * | 2018-12-25 | 2022-04-15 | 杭州茂财网络技术有限公司 | 基于注解的Java语言方法覆盖率和方法输入输出统计方法 |
CN110311806B (zh) * | 2019-06-06 | 2020-11-10 | 上海交通大学 | 一种移动应用程序界面响应延迟诊断方法、系统及终端 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1752945A (zh) * | 2005-11-02 | 2006-03-29 | 中国科学院软件研究所 | 安全数据库管理系统测试用例生成方法 |
CN101576850B (zh) * | 2009-06-10 | 2011-05-04 | 南京航空航天大学 | 一种改进的面向宿主的嵌入式软件白盒测试方法 |
-
2010
- 2010-07-02 CN CN2010102166056A patent/CN101930398B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101930398A (zh) | 2010-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102385550B (zh) | 一种针对软件缺陷的检测方法 | |
CN103279415B (zh) | 基于组合测试的嵌入式软件测试方法 | |
CN101930398B (zh) | 基于Fuzzing技术的变异多维输入的软件脆弱性分析方法 | |
CN103559122A (zh) | 基于程序行为切片的测试案例约减方法 | |
CN105868116A (zh) | 基于语义变异算子的测试用例生成和优化方法 | |
CN103136098B (zh) | 模糊测试的方法、装置和系统 | |
CN104184728A (zh) | 一种Web应用系统的安全检测方法及安全检测装置 | |
CN107038380A (zh) | 一种基于程序特征树的漏洞检测方法及系统 | |
Walkinshaw et al. | Automated comparison of state-based software models in terms of their language and structure | |
CN104303189A (zh) | 确定应用程序漏洞 | |
Yang et al. | Improve the effectiveness of test case generation on efsm via automatic path feasibility analysis | |
Keane et al. | The potential of occupancy modelling as a tool for monitoring wild primate populations | |
CN106506280A (zh) | 智能家居设备的通信协议测试方法及系统 | |
CN101894058A (zh) | 针对自动测试系统的测试覆盖性自动分析方法及其装置 | |
CN102968375A (zh) | 基于关联规则挖掘的不可达路径检测方法 | |
Raimbault | Unveiling co-evolutionary patterns in systems of cities: a systematic exploration of the simpopnet model | |
CN106375156A (zh) | 电力网络流量异常检测方法及装置 | |
Agarwal et al. | Code coverage using intelligent water drop (IWD) | |
Rao et al. | Modeling and simulation of net centric system of systems using systems modeling language and colored Petri‐nets: A demonstration using the global earth observation system of systems | |
CN105512130A (zh) | 数据源融合的方法和装置 | |
CN103501257B (zh) | 一种ip网络故障探针的选择方法 | |
KR101073402B1 (ko) | 네트워크의 트래픽 모의 및 유사성 검증방법 및 네트워크 트래픽 분석시스템 | |
CN105528296B (zh) | 一种面向对象软件的类簇测试方法 | |
Hao et al. | Usage-based statistical testing of web applications | |
CN101833505B (zh) | 一种软件系统安全缺陷检测方法 |
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: 20120208 Termination date: 20150702 |
|
EXPY | Termination of patent right or utility model |