浅谈模糊测试基础技术——种子调度

admin 2022年4月22日23:55:47评论637 views字数 11770阅读39分14秒阅读模式

    种子是模糊测试的重要组成部分,对测试效率和结果影响甚大,种子调度是模糊测试的一种重要机制。在已经选好初始种子语料库的情况下,种子调度主要解决两个问题:第一,下一轮迭代测试中选择哪些种子;第二,将模糊时间或变异次数的权重定义为“能量”,对被选中的种子进行能量分配。简而言之,种子调度可以分为种子筛选和能量调度两部分。由于测试输入与bug的复杂性,现有的种子调度优化方案数量颇多。如何设计一个较好的种子调度策略,以最大限度地增加在模糊测试中发现的漏洞总数,提高模糊测试效率,成为了当前模糊测试研究工作中的重要问题。

    在2015年前,种子筛选算法主要有以下几种:基于Peach的集合覆盖算法、最小集覆盖、由执行时间加权的最小集覆盖、按大小加权的最小集覆盖和hotset算法。这些算法使用同样的参数集:给定|F|种子文件,以计算k个文件的数据缩减,其中k<<|F|。假设有t秒的时间来执行数据缩减,在此之后,所选的k个文件将会用于一次模糊测试(时间通常远大于t)。

    随着最为出名的模糊器AFL诞生,其代表性的遗传算法产生了种子调度这一机制。AFL提出的种子筛选和能量调度策略提高了模糊测试的效率,但也存在着一定的问题。

    AFL使用种子筛选算法从整个种子队列中筛选优先种子集,然后根据概率优先算法对于其中的种子变异。该算法根据边的hash值,以从小到大的顺序从0到65535中筛选该边的优先种子,击中所有已发现的边后则结束筛选。但是,被Fuzz的程序经过编译后,其实所有边的hash值已经确定,所以这个过程本质是一种固定的筛选过程,是按照一个确定的顺序进行筛选的,并不能保证筛选出的种子集合整体性能最优。

    而在能量调度方面,AFL会将更多的能量分配给触发高频路径的种子,但高频路径可能对应的是低质量种子,从而造成大量的能量浪费。此外,AFL不能自适应调整种子的能量分配。因此,AFL的种子筛选和能量调度策略有着很大的改进空间。


现有种子筛选与能量调度机制汇总

    针对前人提出的种子调度策略的不足,越来越多的研究者对种子调度策略进行创新与改进,设计出了测试效率更高的模糊器。大多模糊器的种子筛选和能量调度都取决于某种调度算法,比方说如何搜索Fuzz过程中的参数空间,被称为多臂赌博机问题(MAB)。其它调度算法还有模拟退火算法、马尔可夫算法、统计算法等,这些算法可以解决Fuzz过程中的效率问题。一些模糊器的种子筛选和能量调度策略如表1、表2所示。

表1 不同模糊器的种子筛选策略

浅谈模糊测试基础技术——种子调度

表2 不同模糊器的能量调度策略

浅谈模糊测试基础技术——种子调度

    下文将详细介绍近年来一些有代表性的种子调度策略及相应的模糊器。

代表性种子调度机制详解

基于Markov Chain模型状态转换的种子调度

    现有的大多模糊器根据执行状态(如代码覆盖率)进行种子调度,因为执行状态可以提供给模糊器更多信息。如果可以成功地表述状态转换,就可以很好地引导fuzz,以探索未发现的状态。马尔科夫链(Markov Chain)是一种流行的状态转换模型,是一个从一种状态到另一种状态的随机过程。

    AFLfast将状态定义为由输入执行的执行路径,同时,状态转换被定义为输入经过变异产生新的输入。相应的,状态转换也是指由输入执行的路径i到输入执行的路径j的转换。AFLfast的种子调度由能量调度和种子筛选两部分构成,当能量调度控制某种子测试所花费时间时,种子筛选策略会决定下一次选择哪个种子。


    AFLfast基于两个标准执行种子筛选策略:

①s(i)小的种子优先级高:s(i)表示种子ti之前从队列T中选到的次数。

