FUZZINGMaster One of Today's Most Powerful Techniques for Revealing Security Flaws!Fuzzing has evolved into one of today's most effective approaches to test software security. To "fuzz," you attach a program's inputs to a source of random data, and then systematically identify the failures that arise. Hackers haverelied on fuzzing for years: Now, it's your turn. In this book, renowned fuzzing experts show you how to use fuzzing to reveal weaknesses in your software before someone else does. Fuzzing is the first and only book to cover fuzzing from start to finish, bringing disciplined best practices to a technique that has traditionally been implemented informally. The authors begin by reviewing how fuzzing works and outlining its crucial advantages over other security testing methods. Next, they introduce state-of-the-art fuzzing techniques for finding vulnerabilities in network protocols, file formats, and web applications; demonstrate the use of automated fuzzing tools; and present several insightful case histories showing fuzzing at work. Coverage includes: * Why fuzzing simplifies test design and catches flaws other methods miss* The fuzzing process: from identifying inputs to assessing "exploitability"* Understanding the requirements for effective fuzzing* Comparing mutation-based and generation-based fuzzers* Using and automating environment variable and argument fuzzing* Mastering in-memory fuzzing techniques* Constructing custom fuzzing frameworks and tools* Implementing intelligent fault detection Attackers are already using fuzzing. You should, too. Whether you're a developer, security engineer, tester, or QA specialist, this book teaches you how to build secure software. Foreword xixPreface xxiAcknowledgments xxvAbout the Author xxviiPARTI BACKGROUND 1Chapter 1 Vulnerability Discovery Methodologies 3Chapter 2 What Is Fuzzing? 21Chapter 3 Fuzzing Methods and Fuzzer Types 33Chapter 4 Data Representation and Analysis 45Chapter 5 Requirements for Effective Fuzzing 61PART II TARGETS AND AUTOMATION 71Chapter 6 Automation and Data Generation 73Chapter 7 Environment Variable and Argument Fuzzing 89Chapter 8 Environment Variable and Argument Fuzzing: Automation 103Chapter 9 Web Application and Server Fuzzing 113Chapter 10 Web Application and Server Fuzzing: Automation 137Chapter 11 File Format Fuzzing 169Chapter 12 File Format Fuzzing: Automation on UNIX 181Chapter 13 File Format Fuzzing: Automation on Windows 197Chapter 14 Network Protocol Fuzzing 223Chapter 15 Network Protocol Fuzzing: Automation on UNIX 235Chapter 16 Network Protocol Fuzzing: Automation on Windows 249Chapter 17 Web Browser Fuzzing 267Chapter 18 Web Browser Fuzzing: Automation 283Chapter 19 In-Memory Fuzzing 301Chapter 20 In-Memory Fuzzing: Automation 315PART III ADVANCED FUZZING TECHNOLOGIES 349Chapter 21 Fuzzing Frameworks 351Chapter 22 Automated Protocol Dissection 419Chapter 23 Fuzzer Tracking 437Chapter 24 Intelligent Fault Detection 471PART IV LOOKING FORWARD 495Chapter 25 Lessons Learned 497Chapter 26 Looking Forward 507Index 519