Fuzzing for Software Security Testing and Quality Assurance, 2nd Edition

Fuzzing for Software Security Testing and Quality Assurance, 2nd Edition

Hardcover

$149.00
Choose Expedited Shipping at checkout for guaranteed delivery by Wednesday, August 28

Overview

This newly revised and expanded second edition of the popular Artech House title, Fuzzing for Software Security Testing and Quality Assurance, provides practical and professional guidance on how and why to integrate fuzzing into the software development lifecycle. This edition introduces fuzzing as a process, goes through commercial tools, and explains what the customer requirements are for fuzzing. The advancement of evolutionary fuzzing tools, including American Fuzzy Lop (AFL) and the emerging full fuzz test automation systems are explored in this edition. Traditional software programmers and testers will learn how to make fuzzing a standard practice that integrates seamlessly with all development activities. It surveys all popular commercial fuzzing tools and explains how to select the right one for software development projects.

This book is a powerful new tool to build secure, high-quality software taking a weapon from the malicious hacker’s arsenal. This practical resource helps engineers find and patch flaws in software before harmful viruses, worms, and Trojans can use these vulnerabilities to rampage systems. The book shows how to make fuzzing a standard practice that integrates seamlessly with all development activities.

Product Details

ISBN-13: 9781608078509
Publisher: Artech House, Incorporated
Publication date: 01/31/2018
Pages: 330
Sales rank: 540,450
Product dimensions: 7.20(w) x 10.20(h) x 1.00(d)

About the Author

Ari Takanen is an investor and startup advisor at Kielo Growth business incubator company. He is also cofounder of Codenomicon, a software fuzzing tool company acquired by Synopsys. A noted speaker and author on software testing and security, he is a graduate of Finland’s University of Oulo, where he did research with the University’s secure programming group.
Jared D. DeMott is the founder of Vulnerability Discovery & Analysis (VDA) Labs. He earned an M.S. in computer science from Johns Hopkins University and is a Ph.D. candidate at Michigan State University.
Charlie Miller is a principal autonomous vehicle security architect at Cruise Automation. Previously, he spent five years at the National Security Agency as a computer hacker. He earned his Ph.D. in mathematics from the University of Notre Dame.
Atte Kettunen is a software security expert at F-Secure Corporation. He received his master’s degree in computer security from Oulun yliopisto.

Table of Contents

Foreword from the First Edition xv

Foreword to the Second Edition xix

Preface from the First Edition xxiii

Preface to the Second Edition xxv

Chapter 1 Introduction 1

1.1 Software Security 2

1.1.1 Security Incident 4

1.1.2 Disclosure Processes 5

1.1.3 Attack Surfaces and Attack Vectors 6

1.1.4 Reasons Behind Security Mistakes 9

1.1.5 Proactive Security 10

1.1.6 Security Requirements 12

1.2 Software Quality 13

1.2.1 Cost-Benefit of Quality 14

1.2.2 Target of Test 16

1.2.3 Testing Purposes and Test Verdicts 16

1.2.4 Structural Testing 20

1.2.5 Functional Testing 21

1.2.6 Code Auditing 21

1.3 Introduction to Fuzzing 22

1.3.1 Brief History of Fuzzing 22

1.3.2 Fuzzing Overview 26

1.3.3 Vulnerabilities Found with Fuzzing 27

1.3.4 Fuzzer Types 28

1.3.5 Logical Structure of a Fuzzer 31

1.3.6 Fuzzing Process 32

1.3.7 Fuzzing Frameworks and Test Suites 33

1.3.8 Fuzzing and the Enterprise 34

1.4 Book Goals and Layout 35

Chapter 2 Software Vulnerability Analysis 37

2.1 Purpose of Vulnerability Analysis 38

2.1.1 Security and Vulnerability Scanners 38

2.2 People Conducting Vulnerability Analysis 40

2.2.1 Hackers 42

2.2.2 Vulnerability Analysts or Security Researchers 42

2.2.3 Penetration Testers 43

