CN107193731B - 使用控制变异的模糊测试覆盖率改进方法 - Google Patents

使用控制变异的模糊测试覆盖率改进方法 Download PDF

Info

Publication number
CN107193731B
CN107193731B CN201710331793.9A CN201710331793A CN107193731B CN 107193731 B CN107193731 B CN 107193731B CN 201710331793 A CN201710331793 A CN 201710331793A CN 107193731 B CN107193731 B CN 107193731B
Authority
CN
China
Prior art keywords
test
variation
test case
field
coverage rate
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
Application number
CN201710331793.9A
Other languages
English (en)
Other versions
CN107193731A (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 CN201710331793.9A priority Critical patent/CN107193731B/zh
Publication of CN107193731A publication Critical patent/CN107193731A/zh
Application granted granted Critical
Publication of CN107193731B publication Critical patent/CN107193731B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

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)

Abstract

本发明涉及提高模糊测试覆盖率的测试用例控制变异生成方法,属于信息安全的漏洞挖掘领域。本发明针对目前优化模糊测试覆盖率方法时间代价高、测试范围不完整和自动化程度低等问题,提出一种控制变异生成测试用例的方法。本方法利用插桩技术对测试用例生成过程进行反馈,结合随机变异和控制变异方式优化测试用例生成。实验结果表明,相比于未优化的模糊测试方法,方法使代码覆盖率提高了35%~47%,相同代码覆盖率下所需测试用例数减少了48%以上。方法不但提高了测试用例覆盖率和减小了测试用例冗余,而且具有时间代价低、测试范围完整和测试过程无需人工干预的特点。

Description