②f(i)小的种子优先级高:f(i)表示种子执行路径i所生成输入的数量。

    在具体实现上,最优先选择被选次数最少的种子,若不止一个则选择较低频路径的输入。


    能量调度方面,提出6种方式计算能量调度函数p(i)。

①EXPLOIT

    p(i)=α(i),其中α(i)为CGF中AssignEnergy算法的实现,AFL根据所执行的时间、块转换覆盖率以及构造时间ti来计算α(i)。

②EXPLORE

    p(i)=α(i)/β,其中β>1且为常数。

③COE

浅谈模糊测试基础技术——种子调度

    其中β>1且为常数,s(i)值较低,μ是在已发现路径的模糊平均数。直观来说,f(i)>μ表示高频路径,直到其再次低于平均值才会进行模糊。常数M提供了每次模糊迭代生成的输入数量的上限。

④FAST

浅谈模糊测试基础技术——种子调度

    当f(i)>μ时,不会模糊ti,而是使ti与执行路径i产生f(i)的量成反比,分母中的f(i)利用过去没有执行大量模糊的ti,因此更可能位于低频区域。

⑤LINEAR

浅谈模糊测试基础技术——种子调度

    以线性的方式增加i的能量。

⑥QUAD

浅谈模糊测试基础技术——种子调度

    以二次的方式增加i的能量。


    综合上述六种能量调度方式,可以发现,AFLfast会给被选次数更多和对应路径被执行次数更少的种子分配更多的能量。

基于MAB模型状态转换的种子调度

    用马尔科夫链建模模糊过程需要所有状态之间的转移概率,以便于在模糊过程中做出正确的决策。然而在模糊过程中,许多状态并没有被检测,这表明基于马尔科夫链的决策不是最优的。遍历所有种子和专注于特定种子之间的平衡是一个经典的“exploration vs exploitation”问题,即探索和利用之间的平衡问题。一些学者提出解决该问题的一个更好方案是将路径转换表述为一个多臂赌博机(MAB)模型。在MAB模型中,玩家希望通过观察在赌博机的手臂进行一些尝试是所获得的奖励最大化。其中探索是玩家为了获得期望的奖励而使用所有手臂的过程,而利用是玩家已知所有手臂的奖励期望时,只选择奖励期望最高的手臂的过程。EcoFuzz与AFL-HIER是该方向上的两个代表性工作,下面对其思路进行详细介绍。

(1)EcoFuzz的种子调度

    EcoFuzz考虑到模糊过程中种子的总数会不断增加,从而导致种子的奖励期望不断降低,于是提出了对抗性多臂老虎机变体(VAMAB)模型解决该问题。VAMAB模型将种子视为手臂,避免专注于单一种子,旨在最大限度扩大路径覆盖范围,将每次试验的奖励定义为生成一个触发新路径的输入。随着找到更多路径,新路径的发现数量会单调减少。一旦获得奖励,奖励概率会降低,新种子添加到种子队列,种子集变为,臂数增加到n+1。VAMAB模型如图1所示。

浅谈模糊测试基础技术——种子调度

图 1 VAMAB模型

    EcoFuzz的种子调度算法基于VAMAB模型的状态确定机制,将种子队列分为初始、探索、利用三种状态。在模糊开始前,队列保持初始状态,选择第一个种子进行模糊,之后转换为探索或利用状态。

    探索状态会根据未模糊的种子的索引顺序选择下一个种子,并通过基于平均成本的自适应能量调度算法(AAPS)为种子分配能量。AAPS算法旨在提高能量利用系数,如果分配的能量超过了种子找到路径所需的能量,AAPS会减少下次分配的能量,具体算法如图2所示。当队列中所有种子都已模糊会转换为利用状态。

浅谈模糊测试基础技术——种子调度

图 2 基于平均成本的自适应能量调度算法

    在利用状态,所有种子经过模糊处理,EcoFuzz会利用基于自转移的概率估计方法(SPEM)估计所有种子的奖励概率,并对更高概率的种子进行优先测试。自转移频率是指种子变异生成的测试用例执行相同路径的概率,根据SPEM方法EcoFuzz会优先选择自转移概率较低的种子进行下一轮测试。EcoFuzz的框架如图3所示。

