11 research outputs found
Ifuzzer: An evolutionary interpreter fuzzer using genetic programming
We present an automated evolutionary fuzzing technique to find bugs in JavaScript interpreters. Fuzzing is an automated black box testing technique used for finding security vulnerabilities in the software by providing random data as input. However, in the case of an interpreter, fuzzing is challenging because the inputs are piece of codes that should be syntactically/semantically valid to pass the interpreter’s elementary checks. On the other hand, the fuzzed input should also be uncommon enough to trigger exceptional behavior in the interpreter, such as crashes, memory leaks and failing assertions. In our approach, we use evolutionary computing techniques, specifically genetic programming, to guide the fuzzer in generating uncommon input code fragments that may trigger exceptional behavior in the interpreter. We implement a prototype named IFuzzer to evaluate our technique on real-world examples. IFuzzer uses the language grammar to generate valid inputs. We applied IFuzzer first on an older version of the JavaScript interpreter of Mozilla (to allow for a fair comparison to existing work) and found 40 bugs, of which 12 were exploitable. On subsequently targeting the latest builds of the interpreter, IFuzzer found 17 bugs, of which four were security bugs
An accelerating PSO algorithm based test data generator for data-flow dependencies using dominance concepts
Ariadne: evolving test data using grammatical evolution
Software testing is a key component in software quality assurance; it typically involves generating test data that exercises all instructions and tested conditions in a program and, due to its complexity,
can consume as much as 50% of overall software development budget.
Some evolutionary computing techniques have been successfully applied
to automate the process of test data generation but no existing tech-
niques exploit variable interdependencies in the process of test data gen-
eration, even though several studies from the software testing litera-
ture suggest that the variables examined in the branching conditions of
real life programs are often interdependent on each other, for example,
if (x==y), etc.
We propose the Ariadne system which uses Grammatical Evolution (GE)
and a simple Attribute Grammar to exploit the variable interdependen-
cies in the process of test data generation. Our results show that Ariadne
dramatically improves both e ectiveness and e ciency when compared
with existing techniques based upon well-established criteria, attaining
coverage (the standard software testing success metric for these sorts of
problems) of 100% on all benchmarks with far fewer program evaluations
(often between a third and a tenth of other systems)