Giter Club home page Giter Club logo

cofuzz's Introduction

CoFuzz

Coordinated hybrid fuzzing framework with advanced coordination mode

Publication

Evaluating and Improving Hybrid Fuzzing, ICSE'2023

@inproceedings{jiang2023evaluating,
  title = {Evaluating and improving hybrid fuzzing},
  author = {Jiang, Ling and Yuan, Hengchen and Wu, Mingyuan and Zhang, Lingming and Zhang, Yuqun},
  doi = {10.1109/ICSE48619.2023.00045},
  booktitle = {2023 IEEE/ACM 45th International Conference on Software Engineering (ICSE)},
  pages = {410-422},
  year={2023}
}

Build CoFuzz

Environment

  • Tested on Ubuntu 18.04/20.04
  • Python (>= 3.8)
  • LLVM 10.0-12.0

Build in local

$ git submodule update --init --recursive

# Install fuzzer and concolic executor
$ ./build.sh

Build with Docker

We highly recommend to run CoFuzz using the docker container.

# Build docker image
$ docker build -t cofuzz ./

# Run docker container
$ docker run -itd --privileged cofuzz /bin/bash

Running CoFuzz

Program instrumentation

CoFuzz compiles the target program into three binaries with seperate instrumentation.

# Tracing execution path
export CC=trace/build/clang-trace CXX=trace/build/clang-trace++
./configure --disable-shared
make -j$(nproc)

# Count edge coverage for fuzzer
export CC=fuzzer/afl-clang-fast CXX=fuzzer/afl-clang-fast++
./configure --disable-shared
make -j$(nproc)

# Concolic execution
export CC=concolic/qsym/symcc CXX=concolic/qsym/sym++
./configure --disable-shared
make -j$(nproc)

Start Hybrid Fuzzing

For running CoFuzz, a configuration file is required with the following format.

[put]
# Program under test
cohuzz_bin=/path/to/binary/for/concolic/exeuction
trace_bin=/path/to/binary/for/trace/path
argument=@@

Environment variables:

  • INPUT: initial seed corpora
  • OUTPUT: output directory
  • FUZZ_CMD: command for running program for AFL
  • CFG_FILE: configuration file for CoFuzz
# Running fuzzing stratrgy
fuzzer/afl-fuzz -S afl -m none -i $INPUT -o $OUTPUT  -- $FUZZ_CMD

# Running CoFuzz (concolic execution + coordination mode)
src/cofuzz.py -o $OUTPUT -a afl -c $CFG_FILE

For running a demo program readelf, please turn to the document in Demo.

Data

  • The data for unique crashes and figures in paper is in Data.
  • The assigned CVEs are in cve. Note that the new CVEs are still in the status of RESERVED, thus the details are placed here until being published.

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.