使用控制变异的模糊测试覆盖率改进方法
技术领域
本发明涉及一种提高模糊测试覆盖率的测试用例控制变异生成方法,属于信息安全的漏洞挖掘领域。
背景技术
近几年来,伴随着计算机网络的发展,信息化的概念已被人们熟知,网络信息更是无处不在,网络信息技术在国民经济和国防建设中的应用越来越广泛深入,因此,承载网络信息的软件的安全性变得尤为重要。但是随着软件系统日益庞大,功能日益复杂,再加上软件从业人员安全知识不足,以及编程语言自身的安全缺陷,导致软件的安全漏洞层出不穷。在我们的生活中,经常可以听到这样的报道:某网站受到黑客攻击;某计算机系统受到攻击,造成客户数据丢失;目前又出现某计算机病毒,已扩散到全球……这些安全漏洞直接影响人们的工作和生活,侵害国民利益,甚至危害国家安全。因此,在危害发生前挖掘软件漏洞并进行修补,已经成为软件开发周期中不可或缺的重要一环。
目前为大家所熟知的漏洞挖掘技术包括补丁对比分析、面向二进制的符号执行、污点跟踪和模糊测试。其中,模糊测试技术是一种应用非常广泛的漏洞挖掘技术,它的原理是通过向目标应用程序注入畸形或意外数据,使之发生崩溃或异常行为来发现漏洞。因此模糊测试技术的核心问题是如何生成有效的畸形数据,其中高覆盖率是模糊测试有效性的重要标准。
当前比较主流的测试用例生成方法有两种,即基于规范的生成方法和基于变异的生成方法。其中基于规范的生成方法效果最好,覆盖率高,冗余度低,但是其致命缺点是在协议规范未知的情况下便无法进行数据建模,显然大部分的软件的协议规范不可能公开,因此此方法有很大的局限性。基于变异的生成方法比纯粹随机的变异生成方法有一定改善,但测试效率仍十分低下,覆盖率和冗余度均不理想。针对该问题,业界已经出现的优化方法有程序控制流分析、符号执行技术、污点跟踪与分析技术和遗传算法等。符号执行存在路径爆炸和复杂约束求解问题,难以应用到复杂软件上的测试。污点跟踪与分析技术每次只对个别路径进行测试,并且其原理导致很难做到测试的自动化;遗传算法可生成漏洞检测能力较强的测试用例,但是在用例生成与选择过程中付出高昂的时间代价。
综上分析,现有的优化模糊测试覆盖率的方法普遍存在时间代价高、测试范围不完整和自动化程度低的问题。针对这些问题,本发明将提出一种有效的模糊测试用例控制变异方法,可大大提高模糊测试覆盖率,实现快速、全面的自动化模糊测试。
发明内容
本发明的目的是:针对目前优化模糊测试覆盖率方法时间代价高、测试范围不完整和自动化程度低等问题,提出一种控制变异生成测试用例的方法,使用简单高效的控制变异方法来增加代码覆盖率,无需进行大量的分析与计算,并在保证代码覆盖率的前提下,实现整体方案的自动化。
本发明的设计原理为:
考虑到程序中对数据的一种常见处理方法,即使用数值作为程序进入某个分支的判断条件。当测试用例因为变异到达某个程序分支,如果保持该变异字段的信息并声明为不可变异,将该测试用例作为种子测试用例,待到下次以该种子用例进行变异生成测试用例,将能够控制模糊测试在该探索到的新分支内进行进一步的测试。本发明使用插桩技术监控测试用例的执行路径,当有新分支出现后,记录该不可变异字段信息,控制模糊测试的变异范围。
本发明的技术方案是通过如下步骤实现的:
步骤1,提取目标程序可解析的合法文件作为初始用例,随机变异生成测试用例。
步骤1.1,提取一条目标程序可解析的合法报文作为初始用例。
步骤1.2,为该初始用例定义一个位图数据结构,其下标为字节偏移位置,若数据结构值为0,则表示该偏移位置字节可变异,若为1,则表示该偏移位置字节不可变异。此处将其初始化为0。
步骤2,对目标程序进行插桩,执行步骤1所生成的测试用例。
步骤2.1,初始用例进入控制变异模块中的随机变异模块。
步骤2.2,在随机变异模块中,对初始用例执行随机变异操作,主要以位或字节为单位,采用翻转、增减或插入的方式来使数据发生变异。
步骤3,收集插桩执行信息,生成控制信息并存入数据库。
步骤3.1,变异用例进入执行反馈模块中的插桩执行模块。
步骤3.2,生成执行路径信息。当程序进入插桩后的某个分支,将生成一个随机数作为该分支的标志值,并将该位置的元素值作加1操作,该元素值即为本次用例执行过程中该分支被执行的次数,初始值为0,同时记录该用例的执行路径,这些信息即为执行路径信息。这些信息用来与下一个测试用例的执行路径进行对比,得出是否发生分支跳转的信息。
步骤3.3,编译插桩模块将生成的执行路径信息输入控制信息生成模块。
步骤3.4,控制信息生成模块对变异用例的执行路径信息进行处理,生成控制信息。控制的组成是测试用例与不可变异字段信息。其中不可变异字段信息标志了该字段的变异是否会导致分支的改变。
步骤3.5,将生成的控制信息存储到控制信息数据库中。
步骤3.6,重复执行步骤3,直至覆盖应用程序的所有分支,并将所有控制信息存储到控制信息数据库中。
步骤4,从数据库中提取控制信息,指导种子用例进行控制变异,并进行模糊测试。
步骤4.1,从数据库中取出种子测试用例,进行初始化。
步骤4.2,对种子测试用例使用随机变异策略,指向第一个字段,查看该字段是否标记为不可变异,如果标记为不可变异,则指向下一字段,并查看不可变异标记位,如果没有标记,则对该字段进行变异,并执行fuzzing测试。
步骤4.3,查看是否发生了分支跳转。如果没有发生跳转,则指向下一个字段,并重复步骤4.2中的判断操作。如果发生了分支跳转,则保存该测试用例为种子用例,并记录不可变异信息。
有益效果
相比于目前的提高模糊测试覆盖率的方法,本专利中的测试用例变异策略控制调控方法优化了模糊测试的代码覆盖率,并且优化所耗的时间代价较低,测试范围相对完整,并且测试过程无需人工干预,具有更好的性能和效果。
附图说明
图1为本发明提出的提高模糊测试覆盖率的控制变异方法的系统原理图;
图2为本发明提出的提高模糊测试覆盖率的控制变异方法中控制变异流程图;
具体实施方式
为了更好的说明本发明的目的和优点,下面结合附图和实施用例对本发明方法的实施方式做进一步详细说明。在此,本发明的示意性实施用例及其中说明用于解释本发明,但并不作为对本发明的限定。
实施用例包含一台PC主机,参数环境为Windows 7 64位操作系统,IntelCorei5CPU@3.10GHz,安装内存4GB。使用变异策略控制调控方法的程序记作MSDRFuzz(MutationStrategy Dynamic Regulation Fuzz)。实验环境软件包括开源的Zzuf、MSDRFuzz和FFmpeg3.1.4。以下将详细描述具体实施方式步骤。
第一环节
本环节的目的是提取目标程序可解析的合法文件作为初始用例,并对测试用例进行初始化。具体实施步骤如下:
提取目标程序可解析的合法文件作为初始用例。
步骤1.1,提取一条目标程序可解析的合法报文作为初始用例。
步骤1.2,为该初始用例定义一个位图数据结构,其下标为字节偏移位置,若数据结构值为0,则表示该偏移位置字节可变异,若为1,则表示该偏移位置字节不可变异。此处将其初始化为0。
第二环节
本环节的目的是对初始用例进行随机变异。具体实施步骤如下:
步骤2.1,初始用例进入控制变异模块中的随机变异模块。
步骤2.2,在随机变异模块中,对初始用例执行随机变异操作,主要以位或字节为单位,采用翻转、增减或插入的方式来使数据发生变异。本方法采用5种变异因子,分别为Flip_bit(以位为单位(1bit,2bit,4bit,8bit)的位翻转),Arith(以字节为单位(1byte,2byte,4byte),将整数C加减一个整数),Set_intresting(以字节为单位(1byte,2byte,4byte),将整数C设为0,1,-1,C+1,C-1),Bytes_copy(超长数组复制(1byte,2byte,4byte))和Bytes_delete(删除数组(1byte,2byte,4byte))。
步骤2.3,生成变异用例。
第三环节
步骤3.1,变异用例进入执行反馈模块中的插桩执行模块,本发明采用模糊测试工具AFL[66](American Fuzzer Lop)的编译插桩模块。
步骤3.2,生成执行路径信息。当程序进入插桩后的某个分支,将生成一个随机数作为该分支的标志值,并将该位置的元素值作加1操作,该元素值即为本次用例执行过程中该分支被执行的次数,初始值为0,同时记录该用例的执行路径,这些信息即为执行路径信息。这些信息用来与下一个测试用例的执行路径进行对比,得出是否发生分支跳转的信息。
步骤3.3,编译插桩模块将生成的执行路径信息输入控制信息生成模块。
步骤3.4,控制信息生成模块对变异用例的执行路径信息进行处理,生成控制信息。控制信息的组成是测试用例与不可变异字段信息。其中不可变异字段信息标志了该字段的变异是否会导致分支的改变。
步骤3.5,将生成的控制信息存储到控制信息数据库中。
步骤3.6,重复执行第三环节,直至覆盖应用程序的所有分支,并将所有控制信息存储到控制信息数据库中。
第四环节
本环节的目的是在控制信息数据库中测试用例的控制信息的指导下,进行控制变异操作。具体实施步骤如下:
步骤4.1,从数据库中取出种子测试用例,进行初始化。
步骤4.2,对种子测试用例使用随机变异策略,指向第一个字段,查看该字段是否标记为不可变异,如果标记为不可变异,则指向下一字段,并查看不可变异标记位,如果没有标记,则对该字段进行变异,并执行fuzzing测试。
步骤4.3,查看是否发生了分支跳转。如果没有发生跳转,则指向下一个字段,并重复步骤4.2中的判断操作。如果发生了分支跳转,则保存该测试用例为种子用例,并记录位图数据结构信息,即该字节的不可变异信息。

