1 Introduction
2 Overview
2.1 Motivation example
2.2 The framework of our approach
3 Technology
3.1 Connection instance collection
Tab.1 The reconstruction of the instructions |
Form | Example | Reconstructed | Target value |
---|---|---|---|
imm, imm | cmp 5, 7 | N/A | N/A |
reg/mem, imm | cmp eax, 7 | N/A | 7 |
reg/mem, reg/mem | cmp eax, ebx | cmp eax-ebx, 0 | 0 |
3.2 Connection inference
3.3 Connection based searching
4 Implementation and evaluation
4.1 Evaluation setup
Tab.2 The evaluation experiments in other fuzzers |
Fuzzer | Time | Benchmark | Compared Fuzzer |
---|---|---|---|
Steelix | 2017 | RWP | AFL-dyninst |
CGC | AFL-dyninst | ||
LAVA-M | FUZZER, SES, VUzzer, AFL-lafintel | ||
VUzzer | 2017 | RWP | AFL |
CGC | AFLPIN | ||
LAVA-M | FUZZER, SES | ||
Angora | 2018 | RWP | AFL |
CGC | − | ||
LAVA-M | FUZZER, SES, AFL, VUzzer, Steelix | ||
T-fuzz | 2018 | RWP | AFL |
CGC | AFL, Driller | ||
LAVA-M | FUZZER, SES, VUzzer, Steelix | ||
Profuzzer | 2019 | RWP | AFL, AFLFast, Driller, Vuzzer, QSYM |
CGC | − | ||
LAVA-M | AFL, AFLFast, Driller, VUzzer, Angora, QSYM |
Note: RWP is short for real-world program |
4.2 Bug detection on LAVA (RQ1)
Tab.3 The number of detected bugs on LAVA-M database |
Program | Listed bugs | FUZZER | SES | AFL | AFL-lafintel | Angora | |
---|---|---|---|---|---|---|---|
base64 | 44 | 7 | 9 | 9 | 28 | 44+4 | 44+4 |
md5sum | 57 | 2 | 0 | 0 | 0 | 57 | 57+4 |
uniq | 28 | 7 | 0 | 0 | 24 | 28+1 | 28+1 |
who | 2136 | 0 | 18 | 1 | 2 | 1443+98 | 1847+205 |
4.3 Bug detection on CGC (RQ1)
Tab.4 The experimental results on CGC binaries |
Program | Size | AFL | AFLFast | AFL-lafintel | FairFuzz | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
CGC_File_System | 88 KB | 7.2% | 0 | 7.2% | 0 | 59.5% | 0 | 7.2% | 0 | 75.1% | 10 |
CGC_Hangman_Game | 5.2 MB | 12% | 0 | 12% | 0 | 12% | 0 | 12% | 0 | 94% | 1 |
CGC_Image_Parser | 145 KB | 4.6% | 0 | 4.6% | 0 | 4.6% | 0 | 4.6% | 0 | 60.6% | 12 |
CGC_Video_Format_Parser_and_Viewer | 82 KB | 12% | 0 | 12% | 0 | 53.1% | 0 | 12% | 0 | 53.1% | 0 |
CNMP | 56 KB | 27.5% | 0 | 27.5% | 0 | 42.5% | 26 | 47.5% | 3 | 80% | 30 |
FASTLANE | 52 KB | 25.9% | 0 | 17.5% | 0 | 17.5% | 0 | 27.7% | 0 | 51.2% | 19 |
Gridder | 164 KB | 84.2% | 10 | 70.3% | 0 | 82.9% | 23 | 84.2% | 28 | 84.2% | 56 |
Griswold | 95 KB | 3.8% | 0 | 3.8% | 0 | 45% | 13 | 3.8% | 0 | 55.3% | 27 |
Barcoder | 172 KB | 59% | 0 | 59% | 0 | 57.2% | 0 | 59% | 0 | 68% | 25 |
4.4 Bug detection on real-world programs (RQ1)
Tab.5 The number of detected bugs on real-world programs |
Program | AFL | AFL-lafintel | FairFuzz | Angora | |
---|---|---|---|---|---|
jhead | 0 | 0 | 0 | 16 | 114 |
nm | 77 | 69 | 27 | 3 | 83 |
objdump | 5 | 22 | 29 | 34 | 51 |
tcpdump | 0 | 0 | 0 | 0 | 3 |
total | 82 | 91 | 56 | 53 | 251 |
4.5 Testing coverage on real-world program (RQ2)
Tab.6 The final testing coverage after 72 hours of testing |
Program | AFL | AFLFast | AFL-lafintel | Fairfuzz | Angora | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BC | LC | FC | BC | LC | FC | BC | LC | FC | BC | LC | FC | BC | LC | FC | BC | LC | FC | ||||||
jhead | 213 | 313 | 18 | 213 | 313 | 18 | 213 | 313 | 18 | 213 | 313 | 18 | 479 | 687 | 26 | 568 | 714 | 26 | |||||
0% | 0% | 0% | 0% | 0% | 0% | 0% | 0% | 0% | +125% | +119% | +44% | +167% | +128% | +44% | |||||||||
nm | 4397 | 7097 | 391 | 4342 | 6993 | 390 | 4046 | 6856 | 405 | 4468 | 7230 | 392 | 4002 | 6679 | 404 | 4710 | 7851 | 433 | |||||
−1% | −1% | 0% | −8% | −3% | +4% | +2% | +2% | 0% | −9% | −6% | +3% | +7% | +11% | +11% | |||||||||
objdump | 2602 | 4375 | 273 | 2378 | 3949 | 258 | 2694 | 4990 | 309 | 2595 | 4426 | 278 | 3337 | 6329 | 358 | 3737 | 7034 | 372 | |||||
−9% | −10% | −5% | +4% | +14% | +13% | 0% | +1% | +2% | +28% | +45% | +31% | +44% | +61% | +36% | |||||||||
tcpdump | 15474 | 23452 | 706 | 13501 | 20645 | 682 | 12791 | 20475 | 698 | 16264 | 24530 | 753 | 2482 | 4834 | 269 | 18754 | 27861 | 846 | |||||
−13% | −12% | −3% | −17% | −13% | −1% | +5% | +5% | +7% | −84% | −81% | −62% | +21% | +19% | +20 |
Note: BC is the branch coverage number. LC is the line coverage number. FC is the function coverage number |
4.6 Execution overhead evaluation (RQ3)
Tab.7 The overhead in AFL and |
Overhead | AFL | ||
---|---|---|---|
Instrumentation | coverage collection | √ | √ |
comparison operands collection | √ | ||
Analysis | testing schedule | √ | √ |
connection inference | √ | ||
GA based searching | √ |
Tab.8 The execution distribution in between connection inference and GA searching |
Program | connection inference/# | GA based searching/# |
---|---|---|
jhead | 4748k | 41k |
nm | 8352k | 1720k |
objdump | 8842k | 969k |
tcpdump | 81659k | 1016k |