浅谈模糊测试基础技术——种子调度

图 3 EcoFuzz架构图

(2)AFL-HIER的种子调度

    类似的,AFL-HIER也将路径转换表述为MAB问题。AFL-HIER利用多层覆盖指标,如函数、边、基本块、内存访问等指标,进行种子集群,如果一个测试用例被任何度量评估为执行一个新的覆盖,它会被保留为一个新的种子,并放入一个合适的集群,并结合不同级别的多个度量对种子进行评估。AFL-HIER选择MAB中的UCB1算法来解决具有多级覆盖指标的MAB问题。UCB1算法的关键是SelectNextSeedToFuzz()函数:从根节点开始,调度算法选择得分最高的子节点,计算基于覆盖率的度量,直到到达最后一层子节点选择真正的种子。因为所有种子在叶级别上有相同的覆盖率,为了简单起见,使用循环来调度它们。在每一轮模糊结束时,沿着计划路径的节点会根据当前种子在这一轮的进展程度获得奖励。通过这种方法,表现良好的种子会在后面的几轮调度中得到更高的分数。AFL-HIER具体调度算法如图4所示。

浅谈模糊测试基础技术——种子调度

图 4 AFL-HIER种子调度算法

DGF的种子调度

    导向型灰盒模糊测试(DGF)利用输入的目标位置和一些轻量级的编译工具,利用种子和目标target之间距离作为适应度函数帮助种子进行选择,整个问题的关键在于如何定义种子和目标位置之间的距离来进行优化。

(1)AFLGO的种子调度机制

    AFLGO是DGF的开篇之作,它将整个问题视为一个优化问题,整个过程分为编译准备阶段和运行阶段。在编译阶段提取调用图和控制流图,对于每个基本块,计算到达目标位置的距离。而在运行阶段,会统计运行过的基本块集合,计算种子距离。具体计算公式有以下几种。

(a)function-level target distance:函数级目标距离决定了一个函数到调用图中所有目标函数的距离,而函数距离决定了调用图中任意两个函数之间的距离。将df(n,n’)定义为调用图中两个函数中最短(即边数量最少)的距离。这里将函数与目标函数Tf之间的函数级目标距离df(n,Tf)定义为n与任何可达目标函数tf∈Tf之间的函数距离的调和平均数。公式如下所示:

浅谈模糊测试基础技术——种子调度

(b)basic-block-level target distance:基本块级目标距离决定了从一个基本块到其他所有调用函数的基本块的距离,以及被调用函数的函数级目标距离的倍数。直观来说,将目标距离分配给一个基本块,该基本块基于它与调用链中向目标位置调用函数的任何其他基本块的平均距离。调用链越短,分配的目标距离越小。基本块与目标基本块Tb之间的基本块级目标距离db(m,Tb)定义如下所示,其中c=10,是放大函数级距离的常数。

浅谈模糊测试基础技术——种子调度

(c)在动态运行插桩后的程序时会统计运行过的基本块集合,并计算种子距离。然后取当前距离最大的种子距离,为maxD,最小的为minD,每个种子就取得一个[0,1]的距离。距离计算方式如下所示。

浅谈模糊测试基础技术——种子调度

    AFLGO能量调度基于模拟退火算法,该算法是一种马尔可夫链蒙特卡罗方法(Markov Chain Monte Carlo method ,MCMC),用于很大且离散的搜索空间中,在一个可接受的时间预算内逼近全局最优。简单来说,对于AFLGO,会根据整个种子的运行的轨迹距离目标的距离,来分配能量,即给该条轨迹分配多少种子,来到达程序中更深层的位置。输入的种子若与目标区域较近,能够在程序中到达更深层的位置,即分配更多能量;而距离目标远的,仅仅分配较少的能量,只在程序中运行到相对较浅的位置。

