当前位置: 首页 > 专利查询>天津大学专利>正文

基于语法感知的灰盒模糊测试方法及装置制造方法及图纸

技术编号:39127512 阅读:7 留言:0更新日期:2023-10-23 14:49
本发明专利技术涉及软件安全技术领域,具体是涉及一种基于语法感知的灰盒模糊测试方法及装置。方法包括:从存储初始输入样本以及触发新覆盖的输入样本的队列中选择一个输入样本;将从所述队列中选择的输入样本基于语法感知的修剪策略对该队列中选择的输入样本进行修剪;对修剪后的样本进行基于语法感知的变异策略对该修剪后的样本进行变异操作,生成新输入样本;将变异后的新输入样本投入到程序中执行;如果触发新的覆盖,则将其添加到队列中以更新队列,否则,丢弃该变异样本。本发明专利技术可以在有效地对样本进行修剪和变异的同时保持输入样本语法正确且结构完整,从而快速地拓宽测试的广度和深度。和深度。和深度。

【技术实现步骤摘要】
基于语法感知的灰盒模糊测试方法及装置


[0001]本专利技术涉及软件安全
,具体是涉及一种基于语法感知的灰盒模糊测试方法及装置。

技术介绍

[0002]模糊测试是一种自动化的软件测试技术,通过向目标程序提供大量无效或意外的输入样本来触发意想不到的程序行为(如断言失败、崩溃或挂起),从而检测安全漏洞以确保软件与系统安全。根据输入样本生成方式,模糊器可分为基于生成和基于变异的;根据对目标程序内部结构的利用程度,模糊器可分为白盒、灰盒或黑盒。近年来,由代码覆盖率指导的灰盒模糊测试已成为实践中最有效的发现安全漏洞的技术之一。
[0003]AFL(American Fuzzy Lop)是一种由覆盖率指导的灰盒模糊器,其工作流程包括对目标程序进行插桩和模糊测试。插桩捕获分支(边缘)的覆盖范围和命中数,而模糊过程包括选择样本、修剪、变异、运行程序和更新队列等子步骤。在处理紧凑和非结构化的输入时,AFL表现出很高的模糊效率。但是,对于处理遵循特定语法的结构化输入(如XML和JavaScript)的程序,此类模糊器存在问题。这类程序通常分为语法解析、语义检查和程序执行等阶段,而现有的模糊器很难针对这些阶段发现深层次的错误。AFL内置的修剪策略(如删除数据块)无视样本的语法结构,易于违反语法或样本结构从而使其无效,导致目标程序只能处理一部分输入样本且最终卡在语法解析阶段。AFL中的变异策略(如位翻转)也无视样本的语法结构,导致大多数变异后的输入样本不能通过语法解析并在早期被拒绝,这会浪费大量时间并仅能发现解析错误。
>
技术实现思路

