一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统技术方案

技术编号:34185575 阅读:12 留言:0更新日期:2022-07-17 14:09
本发明专利技术公开了一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统,属于软件模糊测试技术领域。测试方法包括:通过静态分析工具标记不同类型漏洞的行号信息;编译插桩程序,实现运行时对不同类型漏洞特征信息的统计;基于漏洞类型构建并维护多个特定漏洞类型的种子队列,并为每个种子队列按照漏洞类型定制不同的能量分配方式;进一步将能量分配细化至字节级,依照变异前后种子在特定类型漏洞上的潜在性能分数为变异的字节位置分配权重。本发明专利技术中的匹配漏洞特征的、字节级的能量分配算法,使得模糊测试工具在不同类型漏洞上的漏洞挖掘效率有可观提升。挖掘效率有可观提升。挖掘效率有可观提升。

【技术实现步骤摘要】
一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统


[0001]本专利技术涉及软件模糊测试
,尤其涉及一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统。

技术介绍

[0002]随着互联网技术的蓬勃发展,计算机软件被广泛应用于日常生活、企业生产、商务运营以及政府管理。然而,在互联网技术极大促进经济社会发展的同时,也带来了相当多的风险挑战。相对突出的问题表现在高危零日漏洞以及高级可持续威胁攻击的数量日益增长,信息系统面临的漏洞威胁形势更加严峻,而计算机系统安全防护意识仍然相对薄弱。软件安全问题已成为互联网蓬勃发展背后涌动的暗流,如何快速且高效地发现软件漏洞已成为互联网相关行业亟需解决的一大难题。
[0003]为定位软件漏洞,传统的静态代码分析技术往往依赖于专家经验,根据对漏洞的现有认知总结确定漏洞规则/模式,进一步基于总结的漏洞规则在词法分析、语法分析、语义分析等编译层次上进行测试代码的错误审核与排查。考虑到专家经验的局限性,静态代码分析技术存在漏洞检测误报率高、漏洞定位不准确等问题。为高效识别软件中可能存在的漏洞,自动化漏洞挖掘技术在学术界与工业界备受关注。其中,一种被广泛应用的模糊测试方法是“基于输入突变的灰盒模糊测试”。基于输入突变的灰盒模糊测试工具通过特定的变异操作生成大量的目标程序测试用例,将测试用例作为目标程序输入,执行目标程序并监控运行状态,并将触发了目标程序异常行为的测试用例保存到本地以供后续人工分析,此外,其将触发了新的代码执行路径的测试用例添加到保存的样例集合,根据设定的能量分配方法为保存的样例集合中的样例分配变异次数,如此循环往复,从而实现了自动化漏洞挖掘与报告。虽然变异操作具有随机性和盲目性,灰盒模糊测试工具仍是当今最有效的漏洞检测方案之一。
[0004]在灰盒模糊测试中,能量即是分配给测试用例的变异次数,能量分配方法是灰盒模糊测试工具对每个测试用例变异次数多少的衡量标准。因此,能量分配算法也就潜移默化地影响了灰盒模糊测试的变异方向、漏洞发掘潜力以及执行速率,一个合适的能量分配算法对灰盒模糊测试的漏洞挖掘速率至关重要。
[0005]调查表明,现有的绝大多数模糊测试工具并没有针对特定的漏洞类型去定制不同的能量分配算法,而是采用人工设计的标准实现能量分配。举例而言,最著名的灰盒模糊测试工具AFL只关注文件长度较短、执行速率更快的测试用例,并设计了相应的能量分配算法为这些测试用例分配更多的能量;MOpt、AFL++等新兴的模糊测试工具也都采用人工设计标准来分配更多计算资源给符合标准的测试用例。

技术实现思路

