Since I haven't really ever properly done it, i wanted to "officially"
announce american fuzzy lop, a novel instrumentation-driven fuzzer
that, among other things, had some luck finding a bunch of fairly
interesting image parsing security issues (e.g., CVE-2013-6629,
CVE-2013-6630).
http://code.google.com/p/ american-fuzzy-lop/
I have a blog post that discusses the design of the fuzzer in more detail:
http://lcamtuf.blogspot.com/ 2014/08/a-bit-more-about- american-fuzzy-lop.html
...but in essence, the basic idea is to use high-performance
instrumentation to get Markov-chain-style tuples that describe local
state transitions within the program - (previous executed statement,
current executed statement) - without paying any explicit attention to
global control flow.
This is used to automatically generate additional test cases from the
initial file whenever novel state transitions are bumped into. The
approach automatically produces a compact, ever-evolving corpus of
interesting test cases to get good coverage of the tested program,
well-suited for manual inspection or as a seed for other, more
resource-intensive testing protocols.
I think this works considerably better than coverage-only algorithms,
but also avoids the complexity of instrumentation that tries to
compare or reason about global execution paths.
Cheers,
/mz
Michal Zalewski
lcamtuf@coredump.cx
announce american fuzzy lop, a novel instrumentation-driven fuzzer
that, among other things, had some luck finding a bunch of fairly
interesting image parsing security issues (e.g., CVE-2013-6629,
CVE-2013-6630).
http://code.google.com/p/
I have a blog post that discusses the design of the fuzzer in more detail:
http://lcamtuf.blogspot.com/
...but in essence, the basic idea is to use high-performance
instrumentation to get Markov-chain-style tuples that describe local
state transitions within the program - (previous executed statement,
current executed statement) - without paying any explicit attention to
global control flow.
This is used to automatically generate additional test cases from the
initial file whenever novel state transitions are bumped into. The
approach automatically produces a compact, ever-evolving corpus of
interesting test cases to get good coverage of the tested program,
well-suited for manual inspection or as a seed for other, more
resource-intensive testing protocols.
I think this works considerably better than coverage-only algorithms,
but also avoids the complexity of instrumentation that tries to
compare or reason about global execution paths.
Cheers,
/mz
Michal Zalewski
lcamtuf@coredump.cx