Mopt: Optimized Mutation Scheduling For Fuzzers(2019)

目录

摘要:

背景知识:

1.模糊测试的工作流程包括:

2.突变调度器

3. 变异操作符:

4.从前的突变调度器的局限性

4.模糊器AFL的突变调度选择:

PSO粒子群优化算法:

MOPT主框架:

PSO初 始 化 模 块:

Pilot Fuzzing Module:目标是找到效率最高的群

核 心 Fuzzing模 块

PSO更 新 模 块

Pacemaker Fuzzing Mode:加速PSO的收敛速度


摘要:

近年来已经提出了许多新解决方案,包括改进种子生成 ,改进种子选择策略 ,改进测试速度和代码覆盖 ,以及将其他技术集成到模糊测试中。
然而,较少关注如何突变测试用例以生成新的有效测试用例。

1.提出突变调度策略MOPT,以改进传统的Mutation-based fuzzing 通常遵循特定的分布来选择变异操作符,在寻找通用程序的漏洞时效率不高的现状。

2.mopt寻找操作符最佳概率分布的原理:MOPT使用定制的粒子群优化算法(PSO)来寻找与模糊效果相关的操作符的最佳选择概率分布,并提供一个节拍器模糊模式来加速PSO的收敛速度。

3.作者将MOPT应用到最先进的模糊器AFL、AFLFast和VUzzer上,分别实现了MOPT-AFL、MOPT-AFLFast和MOPT-VUzzer,并在13个真实世界的开源程序上进行了评估。广泛的评估还表明,MOPT在合理性、兼容性和稳定性方面表现良好,同时引入的代价可以忽略不计。

背景知识:

1.模糊测试的工作流程包括:

维护一个测试用例队列,从队列中选择测试用例,对这些测试用例进行变异,使用新产生的测试用例测试目标程序,并根据需要报告漏洞或更新种子队列,本文主要关注变异阶段

2.突变调度器

在模糊测试过程中,它们使用某些突变调度器从预定义的操作符集合中选择操作符,以突变测试用例并生成新的用于模糊测试的测试用例。
 突变调度器不是直接产生一个突变操作符,而是产生预定义操作符的概率分布,模糊器将遵循这个分布选择操作符。

3. 变异操作符:

定义了在哪里进行变异(如哪些字节)和如何进行变异(如添加、删除或替换字节)。

4.从前的突变调度器的局限性

它们没有考虑到:

(1) 不同操作符的效率存在差异:不同的突变操作符在找到崩溃和路径方面具有不同的效率。

使用均匀分布选择突变操作符的模糊器可能会在不高效的操作符上浪费不必要的计算资源

(2) 操作符的效率与目标程序有关:每个操作符的效率都是程序依赖的,并且很难或至少难以静态推断这种依赖关系。但是最优的突变调度器必须根据每个操作符在目标程序上的运行时效率做出决策。

(3)操作符的效率随时间变化:在当前测试用例上表现良好的操作符在极端情况下可能在接下来的测试用例上表现较差。最优的突变调度器依赖于操作符的历史效率来计算选择操作符的最佳概率分布。

4.模糊器AFL的突变调度选择:

(1)AFL采用了三种不同的调度方案,分别在确定性阶段、混沌阶段和拼接阶段使用,以不同的方式选择和变异测试用例,以适应不同阶段的模糊测试需求。

(2)确定性阶段调度器:用于首次选择的种子测试用例,使用6种确定性变异操作符依次处理。

(3)混沌阶段调度器:是AFL的主要变异调度方案,它首先决定在这个阶段生成的新测试用例的数量,然后随机选择一系列变异操作符生成新的测试用例。

(4)拼接阶段调度器:在某些情况下,经过前两个阶段对所有种子处理后,未能发现任何独特的崩溃或路径时使用。这个阶段只使用一个操作符交叉来生成新的测试用例,然后这些新的测试用例会送入混沌阶段调度器,而不是直接测试程序,以生成新的测试用例。

(5)第一阶段的调度器是确定性的且较慢,而最后一个阶段的调度器很少使用。混沌阶段的调度器更为通用,已被许多模糊测试器广泛采用。

PSO粒子群优化算法:

MOPT对 每 个 算 子 使 用 一 个 粒 子 , 并 尝 试 在 预 定 义的 概 率 空 间 [xmin,xmax]中 探 索 每 个 算 子 的 最 优 位 置 , 其中 0 < xmin < xmax≤ 1。

xnow:一 个 粒 子 (即 算 子 )在 概 率 空 间 中 的 当 前 位 置  ,表 示 该 算 子 将 被 调 度 程 序 选 择 的 概 率 。

MOPT采 用多 个 蜂 群:「与 原 始 的 PSO有 多 个 粒 子 探 索 解 空 间 不 同 ,MOPT定 义 的 群 体 实 际 上 只 在 解 空 间 中 探 索 一 个 候 选 解 (即 概 率 分 布 ),因 此 可 能 陷 入 局 部 最 优 。 为 了 避 免 局 部 最 优 , MOPT 采 用 了 多 个 群 体 , 并 对 每 个 群 体 使 用 定 制 的 PSO算 法。

