Software Security - Fuzzing Project

Tools

Below pointers to the tools and some tutorials.

Googling around you can probably find many more tutorials and HOW TOs, which may be useful if these are tailored to the specific OS (Linux, OS X or Windows) that you prefer to use. If you happen to come across such other sources of information that are useful, post them in the Brightspace forum for that tool - or drop me an email so I can add a link here - so that others can benefit from this.

Radamsa

Radamsa lives on https://gitlab.com/akihe/radamsa. It is written in Owl-Lisp, a dialect of LISP.

Radamsa is file-based: it takes a set of valid sample files as input and then produces a larger set of invalid files that are fuzzed variants of these input files. Radamsa does not feed these output files to the system under test (SUT). This is something you have to do yourself, either manually or by setting up some scripts.

To install:

  > git clone https://gitlab.com/akihe/radamsa
  > cd radamsa
  > make
  > sudo make install # optional, you can also launch radamsa by giving the full path to bin/radamsa
  > radamsa --help

zzuf

The zuff webpage has all the info and instructions on zzuf. The code is on https://github.com/samhocevar/zzuf.

zuff is pretty old and it's not clear how actively it is being maintained. But it is simple, lightweight, and deterministic, so still worth a shot to try out.

To install: On Linux, you can simply get it with

   sudo apt-get install zzuf
Alternatively, unpack the tar-ball from the git repo and run the standard sequence
  > ./bootstrap 
  >  ./configure 
  >  make
  >  sudo make install
The zuff webpage says Windows support is not ready, but the git does contain a build-win32 branch. Please use the Brightspace forum to report good or bad experiences with running zzuf on Windows, so that other groups can benefit from this.

There is a tutorial on the zzuf webpage. Another tutorial on using zzuf is the fuzzing-project.org zzuf tutorial, which also shows the use of valgrind in combination with zzuf.

afl

The QuickStartGuide.txt at http://lcamtuf.coredump.cx/afl provides a quick intro. There is a daughter project AFL++ which may be easier to install and run than the original afl.

To install: The easiest way to install afl is with

  sudo apt-get install afl
If that does not work on your Linux/Mac OS X machine, Peter Guttman's article Fuzzing Code with AFL walks through the installation of both clang (as part of LLVM) and afl

The instruction for AFL++ are slightly differently.

Unlike with the tools above, for afl you need to recompile your code before you can start fuzzing. This tutorial walks trough a simple example using afl. Peter Guttman's article Fuzzing Code with AFL walks through the use of afl in combination with ASan. There is also an afl tutorial at fuzzing-project.org, which also discusses the use of afl with ASan.

There are tons of other afl tutorials out there; if you find any that are particularly useful, post them in Brightspace so that others can check them out to. Or email me so I can add links here. NB Windows users: Originally afl only ran on Linux and Mac OS X, as it uses *nix features. You can run afl in a VirtualBox VM, with a performance hit of course, but using a memory-instrumentation tool like ASan is then not an option. There is now also a Windows fork of afl. If you have any Linux or Mac OS X users in the group, obvious strategy would be to use afl on these systems and not to try this Windows fork. Or, if you could try winafl for comparison; they had to make some tweaks for winafl, not sure how these will affect results. There is also a recent - still experimental - port of ASan for Windows. By all means give it a try, if you like a challenge, but you'd probably want to ditch it if you hit any snags. Please use the Brightspace forum to report good or bad experiences, so that other groups can benefit from this.

CERT BFF

If you don't like simple command line tools like zzuf, you could try CERT Basic Fuzzing Framework (BFF) instead. BFF started as a framewrok to use zzuf, but has evolved since then, so I expect it to produce better results than zzuf. The latest version, version 2.8 from 2016, merged a Linux/OS X and a Windows framework, as discussed on this announcement of BFF 2.8.

To install: from the BFF download page you can get OS X and Windows installers and a UbuFuzz virtual machine. Or you can grab the source code from the github, but that is probably not for the faint-hearted.