2.2.4 Software Security Testers 43

2.2.5 IT Security Engineers 43

2.3 Target Software 44

2.4 Basic Bug Categories 44

2.4.1 Memory Corruption Errors 44

2.4.2 Web Applications 52

2.4.3 Brute Force Login 55

2.4.4 Race Condition 55

2.4.5 Denial of Service 56

2.4.6 Session Hijacking 56

2.4.7 Man in the Middle 56

2.4.8 Cryptographic Attacks 57

2.5 Bug Hunting Techniques 57

2.5.1 Reverse Engineering 57

2.5.2 Source Code Auditing 60

2.6 Fuzzing 61

2.6.1 Basic Terms 62

2.6.2 Hostile Data 62

2.6.3 Number of Tests 64

2.7 Defenses 64

2.7.1 Why Fuzzing Works 65

2.7.2 Defensive Coding 65

2.7.3 Input Verification 66

2.7.4 Hardware Overflow Protection 67

2.7.5 Software Overflow Protection 68

2.8 Summary 71

Chapter 3 Quality Assurance and Testing 73

3.1 Quality Assurance and Security 73

3.1.1 Security in Software Development 74

3.1.2 Security Defects 75

3.2 Measuring Quality 75

3.2.1 Quality Is About Validation of Features 75

3.2.2 Quality Is About Finding Defects 78

3.2.3 Quality Is a Feedback Loop to Development 78

3.2.4 Quality Brings Visibility to the Development Process 79

3.2.5 End Users' Perspective 79

3.3 Testing for Quality 79

3.3.1 V-Model 79

3.3.2 Testing on the Developer's Desktop 80

3.3.3 Testing the Design 81

3.4 Main Categories of Testing 81

3.4.1 Validation Testing versus Defect Testing 81

3.4.2 Structural versus Functional Testing 81

3.5 White-Box Testing 82

3.5.1 Making the Code Readable 82

3.5.2 Inspections and Reviews 82

3.5.3 Code Auditing 82

3.6 Black-Box Testing 85

3.6.1 Software Interfaces 85

3.6.2 Test Targets 86

3.6.3 Fuzz Testing as a Profession 86

3.7 Purposes of Black-Box Testing 88

3.7.1 Conformance Testing 89

3.7.2 Functional Security Testing 89

3.7.3 Functional Safety Testing 89

3.7.4 Interoperability Testing 90

3.7.5 Performance Testing 90

3.7.6 Robustness Testing 90

3.8 Testing Metrics 91

3.8.1 Specification Coverage 91

3.8.2 Input Space Coverage 91

3.8.3 Interface Coverage 91

3.8.4 Code Coverage 92

3.9 Black-Box Testing Techniques for Security 92

3.9.1 Load Testing 92

3.9.2 Stress Testing 92

3.9.3 Security Scanners 93

3.9.4 Unit Testing 93

3.9.5 Fault Injection 93

3.9.6 Syntax Testing 94

3.9.7 Negative Testing 96

3.9.8 Regression Testing 98

3.10 Testing in Continuous Integration 99

3.11 Summary 100

Chapter 4 Fuzzing Metrics 101

4.1 Threat Analysis and Risk-Based Testing 103

4.1.1 Threat Trees 104

4.1.2 Threat Databases 105

4.1.3 Ad Hoc Threat Analysis 105

4.2 Transition to Proactive Security 107

4.2.1 Cost of Discovery 108

4.2.2 Cost of Remediation 114

4.2.3 Cost of Security Compromises 115

4.2.4 Cost of Patch Deployment 117

4.3 Defect Metrics and Security 119

4.3.1 Coverage of Previous Vulnerabilities 121

4.3.2 Expected Defect Count Metrics 124

4.3.3 Vulnerability Risk Metrics 124

4.3.4 Interface Coverage Metrics 127

4.3.5 Input Space Coverage Metrics 127

4.3.6 Code Coverage Metrics 130

4.3.7 Process Metrics 132

4.4 Test Automation for Security 133

