System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及软件脆弱性测试领域,具体是指一种基于样本突变的软件脆弱性测试方法和装置。
技术介绍
1、大量的应用实践检验了模糊测试技术在软件脆弱性发现上的有效性。其中较为典型的模糊测试工具为afl,这一款由google推出的模糊测试工具对该领域有较大影响力,afl方案创新性的引入了基于代码覆盖率的遗传变异算法指导测试的进行,这一有效策略仍旧影响着当下模糊测试工具的演进。例如fairfuzz、ultrafuzz、fuzz4b等工具都是在afl基础上实现的测试方案。现有的模糊测试方案采取统一的测试流程,导致测试结果不尽如人意。这种不如意在afl工具上具体表现为以下三方面:
2、1.afl方案在对程序内部逻辑探索上存在效率低下的问题。这主要由以下两个原因共同作用的结果,首先是由于当下多数程序开发人员出于对代码的保护,往往在进入程序真正处理逻辑之前对于输入内容存在校验机制,不满足校验条件,则在进入程序核心处理逻辑之前便被排除,表现为程序提前退出。其次由于模糊测试技术在测试过程中具备较大的测试随机性,对于这类校验机制,若不提供有效的测试策略指导测试方向的进行,则会导致大量的测试资源投入在无意义的测试项上,造成算力资源上的浪费。
3、2.afl方案对于隐匿性较高的脆弱点的暴露能力相对低下。一方面是对于单点测试强度不足,导致无法触发相应程序安全为例带来的漏报情况。另一方面则是由于这部分脆弱点通常与非常规的程序状态转移有关,而afl方案缺乏对非常规程序状态转移的模拟,导致对这部分脆弱的暴露能力有限。
4、3.
5、针对上述所提afl方案的不足点2和3,fairfuzz同样注意到这些,并且在fairfuzz的改良方案中引入了rare branch的定义,rare branch是fairfuzz在测试过程中根据程序代码块的测试覆盖频率维护起来的一类代码逻辑集合,并制定相应的策略调整测试资源的倾斜,使存在脆弱可能性的rare branch可以得到相比完全随机的afl方案更高的测试强度,一定程度上弥补了afl方案在实际实施过程中的不足表现。
技术实现思路
1、本专利技术目的在于针对现有模糊测试方案中对于程序内部逻辑探索效率低下的问题,提供一种基于样本突变的软件脆弱性测试方法以提升模糊测试对于程序中潜在脆弱点的暴露能力。
2、实现上述目的的技术方案包括如下内容。
3、一种基于样本突变的软件脆弱性测试方法,包括如下步骤:
4、步骤1,对受检程序整体进行基础插桩,针对受检程序中与程序状态转移密切相关的条件转移指令,在基础插桩处理之上附加上下文信息采集功能;
5、步骤2,收集初始测试用例并进行分类,依据类别将所有测试用例提交给插桩后的受检程序,在受检程序对给定测试用例的处理过程中那些与程序状态转移密切相关的条件转移指令位置收集相应的上下文信息,采集结果以<insid, context, curstate,historystate, isvalue >五元组形式进行存储,其中:insid,是在插桩过程中随机分配给当前程序位置pos的唯一标识符,该值用于模糊测试工具标识当前位置使用;context,包含此时采集到的上下文内容;curstate,用于内部快速探索来指示是否对当前程序位置的上下文实施干涉;historystate,用于指示之前测试过程中是否对该位置实施过干涉;isvalue,指示对程序位置pos实施干涉后是否出现测试效果提升的情况;
6、步骤3,面向步骤2对于测试用例的分类进行共性逻辑提取,以逻辑位置的有效计数是否超过设置的阈值完成该逻辑点是否隶属共性逻辑的判断,有效计数是为了排除程序内部存在的循环结构可能带来的统计偏差,仅仅将逻辑点的首次执行视为有效的计数记录在全局变量中。循环处理完一个类别下所有测试用例之后判断某处程序逻辑是否属于共性逻辑的方法是该逻辑点在计数器全局变量中记录的有效计数次数是否超过设置的阈值,阈值的设置是根据类别下测试用例总数进行设置的;
7、步骤4,模糊测试工具的调度器通过调度策略,选中一个当前测试队列中的测试用例并启动受检程序,将测试用例作为输入提供给受检程序进行执行;
8、步骤5,判断当前提供的测试用例是否首次出现在测试中,若为首次出现在测试中,需要对测试用例进行突变区域的划分,突变区域的大小决定了突变操作对应的细粒度,同时初始化该测试用例每个突变区域的描述信息表,其中每个表项用于描述测试用例的某个突变区域信息,包含唯一标识各个突变区域的mzid、由当前突变区域内容进行计算的校验值,以及突变区域的潜力值pvalue,说明,某母本测试用例突变所产生的新测试用例会继承母本测试用例的突变区域的描述信息表;若非首次出现在测试中,则说明该测试用例是由之前测试过的母本测试用例突变生成的,则继承母本测试用例的突变区域描述信息表;
9、步骤6,根据当前测试用例的突变区域描述信息表内容,选择突变策略,若当前测试用例为首次出现在测试中,则对应描述信息表均为初始化的内容,即该描述信息表信息不具备指导策略所需要的前提,因此采取传统的、随机的突变策略完成新测试用例的生成;否则,根据突变区域的pvalue的值选择潜力值大的突变区域作为突变操作进行的位置,可以一定程度上收敛突变阶段的盲目性与随机性,完成新测试用例的生成并提交给受检程序进行处理;
10、步骤7,对执行到的指令进行判断,判断当前执行的程序位置是否属于该测试用例所属类别下的共性逻辑,若是,则执行步骤8;若不是,则按照常规的测试流程继续测试,结束测试执行步骤9;
11、步骤8,以discoverboost算法逻辑对此程序位置的上下文信息实施干涉尝试,所述discoverboost算法逻辑包括:
12、检查历史测试阶段就当前位置的干涉情况(historystate和isvalue两个字段),若历史测试阶段就该位置实施干涉并未带来测试表现的提升,则设置curstate字段为0,否则采取随机值映射为二值的形式对curstate字段进行设置,该字段决定是否就当前程序位置的上下文实施干涉 (其中0代表不干涉,1代表干涉),当随机值映射结果将curstate字段设置为1时,根据程序位置对应的指令确定干涉操作op与干涉因子flipmask,
13、依据干涉规则进行,对上下文信息进行干涉;干涉规则:context op flipmask ->flipedcontext,其中flipedcontext是context经干涉操作op与干涉因子flipmask共同作用的结果(干涉规则可以独立位置进行说明), 上下文干涉的结果导致程序内部状态转移区别于干涉之前,从而达到模拟程序非常规状态转化以及保护机制突破的效果;
14、步骤9,程序运行结束,评估本文档来自技高网...
【技术保护点】
1.一种基于样本突变的软件脆弱性测试方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的基于样本突变的软件脆弱性测试方法,其特征在于,所述步骤3中,有效计数是为了排除程序内部存在的循环结构可能带来的统计偏差,仅仅将逻辑点的首次执行视为有效的计数记录在全局变量中,循环处理完一个类别下所有测试用例之后判断某处程序逻辑是否属于共性逻辑的方法是该逻辑点在计数器全局变量中记录的有效计数次数是否超过设置的阈值,阈值的设置是根据类别下测试用例总数进行设置的。
3.一种基于样本突变的软件脆弱性测试装置,其特征在于,包括如下模块:
【技术特征摘要】
1.一种基于样本突变的软件脆弱性测试方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的基于样本突变的软件脆弱性测试方法,其特征在于,所述步骤3中,有效计数是为了排除程序内部存在的循环结构可能带来的统计偏差,仅仅将逻辑点的首次执行视为有效的计数记录在全局变...
【专利技术属性】
技术研发人员:唐成华,蔡维嘉,帅活力,张靖,
申请(专利权)人:桂林电子科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。