在本节中,我们形式化了有效的位置分布,并解释了该分布如何帮助为给定的变异算子选择合适的位置。注意,PosFuzz将整个突变过程分为多个序列时代因此,我们讨论了纪元在典型灰盒模糊处理的基础上,我们还提出了PosFuzz算法。
有效的信息分析
首先,对于每个输入案例,\({\mathcal{C}}}\),PosFuzz记录其联动装置,即如何\({\mathcal{C}}\)直接从其父输入中变异,如\({\mathcal{L}}({\mathcal{C}})\). The联动装置一个箱子是一组对(操作, 销售时点情报系统). 每对(操作, 销售时点情报系统)代表应用变异运算符操作关于突变位置销售时点情报系统注意,没有记录应用变异运算符的顺序,因为它不会影响本工作中的分布计算。
其次,对于我-第个纪元,表示为\({\mathcal{E}}_i\),将其所有感兴趣的案例放入一个输入案例集,表示为\(国际号码({\mathcal{E}}_i)\).输入案例\({\mathcal{C}}\)只要它能覆盖目标程序的新执行路径,就很有趣。
位置分布估计
在每一开始纪元,PosFuzz使用从所有之前的时代到目前为止。本节形式化了变异算子有效位置分布的定义,并引入了实时频率估计来计算它。
有效的职位分布定义
有效位置分布定义为:
定义1
给定一个变异算子操作,有效的位置分布\(f_{op}(位置)\)对于操作是一个将位置映射到概率的离散概率函数,位置的概率由有趣的输入案例的数量决定,其中的链接包含此位置。
对于我-有效位置,其概率意味着被选择进行突变的可能性。概率表示为\(P_{op}(位置=位置{i})\),我们有
$$\开始{aligned}\sum_{i}P_{op}(pos=pos_{i{)=1\end{aligned}$$
直观地说,AFL及其变体使用统一的有效位置分布,这表明假设每个位置对于生成感兴趣的案例同等重要。在这项工作中,对于每个突变算子操作,\(f_{op}(位置)\)基于所有以前的有效历史信息进行计算时代并指导当前的突变位置选择纪元因此。
良好使用频率估计
估计有效位置分布的一种简单方法是使用有效历史信息直接计算它,即,所有导致有趣情况的位置均以非负概率分配,而所有其他位置均以零概率分配。然而,由于模糊的随机性,这不是一个好方法。一个没有触发任何有趣案例的位置要么无效,要么没有被选中的机会。区分这两种立场对我们来说是一个独特的挑战。为了解决这个问题,我们引入了Good-Turing频率估计0来平滑不可见位置之间的分布。
步骤1:准备有效信息首先,到目前为止生成的所有有趣的输入案例都表示为:
$$\begin{aligned}U=\text{IntC}({\mathcal{E}}_0)\cup\ldots\cup\text{IntC{({\ mathcal}}_{cur})\end{alinged}$$
哪里\({\mathcal{E}}_{cur}\)表示电流纪元.
那么,对于给定的运算符操作,所有输入案例\({\mathcal{C}}\)其链接包含操作表示为:
$$\begin{aligned}C(op)=\{\,{\mathcal{C}}\mid(op,*)\in{\mathcal{L}}({\matchcal{C})\\text{和}\{\mathcal{C}}\in \U\,\}\end{alinged}$$
哪里\((op,*)\在{\mathcal{L}}({\mathcal{C}})中\)意味着操作至少在的一个元素中\({\mathcal{L}}({\mathcal{C}}).
第二步:计算 \(f_{op}(位置)\)我们需要估计每个位置对其相应输入案例的贡献,即每个位置的权重。通常,输入案例生成于确定性阶段或中浩劫阶段,我们认为所有输入案例都具有相同的重要性。对于确定性阶段,通过应用变异操作符生成输入案例操作到一个特定的位置。对于浩劫阶段,通过对多个位置应用随机变异算子来生成输入案例。因此,我们需要将输入案例的权重分配到浩劫阶段。给定一个有趣的案例\({\mathcal{C}}_{k}\)和一对有效的\((op,pos_i)在{\mathcal{L}}({\mathcal{C}}_{k})中,有效位置的重量\(pos_i\)对于这种情况,定义为:
$$\开始{对齐}权重{k}(pos_i)=\frac{REPEAT_{max}}{|({\mathcal{L}}({\mathcal{C}}_{k}))|}\end{aligned}$$
哪里
$$\begin{aligned}REPEAT_{max}=\max(|{\mathcal{L}}({\mathcal{C}})|)\quad where\quad\forall\{\matchcal{C}{}\\in\C(op)\end{alinged}$$
在不失一般性的情况下,我们假设\(重复{max}\)可除以\(|({\mathcal{L}}({\mathcal{C}}))|\)在这里,因为它们在实践中都是二的力量。
给定操作员操作,有效位置的总重量\(位置\)定义为:
$$\begin{aligned}R_i=\sum_{k}weight_{k{(pos_i)\end{alinged}$$
有效位置的总标度重量\(位置\)称为频率\(位置\).
给定频率第页,具有该频率的位置数量表示为:
$$\begin{aligned}N_{r}=|\{pos\mid-pos=pos_{i}\\text{和}\r{i}=r\}|\end{alinged}$$
然后将样本总数定义为:
$$\begin{aligned}N=\sum_{r=0}^\infty r N_r\end{alinged}$$
根据Good-Turing频率估计,平滑后的频率为第页估计为:
$$\开始{aligned}r^*=(r+1)\frac{N_{r+1}}{N_r}\end{aligned}$$
因此,\(f_{op}(位置)\)计算如下。对于观察到的位置\(位置\),其相应概率计算为:
$$\开始{对齐}P_{op}(pos=pos_i)=\frac{r^*}{N}=\frac{(r_i+1)}{N{对齐{N_{r_{i}+1}}{N__{r{i}}}\end{对齐$$
对于一个看不见的位置\(位置\),其相应概率计算为:
$$\开始{对齐}P_{op}(pos=pos_i)=\frac{N_1}{N}\结束{对齐}$$
分发引导选择
PosFuzz在运算符之后选择突变位置操作通过分发选择\(f_{op}(位置)\)特别地,位置选择与其他工作提出的操作员选择策略正交。如“章节背景和动机“,两个不同的阶段,即。,确定性和浩劫阶段存在于基于de-facto变异的灰盒模糊框架中。因此,相应地设计了两种不同的选择策略。
增强确定性阶段
在确定性在这个阶段,传统的基于变异的灰盒模糊算法逐个应用所有可能的算子,每个算子在所有可能的位置上执行,从而使每个位置的选择概率相等(概率为1)。相反,给定一个操作符,PosFuzz选择具有不同概率的位置。对于一个职位\(位置\),PosFuzz杠杆验收-拒收取样(Flury公司1990)方法来决定是否以接受概率对其进行变异。概率定义为:
$$\开始{对齐}Pacc_{op}(pos=pos_i)=\frac{P_{op{(pos=pos_i$$
(1)
扩大浩劫阶段
在浩劫阶段,传统的模糊器类AFL随机选择变异算子,并使用均匀分布为每个算子选择变异位置,即以相同的概率选择位置。与此不同的是,PosFuzz将别名采样(夏皮罗和西尔弗曼1960)方法,一种有效的采样方法,在输入案例中选择一些突变位置,概率记录在\(f_{op}(位置)\).别名采样是从离散概率分布中采样的通用方法。它需要哦(时间复杂度)或哦(n个)预处理时间和哦(1) 选择职位的时间\(f_{op}(位置)\)因此,在此阶段,选择一个位置的概率定义为:
$$\开始{对齐}Psel_{op}(pos=pos_i)=P_{op}(pos=pos_i)\结束{对齐}$$
(2)
PosFuzz实现
算法2演示了位于AFL之上的PosFuzz的典型实现。
模糊处理过程由以下循环组成时代,每个都可以持续用户配置的时间间隔,例如1小时。在纪元根据有效历史信息计算出的有效位置分布,选择合适的突变位置。
在开始时纪元,PosFuzz累积当前纪元的有效信息并将其更新为历史信息历史(第6行),用于计算有效分布。PosFuzz利用Good-Turing频率估计来计算有效分布距离基于有效的历史信息历史到目前为止(第7行)。然后,它借助分布选择位置。在确定性阶段,它利用验收-拒收取样方法,表示为如果接受位置,以确定是否应以以下概率选择当前位置\(Pacc_{op}(pos=pos_i)\)(第12行)。在破坏阶段,它采用别名采样方法,表示为选择PosForOp,以获得概率为的随机位置\(位置{op}(位置=pos_i)\)(第25行)。
Posfuzz记录了联动装置运算符的格式为(操作, 销售时点情报系统)(第15和27行)。如果生成了一个有趣的案例联动装置添加到有趣的一对\(\增量\)当前纪元(第39行)。