Fuzzing: To Find Software Vulnerabilities
The main goal of this approach is to find vulnerabilities before an actual attacker does. "Fuzzing" comes from the idea of generating randomized input that would typically not come up during normal operation of a system.
As we give it unexpected (potentially malicious) input, we may be able to coerce the application into providing us error messages that can be used to gain insight about its inner workings, or running branches of code that set the system in a vulnerable state that can later be exploited.
As you generate and give those inputs to a system, you must carefully interpret reponses, as an attacker would, to see what kind of error arises and assess the state of the system. Tools able to determine whether there is an exploit just by looking at a set of output error messages, already exist. So, most of the work focuses on generating system specific inputs that would expose a vulnerability, in a reasonable amount of time.
There are three main fuzzing methods, which differ essentially on the input generation technique they use:
Mutation-based Fuzzing
The input is generated from taking existing data (test cases, logs or user sessions) and simply adding anomalies to it.
Advantages:
Disadvantages:
领英推荐
Generation-based Fuzzing
The input is generated from a specification or some description of what good input looks like.
Advantages:
Disadvantages:
Adaptive-based Fuzzing
The input is tweaked iteratively, based on the system's code, architecture and careful interpretation of reponses induced by previous inputs.
Advantages:
Disadvantages: