Fuzzing in QA: finding previously undiscovered security vulnerabilities
Fuzzing as a fundamental software security test
The goal of fuzzing is to perform an exhaustive analysis and uncover new and unknown vulnerabilities in applications, files and hardware. True fuzzing does not work from a pre-designed set of test cases, look for certain attack signatures or attempt to locate known vulnerabilities in products.
Fuzzing is used during the development process (in the QA phase) to automatically discover the security holes that remain in the product, allowing the developer to fix those vulnerabilities before the product is shipped. For use in enterprise, a fuzzer must be an automated tool that does an exhaustive search of input combinations to test for weaknesses. To cover all input combinations is not practical for complicated products. So fuzzing must be based on prioritization algorithms to focus on inputs that are likely to ‘trigger’ a security hole.
Although there is a nearly infinite number of possible inputs to any given application, certain inputs that are likely to lead to the exposure of a security hole can be isolated. This is what security researchers do. However, this is a costly procedure requiring expertise and time. Developers don’t have that time, even if they have the funds. And yet, if not done by the developer some smart hacker with plenty of time on their hands will do the fuzzing for the fame and glory that comes with finding such security holes.
Making fuzzing automatic and removing the need for security expertise, is vital for standardizing the security checking phase of product development.
There is an obvious need for enterprise grade fuzzing tools. Developers must apply this technology before release – because it is certain that many will use them on products after release.
Fuzzing before release is vital because application developers are not experts in writing secure code that is resilient to malicious intent. There are hundreds of scripts whose purpose is to break the security barriers posed by existing applications. This creates a situation where vendors must now regularly check whether its product can be attacked.
Automated fuzzing replaces manual testing
An application with about half a million lines of code will take 500 days to assess by a security specialist scanning over eight hundred lines of code per day. This could cost hundreds of thousands of dollars. And this process needs to be repeated whenever a new version of the product comes out, which can be several times a year. There is a clear need for fuzzing tools that will automate this.
Due to time constraints many vendors release their products prior to conducting a proper security audit, exposing their customers to potential vulnerabilities. This is becoming unacceptable to customers who now demand that vendors conduct security testing of their products prior to deployment or purchase.
When a security vulnerability is discovered after product delivery, a major problem arises – the vendor has the responsibility to fix the problem in the field without causing damage to the customer’s systems. But vulnerabilities are discovered daily. As hackers get better at finding vulnerabilities, and the number of vulnerabilities steadily increase, the rise in awareness on the part of customers will inevitably cause them to demand higher standards of security from vendors’ products.
To summarize, there is a need for an automated fuzzing tool that provides detailed information on different types of vulnerabilities, on multiple protocols. The tool will conduct product audits, discover known and previously unknown vulnerabilities by doing a thorough test of all possible combinations, and allow for prioritization. All this, without consuming excessive time or resources.
This is where beSTORM enters the picture.
Fuzzing, a functional description
Fuzzing, also referred to as black box testing or dynamic application security testing (DAST), has been slow to be picked up by Developers because the tools are often are not supported and are single purpose in their design.
To interface with an application, a file or hardware, the fuzzer will need to speak the language it uses. This language is the protocol. In many cases a fuzzer may have been created to test a single protocol. Beyond Security’s beSTORM uses modules to do this. These modules are programmed per known protocol standards such as HTTP, FTP, SMTP, IMAP, POP3, DNS, DHCP or VOIP. More than 200 modules are programmed to accommodate nearly every protocol.
Use of these modules provides two key benefits: First, it simplifies the adjustments needed to test each new product. For example, most network devices use HTTP. Regardless of whether the network device uses a known web server for HTTP communication or if the programmers developed an HTTP-compatible application from scratch, the same module can be used for fuzzing.
Second, fuzzing modules facilitate quantification of the level of security of the product. By systematically checking the application, we can indicate how secure a certain product really is, by measuring the number of checks we have done compared with other products in the same category. This enables an actual security certification of products, based on an objective and automated scaling – as opposed to today’s manual and error-prone evaluation.
A typical fuzzing application
Based on the protocol used by the target application, the correct module is selected. The user will then set beSTORM to monitor the target and provide the necessary details for the attack: IP address and port (if the attack is on a remote machine). The attack can be paused and resumed. A status bar indicates the current test that is being done, and the percentage of the attack that has been completed.
Most vulnerabilities that a full scale manual test might ever reveal are often discovered within the first 24 hours of fuzzing. The full test is expected to take several days to several weeks – depending on the size and complexity of the application and processing power available. Distributed capabilities enable to shorten this time considerably by sharing the task between multiple machines. In any event, the fuzzing is completely automated and requires no manual intervention.