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


posted @ 2021-03-06 14:55  雪溯  阅读(194)  评论(4编辑  收藏  举报