经典的PSO是在一个群中,让所有粒子都趋向一个“食物最多的地方” ,而MOPT这个例子是为了给每一个粒子找一个相对的食物最多的地方,而不是上面的所有粒子共同找一个食物最多的地方。在传统的PSO算法中,全局最佳位置是在所有粒子中找到的最佳位置。然而,MOPT的粒子在不同的概率空间中移动,因此没有适合所有粒子的唯一全局最佳位置。因此,引入多个群有助于评估每个粒子的效率,并根据其全局效率来定义全局最佳位置。这样,更高效率的操作符有更高的选择概率,从而增加了发现潜在漏洞的可能性。通过利用这种多群设计,MOPT能够更有效地探索操作符的最佳选择概率分布,进而提高漏洞发现的效率,这是设计多个群的必要性所在。

​​​​​​​在 模 糊 测 试 期 间 , 在 PSO的 每 次 迭 代 中 执 行 以 下 三 个 额 外 的 任 务 。

T1:定 位 每 个 群 中 所 有 粒 子 的 局 部 最 佳 位 置 。 在 每 个 蜂 群 中 ,在 模 糊 过 程 中 评 估 一 次 迭 代 中 每 个 粒 子 的 局 部 效 率 effnow。 对 于 每 个 粒 子 ,将 历 史 上 效率 effbest最 高 的 位 置 标 记 为 其 局 部 最 佳 位 置 Lbest。

T2:定 位 整 个 群 中 所 有 粒 子 的 全 局 最 佳 位 置 。 每 个

粒 子 的 全 局 效 率 global eff 跨 群 评 估 。 然 后 评 估 粒 子 的 全 局 效 率 分 布 。 将 每 个 粒 子 的 global ef在 该 分 布 中 的 比 例 用 作 其 全 局 最 佳 位 置 Gbest。

T3:选 择 最 佳 蜂 群 来 引 导 模 糊 测 试 。 评 估 每 个 群 体 在 一 次 迭 代 中 的 效 率 swarmeff将 群 体 的 效 率 (swarme ff)定 义 为 该 群 体 贡 献 的 有 趣 测 试 用 例 的 数 量 除 以 一 次 迭 代 期 间 新测 试 用 例 的 数 量 。)

选 择 swarmeff最 高 的 群 体 ,并 将 其 在 当 前 迭 代 中 的 概 率 分 布 应 用 于 进 一 步 的 模 糊 化 。然 后 , 在 每 次 迭 代 结 束 时 , MOPT以 与 PSO相 似 的

方 式 移 动 每 个 群 体 中 的 粒 子 。 更 具 体 地 说 , 对 于 一 个 粒 子 Pj在 一 个 群 Si 中 我 们 更 新 它 的 位 置 如 下 。

MOPT主框架:

MOPT由四个核心模块组成 ,PSO 初始化更新模块先导模糊核心模糊模块 。


初 始 化 模 块 执 行 一 次 , 用 于 设 置 PSO算 法 的 初 始 参 数 。 其 他 三 个 模 块 形 成 一 个 迭 代 循 环 , 共 同 工 作 ,连 续 模 糊 目 标 程 序 。


PSO初 始 化 模 块:

MOPT

(1)将 每 个 群 中 每 个 粒 子 的 初 始 位 置 xnow设 为 随 机 值 , 并 将 一 个 群 中 所 有 粒 子 的 和 xnow 归 一 化 为 1;

(2)将 每一 群 中 每 个 粒 子 的 粒 子 运 动 位 移 vnow设 为 0.1;

(3)将 每 个 群 中 每 个 粒 子 的 初 始 低 效 率 effnow设 为 0;

(4)将 每 个 群 中 每 个 粒 子 的 初 始 局 部 最 佳 位 置 Lbest设 为 0.5;

(5)将 每 个 粒 子 跨 群 的 初 始 全 局 最 佳 位 置 Gbest设 为 0.5。

Pilot Fuzzing Module:目标是找到效率最高的群

该 模 块 采 用 多 个 蜂 群 来 执 行 模 糊 测 试 , 其 中 每 个 蜂 群 探 索 不 同 的 概 率 分 布 。 该 模 块 按 顺 序 评 估 每 个 群 体 ,

并 在 它 生 成 一 个 可 配 置 的 数 量 (表 示 为 periodpilot )的 新 测 试 用 例 后 停 止 测 试 群 体 。 对 特 定 群 体 进 行 模 糊 测 试 的 过 程

如 下 。

在 模 糊 化 过 程 中 , 该 模 块 将 测 量 三 个 测 量 值 :

(1)由 特 定 粒 子 (即 算 子 )贡 献 的 有趣 测 试 用 例 的 数 量 , 

(2)特 定 粒 子 的 调 用 次 数 , 

(3)通 过 仪 器 化 目 标 程 序 , 该 群 发 现 的 有 趣 测 试 用 例 的 数 量 。

每 个 粒 子 (在 当 前 群 中 )的 局 部 效 率 是 第 一 次 测 量 除 以第 二 次 测 量 。 我 们 可 以 定 位 每 个 粒 子 的 局 部 最 佳 位 置 。 

