FUZZIFICATION: Anti-Fuzzing Techniques
Jinho Jung, Hong Hu, David Solodukhin, Daniel Pagan, Kyu Hyung Lee*, Taesoo Kim
*
1
FUZZIFICATION : Anti-Fuzzing Techniques Jinho Jung , Hong Hu, David - - PowerPoint PPT Presentation
FUZZIFICATION : Anti-Fuzzing Techniques Jinho Jung , Hong Hu, David Solodukhin, Daniel Pagan, Kyu Hyung Lee*, Taesoo Kim * 1 Fuzzing Discovers Many Vulnerabilities 2 Fuzzing Discovers Many Vulnerabilities 3 Testers Find Bugs with Fuzzing
1
2
3
Source Compilation Released binary Normal users Testers Detected bugs Compilation Distribution Fuzzing
4
Source Compilation Released binary Testers Detected bugs Compilation Distribution Fuzzing
5
Attackers Normal users
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
6
Normal users
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
7
Normal users
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
8
Normal users
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
9
Normal users
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
10
Normal users
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
11
Normal users
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
12
Normal users
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
13
Normal users
AFL HonggFuzz VUzzer QSym …
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
14
Normal users
Source Fuzzification Compilation Fortified binary Binary Testers Detected bugs Attackers Compilation Distribution Fuzzing
15
Normal users Fortified binary
16
17
18
19
20
21
Parallel execution Fork server
H/W feature
22
Parallel execution Fork server H/W feature
23
Parallel execution Fork server Coverage
H/W feature
24
Parallel execution Fork server Coverage H/W feature
25
Symbolic execution Dynamic taint analysis Queue Parallel execution Fork server Coverage
H/W feature
26
Symbolic execution Dynamic taint analysis Queue Parallel execution Fork server Coverage H/W feature
27
Basic block
28
Basic block Rarely visited path Frequently visited path
29
Basic block Rarely visited path Frequently visited path
30
Basic block Rarely visited path Frequently visited path
31
32
33
34
int rarely_executed_code () { return 0; }
35
int rarely_executed_code () { return 0; } //define global variables int global1 = 1; int global2 = 2; int rarely_executed_code () { //inject delay function int pass = 20; global2 = func(pass); return 0; }
36
int func(int p6) { int local1[10]; // affect global1 variable global1 = 45; int local2 = global1; for (int i = 0; i < 1000; i++) // affect local1 variable local1[i] = p6 + local2 + i; // affect global2 variable return local1[5]; } int rarely_executed_code () { return 0; } //define global variables int global1 = 1; int global2 = 2; int rarely_executed_code () { //inject delay function int pass = 20; global2 = func(pass); return 0; }
37
Symbolic execution Dynamic taint analysis Queue Parallel execution Fork server Coverage H/W feature
38
1 3 2 “AAAA” Coverage #1
39
1 3 2 “AAAA” “AAAB” Coverage #1 Coverage #2
40
1 3 2 “AAAA” “AAAB” Coverage #1 Coverage #2 1 3 2 “AAAA” Coverage #1
41
1 3 2 “AAAA” “AAAB” Coverage #1 Coverage #2 1 3 2 “AAAA” Coverage #1 “AAAB” Coverage #2
call Func1 next inst
Original epilogue pop rbp pop r15 ret
42
Code snippet 1 pop rbp pop r15 ret Code snippet 2 pop rbp pop r15 ret
call Func1 next inst
43
Original epilogue pop rbp pop r15 ret Code snippet N …
index = arg1 ^ arg2
Code snippet 1 pop rbp pop r15 ret Code snippet 2 pop rbp pop r15 ret Code snippet N …
call Func1 next inst
① ②
44
Original epilogue pop rbp pop r15 ret
index = arg1 ^ arg2
Code snippet 1 pop rbp pop r15 ret Code snippet 2 pop rbp pop r15 ret
jmp table [index] call Func1 next inst
① ② ③ ④
45
Original epilogue pop rbp pop r15 ret Code snippet N …
Code snippet 1 pop rbp pop r15 ret Code snippet 2 pop rbp pop r15 ret
Code snippet N …
index = arg1 ^ arg2 jmp table [index] call Func1 next inst
① ② ③ ④ ⑤
46
Original epilogue pop rbp pop r15 ret
47
1 3 2
48
Symbolic execution Dynamic taint analysis Queue Parallel execution Fork server Coverage H/W feature
49
50
51
52
Profile Binary Source ①Run Valid/invlid inputs
53
Profile Binary Source ② Inject component LLVM IR SpeedBump BranchTrap AntiHybrid ①Run Valid/invlid inputs
54
Profile Binary Source ② Inject component LLVM IR SpeedBump BranchTrap AntiHybrid Test run ①Run Valid/invlid inputs
55
③Measure Overhead & Inject More Component
Profile Binary Source ② Inject component LLVM IR SpeedBump BranchTrap AntiHybrid Test run ④Release fortified binary ①Run Valid/invlid inputs
56
③Measure Overhead & Inject More Component
57
BranchTrap
58
AntiHybrid SpeedBump Discovered Paths
* Fuzzing result on AFL-QEMU
59
* Fuzzing result on AFL-QEMU
60
61
62
63
64
65