[0006]针对现有方法技术在漏洞类型上的盲目和能量分配颗粒度上的不足,本专利技术提供
了一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统,提出一种匹配漏洞特征的、精确到字节的能量分配算法。首先,基于静态代码分析技术,该系统根据不同类型的漏洞特征进行基本块插桩。在模糊测试阶段,该系统首先根据预定义的漏洞类型构建漏洞类型专属的种子队列。基于运行时获取的、特定漏洞类型的特征统计信息,根据特定漏洞类型的能量分配算法为测试用例分配整体能量。在后续针对测试用例的变异流程中,依照变异前后的测试用例在特定漏洞类型上的表现动态调整字节级别的权重,从而间接确立字节级的能量分配。这种匹配漏洞特征的、字节级的能量分配算法,有效提升了模糊测试工具在不同种类漏洞上的漏洞挖掘效率。
[0007]为了实现上述目的,本专利技术采用的具体技术方案如下:
[0008]一种基于字节敏感能量分配的漏洞类型导向模糊测试方法,包括以下步骤:
[0009](1)对目标程序进行静态分析,获取不同类型的可疑漏洞的行号信息,用于为后续的编译时插桩做初步准备工作;
[0010](2)在编译目标程序的同时,依照步骤(1)获取的行号信息,跟踪并定位不同类型的可疑漏洞对应的基本块,根据漏洞类型展开不同形式的插桩,用于为后续模糊测试的能量分配提供指导信息;
[0011](3)建立若干特定于漏洞类型的种子文件队列,并对每个种子文件队列中的测试用例顺序展开模糊测试,记录测试用例执行完成后对应不同漏洞类型的插桩所返回的指导信息,按照漏洞类型分别计算每个测试用例对应的潜在性能分数;
[0012](4)依照步骤(3)中计算得到的测试用例的潜在性能分数,对各个特定漏洞类型的种子文件队列进行更新,更新方式为:针对各个特定漏洞类型,将测试用例的潜在性能分数从高到低进行排序,优先执行潜在性能分数高的测试用例;在更新后的当前种子文件队列中,为排序靠前的测试用例分配更高的能量;
[0013](5)在种子变异阶段,字节变异后产生的新测试用例如果能够在对应的漏洞类型上产生更高的潜在性能分数,则为对应字节分配更高的权重;
[0014](6)重复步骤(3)

(5),直至模糊测试结束。
[0015]模糊测试工具通常会维护一个种子队列,用于保存高质量的测试用例。其通常会利用人工设计的能量分配方法为队列中的测试用例分配计算资源,并期望变异后的输入文件能够触发目标软件的异常情况。在本专利技术中,根据预先定义的漏洞类型,会建立并维护若干漏洞类型专属的种子队列,彼此之间相互独立,并按照漏洞类型专属的能量分配方法独立计算种子能量。在模糊测试中,会顺序遍历不同漏洞类型对应的种子队列,按照能量分配方案分配变异次数越多的测试用例对当前队列所属的漏洞类型的发现效率越高。
[0016]此外,考虑到输入文件的不同字节对特定类型漏洞的发掘所作的贡献是不同的,在种子变异阶段,倘若变异特定字节后的新测试用例有更高概率发现特定类型漏洞(表现在特定类型漏洞的特征统计信息上),则对这些变异所使用的特定字节给予更高的权重。在模糊测试中,更多地变异测试用例的高权重字节将有更高概率触发相应的特定类型漏洞。
[0017]本专利技术的基于字节敏感能量分配的漏洞类型导向模糊测试方法实现动态且独立地维护漏洞类型专属的种子队列,每个种子队列各司其职,专门负责一种类型漏洞的探索与挖掘,从而提高了模糊测试工具在不同种类漏洞上的漏洞挖掘效率。
[0018]作为本专利技术的优选,所述的步骤(1)中通过静态分析收集的信息包括:缓冲区溢出
所在行号、释放后重用中“定义

释放

重用”所在的三个行号位置、重复释放中“释放

