aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvanhauser-thc <vh@thc.org>2021-02-04 23:09:49 +0100
committervanhauser-thc <vh@thc.org>2021-02-04 23:09:49 +0100
commitfaa9daf260e63482121c9e06e1205efe0a7bcf2d (patch)
tree3867ef6a3d162ac9febfab45824e7930084abb22
parentbf1198c4dbcfcca81ee912f4926daad02d9e27c1 (diff)
downloadafl++-faa9daf260e63482121c9e06e1205efe0a7bcf2d.tar.gz
update readme
-rw-r--r--README.md38
1 files changed, 35 insertions, 3 deletions
diff --git a/README.md b/README.md
index 8c4aab93..d1ae05d3 100644
--- a/README.md
+++ b/README.md
@@ -68,9 +68,10 @@ behaviours and defaults:
3. [How to fuzz a target](#how-to-fuzz-with-afl)
4. [Fuzzing binary-only targets](#fuzzing-binary-only-targets)
5. [Good examples and writeups of afl++ usages](#good-examples-and-writeups)
- 6. [Branches](#branches)
- 7. [Want to help?](#help-wanted)
- 8. [Detailed help and description of afl++](#challenges-of-guided-fuzzing)
+ 6. [CI Fuzzing](#ci-fuzzing)
+ 7. [Branches](#branches)
+ 8. [Want to help?](#help-wanted)
+ 9. [Detailed help and description of afl++](#challenges-of-guided-fuzzing)
## Important features of afl++
@@ -689,6 +690,9 @@ If you want to know more, the rest of this README and the tons of texts in
Note that there are also a lot of tools out there that help fuzzing with afl++
(some might be deprecated or unsupported):
+Speeding up fuzzing:
+ * [libfiowrapper](https://github.com/marekzmyslowski/libfiowrapper) - if you cannot use stdin or in-memory fuzzing, this emulates file reading, recommended.
+
Minimization of test cases:
* [afl-pytmin](https://github.com/ilsani/afl-pytmin) - a wrapper for afl-tmin that tries to speed up the process of minimization of a single test case by using many CPU cores.
* [afl-ddmin-mod](https://github.com/MarkusTeufelberger/afl-ddmin-mod) - a variation of afl-tmin based on the ddmin algorithm.
@@ -794,6 +798,34 @@ All these methods are extremely promising in experimental settings, but tend
to suffer from reliability and performance problems in practical uses - and
currently do not offer a viable alternative to "dumb" fuzzing techniques.
+## CI Fuzzing
+
+Some notes on CI Fuzzing - this fuzzing is different to normal fuzzing
+campaigns as these are much shorter runnings.
+
+1. Always:
+ * LTO has a much longer compile time which is diametrical to short fuzzing -
+ hence use afl-clang-fast instead
+ * `AFL_FAST_CAL` - Enable fast calibration, halfs the time the saturated
+ corpus is loaded
+ * `AFL_CMPLOG_ONLY_NEW` - only perform cmplog on new found paths, not the
+ initial corpus as it has been done there already
+ * Keep the generated corpus, use afl-cmin and reuse it everytime!
+
+2. Additionally randomize the afl++ compilation options, e.g.
+ * 40% for `AFL_LLVM_CMPLOG`
+ * 10% for `AFL_LLVM_LAF_ALL`
+
+3. Also randomize the afl-fuzz runtime options, e.g.
+ * 60% for `AFL_DISABLE_TRIM`
+ * 50% use a dictionary generated by `AFL_LLVM_DICT2FILE`
+ * 50% use MOpt (`-L 0`)
+ * 40% for `AFL_EXPAND_HAVOC_NOW`
+ * 30% for old queue processing (`-Z`)
+ * for CMPLOG targets, 60% for `-l 2`, 40% for `-l 3`
+
+4. Do *not* run any `-M` modes, just running `-S` modes are better for CI fuzzing.
+
## Background: The afl-fuzz approach
American Fuzzy Lop is a brute-force fuzzer coupled with an exceedingly simple