(2)Hawkeye的种子调度机制

    Hawkeye也是一种DGF工具,在AFLGO的基础上进行了一些改进。AFLGO计算目标距离只算了最短单路径,没有考虑长路径,且边权重总为1。此外,AFLGO的基于模拟退火算法的能量调度没有对新种子的优先级进行排序,使得短距离新种子无法及时进行变异。

    Hawkeye对AFLGO的距离计算方式做了一些改进。将相邻的函数距离作为调用图中各边的权重,利用Dijkstra最短路径算法计算任意两个函数的函数级距离,在此基础上进一步推导出基本块距离。此外,还计算了目标函数的trace闭包,并利用它计算覆盖函数的相似度。

    种子筛选方面,Hawkeye针对AFL没有对新种子优先级排序,提出了一种三层队列模型,根据分数将新生成的种子附加到不同的类别之中。首先挑选顶层队列中的种子,其次第二层,最后是较低层,模仿了具有恒定时间复杂度的简化优先级队列。优先级排序的策略主要是:①新生成的种子中,如果其覆盖了新的路径,或者比目标种子具有更大的相似性,又或者是覆盖了目标函数,则加入第一层队列。②不满足这三个条件的新生成种子,加入第二层队列。③已经变异过的种子加入第三层队列。具体算法如图5所示。

浅谈模糊测试基础技术——种子调度

图 5 Hawkeye种子筛选算法

    能量调度方面,Hawkeye根据两个动态计算指标进行,它们分别为基本块trace距离和目标函数trace相似度。

(a)Basic Block Trace Distance:与AFLGO的公式基本一致,计算执行trace的基本块目标距离的累加,然后进行min-max的归一化。归一化公式如下所示。

浅谈模糊测试基础技术——种子调度

(b)Covered Function Similarity:度量执行trace在函数级别上目标之间的相似性,可以推出:覆盖更多函数的种子更可能变异达到目标。比较当前种子trace的函数级与目标函数trace闭包的相似性。覆盖函数相似度由以下公式确定。

浅谈模糊测试基础技术——种子调度

基于稀有分支识别的种子调度

    FairFuzz是AFL的一种改进,它能够自动识别较少执行的稀有分支,并调整变异策略,提出一种新颖的变异掩码创建算法,允许突变会偏向于给定的输入去撞击稀有分支效果,该掩码可以在测试期间动态计算,适应其它的测试目标。FairFuzz通过这两种方法显著提高了代码覆盖率。

    FairFuzz修改了AFL的种子筛选策略,即AFL中的IsWorthFuzzing,将其替换为了HitsRareBranch,当遇见稀有分支则返回true,否则返回false,并随之定义稀有分支的概念:若某分支被击中的次数小于等于一个动态选择的rarity_cutoff值,即numHits[b]≤rarity_cutoff,则称该分支被称为稀有分支。这里,被击中数指产生的执行该分支的输入数量,rarity_cutoff是最稀有分支被击中数目的最小二次幂,即:

浅谈模糊测试基础技术——种子调度

    FairFuzz通过将分支id与目前为止的输入击中次数进行记录,来跟踪命中情况。在每一次调用HITSRAREBRANCH时都会重新计算rarity_cutoff。

    在Fuzz过程中更多选择那些更频繁地命中稀有分支的变异输入,即HitsRareBranch返回true的输入。同时FairFuzz只选择输入中rarest branch(最稀有分支)是稀有分支的变异输入。虽然FairFuzz只使用上述策略选择种子输入,但它可以使用AFL的默认策略运行一些周期,这能够确保它不会跳过AFL的默认策略,可能更适合创建一些容易崩溃的输入。FairFuzz的具体算法如图6所示。

浅谈模糊测试基础技术——种子调度

图 6 FairFuzz算法(灰色部分为相比AFL改进之处)

