Open
Description
DeepState implements ensembled fuzzing, where each fuzzer share interesting test cases with other. But synchronizing fuzzers is a bit tricky and needs some research, as it's badly documented.
Current state is:
- AFL and libFuzzer synchronize as for now.
- Eclipser and Honggfuzz need to be restared to pull new seeds
- Angora should synchronize (like AFL), but require correctly named files
See PP #326 for some initial information about the synchronization abilities.
Check out tests/test_fuzzers_sync.py for basic synchronization test. It pushes crashing seed into AFL queue directory and waits until all fuzzers share the seed and find the crash.
Fix would require:
- Implement
do_restart
in each fuzzer that doesn't automatically synchronize. It should use some heuristic to decide when to do restart (in simplest case, after some constant time). - Implement ensembler script (
deepstate-ensemble
) that fixsync_dir
from time to time: removes redundant files (usingafl-cmin
approach) and renames them appropriately (id:000001
...), so AFL and Angora are happy. Maybe it should also decide when to do restart (not each fuzzer indo_restart
method). - Research if libFuzzer require some filename convention to pull new test cases