Learning and Refining Input Grammars for Effective Fuzzing
Fuzzing is one of the key techniques for evaluating robustness of programs against malicious inputs. To fuzz the program logic effectively, one needs the input specification of the program under fuzzing. However, such input specifications are rarely available, and even when present, can be obsolete, incomplete or incorrect leading to fuzzing blind spots. In this tutorial, I will show how to mine the input specification from a given program from the ground up, first generating sample inputs, then using such inputs to mine the program input grammar, and finally using the mined grammar to fuzz the program and find any bugs.
What should you do next once you find a bug? An input pattern rather than a particular input is likely to result in the bug, and to have any confidence in a bug fix, we should test the fix using the input pattern rather than a single input. In this talk, I will show how to abstract such input patterns corresponding to program behaviors such as bugs into a focused grammar, how to combine multiple input patterns together, and use such patterns to fuzz. The specialized grammars we generate can be used by any grammar fuzzer for precise control of produced inputs and hence the expected behavior.
Mon 9 MayDisplayed time zone: Eastern Time (US & Canada) change
04:45 - 06:00 | Session 2SBST at SBST room Chair(s): Giovani Guizzo University College London, Sebastiano Panichella Zurich University of Applied Sciences | ||
04:45 45mTutorial | Learning and Refining Input Grammars for Effective Fuzzing SBST Rahul Gopinath CISPA, Germany | ||
05:30 15mTalk | Learning to Rank for Test Case Prioritization SBST | ||
05:45 10mTalk | Wasserstein Generative Adversarial Networks for Online Test Generation for Cyber Physical Systems SBST Jarkko Peltomäki Åbo Akademi University, Frankie Spencer Åbo Akademi University, Ivan Porres Åbo Akademi University |