当 前 群 的 效 率 是 第 三 次 测 量 除 以 测 试 用 例 计 数 periodpilot 因 此 , 我 们 可 以 找 到 效 率 最 高 的 群 体 。

核 心 Fuzzing模 块

该 模 块 将 采 用 上一个 Pilot Fuzzing Module选 择 的 最 佳 群 , 并

利 用 其 概 率 分 布 进 行 模 糊 测 试 。 它 将 在 生 成 一 个 可 配 置 的 数 量 (表 示 为 periodcore )的 新 测 试 用 例 )后 停 止 。

一 旦 它 停 止 , 我 们 可 以 测 量 从 PSO初 始 化 开 始 到 现 在 ,每 个 粒 子 所 贡 献 的 感 兴 趣 的 测 试 用 例 的 数 量 , 而 不 管 它 属 于 哪 个 群 。 然 后 我 们 可 以 计 算 粒 子 之 间 的 分 布 , 并 定 位 每 个 粒 子 的 全 局 最 佳 位 置 。

PSO更 新 模 块

根 据 飞 行 员 和 核 心 模 糊 模 块 提 供 的 信 息 (得到的局部和全局效率), 该 模 块 根

据 公 式 3和 4更 新 每 个 群 体 中 的 粒 子 。

Pacemaker Fuzzing Mode:加速PSO的收敛速度

MOPT应 用 于 基 于 突 变 的 模 糊 器 是 通 用 的 , 并且 我 们 意 识 到 MOPT的 性 能 可 以 在 应 用 于 特 定 的 模 糊 器 (如AFL)时 进 一 步 优 化 

在前面“模糊器AFL的突变调度选择”里面提到

1)AFL采用了三种不同的调度方案,分别在确定性阶段、混沌阶段和拼接阶段使用,以不同的方式选择和变异测试用例,以适应不同阶段的模糊测试需求。

(2)确定性阶段调度器:用于首次选择的种子测试用例,使用6种确定性变异操作符依次处理。

(3)混沌阶段调度器:是AFL的主要变异调度方案,它首先决定在这个阶段生成的新测试用例的数量,然后随机选择一系列变异操作符生成新的测试用例。

(4)拼接阶段调度器:在某些情况下,经过前两个阶段对所有种子处理后,未能发现任何独特的崩溃或路径时使用。这个阶段只使用一个操作符交叉来生成新的测试用例,然后这些新的测试用例会送入混沌阶段调度器,而不是直接测试程序,以生成新的测试用例。

(5)第一阶段的调度器是确定性的且较慢,而最后一个阶段的调度器很少使用。混沌阶段的调度器更为通用,已被许多模糊测试器广泛采用。

因 此 , MOPT为 基 于 AFL 的模 糊 测 试 器 提 供 了 一 种 优 化 , 即 起 搏 器 模 糊 测 试 模 式(Pacemaker Fuzzing Mode) ,可 以 选 择 性 地 避 免 耗 时 的 确 定 性 阶 段

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用互信息法和虚假最近邻点法确定最佳时间延迟和嵌入维数,并进行相空间重构的MATLAB代码示例: ```matlab % 输入参数 x = ... % 输入的一维时间序列 maxDim = ... % 最大嵌入维度 maxTau = ... % 最大延迟时间 % 互信息法估计 MI = zeros(maxDim, maxTau); for m = 1:maxDim for tau = 1:maxTau X = zeros(length(x)-(m-1)*tau, m); for i = 1:length(x)-(m-1)*tau X(i,:) = x(i:tau:i+(m-1)*tau); end MI(m,tau) = mutualinfo(X(:,1), X(:,2)); % 仅计算前两个维度的互信息 end end % 绘制互信息矩阵 figure; imagesc(MI); xlabel('Delay time'); ylabel('Embedding dimension'); colorbar; % 虚假最近邻点法估计 D = zeros(maxDim, 1); for m = 1:maxDim X = zeros(length(x)-(m-1)*maxTau, m); for i = 1:length(x)-(m-1)*maxTau X(i,:) = x(i:maxTau:i+(m-1)*maxTau); end [~, D(m)] = fnn(X); end % 绘制虚假最近邻点曲线 figure; plot(1:maxDim, D, 'o-'); xlabel('Embedding dimension'); ylabel('FNN'); % 确定最佳嵌入维度和时间延迟 mOpt = ... % 根据互信息矩阵或虚假最近邻点曲线确定最佳嵌入维度 tauOpt = ... % 根据互信息矩阵或虚假最近邻点曲线确定最佳时间延迟 % 相空间重构 X = zeros(length(x)-(mOpt-1)*tauOpt, mOpt); for i = 1:length(x)-(mOpt-1)*tauOpt X(i,:) = x(i:tauOpt:i+(mOpt-1)*tauOpt); end ``` 其中,mutualinfo函数用于计算两个维度之间的互信息,fnn函数用于计算虚假最近邻点的比例。在实际应用中,需要根据具体问题选择合适的估计方法和参数,并对重构后的相空间进行进一步分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值