• MOPT: Optimize Mutation Scheduling for Fuzzers


    题目:MOPT: Optimize Mutation Scheduling for Fuzzers

    作者:Chenyang Lv†, Shouling Ji†, Chao Zhang¶, Yuwei Li†, Wei-Han Lee§, Yu Song†, and Raheem Beyah‡

    单位:Zhejiang University; Tsinghua University; IBM Research;Georgia Institute of Technology

    出版:USENIX Security 2019

    问题

    如何变异生成有效的测试用例

    背景

    Mutation-based Fuzzing
    Mutation Operators

    AFL的变异操作包括:

    bitflip; byteflip; arithmetic inc/dec;interesting values; 
    user extras; auto extras;
    random bytes; delete bytes; insert bytes; overwrite bytes
    cross over
    
    Mutation Scheduling Schemes

    AFL在三个阶段使用的三种不同的调度策略:

    1. Deterministic stage scheduler

    在种子被第一次选择的时候进行确定性变异(确定且慢)

    1. Havoc stage scheduler

    更加通用,且被广泛应用到fuzzer中。是本文的关注点。

    AFL按照统一的概率分布,选择R0个变异操作,应用到种子上,生成n个种子

    使用固定的变异调度器从预定义的变异操作集合中选择操作。突变调度器不是直接生成一个突变操作,而是生成预定义操作的概率分布,fuzzer将遵循该分布选择操作符。

    1. Splicing stage scheduler

    如果上面两个阶段没能找到crash或者新的路径,AFL会进入特殊的splicing stage,只执行cross over操作生成新种子。将新的种子传递给havoc stage scheduler (很少用到该阶段)

    这种固定的变异调度的不足:

    1. 没考虑不同变异操作在一个目标程序上的有效性不同。

    2. 没考虑变异操作在不同目标程序上的有效性不同。

    3. AFL花费大量时间在确定性变异阶段,而havoc阶段往往对于生成有趣种子更有效。

    4. AFL花费大量时间在无效的变异操作上。

    现有工作

    当前提升fuzzing性能的工作往往关注种子能量调度以及种子选择策略,很少关注变异操作的调度。而现有的变异操作调度的工作[1,2],未能提高性能,因为没考虑如下问题

    1. 不同变异操作的有效性不同
    2. 同一变异操作在不同目标程序上的有效性不同

    变异操作的性能是依赖被测程序的,而这种依赖关系难以静态确定

    1. 同一变异操作的有效性随时间而变。
    2. 调度会引入性能负载。
      好的变异调度应该有较少的计算避免降低fuzzing的速度。
    3. 机器学习的数据不平衡

    在fuzz的过程中,真假样本的数量是不平衡的,变异操作生成有趣种子的概率较小,这可能会影响梯度下降或者其他机器学习算法的有效性。

    [1]Deep reinforcement fuzzing;
    [2]Fuzzergym: A competitive framework for fuzzing and learning

    方案

    受粒子群算法(PSO)的启发,可以动态评估变异操作的有效性,调整变异操作选择的概率。

    为了选择好的变异操作以提高fuzzing的性能,通过聚合粒子发现的概率,找到变异算子的最优选择概率分布,使聚合产生更多高质量的测试用例。

    MOPT根据本地的最优概率以及全局的最优概率更新每个粒子的概率;然后将所有粒子更新过的概率集成,以获取新的概率分布。

    设计

    目的:变异调度器可以选择下一个优化的变异操作,在给定运行上下文时,找到更多的有趣测试用例。

    问题:如何找到变异操作的最优概率分布,调度器在测试目标程序时将按照该分布选择下一个操作。
    let each operator explore its own optimal probability
    based on those optimal probabilities, we could obtain a global optimal probability distribution of mutation operators

    Particle Swarm Optimization (PSO)

    粒子群优化

    Design Details

    MOPT使用多个群swarms,在每个群(swarm)上应用调整后的PSO算法。其中每个粒子是一个变异操作,位置就是概率,一个swarm代表一些变异操作的概率分布。

    T1: 定位每个群中每个粒子的最佳位置。

    T2: 定位所有粒子的跨群最佳位置。

    T3: 选择最优的群来引导fuzzing。

    调整后的PSO算法

    先探索每个操作的最优概率,再构建最优的概率分布。

    Particles

    每个变异算子都是一个粒子

    本地最优位置 Lbest

    通过某变异操作生成有趣种子的数目/调用这个变异操作的次数

    全局最优位置 Gbest

    在所有swan(群)中,该粒子(变异操作)得到的有趣测试用例数目。

    Multiple Swarms

    MOPT选取最有效的群的概率分布来调度fuzzing过程。

    swarm’s efficiency =
    当前swarm贡献的有趣测试用例div整个迭代过程的所有新的测试用例数

    实现

    MOPT Main Framework

    PSO Initialization Module

    只在fuzz开始的时候执行一次

    设置每个swam每个粒子的当前位置为随机值,并将一个swam中所有粒子的当前位置之和正规化为1

    设置每个swam每个粒子的位移为0.1

    初始每个swam每个例子的efficiency effnow为0

    初始化每个群的每个粒子的本地最佳位置 Lbest为 0.5

    初始化每个粒子的跨群全局最佳位置Gbest为 0.5

    Pilot Fuzzing Module

    该模块要执行多个swam(群),每个swam探索不同的概率分布。

    按顺序对每个swam进行fuzz,直到该swam生成足够数量的测试用例(预设的periodpilot)为止。

    通过插桩,记录每个swam的三个度量
    • 该swam生成的有趣测试用例数目
    • 每个粒子贡献的有趣测试用例数目
    • 调用特定例子的次数

    这样可以得到粒子的本地最佳位置Lbest。

    Core Fuzzing Module
    1. 采用pilot fuzzing module选出的最好swam的概率分布进行fuzzing,停止条件:生成预设的periodcore个新种子
    2. fuzzing停止后,计算每个粒子贡献的有趣种子数目(从PSO初始化到现在,不管哪个swam),计算粒子的全局最佳位置Gbest
    PSO Updating Module

    根据polit和core fuzzing阶段的信息,使用公式3,4更新每个swam的粒子
    image

    进入下一次迭代

    image

    Pacemaker Fuzzing Mode

    AFL系列fuzzer花费大部分时间在确定性变异上,而用在havoc和splicing这些可以发现更多unique cash和路径的阶段时间少。MOPT提供给AFL系列fuzzer一个优化,称为pacemaker fuzzing mode,可以选择性地避免耗时的确定性变异阶段。

    如果对一个种子进行变异,超过用户指定的T时间,还没有新的unique crash和path,那么将选择性地关闭后续测试用例的确定性变异。

    这种模式有以下优点:

    1. 确定性变异耗时。MOPT是调整havoc阶段的变异,减少确定性变异会加快havoc阶段的收敛。
    2. 避免对单一测试用例花费太多时间,可以更多地选择队列中的其他种子,提高快速发现漏洞的机会。
    3. 确定性变异通常在开始阶段性能好,在一段时间之后变性能变差。这种模式可以在性能变差后选择性地关闭确定性变异,所以可以从该阶段受益,同时避免浪费太多时间。

    根据确定性变异是否会被重启,MOPT为AFL提供两种模式:

    1. MOPT-AFL-tmp:在生成一定数量的有趣种子后重启
    2. MOPT-AFL-ever:在后续的fuzz过程中不会被重启
  • 相关阅读:
    解决 git 同步时 Everything up-to-date
    vs2019 git Authentication failed for xxx
    vs2015发布项目到虚拟主机组策略阻止csc.exe程序问题
    vs2017 使用 reportviewer
    var,dynamic的用法
    水晶报表报无法在资源中找到报表,请重新创建项目 错误
    css隐藏元素的方法
    css-浮动与清除浮动的原理详解(清除浮动的原理你知道吗)
    正则并不适合严格查找子串
    浏览器加载、渲染过程总结
  • 原文地址:https://www.cnblogs.com/linkJ/p/11446427.html
Copyright © 2020-2023  润新知