[0004](一)要解决的技术问题
[0005]本专利技术主要针对以上问题,提出了一种基于语法感知的灰盒模糊测试方法及装置,其目的是解决如何高效地挖掘处理结构化输入的程序中的漏洞。
[0006](二)技术方案
[0007]为实现上述目的,本专利技术一方面提供了一种基于语法感知的灰盒模糊测试方法,包括如下步骤:
[0008]步骤1、从存储初始输入样本以及触发新覆盖的输入样本的队列中选择一个输入样本;
[0009]步骤2、将从所述队列中选择的输入样本基于语法感知的修剪策略对该队列中选择的输入样本进行修剪;
[0010]步骤3、对修剪后的样本进行基于语法感知的变异策略对该修剪后的样本进行变异操作,生成新输入样本;
[0011]步骤4、将变异后的新输入样本投入到程序中执行;
[0012]步骤5、如果触发新的覆盖,则将其添加到队列中以更新队列,否则,丢弃该变异样
本。
[0013]进一步地,在步骤2中,所述基于语法感知的修剪策略的具体步骤包括:
[0014]步骤2.1、将要修剪的输入样本按照语法解析为抽象语法树;
[0015]步骤2.2、如果出现解析错误,则使用AFL内置的修剪策略;否则,继续执行下一步;
[0016]步骤2.3、从抽象语法树中剪掉一个子树;
[0017]步骤2.4、如果修剪后覆盖率没有发生变化,则继续尝试修剪其他子树;否则,保留子树并尝试修剪下一个子树。
[0018]进一步地,在步骤2.2中,使用AFL内置的修剪策略的步骤包括:
[0019]步骤2.2.1、将输入样本划分为字节的块,并且将每个块视为独立的数据单元;
[0020]步骤2.2.2、对每个块进行删除操作,如果删除后的输入样本在执行程序时覆盖率没有变化,则将该块删除,重复该步骤直到所有块都被遍历完毕;
[0021]步骤2.2.3、根据删除操作的顺序和结果,生成新的输入样本。
[0022]进一步地,在步骤3中,所述基于语法感知的变异策略包括基于字典的变异操作,所述基于字典的变异操作包括:
[0023]步骤3.1、确定修剪后的样本中的标记边界;
[0024]步骤3.2、从预定义的字典中选择一个标记;
[0025]步骤3.3、将选定的标记插入到修剪后的样本中的标记边界上;
[0026]步骤3.4、或者将选定的标记覆盖掉修剪后的样本中标记边界之间的内容;
[0027]步骤3.5、重复执行上述步骤3.1

步骤3.4,直到达到预设的变异次数或变异停滞。
[0028]进一步地,在步骤3.1中,确定修剪后的样本中的标记边界的步骤包括:
[0029]从修剪后的样本的开头开始,依次遍历每个字节,直到末尾;
[0030]对于当前的字节i,检查它是否是字母表或数字;
[0031]如果字节i是字母表或数字,则继续检查下一个字节i+1是否也是字母表或数字;如果字节i+1也是字母表或数字,则说明当前字节i属于标记的一部分;
[0032]如果字节i+1不是字母表或数字,则说明当前字节i是标记的结尾,并且下一个字节是标记的开头。
[0033]进一步地,在步骤3中,所述基于语法感知的变异策略包括基于树的变异操作,所述基于树的变异操作包括:
[0034]将要变异的样本、语法和从触发新覆盖的输入样本的队列中随机选择的样本作为输入;
[0035]根据语法将要变异的样本解析为第一抽象语法树,如果出现解析错误,则不进行基于树的变异;
[0036]遍历第一抽象语法树,并将每个子树存储在集合S中;
[0037]将从队列中随机选择的样本解析为第二抽象语法树,如果没有解析错误,则将第二抽象语法树的每个子树存储在集合S中;
[0038]对于第一抽象语法树中的每个子树n,用集合S中的每个子树s替换每个子树n,从而生成一个新的变异样本;
[0039]返回一组变异的样本。
[0040]进一步地,在步骤3中,所述基于语法感知的变异策略包括基于树的变异操作,所
述基于树的变异操作包括:
[0041]将要变异的样本、语法和从触发新覆盖的输入样本的队列中随机选择的样本作为输入;
[0042]将要变异的样本和从队列中随机选择的样本的长度限制为设定字节长;如果要变异的样本的长度超过所述设定的字节长,则不进行基于树的变异;如果从队列中随机选择的样本的长度超过所述设定的字节长,则仅对要变异的样本和从队列中随机选择的样本中长度小于所述设定的字节长的部分进行基于树的变异;
[0043]根据语法将要变异的样本解析为第一抽象语法树,如果出现解析错误,则不进行基于树的变异;
[0044]遍历第一抽象语法树,并将每个子树存储在集合S中;
[0045]将从队列中随机选择的样本解析为第二抽象语法树,如果没有解析错误,则将第二抽象语法树的每个子树存储在集合S中;
[0046]对于第一抽象语法树中的每个子树n,用集合S中的每个子树s替换每个子树n,从而生成一个新的变异样本;
[0047]返回一组变异的样本。
[0048]进一步地,在步骤3中,所述基于语法感知的变异策略包括基于树的变异操作,所述基于树的变异操作包括:
[0049]将要变异的样本、语法和从触发新覆盖的输本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于语法感知的灰盒模糊测试方法,其特征在于,包括以下步骤:步骤1、从存储初始输入样本以及触发新覆盖的输入样本的队列中选择一个输入样本;步骤2、将从所述队列中选择的输入样本基于语法感知的修剪策略对该队列中选择的输入样本进行修剪;步骤3、对修剪后的样本进行基于语法感知的变异策略对该修剪后的样本进行变异操作,生成新输入样本;步骤4、将变异后的新输入样本投入到程序中执行;步骤5、如果触发新的覆盖,则将其添加到队列中以更新队列,否则,丢弃该变异样本。2.如权利要求1所述的基于语法感知的灰盒模糊测试方法,其特征在于,在步骤2中,所述基于语法感知的修剪策略的具体步骤包括:步骤2.1、将要修剪的输入样本按照语法解析为抽象语法树;步骤2.2、如果出现解析错误,则使用AFL内置的修剪策略;否则,继续执行下一步;步骤2.3、从抽象语法树中剪掉一个子树;步骤2.4、如果修剪后覆盖率没有发生变化,则继续尝试修剪其他子树;否则,保留子树并尝试修剪下一个子树。3.如权利要求2所述的基于语法感知的灰盒模糊测试方法,其特征在于,在步骤2.2中,使用AFL内置的修剪策略的步骤包括:步骤2.2.1、将输入样本划分为字节的块,并且将每个块视为独立的数据单元;步骤2.2.2、对每个块进行删除操作,如果删除后的输入样本在执行程序时覆盖率没有变化,则将该块删除,重复该步骤直到所有块都被遍历完毕;步骤2.2.3、根据删除操作的顺序和结果,生成新的输入样本。4.如权利要求1所述的基于语法感知的灰盒模糊测试方法,其特征在于,在步骤3中,所述基于语法感知的变异策略包括基于字典的变异操作,所述基于字典的变异操作包括:步骤3.1、确定修剪后的样本中的标记边界;步骤3.2、从预定义的字典中选择一个标记;步骤3.3、将选定的标记插入到修剪后的样本中的标记边界上;步骤3.4、或者将选定的标记覆盖掉修剪后的样本中标记边界之间的内容;步骤3.5、重复执行上述步骤3.1

