本文主要是介绍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的 每 次 迭 代 中 执 行 以 下 三 个 额 外 的 任 务 。
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) ,可 以 选 择 性 地 避 免 耗 时 的 确 定 性 阶 段 。
这篇关于Mopt: Optimized Mutation Scheduling For Fuzzers(2019)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!