约束引导DGF的种子调度

    CAFL是一种约束引导的导向型模糊测试工具,其种子筛选策略是在AFLGO的距离策略上做出的改进。CDGF旨在满足一系列有序的约束,而传统的DGF仅仅旨在达到一组独立的目标位点。每个约束都有自己需要到达的目标站点以及目标站点上需要满足的数据条件。

    为了实现这一目标,CDGF对更有可能满足所有约束条件的种子进行模糊。换言之,对于以下两种情况,它会给出更短的种子距离:(1)如果它满足更多的约束;(2)如果它比另一个种子更接近于满足尚未满足的约束。

    为了确定种子满足给定约束序列的距离,首先将单个约束的距离定义为到目标站点的距离和数据条件的总和。这使得当它更接近目标位置时距离更短且更好地满足数据条件。具体来说,其结合了目标位点的DGF-style距离和数据条件的Angora-style距离。然后,CAFL通过合并每个约束序列的距离来定义约束序列的距离或总距离。CDGF认为,如果前面的约束不满足,则单个约束的距离达到最大值,当有更多的约束不满足时,则产生更长的总距离。

浅谈模糊测试基础技术——种子调度

图 7 yasm1.3.0的简化控制流图(左)和样例种子在DGF与CDFG中的距离(右)

浅谈模糊测试基础技术——种子调度

图 8 重现yasm 1.3.0 UAF 约束条件

    举个例子,如图7所示,在UAF(use-after-free)为代表的的距离中,使用yasm 1.3.0约束,存在图右侧的四个种子。约束指示程序首先到达释放内存对象的T1,然后到达使用释放的内存对象的T2。根据图7中的种子和图8中的约束条件,计算种子的距离如下:

     Seed A:由于它在基本块b(离T1有两个基本块)处接近T1,所以第一个约束%free的距离为2。同时,由于未能到达T1,即第一个约束%free的目标位置,所以无论是否到达T2,第二个约束条件%use的距离都是最大的。通过合并两个距离,种子距离计算为2+max。

    Seed B:由于它通过接触基本块c而接近T1,距离T1只有一个基本块,因此距离T1的距离为1。同时,%use的距离仍然为最大,因为在到达T2之前仍然没有到达T1。合并两个距离,种子距离计算为1+max。

    Seed C:因为在T2之前到达T1,所以%free的距离为0。同时,由于它使T2在e处偏移一个基本块,所以%use的距离为1。合并两个距离,种子距离计算为1。

    注意到CDGF恰当地为更理想的种子提供了更短的种子距离,即C<b<a,< span="">这里具有更短种子距离的种子更好地遵循了重复使用的步骤。通过对距离较短的种子进行优先排序,CDGF可以在更理想的种子的基础上发展种子,并快速复制崩溃。

多目标优化方案的种子调度

    基于覆盖率的灰盒Fuzz存在着一项关键挑战,即如何选择有利的种子和分配准确的能量。针对这一问题,研究者提出了一种新的多目标优化方案MooFuzz,它可以识别种子库的不同状态,并不断收集不同的种子信息,以指导种子调度。

    作者认为,以前的大多数种子筛选方法主要利用了单一的选择标准来进行种子筛选,虽然这些方法在解决特定问题时简单可行,但不足以达到有效的覆盖率并在合理的时间内检测漏洞。

    MooFuzz提出了路径风险的度量方法,以辅助种子筛选机制;利用多目标优化对CGF模型进行建模,对种子池的三种状态进行分类,并提出不同的选择准则以提高模糊测试算法的性能;提出了一种能量分配和监控机制,以改进能量调度机制。

    MooFuzz主要组件包括静态分析器、反馈收集器、种子筛选程序和能量调度程序。静态分析器通过扫描源代码来标记每一个风险的边并记录每个边的风险值,然后在程序运行时插入代码片段更新边的风险值。反馈收集器用于记录和更新相关信息,以指导程序执行后的种子筛选计划。

    在种子筛选方面,为了有效地对种子进行排序,作者提出了一种多目标优化的种子排序方案。在种子调度之前,MooFuzz根据种子属性将种子池划分成三种状态——探测状态、搜索状态和评估状态。 

    探测状态下,种子池中存在的尚未Fuzz、受青睐的种子,它表示当前的种子池状态为优秀状态,保持了种子的多样性。

    搜索状态下,受青睐的种子已经被Fuzz了,但仍有未被Fuzz的种子。搜索状态表示存在种子池已完全被Fuzz的风险,有必要集中精力寻找更多路径。

    评估状态下,所有的种子都已被Fuzz,很难确定优先级种子,但已Fuzz的种子产生了大量可供参考的信息。MooFuzz在评估状态下进行状态监控,一旦状态发生变化,当前状态的种子集将被丢弃,以在其他状态下执行种子筛选。

    对于这三种状态,MooFuzz使用基于bug检测、路径发现和种子评估的不同的筛选策略,它会根据不同的状态构造不同的目标函数。

    MooFuzz在将种子添加到种子池之前,会先得到种子的风险值(决定种子检测危险位置的能力,决定了发现漏洞的数量和速度,通过反馈收集器计算),称为路径风险。由于具有更深执行路径的种子可能会有更强的检测漏洞的能力,于是,MooFuzz使用路径风险r和路径深度d作为种子筛选的目标。为了减少种子的能量消耗,加快漏洞的发现,MooFuzz还以种子数据的长度l和种子的执行时间t为目标。在探索状态下,MooFuzz使用以下目标函数来选择未被Fuzz的和受青睐的种子:

浅谈模糊测试基础技术——种子调度

    搜索状态表示当前种子池中所有优选的种子都已Fuzz,但也存在未被Fuzz的种子。此时,MooFuzz对种子的选择将主要集中在路径发现上。种子的频率信息(指示种子发现新路径的能力)会随着运行时间的变化而增加。在这种状态下,通过低频路径的种子会有更大潜力发现新的路径。于是MooFuzz将路径频率e和路径深度d作为种子筛选的标准。同时,MooFuzz也使用上述的l和t来平衡能量消耗。在搜索状态,MooFuzz使用下面的目标函数选择为被Fuzz的种子:

浅谈模糊测试基础技术——种子调度

    评估状态表示当前种子池中所有种子都已Fuzz。MooFuzz将获得种子的路径频率e、种子被选中次数n、种子路径深度d、变异信息m等数据,并将它们添加到目标函数中作为变异判断的依据。注意到当前状态没有选择种子的长度和执行时间作为平衡能量消耗的标准,这是因为当前状态很难生成新的种子。此外,一旦在此状态下产生新的种子,评估状态将终止并进入其它状态。在评估状态下,MooFuzz使用以下目标函数进行种子筛选:

浅谈模糊测试基础技术——种子调度

    MooFuzz通过建立不同的种子池状态下的目标函数来选择最优种子集,并将种子筛选问题建模成一个最小化问题,具体的种子筛选算法如图9所示,它主要采用非支配排序来完成种子调度。选择满足状态条件的种子集S作为输入,CF集用于存储最佳种子集。首先,CF是一个空集,将种子集S中的添加到CF中。种子集S中的每个种子和CF中的每个种子完成支配比较(第1-9行)。如果支配 (的每个属性值都小于),则进行下一次种子比较。如果支配,则将从CF中移除。在比较和之后,如果和CF中所有的种子都不存在支配关系,则将添加到CF中(第10-11行)。以上循环完成后,将最优种子集存储在CF中,MooFuzz提取CF中的每个种子进行Fuzz(第12-13行)。

浅谈模糊测试基础技术——种子调度

图 9 MooFuzz种子筛选算法

    MooFuzz会给每个参与突变的种子分配能量,分配的能量越高种子的变异机会越大。MooFuzz的种子能量调度算法如图10所示,根据不同的种子池状态,建立不同的能量分配方法。同时,它还采用了能量监控机制,可以监控目标程序的执行情况,减少不必要的能量消耗。

    研究者在多次实验后发现,相对细粒度的突变中确定性阶段的能量大小主要与种子的长度有关,但随着种子池中候选种子数量的增加,路径发现会受到影响。因此,在该算法中,让突变后导致崩溃的种子进入确定性阶段(第1-2行)。在不确定性阶段,MooFuzz会判断当前种子的状态,如果种子属于搜索状态,MooFuzz使用频率信息设置能量;如果种子属于评估状态,MooFuzz会综合考虑频率和突变信息来设置能量(第3-6行)。

    在能量分配后,研究者创建了一种监测机制,用于监测种子的突变(第7-14行)。当每个种子消耗分配能量的75%时,MooFuzz会监测当前种子的突变,记录当前种子覆盖新路径的平均能量消耗和覆盖新路径的所有种子的平均能量消耗的比值。如果该比值低于threshold1,MooFuzz会撤回能量;如果该比值高于threshold2,则会更新突变信息。这里,threshold1为0.9,threshold2为1.3。

