Skip to content

Repository for materials of "Modern fuzzing of C/C++ Projects" workshop.

License

Notifications You must be signed in to change notification settings

zhang-xiaofeng/libfuzzer-workshop

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

libfuzzer-workshop

Materials of "Modern fuzzing of C/C++ Projects" workshop.

The first version of the workshop had been presented at ZeroNights'16 security conference.

Disclaimer

This workshop was originally developed in 2016. As of today (2021 and beyond), the practical side of the workshop might be not working right away, because libFuzzer greatly evolved over the years. The theoretical part of the workshop is a good learning material still, but for the practical lessons it is recommended to follow the most recent version of the libFuzzer tutorial.

Requirements

  • 2-3 hours of your time
  • Linux-based OS
  • C/C++ experience (nothing special, but you need to be able to read, write and compile C/C++ code)
  • a recent version of clang compiler. Distributions from package managers are too old and most likely won't work (the workshop called "modern", right?), you have two options:
    • checkout llvm repository and build it yourself. To make it easy, feel free to use checkout_build_install_llvm.sh script, it has been tested on clean Ubuntu 16.04
    • a VirtualBox VM with working environment is available, credentials: fuzzer:zeronights
  • sudo apt-get install -y make autoconf automake libtool pkg-config zlib1g-dev

Fuzzing experience is not required.

Contents

  1. An introduction to fuzz testing
  2. An example of traditional fuzzing
  3. Coverage-guided fuzzing
  4. Writing fuzzers (simple examples)
  5. Finding Heartbleed (CVE-2014-0160)
  6. Finding c-ares $100,000 bug (CVE-2016-5180)
  7. How to improve your fuzzer
  8. Fuzzing libxml2, learning how to improve the fuzzer and analyze performance
  9. Fuzzing libpng, learning an importance of seed corpus and other stuff
  10. Fuzzing re2
  11. Fuzzing pcre2
  12. Chromium integration & homework assignment

Most of the examples have been taken from libFuzzer tutorial and Fuzzer Test Suite.

Prerequisites

libFuzzer

Building libFuzzer is extreemly easy:

cd libFuzzer
Fuzzer/build.sh

libFuzzer repository could be found inside LLVM's compiler-rt project.

Links

About

Repository for materials of "Modern fuzzing of C/C++ Projects" workshop.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 93.7%
  • Python 2.5%
  • CMake 2.0%
  • C 1.2%
  • Shell 0.6%