再释放”所在的两个行号位置等。
[0019]作为本专利技术的优选,所述的步骤(2)中针对不同漏洞类型的插桩方式如下:
[0020](2

1)针对缓冲区溢出漏洞,判断是否满足:对应行号的基本块为循环所在的基本块,且该基本块内存在内存写操作,且内存写操作的目标地址依赖于变化的指针值/偏移;
[0021]若满足,以插桩的形式记录该基本块的循环次数;
[0022](2

2)针对释放后重用漏洞,根据步骤(1)的静态分析结果得到一系列<定义

释放...

【技术保护点】

【技术特征摘要】
1.一种基于字节敏感能量分配的漏洞类型导向模糊测试方法,其特征在于,包括以下步骤:(1)对目标程序进行静态分析,获取不同类型的可疑漏洞的行号信息,用于为后续的编译时插桩做初步准备工作;(2)在编译目标程序的同时,依照步骤(1)获取的行号信息,跟踪并定位不同类型的可疑漏洞对应的基本块,根据漏洞类型展开不同形式的插桩,用于为后续模糊测试的能量分配提供指导信息;(3)建立若干特定于漏洞类型的种子文件队列,并对每个种子文件队列中的测试用例顺序展开模糊测试,记录测试用例执行完成后对应不同漏洞类型的插桩所返回的指导信息,按照漏洞类型分别计算每个测试用例对应的潜在性能分数;(4)依照步骤(3)中计算得到的测试用例的潜在性能分数,对各个特定漏洞类型的种子文件队列进行更新,更新方式为:针对各个特定漏洞类型,将测试用例的潜在性能分数从高到低进行排序,优先执行潜在性能分数高的测试用例;在更新后的当前种子文件队列中,为排序靠前的测试用例分配更高的能量;(5)在种子变异阶段,字节变异后产生的新测试用例如果能够在对应的漏洞类型上产生更高的潜在性能分数,则为对应字节分配更高的权重;(6)重复步骤(3)

(5),直至模糊测试结束。2.根据权利要求1所述的基于字节敏感能量分配的漏洞类型导向模糊测试方法,其特征在于,所述的步骤(1)中通过静态分析收集的信息包括:缓冲区溢出所在行号、释放后重用中“定义

释放

重用”所在的三个行号位置、重复释放中“释放

再释放”所在的两个行号位置。3.根据权利要求1所述的基于字节敏感能量分配的漏洞类型导向模糊测试方法,其特征在于,所述的步骤(2)中针对不同漏洞类型的插桩方式如下:(2

1)针对缓冲区溢出漏洞,判断是否满足:对应行号的基本块为循环所在的基本块,且该基本块内存在内存写操作,且内存写操作的目标地址依赖于变化的指针值/偏移;若满足,以插桩的形式记录该基本块的循环次数;(2

2)针对释放后重用漏洞,根据步骤(1)的静态分析结果得到一系列<定义

释放

重用>对;按照先后顺序进行排序标号,针对每一个<定义

释放

重用>对,在三个行号对应的基本块位置插桩,用于标记当前序号对应的<定义

释放

重用>对中被测试用例触及到的部分;(2

3)针对重复释放漏洞,根据步骤(1)的静态分析结果得到一系列<释放

再释放>对;按照先后顺序进行排序标号,针对每一个<释放

再释放>对,在两个行号对应的基本块位置插桩,用于标记当前序号对应的<释放

再释放>对中被测试用例触及到的部分。4.根据权利要求1所述的基于字节敏感能量分配的漏洞类型导向模糊测试方法其特征在于,所述的步骤(3)包括:对原始的特定于漏洞类型的种子文件队列顺序展开模糊测试,依照种子执行完成后插桩所返回的引导信息,得到当前种子在各项漏洞类型上的潜在性能分数;针对释放后重用漏洞,潜在性能分数需要满足的条件为:针对给定的<定义

释放

重用>对,考虑到触发释...

【专利技术属性】
技术研发人员:纪守领张凌铭张旭鸿陈建海
申请(专利权)人:尚蝉浙江科技有限公司
类型:发明
国别省市:

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

1