Claims (3)

1.使用控制变异的模糊测试覆盖率改进方法,其特征在于,所述方法包括以下步骤:
步骤1,从数据库中取出种子测试用例,进行初始化;
步骤2,对种子测试用例使用随机变异策略,指向第一个字段,查看该字段是否标记为不可变异,如果标记为不可变异,则指向下一字段,并查看不可变异标记位,如果没有标记,则对该字段进行变异,并执行fuzzing测试;
步骤3,查看是否发生了分支跳转,如果没有发生跳转,则指向下一个字段,并重复步骤2中的判断操作;如果发生了分支跳转,则保存该测试用例为种子用例,并记录位图数据结构信息,即该位图数据结构的偏移位置字节的不可变异信息。
2.根据权利要求1所述的使用控制变异的模糊测试覆盖率改进方法,其特征在于,步骤2对种子测试用例实施变异策略时,根据是否可变异标记为来对测试用例中的字节进行变异。
3.根据权利要求1所述的使用控制变异的模糊测试覆盖率改进方法,其特征在于,步骤3测试用例执行后,查看是否发生分支跳转,并根据查看结果,记录该字节的位图数据结构信息,即该字节的不可变异信息。
CN201710331793.9A 2017-05-12 2017-05-12 使用控制变异的模糊测试覆盖率改进方法 Expired - Fee Related CN107193731B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710331793.9A CN107193731B (zh) 2017-05-12 2017-05-12 使用控制变异的模糊测试覆盖率改进方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710331793.9A CN107193731B (zh) 2017-05-12 2017-05-12 使用控制变异的模糊测试覆盖率改进方法

