What is fuzzing and fuzz testing? (original) (raw)

Fuzzing definition

Fuzzing—also known as fuzz testing—is an automated software testing technique that involves inputting random or invalid data into a computer program and observing its behavior and output.

The goal of fuzzing is to reveal bugs and security vulnerabilities in source code you might not find through traditional testing methods. IT teams often use fuzzing to test software that handles user input, such as web apps, network protocols, file formats, and operating systems.

Integrating fuzzing into your team’s software development lifecycle (SDLC) and quality assurance process can help improve the security and performance of your products well ahead of their ship date. Doing so has the potential to save you overall costs and other resources.

How fuzz testing works

Fuzz testing involves using tools and frameworks to automate the process of generating, mutating, and sending input data to systems under test and reporting the results. Fuzzing mimics real-world data input scenarios to identify flaws and weaknesses in the systems being tested.

Setting up and running a fuzzing campaign consists of the following steps:

  1. Define test objectives and scope. Identify which software system or component to test. It should handle user input.
  2. Select a fuzzing tool. Hundreds of commercial and free fuzzing tools and engines exist. Different tools work with different programming languages, so pick a tool that works with the app or hardware you want to test.
  3. Start fuzzing. The fuzzing tool (also known as a fuzzer) will generate or mutate input data—either randomly or based on predetermined heuristics—and feed that data to the system being tested.
  4. Monitor the target. The fuzzer will detect crashes, memory leaks, buffer overflows, exceptions, and other deviations from the expected output.
  5. Repair anomalies. The fuzzer will also create a report of the anomalies found and the input data that caused those anomalies. Your development teams can analyze these issues and work on viable fixes.

Fuzzing techniques and strategies

Different fuzzing techniques vary in how they generate or alter input data. Here are some of the most common techniques.

Types of fuzzing targets

Fuzzing can be applied to a number of software systems and components that handle user input:

Benefits of fuzz testing

As mentioned, fuzzing can help improve the quality and security of your software. Specifically fuzzing can:

Challenges and limitations of fuzz testing

Fuzzing isn’t always a fast, smooth, or accurate process, especially when testing complex and stateful apps or when using open-source fuzzing tools. Some of the biggest downsides of fuzz testing include:

Best practices for effective fuzzing

Here are some best practices you can use to help better your fuzz testing to be as efficient and effective as possible:

Conclusion

Building fuzzing into your software development lifecycle can help your organization minimize flaws and vulnerabilities in products and features before you ship them. The earlier in the development lifecycle you detect software bugs and weaknesses, the easier and cheaper they are to address.

Explore more fuzzing resources