What is Fuzz Testing? Definition, History, Uses and Importance.

Dawodu Michael
6 min readAug 12, 2022

--

What is fuzzing?
What is fuzzing?

Introduction

Sometimes, software security seems to be created with a loophole for attackers to exploit. Various ways to manage such vulnerabilities have been developed, and one such is the fuzz test. This article guides you through how the fuzz test helps keep your software security tight, but first, we answer the question, “what is fuzz testing?”

What is fuzz testing?

Fuzz testing, or fuzzing, is a security protocol used to test the quality of a system’s security software for loopholes and vulnerabilities. Fuzz testing involves an automated process of feeding the computer program with an insane amount of incorrect, unusual, aimless unproductive codes and commands, known as FUZZ, to detect the computer’s reaction. Then, the computer is monitored for reactions like crashes, breaking codes, memory data leaks, system lag, or anything that shows signs of a security defect due to the fuzz codes it has been fed. Such a security defect is known as “vulnerability.”

These simple code errors are sometimes overlooked when the API security is written and troubleshot.

If a weak spot is found, a tool called a fuzzer can be utilized to find the possible causes.

Fuzzers work best in spotting API security weak points that can be exploited by Denial-of-Service (DOS), buffer overflow, SQL injection, and cross-site scripting. These are attacks used by hackers with the intent to steal information or crash the system. Unfortunately, fuzz testing doesn’t work as well when dealing with security hazards that don’t crash the system like; worms, Trojan, spyware, keyloggers, and some viruses.

Brief History

You don’t always get cyber security software with interesting background history, but Fuzz testing is one of those with a fun backstory.

In 1988, on a stormy evening, a computer science professor at the University of Wisconsin-Madison, Barton Miller, was working remotely from his apartment on a Unix OS computer. He gave commands and information to the computer, only to see the program repeatedly crash. He figured that the noise from the storm was deforming the data sent to the computer as they journeyed through the phone line.

The deformed data was not what the program expected from the user, resulting in crashes. It surprised Miller that programs that he thought reliable were also coming down due to the deformed data instead of efficiently managing the error and demanding input again.

Miller, alongside some of his students at the university, was determined to see the extent to which this issue affected computers of different operating systems. Their research had to do with feeding computer programs with massive amounts of random inputs (fuzz) until they discovered a vulnerability in the program’s security. This research led to program failures across many operating systems, even the major ones; Unix, Windows, and Macintosh. They named the process “fuzz” to depict the randomness of the process itself.

Of course, like many other unorthodox practices, it had its critics, people who did not welcome a process without a formal and disciplined approach to testing. But, today, the process is widely accepted, and there are commercial tools available on the internet to involve fuzzing in the regular software development process, and when applied right, fuzzing is a simple yet powerful way to test API security.

What is fuzzing used to test for?

The main criticism of the fuzz process was that it did not detect all vulnerabilities and faults in API security after the fact that it was random and undisciplined. But in defense of the fuzz, it offers a very high return rate for the low cost and effort it demands.

Importance of fuzzing
Importance of fuzzing

When evaluating fuzz testing, it was recorded that fuzz actively spots weaknesses that expose the API to data leaks and system crashes. However, it is not as effective in detecting hazards that do not threaten these damages.

Types of fuzz testing

  1. Mutation Based Fuzz testing: This is a rather simple and direct fuzz test where regular inputs into the system are twisted and slightly distorted to see how well the computer can handle it. In this process, every byte of existing program input creates a new random input for the fuzz test.
  2. Pedigree-Based Fuzzers: This process characterizes new information because of the program of the model. It begins producing the fuzz input from scratch based on the specification and capabilities of the model.
  3. Convention-Based Fuzzers: The best fuzz test is to have critical information on the conventional design. The comprehension relies upon the detail and specifications. It includes composing a variety of specifications into the device, then utilizing a model-based test pedigree strategy, going through the detail, adding distortion in the data input, grouping, and so on. This is otherwise called syntax, language, strength, and so forth. Fuzzer can produce experiments from a current one, or they can utilize legitimate or invalid sources of info. The fuzz technique sends randomly distorted data to the computer program to find as many bugs and vulnerabilities in the API security and services. The fuzz input can be generated randomly or by modifying and distorting bits and bytes of regular input.

Types of errors detected by Fuzz Testing

  1. Memory Leaks: This process is commonly applied in APIs where the data memory is under threat of breach and is a critical vulnerability.
  2. Faulty/Void Input: Fuzz programs are used to create random, faulty data inputs sent to the system to test how well it handles unexpected error input. This is important for programs as they do not determine their input.
  3. Accuracy bugs: Fuzzing can also spot some “accuracy” bugs, like an infected data set, bad index lists, etc.

How to do Fuzz Testing?

how to do fuzz testing?
How to do fuzz testing? Source: QA Test Lab
  1. The process begins by writing the fuzzed program to be run on the test computer.
  2. Then the randomly generated program is delivered to the target system.
  3. The final step is the study process, where the system is examined to determine if it passed or failed. This must be carried out critically, as finding the weak point and developing a fix for it is the sole purpose of the entire fuzz process.

Fuzz testing tools

  1. Peach Fuzzer: Peach Fuzzer gives more effective security inclusion than a scanner. Other testing tools can look just for known strings and attack trends, while Peach Fuzzer allows users to track down known and obscure strings, even irregular vulnerability patterns.
  2. Spike Proxy is an expert-grade device searching for API-level weak points in web applications. SPIKE Proxy manages the rudiments, for example, SQL Injection and cross-site-prearranging. However, it’s an open Python framework. SPIKE Proxy is accessible for Linux and Windows.
  3. Webscarab: Webscarab is written in Java along these lines, compact to numerous stages. For examining API, Webscarab software communicates utilizing HTTP and HTTPS codes. Webscarab allows operators to examine the fuzz before it is sent to the target program, and it also allows the operator to see the computer’s detailed reaction in real-time. Doing this makes it easier to create a rundown of any vulnerabilities found by the Webscarab tool.
  4. OWASP WSFuzzer: WSFuzzer is a GPL software program written in Python. GPL’d tool focuses mainly on Web Services. In the recent updates of OWASP WSFuzzer, HTTP-based SOAP services are the subject focus.

Advantages and disadvantages of Fuzz Testing

advantages of fuzzing
advantages of fuzzing

Advantages

  1. Faults found in Fuzz testing could have severe effects if missed and lead to software crashes.
  2. Faulty spots that are missed by other testers are most likely to be spotted by Fuzz testers.
  3. Fuzz testing makes software security checks easier and more effective, offering good results for the little cost and effort required.

Disadvantages

  1. Fuzz does not give a total overview of every security hazard.
  2. Fuzz can spot only threats and faults relating to software vulnerability.
  3. Fuzz is not as competent when attempting to spot errors that do not lead to system crashes or data leaks.
  4. The process demands a lot of time to perform optimally.

Also learn: Guide to Endpoint Detection and Response: What is EDR? How Does it Work?

Conclusion

The fuzz test is not presented as the perfect software security tester. Still, it offers good value for the effort, and it can save you from a lot of damage due to poor vulnerability management in the future.

--

--

Dawodu Michael

Hello! I’m a technical writer who enjoys writing about infosec, cybersecurity and software.