Publications (2)

Publication Number Publication Date
CN107193731A CN107193731A (zh) 2017-09-22
CN107193731B true CN107193731B (zh) 2020-10-27

Family

ID=59873554

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710331793.9A Expired - Fee Related CN107193731B (zh) 2017-05-12 2017-05-12 使用控制变异的模糊测试覆盖率改进方法

Country Status (1)

Country Link
CN (1) CN107193731B (zh)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108255711A (zh) * 2017-12-29 2018-07-06 湖南优利泰克自动化系统有限公司 一种基于污点分析的plc固件模糊测试系统及测试方法
CN108647145B (zh) * 2018-05-10 2020-01-03 清华大学 软件内存安全检测方法及系统
CN108595341B (zh) * 2018-05-11 2019-11-22 清华大学 测试用例自动生成方法及系统
CN110633201B (zh) * 2018-07-10 2020-06-02 清华大学 针对程序的集成模糊测试方法及装置
CN109101422B (zh) * 2018-07-24 2022-02-22 北京理工大学 一种基于afl的模糊测试变异方法和装置
CN109117367B (zh) * 2018-07-24 2022-02-22 北京理工大学 一种模糊测试变异数量确定方法和装置
CN109062795B (zh) * 2018-07-24 2022-02-22 北京理工大学 一种模糊测试用例选择方法和装置
CN109379329B (zh) * 2018-09-05 2021-12-21 中国人民解放军战略支援部队信息工程大学 基于lstm的网络安全协议模糊测试方法及系统
CN109597767B (zh) * 2018-12-19 2021-11-12 中国人民解放军国防科技大学 一种基于遗传变异的模糊测试用例生成方法及系统
CN109739755B (zh) * 2018-12-27 2020-07-10 北京理工大学 一种基于程序追踪和混合执行的模糊测试系统
CN109726126B (zh) * 2018-12-28 2022-04-12 中国人民解放军国防科技大学 一种分布式并行fuzz方法及系统
CN110147310B (zh) * 2019-04-02 2021-05-18 中国科学院信息工程研究所 一种基于变异策略的并行模糊测试调度方法及装置
CN110135165B (zh) * 2019-04-12 2023-06-09 江苏大学 一种动态化的分级多粒度模糊测试漏洞挖掘方法
CN110059010B (zh) * 2019-04-12 2023-01-31 西北工业大学 基于动态符号执行与模糊测试的缓冲区溢出检测方法
CN110162472B (zh) * 2019-05-08 2022-08-12 安徽工业大学 一种基于fuzzing测试的测试用例生成方法
CN110191019B (zh) * 2019-05-28 2021-05-28 北京百度网讯科技有限公司 车辆can总线的测试方法、装置、计算机设备和存储介质
CN110597734B (zh) * 2019-09-23 2021-06-01 电子科技大学 一种适用于工控私有协议的模糊测试用例生成方法
CN111124926B (zh) * 2019-12-25 2022-09-16 支付宝(杭州)信息技术有限公司 模糊测试方法、装置、电子设备及存储介质
CN111367794B (zh) * 2020-02-25 2023-05-23 杭州世平信息科技有限公司 一种面向AFL的自适应Bitmap表调整方法及装置
CN112632557A (zh) * 2020-12-22 2021-04-09 厦门大学 基于模糊测试的内核漏洞挖掘方法、介质、设备及装置
CN112861134B (zh) * 2021-03-03 2022-09-02 国家计算机网络与信息安全管理中心 基于优化变异策略的漏洞检测方法、装置、设备及介质
CN115134278A (zh) * 2021-03-24 2022-09-30 奇安信科技集团股份有限公司 模糊测试方法、装置、电子设备及存储介质
CN114661577B (zh) * 2022-01-26 2023-09-26 天津大学 一种基于确定性策略与覆盖引导的模糊测试方法
CN116909884B (zh) * 2023-07-03 2024-01-26 中国人民解放军国防科技大学 一种面向配置缺陷的数据库模糊测试方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102239472A (zh) * 2008-09-05 2011-11-09 Arc景象有限责任公司 在支持查询的同时高效地存储日志数据
CN102385550A (zh) * 2010-08-30 2012-03-21 北京理工大学 一种针对软件缺陷的检测方法
CN102799529A (zh) * 2012-07-13 2012-11-28 北京航空航天大学 一种动态的二进制代码测试用例生成方法
WO2013122746A1 (en) * 2012-02-14 2013-08-22 Microsoft Corporation Integrated fuzzing
CN105704028A (zh) * 2016-03-25 2016-06-22 北京华为数字技术有限公司 报文处理方法及装置
CN105721255A (zh) * 2016-04-14 2016-06-29 北京工业大学 基于模糊测试的工控协议漏洞挖掘系统
CN106155901A (zh) * 2015-04-21 2016-11-23 中国科学院信息工程研究所 黑盒与白盒相结合的执行反馈驱动的并行模糊测试方法
CN106330601A (zh) * 2016-08-19 2017-01-11 北京匡恩网络科技有限责任公司 测试用例生成方法及装置
CN106649075A (zh) * 2015-10-30 2017-05-10 西门子公司 模糊测试方法和装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7895062B2 (en) * 2001-12-31 2011-02-22 Genworth Financial, Inc. System for optimization of insurance underwriting suitable for use by an automated system
CN104573524A (zh) * 2014-12-19 2015-04-29 中国航天科工集团第二研究院七〇六所 一种基于静态检测的模糊测试方法
CN105095075B (zh) * 2015-07-16 2017-12-08 北京理工大学 基于有限状态机网络协议半合法化模糊测试用例生成方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102239472A (zh) * 2008-09-05 2011-11-09 Arc景象有限责任公司 在支持查询的同时高效地存储日志数据
CN102385550A (zh) * 2010-08-30 2012-03-21 北京理工大学 一种针对软件缺陷的检测方法
WO2013122746A1 (en) * 2012-02-14 2013-08-22 Microsoft Corporation Integrated fuzzing
CN102799529A (zh) * 2012-07-13 2012-11-28 北京航空航天大学 一种动态的二进制代码测试用例生成方法
CN106155901A (zh) * 2015-04-21 2016-11-23 中国科学院信息工程研究所 黑盒与白盒相结合的执行反馈驱动的并行模糊测试方法
CN106649075A (zh) * 2015-10-30 2017-05-10 西门子公司 模糊测试方法和装置
CN105704028A (zh) * 2016-03-25 2016-06-22 北京华为数字技术有限公司 报文处理方法及装置
CN105721255A (zh) * 2016-04-14 2016-06-29 北京工业大学 基于模糊测试的工控协议漏洞挖掘系统
CN106330601A (zh) * 2016-08-19 2017-01-11 北京匡恩网络科技有限责任公司 测试用例生成方法及装置

