CN114756471A - 一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统 - Google Patents
一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统 Download PDFInfo
- Publication number
- CN114756471A CN114756471A CN202210440542.5A CN202210440542A CN114756471A CN 114756471 A CN114756471 A CN 114756471A CN 202210440542 A CN202210440542 A CN 202210440542A CN 114756471 A CN114756471 A CN 114756471A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- release
- seed
- byte
- test
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统,属于软件模糊测试技术领域。测试方法包括:通过静态分析工具标记不同类型漏洞的行号信息;编译插桩程序,实现运行时对不同类型漏洞特征信息的统计;基于漏洞类型构建并维护多个特定漏洞类型的种子队列,并为每个种子队列按照漏洞类型定制不同的能量分配方式;进一步将能量分配细化至字节级,依照变异前后种子在特定类型漏洞上的潜在性能分数为变异的字节位置分配权重。本发明中的匹配漏洞特征的、字节级的能量分配算法,使得模糊测试工具在不同类型漏洞上的漏洞挖掘效率有可观提升。
Description
技术领域
本发明涉及软件模糊测试技术领域,尤其涉及一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统。
背景技术
随着互联网技术的蓬勃发展,计算机软件被广泛应用于日常生活、企业生产、商务运营以及政府管理。然而,在互联网技术极大促进经济社会发展的同时,也带来了相当多的风险挑战。相对突出的问题表现在高危零日漏洞以及高级可持续威胁攻击的数量日益增长,信息系统面临的漏洞威胁形势更加严峻,而计算机系统安全防护意识仍然相对薄弱。软件安全问题已成为互联网蓬勃发展背后涌动的暗流,如何快速且高效地发现软件漏洞已成为互联网相关行业亟需解决的一大难题。
为定位软件漏洞,传统的静态代码分析技术往往依赖于专家经验,根据对漏洞的现有认知总结确定漏洞规则/模式,进一步基于总结的漏洞规则在词法分析、语法分析、语义分析等编译层次上进行测试代码的错误审核与排查。考虑到专家经验的局限性,静态代码分析技术存在漏洞检测误报率高、漏洞定位不准确等问题。为高效识别软件中可能存在的漏洞,自动化漏洞挖掘技术在学术界与工业界备受关注。其中,一种被广泛应用的模糊测试方法是“基于输入突变的灰盒模糊测试”。基于输入突变的灰盒模糊测试工具通过特定的变异操作生成大量的目标程序测试用例,将测试用例作为目标程序输入,执行目标程序并监控运行状态,并将触发了目标程序异常行为的测试用例保存到本地以供后续人工分析,此外,其将触发了新的代码执行路径的测试用例添加到保存的样例集合,根据设定的能量分配方法为保存的样例集合中的样例分配变异次数,如此循环往复,从而实现了自动化漏洞挖掘与报告。虽然变异操作具有随机性和盲目性,灰盒模糊测试工具仍是当今最有效的漏洞检测方案之一。
在灰盒模糊测试中,能量即是分配给测试用例的变异次数,能量分配方法是灰盒模糊测试工具对每个测试用例变异次数多少的衡量标准。因此,能量分配算法也就潜移默化地影响了灰盒模糊测试的变异方向、漏洞发掘潜力以及执行速率,一个合适的能量分配算法对灰盒模糊测试的漏洞挖掘速率至关重要。
调查表明,现有的绝大多数模糊测试工具并没有针对特定的漏洞类型去定制不同的能量分配算法,而是采用人工设计的标准实现能量分配。举例而言,最著名的灰盒模糊测试工具AFL只关注文件长度较短、执行速率更快的测试用例,并设计了相应的能量分配算法为这些测试用例分配更多的能量;MOpt、AFL++等新兴的模糊测试工具也都采用人工设计标准来分配更多计算资源给符合标准的测试用例。
发明内容
针对现有方法技术在漏洞类型上的盲目和能量分配颗粒度上的不足,本发明提供了一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统,提出一种匹配漏洞特征的、精确到字节的能量分配算法。首先,基于静态代码分析技术,该系统根据不同类型的漏洞特征进行基本块插桩。在模糊测试阶段,该系统首先根据预定义的漏洞类型构建漏洞类型专属的种子队列。基于运行时获取的、特定漏洞类型的特征统计信息,根据特定漏洞类型的能量分配算法为测试用例分配整体能量。在后续针对测试用例的变异流程中,依照变异前后的测试用例在特定漏洞类型上的表现动态调整字节级别的权重,从而间接确立字节级的能量分配。这种匹配漏洞特征的、字节级的能量分配算法,有效提升了模糊测试工具在不同种类漏洞上的漏洞挖掘效率。
为了实现上述目的,本发明采用的具体技术方案如下:
一种基于字节敏感能量分配的漏洞类型导向模糊测试方法,包括以下步骤:
(1)对目标程序进行静态分析,获取不同类型的可疑漏洞的行号信息,用于为后续的编译时插桩做初步准备工作;
(2)在编译目标程序的同时,依照步骤(1)获取的行号信息,跟踪并定位不同类型的可疑漏洞对应的基本块,根据漏洞类型展开不同形式的插桩,用于为后续模糊测试的能量分配提供指导信息;
(3)建立若干特定于漏洞类型的种子文件队列,并对每个种子文件队列中的测试用例顺序展开模糊测试,记录测试用例执行完成后对应不同漏洞类型的插桩所返回的指导信息,按照漏洞类型分别计算每个测试用例对应的潜在性能分数;
(4)依照步骤(3)中计算得到的测试用例的潜在性能分数,对各个特定漏洞类型的种子文件队列进行更新,更新方式为:针对各个特定漏洞类型,将测试用例的潜在性能分数从高到低进行排序,优先执行潜在性能分数高的测试用例;在更新后的当前种子文件队列中,为排序靠前的测试用例分配更高的能量;
(5)在种子变异阶段,字节变异后产生的新测试用例如果能够在对应的漏洞类型上产生更高的潜在性能分数,则为对应字节分配更高的权重;
(6)重复步骤(3)-(5),直至模糊测试结束。
模糊测试工具通常会维护一个种子队列,用于保存高质量的测试用例。其通常会利用人工设计的能量分配方法为队列中的测试用例分配计算资源,并期望变异后的输入文件能够触发目标软件的异常情况。在本发明中,根据预先定义的漏洞类型,会建立并维护若干漏洞类型专属的种子队列,彼此之间相互独立,并按照漏洞类型专属的能量分配方法独立计算种子能量。在模糊测试中,会顺序遍历不同漏洞类型对应的种子队列,按照能量分配方案分配变异次数越多的测试用例对当前队列所属的漏洞类型的发现效率越高。
此外,考虑到输入文件的不同字节对特定类型漏洞的发掘所作的贡献是不同的,在种子变异阶段,倘若变异特定字节后的新测试用例有更高概率发现特定类型漏洞(表现在特定类型漏洞的特征统计信息上),则对这些变异所使用的特定字节给予更高的权重。在模糊测试中,更多地变异测试用例的高权重字节将有更高概率触发相应的特定类型漏洞。
本发明的基于字节敏感能量分配的漏洞类型导向模糊测试方法实现动态且独立地维护漏洞类型专属的种子队列,每个种子队列各司其职,专门负责一种类型漏洞的探索与挖掘,从而提高了模糊测试工具在不同种类漏洞上的漏洞挖掘效率。
作为本发明的优选,所述的步骤(1)中通过静态分析收集的信息包括:缓冲区溢出所在行号、释放后重用中“定义-释放-重用”所在的三个行号位置、重复释放中“释放-再释放”所在的两个行号位置等。
作为本发明的优选,所述的步骤(2)中针对不同漏洞类型的插桩方式如下:
(2-1)针对缓冲区溢出漏洞,判断是否满足:对应行号的基本块为循环所在的基本块,且该基本块内存在内存写操作,且内存写操作的目标地址依赖于变化的指针值/偏移;
若满足,以插桩的形式记录该基本块的循环次数;
(2-2)针对释放后重用漏洞,根据步骤(1)的静态分析结果得到一系列<定义-释放-重用>对;按照先后顺序进行排序标号,针对每一个<定义-释放-重用>对,在三个行号对应的基本块位置插桩,用于标记当前序号对应的<定义-释放-重用>对中被测试用例触及到的部分;
(2-3)针对重复释放漏洞,根据步骤(1)的静态分析结果得到一系列<释放-再释放>对;按照先后顺序进行排序标号,针对每一个<释放-再释放>对,在两个行号对应的基本块位置插桩,用于标记当前序号对应的<释放-再释放>对中被测试用例触及到的部分。
作为本发明的优选,所述的步骤(3)包括:
对原始的特定于漏洞类型的种子文件队列顺序展开模糊测试,依照种子执行完成后插桩所返回的引导信息,得到当前种子在各项漏洞类型上的潜在性能分数;
(3-1)针对释放后重用漏洞,潜在性能分数需要满足的条件为:
针对给定的<定义-释放-重用>对,考虑到触发释放后重用漏洞需要在时域上顺序执行对应的三个基本块,分配分数时应满足“同时触发三处的种子分数高于触发前两处的种子分数”以及“触发前两处的种子分数高于仅触发一处的种子分数”;
考虑到存在一系列<定义-释放-重用>对,为尽可能多地覆盖可疑位置,分配分数时应满足“对于覆盖到多个<定义-释放-重用>对的种子,每一<定义-释放-重用>对都会对种子的潜在性能分数做贡献”;
(3-2)针对缓冲区溢出漏洞,潜在性能分数需要满足的条件为:
为触发缓冲区溢出漏洞,应尽可能多地遍历循环以期触发越界访问,因此针对单个循环基本块,分配分数时应满足“遍历当前循环基本块的次数越多,种子分数也应越高”;
考虑到存在多处可疑的循环,为尽可能多地覆盖可疑基本块,分配分数时应满足“对于覆盖到多处可疑的循环基本块的种子,每一循环基本块的循环次数都会为种子的潜在性能分数做贡献”;
(3-3)针对重复释放漏洞,潜在性能分数需要满足的条件为:
针对给定的<释放-再释放>对,考虑到重复释放漏洞需要在时域上顺序执行对应的两个基本块,分配分数时应满足“同时触发两处的种子分数高于仅触发一处的种子分数”以及“触发第一处的种子分数高于触发第二处的种子分数”;
考虑到存在一系列<释放-再释放>对,为尽可能多地覆盖可疑位置,分配分数时应满足“对于覆盖到多个<释放-再释放>对的种子,每一<释放-再释放>对都会对种子的潜在性能分数做贡献”。
本领域技术人员可以根据上述条件设计各项漏洞类型的潜在性能分数计算公式,得到原始种子文件队列中每一测试用在不同漏洞类型上的潜在性能分数。针对单一漏洞类型,依照潜在性能分数高低对原始种子文件队列进行重排,得到新的、特定于漏洞类型的种子文件队列。此后的每轮模糊测试,会顺序遍历一系列不同漏洞类型的种子文件队列,并按照相同的计算方式计算对应的潜在性能分数。
作为本发明的优选,所述的步骤(5)中,在种子变异阶段,若字节变异后产生的新测试用例能够在对应的漏洞类型上产生更高的潜在性能分数,则将新的测试用例根据潜在性能分数的高低插入到特定于漏洞类型的种子文件队列中,若队列中的测试用例数量高于阈值,则剔除当前潜在性能分数最低的测试用例。
以缓冲区溢出漏洞为例,假定此轮模糊测试正在遍历缓冲区溢出漏洞对应的种子文件队列,如果基于队列中某一种子变异后得到的新测试用例,在缓冲区溢出漏洞上的潜在性能分数高于缓冲区溢出漏洞对应的种子文件队列中的最低潜在性能分数,就将该新测试用例加入到队列中的合适位置,必要时可将最低潜在性能分数的种子踢出队列;对于加入到特定漏洞类型种子文件队列的新测试用例,为其分配与潜在性能分数相匹配的种子能量,具体来说,种子能量应与种子在该漏洞类型上的潜在性能分数成正比。
作为本发明的优选,所述的步骤(5)中,在种子的字节变异阶段,所述的字节变异包括比特翻转及字节替换等,若变异后生成的新测试用例能在种子所在队列对应的漏洞类型上取得相较于种子更高的潜在性能分数,则为对应的变异字节分配更高的权重;在之后的变异过程中,依照按概率随机抽样的方式挑选变异位置,具有高权重的字节位置有更大可能被挑选为变异候选字节。
一种基于字节敏感能量分配的漏洞类型导向模糊测试系统,用于实现上述的基于字节敏感能量分配的漏洞类型导向模糊测试方法,所述的测试系统包括:
静态分析模块,其用于对目标程序的源代码进行静态分析,获取不同类型的可疑漏洞在目标程序中的行号位置;
预处理模块,其用于针对由静态分析模块给出的漏洞类型与行号信息,在编译阶段定位行号所在的基本块,并基于对应的漏洞类型展开不同形式的基本块插桩;
模糊测试模块,其用于基于原始种子文件队列创建并维护若干漏洞类型专属的种子队列,每轮模糊测试会顺序遍历若干漏洞类型专属的种子队列,依次挑选种子队列中的样例进行变异操作,变异操作中根据各字节的权重进行按概率随机抽样;基于变异后的测试用例在种子队列所属的漏洞类型上的性能表现,更新对应的种子队列与样例的字节权重,并为高质量的测试用例分配与其在漏洞类型上的性能表现相匹配的种子能量。
与现有技术相比,本发明的有益效果为:
1)本发明是以静态代码分析技术的分析结果作为辅助的,但两者耦合度低,使用者可以任选其认为合适的静态分析工具,包括最近兴起的基于深度学习的智能化漏洞静态检测系统或者是基于有限状态自动机的类型状态分析工具,可扩展性强。此外,本发明对各类型漏洞的漏洞挖掘效率也能侧面反映静态分析工具的有效性;
2)本发明针对不同的漏洞类型单独创建和维护特定漏洞类型的种子队列与能量分配算法,相较于传统的、漏洞类型不敏感的、“盲目”的能量分配策略,本发明的每一种子队列各司其职,专门负责一种类型漏洞的探索与挖掘。除此之外,与考虑种子整体的能量分配不同的是,本发明将颗粒度细化至字节级别,测试用例中高权重的字节被给予更高的能量。通过这些方式,使得模糊测试工具在不同种类漏洞上的挖掘效率有所提升;
3)本发明所需的计算开销极小、插桩开销较低,所提出的基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统可以有效提高模糊测试工具在各种漏洞类型上的漏洞挖掘效率。
附图说明
图1为基于字节敏感能量分配的漏洞类型导向模糊测试系统的架构示意图;
图2为以缓冲区溢出漏洞为例的预处理模块插桩流程示意图;
图3为基于原始种子文件队列构建专属于缓冲区溢出漏洞种子文件队列的示意图;
图4为变异操作对种子的字节权重更新的示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步详细描述,需要指出的是,以下所述实施例旨在便于对本发明的理解,而对其不起任何限定作用。
本发明根据不同漏洞类型,构建漏洞类型专属的样例队列,并设计与漏洞特征相匹配的、精确到字节的能量分配方法,从而实现在各漏洞类型上的更快、更高效地漏洞探索与挖掘。为简洁起见,以缓冲区溢出漏洞为例,阐述本发明的基本思路:如图1所示,静态分析模块可选择任意指定的、用于分析缓冲区溢出漏洞的静态分析工具,得到的分析结果是一系列可疑的缓冲区溢出漏洞的行号位置。
如图1所示,在预处理模块中,需要对缓冲区溢出漏洞做专门形式的插桩工作。有研究指出,缓冲区溢出漏洞往往发生在循环的边界条件检查不当的情况下。因此,如图2所示,LLVM Pass首先读入静态分析模块生成的分析结果,紧接着顺序读取每一可疑的行号位置,通过编译时保留的调试信息定位到相应基本块。是否插桩该基本块的三条判断标准分别为:该基本块是否属于循环、基本块内是否存在内存写操作以及内存写操作的目标地址是否由可变化的偏移值决定。倘若满足上述三条判断标准,该基本块是值得插桩的,则在基本块的末尾插入一条对共享内存的更新语句。具体来说,就如同传统的灰盒模糊测试工具AFL通过共享内存记录测试用例的代码覆盖情况一样,本发明通过共享内存记录值得插桩的基本块的循环次数:
bo_shared_memory[i]+=1
即,每当测试用例经过特定的循环基本块时,共享内存中对应于特定基本块的循环次数就增长1。预处理模块的插桩过程如此循环往复,直到所有静态分析得到的可疑行号位置都被处理完毕。
如图3所示,模糊测试模块首先依据给定的原始种子文件队列构建专属于缓冲区溢出漏洞的种子文件队列。具体来看,模糊测试模块会遍历执行原始种子文件队列中的每一种子,通过执行完成后的共享内存信息,可以计算得到当前种子在缓冲区溢出漏洞上的潜在性能分数:
其中,N为共享内存可容纳的基本块号数量。
基于各种子在缓冲区溢出漏洞上的潜在性能分数高低,对原始种子文件队列进行重排,得到特定于缓冲区溢出漏洞的种子文件队列。对队列中每一种子赋予的、用于探索缓冲区溢出漏洞的能量为:
seed_energy=ln(seed_fitness)+C
其中,C为随种子被选中次数增多而递减的变量。
在一轮模糊测试的过程中,模糊测试模块会顺序遍历各个特定漏洞类型的种子队列,并按照种子在特定漏洞类型上的潜在性能分数高低优先变异潜在性能分数高的种子。
如图4所示,假定正在变异缓冲区溢出漏洞种子队列中的种子T,经过对特定字节b的变异操作后,得到新的测试用例T’。倘若根据上述的潜在性能分数计算公式,T’的潜在性能分数高于缓冲区溢出漏洞种子队列中最低的潜在性能分数,则对缓冲区溢出漏洞种子队列进行更新,并赋予测试用例T’对应的种子能量,在必要时可将潜在性能分数最低的种子踢出队列。考虑到变异字节位置b能生成潜在性能分数更高的测试用例,也就更有可能得到触发缓冲区溢出漏洞的测试用例,模糊测试模块会为字节位置b分配更高的权重。在种子变异阶段,种子T的字节位置i的挑选概率为:
其中,B(T)代表种子T的字节个数,score(i)代表字节位置i的权重。
依据按概率采样的算法,在一次种子变异操作中,模糊测试模块会采样若干字节位置用于变异。一轮结束后,新一轮模糊测试会继续遍历各个特定漏洞类型的种子队列,如此往复,直至模糊测试被用户手动终止。
以上所述的实施例对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的具体实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。
Claims (7)
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)包括:
对原始的特定于漏洞类型的种子文件队列顺序展开模糊测试,依照种子执行完成后插桩所返回的引导信息,得到当前种子在各项漏洞类型上的潜在性能分数;
针对释放后重用漏洞,潜在性能分数需要满足的条件为:
针对给定的<定义-释放-重用>对,考虑到触发释放后重用漏洞需要在时域上顺序执行对应的三个基本块,分配分数时应满足“同时触发三处的种子分数高于触发前两处的种子分数”以及“触发前两处的种子分数高于仅触发一处的种子分数”;
考虑到存在一系列<定义-释放-重用>对,为尽可能多地覆盖可疑位置,分配分数时应满足“对于覆盖到多个<定义-释放-重用>对的种子,每一<定义-释放-重用>对都会对种子的潜在性能分数做贡献”;
针对缓冲区溢出漏洞,潜在性能分数需要满足的条件为:
针对单个循环基本块,分配分数时应满足“遍历当前循环基本块的次数越多,种子分数也应越高”;
考虑到存在多处可疑的循环,为尽可能多地覆盖可疑基本块,分配分数时应满足“对于覆盖到多处可疑的循环基本块的种子,每一循环基本块的循环次数都会为种子的潜在性能分数做贡献”;
针对重复释放漏洞,潜在性能分数需要满足的条件为:
针对给定的<释放-再释放>对,考虑到重复释放漏洞需要在时域上顺序执行对应的两个基本块,分配分数时应满足“同时触发两处的种子分数高于仅触发一处的种子分数”以及“触发第一处的种子分数高于触发第二处的种子分数”;
考虑到存在一系列<释放-再释放>对,为尽可能多地覆盖可疑位置,分配分数时应满足“对于覆盖到多个<释放-再释放>对的种子,每一<释放-再释放>对都会对种子的潜在性能分数做贡献”。
5.根据权利要求1所述的基于字节敏感能量分配的漏洞类型导向模糊测试方法,其特征在于,所述的步骤(5)中,在种子变异阶段,若字节变异后产生的新测试用例能够在对应的漏洞类型上产生更高的潜在性能分数,则将新的测试用例根据潜在性能分数的高低插入到特定于漏洞类型的种子文件队列中,若队列中的测试用例数量高于阈值,则剔除当前潜在性能分数最低的测试用例。
6.根据权利要求1所述的基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统,其特征在于,所述的步骤(5)中,在种子的字节变异阶段,所述的字节变异包括比特翻转及字节替换,若变异后生成的新测试用例能在种子所在队列对应的漏洞类型上取得相较于种子更高的潜在性能分数,则为对应的变异字节分配更高的权重;在之后的变异过程中,依照按概率随机抽样的方式挑选变异位置,具有高权重的字节位置有更大可能被挑选为变异候选字节。
7.一种基于字节敏感能量分配的漏洞类型导向模糊测试系统,其特征在于,用于实现权利要求1所述的基于字节敏感能量分配的漏洞类型导向模糊测试方法,所述的测试系统包括:
静态分析模块,其用于对目标程序的源代码进行静态分析,获取不同类型的可疑漏洞在目标程序中的行号位置;
预处理模块,其用于针对由静态分析模块给出的漏洞类型与行号信息,在编译阶段定位行号所在的基本块,并基于对应的漏洞类型展开不同形式的基本块插桩;
模糊测试模块,其用于基于原始种子文件队列创建并维护若干漏洞类型专属的种子队列,每轮模糊测试会顺序遍历若干漏洞类型专属的种子队列,依次挑选种子队列中的样例进行变异操作,变异操作中根据各字节的权重进行按概率随机抽样;基于变异后的测试用例在种子队列所属的漏洞类型上的性能表现,更新对应的种子队列与样例的字节权重,并为高质量的测试用例分配与其在漏洞类型上的性能表现相匹配的种子能量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210440542.5A CN114756471A (zh) | 2022-04-25 | 2022-04-25 | 一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210440542.5A CN114756471A (zh) | 2022-04-25 | 2022-04-25 | 一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114756471A true CN114756471A (zh) | 2022-07-15 |
Family
ID=82334060
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210440542.5A Pending CN114756471A (zh) | 2022-04-25 | 2022-04-25 | 一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114756471A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115795483A (zh) * | 2023-01-09 | 2023-03-14 | 工业信息安全(四川)创新中心有限公司 | 一种基于人工鱼群算法的软件漏洞检测方法 |
CN116451244A (zh) * | 2023-06-12 | 2023-07-18 | 北京中科卓信软件测评技术中心 | 基于软件漏洞成因导向的定向灰盒模糊测试方法及装置 |
-
2022
- 2022-04-25 CN CN202210440542.5A patent/CN114756471A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115795483A (zh) * | 2023-01-09 | 2023-03-14 | 工业信息安全(四川)创新中心有限公司 | 一种基于人工鱼群算法的软件漏洞检测方法 |
CN115795483B (zh) * | 2023-01-09 | 2023-04-21 | 工业信息安全(四川)创新中心有限公司 | 一种基于人工鱼群算法的软件漏洞检测方法 |
CN116451244A (zh) * | 2023-06-12 | 2023-07-18 | 北京中科卓信软件测评技术中心 | 基于软件漏洞成因导向的定向灰盒模糊测试方法及装置 |
CN116451244B (zh) * | 2023-06-12 | 2023-08-18 | 北京中科卓信软件测评技术中心 | 基于软件漏洞成因导向的定向灰盒模糊测试方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114756471A (zh) | 一种基于字节敏感能量分配的漏洞类型导向模糊测试方法和系统 | |
CN110443045B (zh) | 一种基于机器学习方法的模糊测试用例生成方法 | |
Liang et al. | Deepfuzzer: Accelerated deep greybox fuzzing | |
JP7115552B2 (ja) | 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム | |
CN110909364B (zh) | 面向源代码双极性软件安全漏洞图谱构建方法 | |
CN114139164A (zh) | 一种可信操作系统内核模糊测试的变异方法 | |
CN112506564B (zh) | 一种用于建立控制流图的方法、系统和介质 | |
CN117331826A (zh) | 一种针对挖掘安全漏洞的混合模糊测试优化方法 | |
CN111400718B (zh) | 一种系统漏洞与攻击的检测方法、装置及其相关设备 | |
CN116702157B (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
Gao et al. | Deep Learning-Based Hybrid Fuzz Testing. | |
CN113419960B (zh) | 用于可信操作系统内核模糊测试的种子生成方法及系统 | |
CN115795483A (zh) | 一种基于人工鱼群算法的软件漏洞检测方法 | |
CN114840856A (zh) | 一种状态感知的物联网可信执行环境模糊测试方法和系统 | |
CN116340137A (zh) | 用于模糊测试筛选测试用例的方法、装置、电子设备和介质 | |
CN115048298A (zh) | 一种面向数据包拼接的种子调度权值分配方法 | |
Xiao et al. | New approach to path explosion problem of symbolic execution | |
CN114462043A (zh) | 基于强化学习的Java反序列化漏洞检测系统及方法 | |
CN116186717B (zh) | 一种多线程并发漏洞检测方法和装置 | |
Feng | Fuzzing technology based on suspicious basic block orientation | |
CN115391787A (zh) | 一种基于生成对抗网络的afl种子优化方法及系统 | |
Li et al. | Speedneuzz: Speed up neural program approximation with neighbor edge knowledge | |
Li et al. | An Improvement of AFL Based On The Function Call Depth | |
CN115237797B (zh) | 一种基于覆盖率制导的模糊测试方法和装置 | |
CN116383826A (zh) | 基于深度强化学习的二进制漏洞挖掘过程动态优化方法 |
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 |