zoukankan      html  css  js  c++  java
  • Proj THUDBFuzz Paper Reading: CMFuzz: context-aware adaptive mutation for fuzzers

    Abstract

    目前Fuzzer存在的问题: 生成分布是均一分布
    本文: CMFuzz
    特点: context-aware adaptive mutation scheme

    1. 采用contextual bandit algo LinUCB来选择变异算子
    2. 动态提取文件特征
      实验A:
    • 实现: 在多个前沿fuzzers上实现该机制称为CMFuzz-PT, CMFuzz-AFL, CMFuzz-AFLFast
    • 数据集: 12个真实开源的应用+LAVA-M数据集
    • 效果: 1. 覆盖率更高 2. 找到crashes的速度更快

    实验B:

    • 使用了其他采样方法,比如Thompson采样和epsilon-greedy,称为Thompson-PT和Greedy-PT
    • 效果: CMFuzz-PT效果最好
      • 与Thompson-PT相比,1.79x #unique crashes, 1.29x #unqiue paths
      • 与Greedy-PT相比, 1.11x #unique crashes, 1.05x #unique paths

    1. Introduction

    P1: 什么是mutation-based fuzzing, 其基本流程和特点。举例AFL是最有名的Fuzzer,非常简单易用。
    P2: 目前的工作包含Taint tracking, symbolic execution, 这些工作的目标集中于生成well-formed seed inputs, 选择最有效的seed inputs或者只是增进fuzzer的速度和其他性能。
    P3: fuzzing效果很受mutation strategy影响。什么是mutatin strategy。为了选择mutation strategy,两个问题
    P4: 如何快速选择最好的operators

    • Karamcheti, 2018; Lyu, 2019: 均一概率可能导致无效计算
    • Bottinger, 2018: 尝试了seed mutation improving,但是效果有限
      P5: 如何做上下文敏感的adaptive mutation
    • Karamcheti, 2018; Lyu, 2019: 不同程序和不同种子文件需要的编译策略不同;使用multi-armed bandit algo和改编的粒子群算法来找到mutation operators的最佳分布;缺点:忽略了种子文件的不同
      P6: 本文: CMFuzz + LinUCB,特点,主要策略,和之前fuzzer的差别:动态选择;context的定义:种子文件转化成的byte stream;选择byte stream的好处:传达了通用简单的特征
      P7: CMFuzz能够应用到其他mutation-based fuzzers之上,实现了CMFuzz-PT,CMFuzz-AFL,CMFuzz-AFLFast;实验
      P8: 比其他采样方法更好,实验B
      P9:文章的contribution
      P10: 文章布局

    2. Preliminaries

    2.1 Mutation-based fuzzing

    通用steps

    2.2 Seed Mutation

    什么是good seed mutation stategy;以PTFuzz为例展示mutation operators和mutation strategies;

    PTFuzz有deterministic stage和non-deterministic stage。前者只有4种operators,并且只在第一次执行的时候使用。后者包括havoc stage和splice stage。
    havoc stage有9种mutation operators,是本文优化的阶段。
    splice stage则主要是把两个seeds结合为一个新的seed,该阶段仅在havoc stage(或者deterministic stage) 在1 round内没有得到有趣的种子时执行。

    2.3 Bandit Algo

    挑战: Exploration-Exploitation trade-off。
    Exploration是指选择可能次优的arm来获取更多信息。本文对比的采样算法有: 1. epsilon-greedy 2. Thompson sample 3. LinUCB

    Epsilon-Greedy

    以e的概率随机选择(exploration),以1-e的盖率选择计算出来中最好的

    Thompson Sample

    将exploration-exploitation tradeoff作为Bayesian后验概率估计来做。基础分布采用Beta或者伯努利分布

    LinUCB

    将用户信息浓缩为特征向量(context),在某个round t,LinUCB会选择一个arm (a_t),生成context feature vector (X_t),执行后获取reward (r_t)以重新更新参数。

    3 CMFuzz

    3.1 Motivation

    以png为例阐述了mutation strategy的重要性
    具体来说,首先说明了有效输入的特点,接着说明了每种变异策略有效的盖率,最后还说明了不同文件格式对变异策略偏好不同,以及adaptive scheduling strategy确实能够为不同program学习到不同的scheduling strategy偏好。

    3.2 Overview

    File Execution

    Processor Trace Mechanism

    Feature Extraction

    直接把文件转化为byte stream,再使用矩阵分解

    Context-Aware Mutation

    LinUCB

    3.3 Features

    为何直接选择byte stream本身(简单,还有文件头信息);

    4 Implementation


  • 相关阅读:
    MySQL忘记root密码的找回方法
    MySQL中的备份和恢复
    MySQL中的锁(表锁、行锁)
    设计模式之: 策略模式
    MySQL流程函数
    高效查看MySQL帮助文档的方法
    php动态获取函数参数
    设计模式之: 代理模式
    网站性能优化指标
    设计模式之: 状态模式
  • 原文地址:https://www.cnblogs.com/xuesu/p/14490699.html
Copyright © 2011-2022 走看看