• Proj THUDBFuzz Paper Reading: GRIMOIRE: Synthesizing Structure while fuzzing


    Abstract

    背景: Grammar Inference, 能够自动生成输入文法的技术。目前缺点: 一般是预先分析的,在fuzzing过程中的一些重要structures常常无法捕捉到
    本文:
    工具: GRIMOIRE
    特点: 无需任何人工干预,无需预分析步骤,通过类似语法的组合和大量变异来生成高度结构化的测试用例
    实验:

    1. GRIMOIRE比其他coverage-guided fuzzers更好
    2. 比现有的基于grammar-based的fuzzers更好
    3. 在实际程序上测出了19个memory corruption bugs, 11 CVEs

    1. Intro

    P1: AFL取得了成功;但是还是需要人工来设计某些cases;减少需要的领域知识有意义
    P2: 语法语义有效性;
    P3:

    1. 需要人工语法或者种子集的存在缺点:对没有文档的程序很难办;
    2. 有工作能通过静态分析推测语法,但是语法在运行中无法更正

    本文工作:
    P4:
    前提:

    1. 可以用code coverage feedback来推测语法的结构属性
    2. 实践里并不需要准确正确的语法
    3. fuzzer的test case吞吐量很高,能够处理带一定噪声的语法
    4. 额外的噪音可测出程序的异常行为,反而会带来好处,比如能测错误处理不当
    5. 有时一些输入没在文档上及时标出来

    P5:
    本文与之前研究的区别:在fuzzing过程中合成语法
    具体方法:

    1. 泛化方法:分析每个有新发现的输入,试着找到能够被替换或者重用的子序列
    2. 变异方法:从已有的输入中将这些fragments组合起来

    P6: 工具GRIMOIRE
    优点:

    1. 无需任何人工参与,也不需要种子集或者格式说明
    2. 不对程序或者程序环境做任何限定,因此也能用在闭源项目上(Q?)

    P7:
    实验A:
    测试集:4个脚本语言解释器(mruby, PHP, lua, JavaScriptCore),编译器(TCC), 汇编器(NASM),数据库(SQLite),解析器(libxml),SMT solver(Boolector)
    效果:1. outperforms all existing coverage-guided fuzzers

    实验B:
    效果 1. 证明GRIMOIRE可以和现有的grammar fuzzer联用来增加效果

    实验C:
    效果 1. 与其他自动推测语法的方法相比,outperform

    最终:找到19个memory-corrupted bugs, 11 CVEs

    Ch2 Challenges in fuzzing structured languages

    Fuzzing特点:大规模执行;随机探索状态空间;监视执行runtime

    2.1 Blind Fuzzing

    例子: RADAMSA, PEACH, Sulley, ZZUF

    2.2 Coverage-guided fuzzing

    使用轻量级程序覆盖率测量方法。
    例子: AFL, ANGORA, QSYM, T-FUZZ, REDQUEEN

    2.3 Hybrid Fuzzing

    例子: SAGE, DRILLER, QSYM
    VUzzer和ANGORA仅仅使用了taint tracking来完成轻量级的符号执行
    缺点:不擅长处理整体结构上的约束

    2.4 Coverage-based Grammar Fuzzing

    例子: NAUTILUS, AFLSMART

    2.5 Grammar Inference

    例子: GLADE
    方法:

    1. 用户给定一种黑盒oracle让GLADE知道是否语法有效
    2. GLADE将有效的输入集合转为最能表达这些有效输入的正则表达式

    缺点:

    1. 耗时
    2. 需要人工提供oracle
    3. 生成的语法并不适合fuzzing

    例子2: AUTOGRAM
    假设在解析中被调用的函数反映了语法的Non-terminal Symbols
    方法:使用源程序和taint tracking来推测语法
    缺点:不适合recursive descent parsers
    优点:无需人工oracle

    例子3: PYGMALION
    假设在解析中被调用的函数反映了语法的Non-terminal Symbols,而函数调用栈则能够反应语法的递归
    方法:简化版符号执行
    优点:无需标准输入集合
    缺点:在解析器是表格表示的自动机的情况下无法工作

    2.6 Shortcomings of Existing Approaches

    3 Design

    GRIMOIRE被设计为coverage-guided fuzzer上层额外的一步。
    泛化(generalization):

    1. strip:用方框符号代替替换后不会带来新coverage的部分
    2. 将输入归约为能引起新覆盖的fragments
    3. 维护gaps(或者称为candidate positions, 即用方框代替的部分)的信息

    例2:
    为了获取if(x>1)的基本语法,可以将if(x>1)then x = 2 end用方框遮挡为 if(x>1)框(这里的代表可以放若干个空格)then框end

  • 相关阅读:
    Java基础(二十三)——IO流
    Java基础(二十二) 递归
    Java基础(二十二) Lambda表达式和File类
    Java基础(二十一)——多线程和Lambda表达式
    Java基础(二十)——多线程
    Java基础(十八)——Comparator比较器、Comparable接口和Map集合
    根据 key值查找数组对象中所有的符合的对象 (递归)
    超级好用的 支付宝小程序 网络请求封装 async/await
    关于Vue Loading chunk {n} failed的问题
    支付宝小程序iconfont兼容性问题
  • 原文地址:https://www.cnblogs.com/xuesu/p/14500539.html
Copyright © 2020-2023  润新知