4.5 Summary 134

Chapter 5 Building and Classifying Fuzzers 137

5.1 Fuzzing Methods 137

5.1.1 Paradigm Split: Random or Deterministic Fuzzing 138

5.1.2 Source of Fuzz Data 139

5.1.3 Fuzzing Vectors 141

5.1.4 Intelligent Fuzzing 142

5.1.5 Intelligent versus Dumb (Nonintelligent) Fuzzers 144

5.1.6 White-Box, Black-Box, and Gray-Box Fuzzing 144

5.2 Detailed View of Fuzzer Types 145

5.2.1 Single-Use Fuzzers 145

5.2.2 Fuzzing Frameworks 146

5.2.3 Using Prebuilt Protocol-Specific Fuzzers 149

5.2.4 Generic Fuzzers 151

5.2.5 Capture-Replay 152

5.2.6 In-Memory Fuzzing 161

5.3 Fuzzer Classification via Interface 162

5.3.1 Local Program 162

5.3.2 Network Interfaces 162

5.3.3 Files 162

5.3.4 APIs 163

5.3.5 Web Fuzzing 164

5.3.6 Client-Side Fuzzers 164

5.3.7 Layer 2 Through 7 Fuzzing 164

5.4 Summary 165

Chapter 6 Target Monitoring 167

6.1 What Can Go Wrong and What Does It Look Like 167

6.1.1 Denial of Service 167

6.1.2 File System-Related Problems 168

6.1.3 Metadata Injection Vulnerabilities 168

6.1.4 Memory-Related Vulnerabilities 169

6.2 Methods of Monitoring 170

6.2.1 Valid Case Instrumentation 170

6.2.2 System Monitoring 171

6.2.3 Remote Monitoring 175

6.2.4 Commercial Fuzzer Monitoring Solutions 176

6.2.5 Application Monitoring 176

6.3 Advanced Methods 180

6.3.1 Library Interception 180

6.3.2 Binary Simulation 182

6.3.3 Source Code Transformation 183

6.3.4 Compiler Instrumentation 183

6.3.5 Visualization 184

6.4 Monitoring Overview 184

6.5 Deduplication 185

6.5.1 Test Case Generator Information 185

6.5.2 Operating System Logs 185

6.5.3 Stack Traces 186

6.5.4 Advanced Tools 187

6.6 Test Program 187

6.6.1 The Program 187

6.6.2 Test Cases 188

6.6.3 Guard Malloc 190

6.6.4 Valgrind 191

6.6.5 Insure++ 192

6.6.6 AddressSanitizer 193

6.7 Case Study: PCRE 196

6.7.1 Guard Malloc 197

6.7.2 Valgrind 198

6.7.3 Insure++ 199

6.7.4 AddressSanitizer 199

6.8 Summary 201

Chapter 7 Advanced Fuzzing 203

7.1 Automatic Protocol Discovery 203

7.2 Automatic Generation of a Model-Based Fuzzer 204

7.2.1 Defensics SDK with Suite Wizard 205

7.2.2 Example Project Created with Suite Wizard 205

7.2.3 Fuzzer Modeling 208

7.2.4 Adding Rules to the Fuzzer 209

7.2.5 Settings to Configure the Fuzzer 209

7.2.6 Fuzzer Input and Output 209

7.2.7 Building and Packing the Fuzzer 209

7.2.8 Conclusions 210

7.3 Symbolic Execution with SAGE 210

7.4 Code Coverage in Fuzzing 212

7.4.1 Code Coverage Guided Fuzzing: American Fuzzy Lop 213

7.4.2 Code Coverage Guided Fuzzing: libFuzzer 216

7.5 Evolutionary Fuzzing 219

7.6 Evolutionary Fuzzing: EFS 221

7.6.1 EFS Overview 221

7.6.2 GPF + PaiMei + Jpgraph = EFS 223

7.6.3 EFS Data Structures 223

7.6.4 EFS Initialization 224

7.6.5 Session Crossover 224

