Git Product home page Git Product logo

aflteam's Introduction

AFLTeam: Towards Systematic and Dynamic Task Allocation for Collaborative Parallel Fuzzing

Parallel coverage-guided greybox fuzzing is the most common setup for vulnerability discovery at scale. However, so far it has received little attention from the research community compared to single-mode fuzzing, leaving open several problems particularly in its task allocation strategies. Current approaches focus on managing micro tasks, at the seed input level, and their task division algorithms are either ad-hoc or static. In our framework, we leverage research on graph partitioning and search algorithms to propose a systematic and dynamic task allocation solution that works at the macro-task level. First, we design an attributed graph to capture both the program structures (e.g., program call graph) and fuzzing information (e.g., branch coverage). Second, our graph partitioning algorithm divides the global program search space into sub-search-spaces. Finally our search algorithm prioritizes these sub-search-spaces (i.e., tasks) and explores them to maximize code coverage and number of bugs found.

Licences

AFLTeam is licensed under Apache License, Version 2.0.

Citing AFLTeam

AFLTeam has been published at the 36th IEEE/ACM International Conference on Automated Software Engineering (ASE) 2021 as a NIER paper.

@inproceedings{AFLTeam,
author={Van{-}Thuan Pham and Manh{-}Dung Nguyen and Quang{-}Trung Ta and Toby Murray and Benjamin I.P. Rubinstein},
title={Towards Systematic and Dynamic Task Allocation for Collaborative Parallel Fuzzing},
booktitle={Proceedings of the 36th IEEE/ACM International Conference on Automated Software Engineering : NIER Track},
year={2021},}

Tutorial - Fuzzing LibPNG with AFLTeam (Tested on Ubuntu 18.04 64-bit LLVM/Clang 6.0)

Please follow the steps below to fuzz LibPNG with AFLTeam. The same steps can be followed to run experiments for other libraries/programs like LibJPEG-turbo, FFmpeg, and Jasper. The steps work for the following folder structure.

Folder structure

<Your working folder>:
├── afl: normal AFL fuzzer (revision 518e422)
├── horsefuzz: a task-aware fuzzer built on top of AFL
├── aflsmart: we use seed corpora from AFLSmart
├── aflteam:
│   └── experiments
│   │   └── Makefile: for installing subject programs (LibPNG, FFMPEG etc)
|   └── aflteam-manager.py: the main script to run AFLTeam
|   └── setup-env.sh: for setting environment variables
├── subjects: we keep all subject programs in this folder
├── results: we keep all results in this folder

Step-1. Set up required packages, AFLTeam, other fuzzers and environmental variables

Set up required packages and AFLTeam

git clone https://github.com/melbournefuzzinghub/aflteam aflteam
source aflteam/setup-env.sh $(pwd)
make -f $AFLTEAM/experiments/Makefile prerequisites

Set up other fuzzers

cd $WORKDIR
make -f $AFLTEAM/experiments/Makefile afl
make -f $AFLTEAM/experiments/Makefile aflsmart
make -f $AFLTEAM/experiments/Makefile horsefuzz

Create folders keeping subject programs and results

cd $WORKDIR
mkdir subjects
mkdir results

Step-2. Set up subject program -- LibPNG in this example

cd $WORKDIR/subjects
make -f $AFLTEAM/experiments/Makefile libpng-all

Step-3. Run experiments

Then run the following commands. Please check the aflteam-manager.py file to see the detailed argument list

cd $WORKDIR
mkdir $RESULTS/out-pngimage-aflteam
cp -r $SUBJECTS/libpng-horsefuzz/pngimage-horsefuzz-logs /tmp/pngimage
HF_BINARY=pngimage $AFLTEAM/aflteam-manager.py -bn pngimage -ab $SUBJECTS/libpng-afl/pngimage -hb $SUBJECTS/libpng-horsefuzz/pngimage -pb $SUBJECTS/libpng-horsefuzz-profiling/pngimage -gb $SUBJECTS/libpng-cov/pngimage -gf $SUBJECTS/libpng-cov -d $SUBJECTS/libpng-wllvm/pngimage.dot -i $AFLSMART/testcases/aflsmart/png -x $AFLSMART/dictionaries/png.dict -f /tmp/pngimage/func_ids.log -b /tmp/pngimage/func_bbs.log -c 10 -o $RESULTS/out-pngimage-aflteam -a lukes -tt 36000 -st 3600 -et 3600 -ea1 "" -ea2 ""

aflteam's People

Contributors

thuanpv avatar melbournefuzzinghub avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.