• Proj THUDBFuzz Paper Reading: Skyfire: Data-Driven Seed Generation For Fuzzing


    Abstract

    目的: 尽量通过于一检查
    工具: Skyfire
    特色:使用现有的code samples学习概率性CFG,再用之生成分布很好的种子
    实验:
    将Skyfire生成的种子输入AFL中
    对象: XSLT, XML引擎
    效果:

    1. 能生成well-distributed inputs
    2. 极大增加了code coverage
    3. 在JS和IE11上总共发现了19个新memory corruption bugs(16个新的vulnerabilities), 32个DOS bugs

    Intro

    P1: Fuzzing广被应用
    P2: 介绍了测试用例;测试用例生成;mutation-based和generation-based;taint analysis;symbolic execution;
    P3: 在结构化数据上guided mutation-based的不足;syntax checking
    P4: 挑战: 生成semantic valid test case;
    P5: Grammar-based fuzzing;仍然存在的问题: 需要提供人力书写的非常麻烦的语法
    P6: 介绍工具: Skyfire

    1. 从corpus中自动学习语法和语义信息
    2. 能用这些信息来fuzz需要结构化输入的程序
      skyfire与现有mutation-based工具的关系(互补);与generation-based工具的关系(改进-无需人力)

    P7: 输入: corpus + grammar
    基本步骤:

    1. 将corpus中的sample转化为AST,学习PCSG
    • 注意这里上下文敏感,因此可以学到context信息
    1. 生成种子-不断生成直到到达no-terminal symbols remained
    • 变异种子:把叶节点转化为对应的类型的

    Approach

    A. Target Programs

    1. 定义CFG
    2. 稍微介绍了XSL格式,以及其所需满足的semantic rule

    B. Overview

    三个目标以及为甚么要达成对应目标:

    1. correct seeds
    2. diverse seeds
    3. uncommon seeds

    III PCSG Learning

    A. PCSG

    结构化输入一般都有很多需要满足的semantic rules,不过fuzzers一般只会满足其中一部分,一方面是因为semantic rules难以书写生成器,另外一方面也能生成更多元化的invalid test cases
    例3: 用一棵XSL AST来举例说明实际存在的Semantic Rules


    定义CSG,注意这里的上下文分别是[祖祖父节点类型,祖父节点类型,父节点类型,第一个兄弟结点的值或者类型(如果值为null)]

    定义PCSG:

    B. Learning a PCSG


    IV Seed Generation

    random left most deviation
    需要解决的两个问题:

    1. 生成过程可能不会停止
    2. 生成的结果可能过于复杂
      为此:
    3. 偏好概率更低的规则
    4. 偏好频率更低的规则,同时限制同一条production rule使用的次数
    5. 偏好更加简单的规则
    6. 限制整体使用的规则数目

    B. Seed Selection

    1. 对于开源项目,使用gcov来获取函数的line coverage和function coverage;对于闭源项目,使用PIN来获取
  • 相关阅读:
    STL的移动算法
    mysql insert和前台显示乱码
    垃圾回收算法简单介绍——JVM读书笔记<二>
    UVA
    读取系统执行状态的shell脚本
    【web 回车】web项目 注册或登录页面 回车登录无效,解决方案
    【maven】maven项目移除Maven Dependencies后如何再添加进去
    【web.xml】报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    【shiro】关于shiro匹配URL的小用法
    【Sets】使用Google Guava工程中Sets工具包,实现集合的并集/交集/补集/差集
  • 原文地址:https://www.cnblogs.com/xuesu/p/14501296.html
Copyright © 2020-2023  润新知