7.6.6 Session Mutation 225

7.6.7 Pool Crossover 226

7.6.8 Pool Mutation 227

7.6.9 Running EFS 228

7.6.10 Test Case: Golden FTP Server 231

7.6.11 Results 231

7.6.12 Conclusions on EFS 233

7.7 In-Memory Fuzzing 235

7.7.1 Implementation of In-Memory Fuzzer 235

77.2 Instrumentation 236

7.7.3 The Pin API 237

7.7.4 Register Example 237

7.7.5 Pros and Cons 240

7.7.6 Improvements by Dynamic Symbolic Execution 240

7.8 Distributed Fuzzing 242

7.8.1 Distributed Fuzzing: Google's ClusterFuzz 243

7.8.2 Distributed Fuzzing: DeMott's ClusterFuzz 244

7.9 Summary 248

Chapter 8 Fuzzer Comparison 249

8.1 Fuzzing Life Cycle 249

8.1.1 Identifying Interfaces 249

8.1.2 Input Generation 249

8.1.3 Sending Inputs to the Target 250

8.1.4 Target Monitoring 250

8.1.5 Exception Analysis 251

8.1.6 Reporting 251

8.2 Evaluating Fuzzers 251

8.2.1 Retrospective Testing 252

8.2.2 Simulated Vulnerability Discovery 253

8.2.3 Code Coverage 253

8.2.4 Caveats 254

8.3 Introducing the Fuzzers 254

8.3.1 GPF 254

8.3.2 TAOF 255

8.3.3 ProxyFuzz 255

8.3.4 Mu-4000 256

8.3.5 Codenomicon Defensics 256

8.3.6 beSTORM 256

8.3.7 Application-Specific Fuzzers 257

8.3.8 What is Missing 257

8.4 The Targets 257

8.5 The Bugs 258

8.5.1 FTP Bug 0 258

8.5.2 FTP Bugs 2, 16 259

8.6 Results 259

8.6.1 FTP 260

8.6.2 SNMP 261

8.6.3 DNS 262

8.7 A Closer Look at the Results 262

8.7.1 FTP 263

8.7.2 SNMP 265

8.7.3 DNS 269

8.8 General Conclusions 270

8.8.1 The More Fuzzers, the Better 270

8.8.2 Generational-Based Approach is Superior 270

8.8.3 Initial Test Cases Matter 271

8.8.4 Protocol Knowledge Helps 272

8.8.5 Real Bugs 273

8.8.6 Does Code Coverage Predict Bug Finding 273

8.8.7 How Long to Run Fuzzers with Random Elements 274

8.8.8 Random Fuzzers Find Easy Bugs First 276

8.9 Summary 276

Chapter 9 Fuzzing Case Studies 279

9.1 Enterprise Fuzzing 280

9.1.1 Firewall Fuzzing 281

9.1.2 VPN Fuzzing 284

9.2 Carrier and Service Provider Fuzzing 285

9.2.1 VoIP Fuzzing 285

9.2.2 WiFi Fuzzing 287

9.3 Application Developer Fuzzing 288

9.3.1 Command-Line Application Fuzzing 289

9.3.2 File Fuzzing 289

9.3.3 Web Application Fuzzing 290

9.3.4 Browser Fuzzing 292

9.4 Network Equipment Manufacturer Fuzzing 293

9.4.1 Netwotk Switch Fuzzing 293

9.4.2 Mobile Phone Fuzzing 294

9.5 Industrial Automation Fuzzing 295

9.6 Black-Box Fuzzing for Security Researchers 300

9.6.1 Select Target 300

9.6.2 Enumerate Interfaces 301

9.6.3 Choose Fuzzer/Fuzzer Type 301

9.6.4 Choose a Monitoring Tool 303

9.6.5 Carry Out the Fuzzing 303

9.6.6 Postfuzzing Analysis 304

9.7 Summary 305

About the Authors 307

Index 309

Customer Reviews

Most Helpful Customer Reviews

See All Customer Reviews