Proj THUDBFuzz Paper Reading: CMFuzz: context-aware adaptive mutation for fuzzers
Abstract
目前Fuzzer存在的问题: 生成分布是均一分布
本文: CMFuzz
特点: context-aware adaptive mutation scheme
- 采用contextual bandit algo LinUCB来选择变异算子
- 动态提取文件特征
实验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 ,生成context feature vector ,执行后获取reward 以重新更新参数。
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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)