Home

Awesome

FoRTE-Research's Fuzzing Benchmarks

This repository contains a collection of benchmarks and seed inputs to make fuzzing research more readily comparable and reproducable. For instructions on installing and running a given benchmark, refer to the readme file in its respective directory.

We welcome any suggestions for improving this fuzzing benchmark corpus! Our only criteria for additional benchmarks is that they are compatible with AFL-Clang, AFL-QEMU, and AFL-Dyninst tracing (as all 8 below are).

<table> <tr> <td align=center colspan="2"><div><b>Presented in our paper</b> <a href="https://arxiv.org/abs/1812.11875"><i>Full-speed Fuzzing: Reducing Fuzzing Overhead through Coverage-guided Tracing</i></a><br>(to appear in the 2019 IEEE Symposium on Security and Privacy).</td> </tr> <tr> <td><b>Citing this repository:</b></td> <td> <code class="rich-diff-level-one">@inproceedings{nagy:fullspeedfuzzing,</code><br> <code class="rich-diff-level-one">title = {Full-speed Fuzzing: Reducing Fuzzing Overhead through Coverage-guided Tracing},</code><br> <code class="rich-diff-level-one">author = {Stefan Nagy and Matthew Hicks},</code><br> <code class="rich-diff-level-one">booktitle = {{IEEE} Symposium on Security and Privacy (Oakland)},</code><br> <code class="rich-diff-level-one">year = {2019},}</code> </td> </tr> <tr> <td><b>Developers:</b></td> <td>Stefan Nagy (<a href="mailto:snagy2@vt.edu">snagy2@vt.edu</a>) and Matthew Hicks (<a href="mailto:mdhicks2@vt.edu">mdhicks2@vt.edu</a>)</td> </tr> <tr> <td><b>License:</b></td> <td><a href="/FoRTE-Research/UnTracer-AFL/blob/master/LICENSE">MIT License</a></td> </tr> <tr> <td><b>Disclaimer:</b></td> <td><i>This software is strictly a research prototype.</i></td> </tr> </table>

BENCHMARK STATISTICS

We utilized Dyninst to compute the following bechmark statistics for the 8 binaries evaluated in our paper. Note that we compiled all with Clang/Clang++.

benchnamelibnametypebasic blocksbasic block edges
bsdtarlibarchivearchiv3137943390
cert-basiclibksbacrypto995814120
cjsoncjsonweb14472038
djpeglibjpegimg48446776
pdftohtmlpopplerdoc5459671945
readelfbinutilsdev2124931086
sfconvertaudiofileaudio56037403
tcpdumptcpdumpnet3374348791

For our paper, we collected statistics on the 24hr fuzzing testcase corpora for each benchmark. Note that these numbers reflect corpora generated using AFL with QEMU-based tracing.

benchnamelibnametype24hr corpus sizetestcases/24hr100ms timeouts
bsdtarlibarchivearchiv90.9G25.6M4
cert-basiclibksbacrypto7.5G10.7M6
cjsoncjsonweb4.5G14.5M221K
djpeglibjpegimg30.1G21.0M656
pdftohtmlpopplerdoc0.2G1.2M107
readelfbinutilsdev3.8G14.9M7
sfconvertaudiofileaudio3.7G10.1M373K
tcpdumptcpdumpnet2.7G27.1M5

BUILDING BENCHMARKS

Before you attempt to build the benchmarks, there are several dependencies that you must resolve:

sudo apt install build-essential clang libgpg-error-dev libfontconfig1-dev libpcap-dev

We provide the script buildAll.sh to compile all benchmarks from source. Edit the following parameters to reflect the desired C and C++ compilers, and any assembler parameters:

compiler=""
compilerXX=""
passToAS=""

Before building using AFL-modified compilers, make sure to upate PATH and AFL-PATH system variables to point to where you have AFL installed.

COLLECTING BENCHMARKS

We also provide the script collectAll.py to copy all compiled benchmark binaries to the current directory and append them with a use-specific (as specified on the command line) postfix:

Run as follows:

python /path/to/FoRTE-FuzzBench/collectAll.py [binaryPostfix] 

All benchmarks will be copied to the current directory and appended the specified postfix (leave blank if none).

<p align=center> <a href="https://www.cs.vt.edu"><img border="0" src="http://people.cs.vt.edu/snagy2/img/vt_inline_computer_science.png" width="60%" height="60%"> </a> </p>