Also Published As

Publication number Publication date
CN107193731A (zh) 2017-09-22

Similar Documents

Publication Publication Date Title
CN107193731B (zh) 使用控制变异的模糊测试覆盖率改进方法
US10558805B2 (en) Method for detecting malware within a linux platform
US9715588B2 (en) Method of detecting a malware based on a white list
Bao et al. {BYTEWEIGHT}: Learning to recognize functions in binary code
CN110287693B (zh) 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法
CN101359352A (zh) 分层协同的混淆后api调用行为发现及其恶意性判定方法
CN111240991B (zh) 一种抗隐式污点传播的动态污点检测方法及系统
CN104732152A (zh) 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法
CN112651028A (zh) 基于上下文语义和补丁验证的漏洞代码克隆检测方法
CN112506801A (zh) 一种基于注解的模糊测试方法
CN105426707A (zh) 一种指令级密码算法识别方法和系统
Qin et al. Nsfuzz: Towards efficient and state-aware network service fuzzing
CN115208634A (zh) 一种网络资产的监管引擎
CN115097807A (zh) 面向可编程逻辑控制器的内存攻击检测方法及系统
Fang et al. Ics3fuzzer: A framework for discovering protocol implementation bugs in ics supervisory software by fuzzing
US20220138080A1 (en) Computer-implemented method and device for selecting a fuzzing method for testing a program code
Gao et al. Deep Learning-Based Hybrid Fuzz Testing.
CN111427305B (zh) 针对西门子plc漏洞挖掘的方法
Zola et al. Temporal Analysis of Distribution Shifts in Malware Classification for Digital Forensics
Moukahal et al. Boosting grey-box fuzzing for connected autonomous vehicle systems
Hatas et al. Efficient Evolutionary Fuzzing for Android Application Installation Process
Jia et al. Machine learning for software vulnerability analysis: A survey
Liang et al. A novel method makes concolic system more effective
WO2024079794A1 (ja) 解析機能付与装置、解析機能付与方法および解析機能付与プログラム
Zhao et al. Collaborative reversing of input formats and program data structures for security applications

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20201027