DirectedFuzzer.md (2462B)
1 # Directed Fuzzer 2 3 **Source:** Where To Fuzz (paper) 4 5 **Definition:** Directed fuzzers are fuzzers that focus on specific parts of source code / a binary. These locations can either be defined manually or using some sort of heuristic. 6 7 ## Examples 8 9 One example is regression greybox fuzzing which focuses on recently changed code. The idea behind this is that recently changed code is more likely to impose regressions than existing code which has been, presumably, more thoroughly tested. 10 11 Another example are the metrics used in [Orion](Orion.md) for calculating interfaces of interest to write fuzzing harnesses for. Their approach combines deterministic values like cyclomatic complexity and call graph size with LLM derived values coming from the usage of techniques commonly associated with vulnerabilities (eg. pointer arithmetic and the likes). 12 13 ## Categorization 14 15 A simple approach to the categorization of existing directed fuzzers can be done on the basis of 16 17 1. The source of the information 18 - Source code 19 - like code complexity 20 - Binary code 21 - like sanitizer instrumentation 22 - External information 23 - like recently changed code or CVE site information used to find code patterns 24 2. Discrete or continuous scoring 25 - Scoring type 26 3. Granularity 27 - Block 28 - Function 29 - This seems to be the most common approach for the evaluation of selection methods 30 - Source code line 31 4. Scoring mechanism 32 - Two broad categories 33 1. metrics 34 - use code metrics to score individual locations 35 - examples include: 36 - TortoiseFuzz & CollAFL 37 - Focus on memory access count in selected method 38 - Leopard 39 - Uses structural complexity and vulnerability metrics which are properties of a code region like pointer arithmetic and nested control structures. 40 2. patterns 41 - uses heuristics 42 - examples include: 43 - ODDFuzz 44 - selects deserialization methods in Java as targets 45 - StrawFuzzer 46 - Data storing instructions as targets in an attempt to cause OS crashes 47 - AmpFuzz 48 - Targets networking related functions for amplification attack searching 49 - ParmeSan, SAVIOR, and FishFuzz 50 - Uses sanitizer instrumentation as a heuristic for relevant code