| 1 | .TH zzuf 1 "2006-12-22" "zzuf" |
|---|
| 2 | .SH NAME |
|---|
| 3 | zzuf \- multiple purpose fuzzer |
|---|
| 4 | .SH SYNOPSIS |
|---|
| 5 | \fBzzuf\fR [\fB\-cdiqS\fR] [\fB\-r\fR \fIratio\fR] [\fB\-s\fR \fIseed\fR | \fB\-s\fR \fIstart:stop\fR] |
|---|
| 6 | .br |
|---|
| 7 | [\fB\-F\fR \fIchildren\fR] [\fB\-B\fR \fIbytes\fR] [\fB\-T\fR \fIseconds\fR] |
|---|
| 8 | .br |
|---|
| 9 | [\fB\-I\fR \fIinclude\fR] [\fB\-E\fR \fIexclude\fR] \fICOMMAND\fR [\fIARGS\fR]... |
|---|
| 10 | .br |
|---|
| 11 | \fBzzuf \-h\fR | \fB\-\-help\fR |
|---|
| 12 | .br |
|---|
| 13 | \fBzzuf \-v\fR | \fB\-\-version\fR |
|---|
| 14 | .SH DESCRIPTION |
|---|
| 15 | .PP |
|---|
| 16 | \fBZzuf\fR is a transparent application input fuzzer. It works by intercepting |
|---|
| 17 | file operations and changing random bits in the program's input. \fBZzuf\fR's |
|---|
| 18 | behaviour is deterministic, making it easy to reproduce bugs. |
|---|
| 19 | .SH USAGE |
|---|
| 20 | .PP |
|---|
| 21 | \fBZzuf\fR will run an application specified on its command line, one or |
|---|
| 22 | several times, with optional arguments, and will report the application's |
|---|
| 23 | behaviour on the standard output. |
|---|
| 24 | .PP |
|---|
| 25 | If you want to specify arguments for your application, put a \fB\-\-\fR |
|---|
| 26 | marker before them on the command line, or \fBzzuf\fR will try to interpret |
|---|
| 27 | them as arguments for itself. |
|---|
| 28 | .SH OPTIONS |
|---|
| 29 | .TP |
|---|
| 30 | \fB\-B\fR, \fB\-\-max\-bytes\fR=\fIn\fR |
|---|
| 31 | Automatically terminate child processes that output more than \fIn\fR bytes |
|---|
| 32 | on the standard output and standard error channels. This is useful to detect |
|---|
| 33 | infinite loops. See also the \fB\-T\fR flag. |
|---|
| 34 | .TP |
|---|
| 35 | \fB\-c\fR, \fB\-\-cmdline\fR |
|---|
| 36 | Only fuzz files whose name is specified in the target application's command |
|---|
| 37 | line. This is mostly a shortcut to avoid specifiying twice the argument: |
|---|
| 38 | \fBzzuf \-c cat file.txt\fR has the same effect as \fBzzuf \-I |
|---|
| 39 | \(dq^file\\.txt$\(dq cat file.txt\fR. See the \fB\-I\fR flag for more |
|---|
| 40 | information. |
|---|
| 41 | .TP |
|---|
| 42 | \fB\-d\fR, \fB\-\-debug\fR |
|---|
| 43 | Activate the display of debug messages. |
|---|
| 44 | .TP |
|---|
| 45 | \fB\-E\fR, \fB\-\-exclude\fR=\fIregex\fR |
|---|
| 46 | Do not fuzz files whose name matches the \fIregex\fR regular expression. This |
|---|
| 47 | option supersedes anything that is specified by the \fB\-I\fR flag. Use this |
|---|
| 48 | for instance if you are unsure of what files your application is going to read |
|---|
| 49 | and do not want it to fuzz files in the \fB/etc\fR directory. |
|---|
| 50 | |
|---|
| 51 | Multiple \fB\-E\fR flags can be specified, in which case files matching any one |
|---|
| 52 | of the regular expressions will be ignored. |
|---|
| 53 | .TP |
|---|
| 54 | \fB\-F\fR, \fB\-\-fork\fR=\fIchildren\fR |
|---|
| 55 | Specify the number of simultaneous children that can be run. This option is |
|---|
| 56 | only useful if the \fB\-s\fR flag is used with an interval argument. |
|---|
| 57 | .TP |
|---|
| 58 | \fB\-h\fR, \fB\-\-help\fR |
|---|
| 59 | Display a short help message and exit. |
|---|
| 60 | .TP |
|---|
| 61 | \fB\-i\fR, \fB\-\-stdin\fR |
|---|
| 62 | Fuzz the application's standard input. By default \fBzzuf\fR only fuzzes files. |
|---|
| 63 | .TP |
|---|
| 64 | \fB\-I\fR, \fB\-\-include\fR=\fIregex\fR |
|---|
| 65 | Only fuzz files whose name matches the \fIregex\fR regular expression. Use |
|---|
| 66 | this for instance if your application reads configuration files at startup |
|---|
| 67 | and you only want specific files to be fuzzed. |
|---|
| 68 | |
|---|
| 69 | Multiple \fB\-I\fR flags can be specified, in which case files matching any one |
|---|
| 70 | of the regular expressions will be fuzzed. See also the \fB\-c\fR flag. |
|---|
| 71 | .TP |
|---|
| 72 | \fB\-q\fR, \fB\-\-quiet\fR |
|---|
| 73 | Hide the output of the fuzzed application. This is useful if the application |
|---|
| 74 | is very verbose but only its exit code or signaled status is really useful to |
|---|
| 75 | you. |
|---|
| 76 | .TP |
|---|
| 77 | \fB\-r\fR, \fB\-\-ratio\fR=\fIratio\fR |
|---|
| 78 | Specify the amount of bits that will be randomly fuzzed. A value of 0 |
|---|
| 79 | will not fuzz anything. A value of 0.05 will fuzz 5% of the open files' |
|---|
| 80 | bits. A value of 1.0 or more will fuzz all the bytes, theoretically making |
|---|
| 81 | the input files undiscernible from random data. The default fuzzing ratio |
|---|
| 82 | is 0.004 (fuzz 0.4% of the files' bits). |
|---|
| 83 | .TP |
|---|
| 84 | \fB\-s\fR, \fB\-\-seed\fR=\fIseed\fR |
|---|
| 85 | .PD 0 |
|---|
| 86 | .TP |
|---|
| 87 | \fB\-s\fR, \fB\-\-seed\fR=\fIstart:stop\fR |
|---|
| 88 | .PD |
|---|
| 89 | Specify the random seed to use for fuzzing, or an interval of random seeds. |
|---|
| 90 | Running \fBzzuf\fR twice with the same random seed will fuzz the files exactly |
|---|
| 91 | the same way, even with a different target application. The purpose of this is |
|---|
| 92 | to use simple utilities such as \fBcat\fR or \fBcp\fR to generate a file that |
|---|
| 93 | causes the target application to crash. |
|---|
| 94 | |
|---|
| 95 | If an interval is specified, \fBzzuf\fR will run the application several times, |
|---|
| 96 | each time with a different seed, and report the behaviour of each run. |
|---|
| 97 | .TP |
|---|
| 98 | \fB\-S\fR, \fB\-\-signal\fR |
|---|
| 99 | Prevent children from installing signal handlers for signals that usually |
|---|
| 100 | cause coredumps. These signals are \fBSIGABRT\fR, \fBSIGFPE\fR, \fBSIGILL\fR, |
|---|
| 101 | \fBSIGQUIT\fR, \fBSIGSEGV\fR, \fBSIGTRAP\fR and, if available on the running |
|---|
| 102 | platform, \fBSIGSYS\fR, \fBSIGEMT\fR, \fBSIGBUS\fR, \fBSIGXCPU\fR and |
|---|
| 103 | \fBSIGXFSZ\fR. Instead of calling the signal handler, the application will |
|---|
| 104 | simply crash. If you do not want core dumps, you should set appropriate limits |
|---|
| 105 | with the \fBlimit coredumpsize\fR command. See your shell's documentation on |
|---|
| 106 | how to set such limits. |
|---|
| 107 | .TP |
|---|
| 108 | \fB\-T\fR, \fB\-\-max\-time\fR=\fIn\fR |
|---|
| 109 | Automatically terminate child processes that run for more than \fIn\fR |
|---|
| 110 | seconds. This is useful to detect infinite loops or processes stuck in other |
|---|
| 111 | situations. See also the \fB\-B\fR flag. |
|---|
| 112 | .TP |
|---|
| 113 | \fB\-v\fR, \fB\-\-version\fR |
|---|
| 114 | Output version information and exit. |
|---|
| 115 | .SH EXAMPLES |
|---|
| 116 | .PP |
|---|
| 117 | Fuzz the input of the \fBcat\fR program using default settings: |
|---|
| 118 | .PP |
|---|
| 119 | .RS |
|---|
| 120 | .nf |
|---|
| 121 | \fB# zzuf cat /etc/motd\fR |
|---|
| 122 | .fi |
|---|
| 123 | .RE |
|---|
| 124 | .PP |
|---|
| 125 | Fuzz 1% of the input bits of the \fBcat\fR program using seed 94324: |
|---|
| 126 | .PP |
|---|
| 127 | .RS |
|---|
| 128 | .nf |
|---|
| 129 | \fB# zzuf -s 94324 -r 0.01 cat /etc/motd\fR |
|---|
| 130 | .fi |
|---|
| 131 | .RE |
|---|
| 132 | .PP |
|---|
| 133 | Fuzz the input of the \fBconvert\fR program, using file \fBfoo.jpeg\fR as the |
|---|
| 134 | original input and excluding \fB.xml\fR files from fuzzing (because |
|---|
| 135 | \fBconvert\fR will also open its own XML configuration files and we do not |
|---|
| 136 | want \fBzzuf\fR to fuzz them): |
|---|
| 137 | .PP |
|---|
| 138 | .RS |
|---|
| 139 | .nf |
|---|
| 140 | \fB# zzuf -E \(dq\\.xml$\(dq convert -- foo.jpeg -format tga /dev/null\fR |
|---|
| 141 | .fi |
|---|
| 142 | .RE |
|---|
| 143 | .PP |
|---|
| 144 | Fuzz the input of \fBvlc\fR, using file \fBmovie.avi\fR as the original input |
|---|
| 145 | and restricting fuzzing to filenames that appear on the command line |
|---|
| 146 | (\fB\-c\fR), then generate \fBfuzzy-movie.avi\fR which is a file that can |
|---|
| 147 | be read by \fBvlc\fR to reproduce the same behaviour without using \fBzzuf\fR: |
|---|
| 148 | .PP |
|---|
| 149 | .RS |
|---|
| 150 | .nf |
|---|
| 151 | \fB# zzuf -c -s 87423 -r 0.01 vlc movie.avi\fR |
|---|
| 152 | \fB# zzuf -c -s 87423 -r 0.01 cp movie.avi fuzzy-movie.avi\fR |
|---|
| 153 | \fB# vlc fuzzy-movie.avi\fR |
|---|
| 154 | .fi |
|---|
| 155 | .RE |
|---|
| 156 | .PP |
|---|
| 157 | Fuzz 2% of \fBmplayer\fR's input bits (\fB\-r 0.02\fR) with seeds 0 to 9999 |
|---|
| 158 | (\fB\-s 0:10000\fR), disabling its standard output messages (\fB\-q\fR), |
|---|
| 159 | launching up to three simultaneous child processes (\fB\-F 3\fR), killing |
|---|
| 160 | \fBmplayer\fR if it takes more than one minute to read the file (\fB\-T 60\fR) |
|---|
| 161 | and disabling its \fBSIGSEGV\fR signal handler (\fB\-S\fR): |
|---|
| 162 | .PP |
|---|
| 163 | .RS |
|---|
| 164 | .nf |
|---|
| 165 | \fB# zzuf -c -q -s 0:10000 -F 3 -T 60 -r 0.02 \\\fR |
|---|
| 166 | \fB mplayer movie.avi -- -benchmark -vo null -fps 1000\fR |
|---|
| 167 | .fi |
|---|
| 168 | .RE |
|---|
| 169 | .SH BUGS |
|---|
| 170 | .PP |
|---|
| 171 | Only the most common file operations are implemented as of now: \fBopen\fR(), |
|---|
| 172 | \fBread\fR(), \fBfopen\fR(), \fBfseek\fR(), etc. One important unimplemented |
|---|
| 173 | function is \fBfscanf\fR(). |
|---|
| 174 | .PP |
|---|
| 175 | Network fuzzing is not implemented. It is not yet possible to insert or |
|---|
| 176 | drop bytes from the input, to fuzz according to the file format, or to do |
|---|
| 177 | all these complicated operations. They are planned, though. |
|---|
| 178 | .PP |
|---|
| 179 | Due to \fBzzuf\fR using \fBLD_PRELOAD\fR to run its child processes, it will |
|---|
| 180 | fail in the presence of any mechanism that disables preloading. For instance |
|---|
| 181 | setuid root binaries will not be fuzzed when run as an unprivileged user. |
|---|
| 182 | .SH AUTHOR |
|---|
| 183 | .PP |
|---|
| 184 | Copyright \(co 2006, 2007 Sam Hocevar <sam@zoy.org>. |
|---|
| 185 | .PP |
|---|
| 186 | \fBZzuf\fR and this manual page are free software. They come without any |
|---|
| 187 | warranty, to the extent permitted by applicable law. You can redistribute |
|---|
| 188 | them and/or modify them under the terms of the Do What The Fuck You Want |
|---|
| 189 | To Public License, Version 2, as published by Sam Hocevar. See |
|---|
| 190 | \fBhttp://sam.zoy.org/wtfpl/COPYING\fR for more details. |
|---|
| 191 | .PP |
|---|
| 192 | \fBZzuf\fR's webpage can be found at \fBhttp://sam.zoy.org/zzuf/\fR. |
|---|