Home

Awesome

Adding predictions to AFL

<pre> american fuzzy lop 2.51b (magic_fuzzer) ┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ │ run time : 0 days, 0 hrs, 10 min, 15 sec │ cycles done : 6 │ │ last new path : 0 days, 0 hrs, 0 min, 1 sec │current paths : 3104 │ │ last uniq crash : none seen yet │ path coverag : 21.7% │ │ last uniq hang : none seen yet │ uniq crashes : 0 │ │ correctness : 5.486657e-04 │ uniq hangs : 0 │ │ fuzzability : 4.415707e-01 │ effec paths : 1.555 │ </pre>

Overview

Pythia provides statistical correctness guarantees for fuzzing campaigns (correctness), and quantifies how difficult it is to discover paths in a program (difficulty). Pythia also allows to determine the progress of the fuzzing campaign towards completion (path coverage) and can predict the number of paths discovered at a certain time in the future. Once you reach a "path coverage" of 99%, you can normally abort the fuzzing campaign without expecting too many new discoveries. Once you reach a "correctness" of 1e-8, we expect that it would take about 100 million new executions from the last discovery until the next discovery of a new path / unique crash.

More details

How to interpret UI

Gotchas

If there is enough interest, I'll put up a technical report explaining the research behind this. Also, let me know if you want to build on this research and cite my paper :) <br/> The central ideas also work for Libfuzzer, syzcaller, Peach, CSmith, and many other fuzzers (except for fuzzers based on symbolic execution) and other program analysis (not only for path coverage).

Further reading

Cheers - Marcel