浅谈模糊测试基础技术——种子调度

图 10 MooFuzz能量调度算法

总结

    本文主要介绍了模糊测试中的种子筛选和能量调度机制,首先阐述了它们的定义和重要性,接着从最经典的模糊器AFL出发,介绍了近年来的一些针对种子筛选和能量调度机制进行创新的模糊器。这些模糊器针对AFL等前人所开发的测试工具的不足进行创新,在种子筛选和能量调度上各有特色。

    从种子调度这个方向对模糊测试工具进行创新的工作尚未进入饱和阶段,未来预计还会有更多让人耳目一新的模糊器诞生,这些前人所留下的调度机制对后续研究也会起到启发帮助作用。

参考文献

[1] Rebert A, Cha S K, Avgerinos T, et al. Optimizing seed selection for fuzzing[C]//23rd USENIX Security Symposium (USENIX Security 14). 2014: 861-875.

[2] Herrera A, Gunadi H, Magrath S, et al. Seed selection for successful fuzzing[C]//Proceedings of the 30th ACM SIGSOFT International Symposium on Software Testing and Analysis. 2021: 230-243.

[3] Chen H, Xue Y, Li Y, et al. Hawkeye: Towards a desired directed grey-box fuzzer[C]//Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. 2018: 2095-2108.

[4] Zhao X, Qu H, Lv W, et al. MooFuzz: Many-Objective Optimization Seed Schedule for Fuzzer[J]. Mathematics, 2021, 9(3): 205.

[5] Lemieux C, Sen K. Fairfuzz: A targeted mutation strategy for increasing greybox fuzz testing coverage[C]//Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. 2018: 475-485.

[6] Petsios T, Zhao J, Keromytis A D, et al. Slowfuzz: Automated domain-independent detection of algorithmic complexity vulnerabilities[C]//Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. 2017: 2155-2168.

[7] Böhme M, Pham V T, Roychoudhury A. Coverage-based greybox fuzzing as markov chain[J]. IEEE Transactions on Software Engineering, 2017, 45(5): 489-506.

[8] Lee G, Shim W, Lee B. Constraint-guided directed greybox fuzzing[C]//30th USENIX Security Symposium (USENIX Security 21). 2021: 3559-3576.

[9] Yue T, Wang P, Tang Y, et al. {EcoFuzz}: Adaptive {Energy-Saving} Greybox Fuzzing as a Variant of the Adversarial {Multi-Armed} Bandit[C]//29th USENIX Security Symposium (USENIX Security 20). 2020: 2307-2324.

[10] Böhme M, Pham V T, Nguyen M D, et al. Directed greybox fuzzing[C]//Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. 2017: 2329-2344.

[11] Wang Y, Jia X, Liu Y, et al. Not All Coverage Measurements Are Equal: Fuzzing by Coverage Accounting for Input Prioritization[C]//NDSS. 2020.

[12] Zhang K, Xiao X, Zhu X, et al. Path Transitions Tell More: Optimizing Fuzzing Schedules via Runtime Program States[J]. arXiv preprint arXiv:2201.04441, 2022.

[13] Böhme M, Manès V J M, Cha S K. Boosting fuzzer efficiency: An information theoretic perspective[C]//Proceedings of the 28th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. 2020: 678-689.



原文始发于微信公众号(FuzzWiki):浅谈模糊测试基础技术——种子调度

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月22日23:55:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   浅谈模糊测试基础技术——种子调度https://cn-sec.com/archives/935571.html

发表评论

匿名网友 填写信息