“ 本次分享的论文:《LibAFL: A Framework to Build Modular and Reusable Fuzzers》发表于acm ccs 2022。
background
目前学术界fuzzing研究现状:
-
大多数研究都基于afl/afl++进行二次开发
-
不同的研究工作之间互不兼容
-
fuzzer本身没有一个精确、普适性的标准定义
在这个背景下,作者定义了fuzzer的组成,并基于这些定义使用rust语言实现了Libafl。
Modern fuzzer的组成
-
Input:被fuzz程序的输入数据
-
Corpus:输入数据和附属数据的存储
-
Schedular:从corpus中取种子的策略
-
Stage:对单个testcase进行操作的action unit
-
Observer:提供执行一次目标程序的信息
-
Executer:使用输入来执行程序
-
Feedback:依据程序的执行反馈结果,来决定当前输入是否加入corpus
-
Mutator:从一个或多个输入生成新的testcases
-
Generator:从0开始生成一个新的测试用例
Design
Evaluation
libafl针对不同类型的fuzzing技术如struct aware、roadblock bypassing,都做了对比实验,结果如下:
原文始发于微信公众号(COMPASS Lab):Libafl