【技术实现步骤摘要】
基于动态分支选择的定向模糊测试方法及系统
[0001]本专利技术属于自动化软件测试领域,具体涉及基于动态分支选择的定向模糊测试方法及系统。
技术介绍
[0002]模糊测试是一种通用的软件测试方法,能够自动或者半自动地生成输入用例发送给被测程序执行,并通过观察被测程序的运行状态和输出结果以挖掘程序中可能存在的缺陷或者漏洞。传统模糊测试方法是基于覆盖率引导的,其通过在被测程序的每个基本块中插入桩点,能够在执行过程中提供代码覆盖率等运行时反馈信息,并利用反馈信息对输入用例的生成过程进行引导。
[0003]定向模糊测试方法在覆盖率指标的基础上添加了目标点导向,在模糊测试流程开始前将被测程序中可能出现漏洞的代码行或者操作序列标记为目标点,并设计了对应的种子适应度计算方案,在模糊测试流程中驱动种子逐渐逼近目标点以触发漏洞。
[0004]定向模糊测试工具AFLGo在程序编译阶段将被测程序中可能触发漏洞的代码行标记为目标点,通过静态分析计算程序中每个基本块到目标点之间的距离,在模糊测试过程中通过该距离信息计算种子和目标点之间的最终距离用于优先级计算和能量分配;定向模糊测试工具ParmeSan利用Address Sanitizer进行内存相关错误的定位,并通过差异比对自动化提取被测程序中的目标点。CN114417348B提出了一种多目标导向模糊测试方法,通过种子的多维度特征和模拟退火算法分配种子能量;CN114756471A提出了基于字节敏感能量分配的漏洞类型导向模糊测试方法,在运行时统计不同类型漏洞特征信息,以此计算 ...
【技术保护点】
【技术特征摘要】
1.基于动态分支选择的定向模糊测试方法,其特征在于,包括如下步骤:S1、使用定向模糊测试工具获取被测程序的目标点,对程序进行编译插桩并生成可执行文件,进而获得执行路径和输入偏移序列;S2、维护遗漏分支池保存测试中发现的遗漏分支,使用字节码文件生成被测程序的控制流图CFG,利用目标点的位置信息在CFG中对目标点进行标记;在模糊测试过程中对发现的种子进行动态执行分析,基于得到的种子执行路径对遗漏分支池进行更新;对更新过程中新增的遗漏分支计算并记录该分支属性;S3基于分支属性,将遗漏分支池中的分支标记为带有不同的分支特性,并记录每个分支特性在测试过程中发现的种子和漏洞数量,进而获得每个分支对应的权重,由权重计算带有不同分支特性标记的分支在候选分支集合selectedBranches中的数量nbr[i];S4基于候选分支集合selectedBranches,使用ParmeSan开源工具的模糊变异方法根据结构体实例进行模糊变异。2.根据权利要求1所述的基于动态分支选择的定向模糊测试方法,其特征在于,在S2中所述对遗漏分支池进行更新的具体过程如下:2.1.1将种子执行路径中相邻的未被覆盖的分支视为遗漏分支,将遗漏分支作为模糊测试的整体调度对象;在模糊测试开始时,对种子池中用户提供的初始输入用例进行动态执行分析,将得到的遗漏分支作为初始数据保存到遗漏分支池BranchPool:{missBranch1,...,missBranch
z
,...,missBranch
q
},z=1,2,...,q,q为遗漏分支池中的遗漏分支总数;其中分支missBranch
z
=<BasicBlock
a
→
BasicBlock
b
>,代表被测程序的基本块BasicBlock
a
在满足missBranch
z
处的约束条件后,跳转到BasicBlock
b
,并维护每个遗漏分支的结构体实例;所述结构体实例中保存了该分支的标识、原始种子、输入偏移序列、分支属性和分支特性标记信息;2.1.2在模糊测试过程中每发现一个种子Seed,代表模糊测试系统覆盖了被测程序中新的程序分支,对Seed进行动态执行分析,得到Seed的执行路径BasicBlocks:{BasicBlock1,...,BasicBlock
x
,...,BasicBlock
w
},x=1...w,w为Seed执行过程中覆盖的基本块数量,遍历BasicBlocks中所有连续两个基本块组成的分支Branch
x
=<BasicBlock
x
→
BasicBlock
x+1
>,如果Branch
x
在BranchPool中存在则将其删除,表示该遗漏分支已被覆盖;2.1.3动态执行分析收集Seed执行路径中未被覆盖的程序分支并将其保存到遗漏分支池BranchPool中;给定分支Branch
x
=<BasicBlock
a
→
BasicBlock
b
>,将BasicBlock
a
视为Branch
x
的前驱;在动态执行分析过程中,以BasicBlocks中任意基本块BasicBlock
c
为前驱的未被覆盖的分支Branch
x
=<BasicBlock
c
→
BasicBlock
k
>被视为遗漏分支并保存到遗漏分支池中。3.根据权利要求2所述的基于动态分支选择的定向模糊测试方法,其特征在于,在步骤2.1.3中,还包括:利用数据流分析工具DataFlowSanitizer对程序执行过程中的数据流进行解析,收集Seed中传递到遗漏分支missBranch
z
并影响该分支条件取值的输入偏移序列offs={[x1,y1]...[x
v
,y
v
]...[x
u
,y
u
]},v=1...u,u为偏移片段数量,0≤x
v
≤y
v
<Len,Len
为程序输入Seed的长度,其中每个片段[x
v
,y
v
]表示Seed中偏移为x
v
到y
v
的连续字节传递到了分支missBranch
z
中;将Seed视为发现missBranch
z
的原始种子,保存原始种子Seed和输入偏移序列offs到missBranch
z
的结构体实例中。4.根据权利要求3所述的基于动态分支选择的定向模糊测试方法,其特征在于,在S2中所述计算分支属性的具体过程如下:2.2.1BasicBlock
m
为被测程序main函数入口所在基本块,missBranch
z
的分支深度计算为:BasicBlock
m
到missBranch
z
的前驱基本块BasicBlock
a
的在CFG图上的最短路径距离,用Dijkstra算法在CFG上进行计算;2.2.2对于mis...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。