步骤3.4,直到达到预设的变异次数或变异停滞。5.如权利要求4所述的基于语法感知的灰盒模糊测试方法,其特征在于,在步骤3.1中,确定修剪后的样本中的标记边界的步骤包括:从修剪后的样本的开头开始,依次遍历每个字节,直到末尾;对于当前的字节i,检查它是否是字母表或数字;如果字节i是字母表或数字,则继续检查下一个字节i+1是否也是字母表或数字;如果字节i+1也是字母表或数字,则说明当前字节i属于标记的一部分;如果字节i+1不是字母表或数字,则说明当前字节i是标记的结尾,并且下一个字节是标记的开头。6.如权利要求1所述的基于语法感知的灰盒模糊测试方法,其特征在于,在步骤3中,所述基于语法感知的变异策略包括基于树的变异操作,所述基于树的变异操作包括:将要变异的样本、语法和从触发新覆盖的输入样本的队列中随机选择的样本作为输
入;根据语法将要变异的样本解析为第一抽象语法树,如果出现解析错误,则不进行基于树的变异;遍历第一抽象语法树,并将每个子树存储在集合S中;将从队列中随机选择的样本解析为第二抽象语法树,如果没有解析错误,则将第二抽象语法树的每个子树存储在集合S中;对于第一抽象语法树中的每个子树n,用集合S中的每个子树s替换每个子树n,从而生成一个新的变异样本;返回一组变异的样本。7.如权利要求1所述的基于语法感知的灰盒模糊测试方法,其特征在于,在步骤3中,所述基于语法感知的变异策略包括基于树的变异操作,所述基...

【专利技术属性】
技术研发人员:王俊杰马宇涵张向伟
申请(专利权)人:天津大学
类型:发明
国别省市:

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

1