{"id":3945,"date":"2015-07-21T03:30:48","date_gmt":"2015-07-20T19:30:48","guid":{"rendered":"https:\/\/www.darknet.org.uk\/?p=3945"},"modified":"2015-07-21T03:31:01","modified_gmt":"2015-07-20T19:31:01","slug":"dharma-generation-based-context-free-grammar-fuzzing-tool","status":"publish","type":"post","link":"https:\/\/www.darknet.org.uk\/2015\/07\/dharma-generation-based-context-free-grammar-fuzzing-tool\/","title":{"rendered":"Dharma – Generation-based Context-free Grammar Fuzzing Tool"},"content":{"rendered":"
Dharma is a tool used to create test cases for fuzzing of structured text inputs, such as markup and script. It takes a custom high-level grammar format as input, and produces random well-formed test cases as output – it can be used as a grammar fuzzing tool.<\/p>\n
API programming is complex and subtle programming mistakes in new code can introduce annoying crashes and even serious security vulnerabilities that can be triggered by malformed input which can lead to headaches for the user and security exposure.<\/p>\n
<\/p>\n
WebAPIs start life as a specification in the form of an Interface Description Language, or IDL. Since this is essentially a grammar, a grammar-based fuzzer becomes a valuable tool in finding security issues in new WebAPIs because it ensures that expected semantics are followed most of the time, while still exploring enough undefined behaviour to produce interesting results.<\/p>\n
Apart from the original features listed above the guys from Mozilla dragged Dharma out of 2012 and gave it a good working over. They improved the way it parses grammars and optimized the speed of parsing and the generating of fuzzed output, added new grammar features to the grammar specification, added support for serving testcases over a WebSocket server, and made it Python 3 ready.<\/p>\n
Generate a single test-case.<\/p>\n
% .\/dharma.py -grammars grammars\/webcrypto.dg<\/pre>\nGenerate a single test case with multiple grammars.<\/p>\n
% .\/dharma.py -grammars grammars\/canvas2d.dg grammars\/mediarecorder.dg<\/pre>\nGenerating test-cases as files.<\/p>\n
% .\/dharma.py -grammars grammars\/webcrypto.dg -storage . -count 5<\/pre>\nYou can download Dharma here:<\/p>\n