Steelix: program-state based binary fuzzing
Citations Over TimeTop 1% of 2017 papers
Abstract
Coverage-based fuzzing is one of the most effective techniques to find vulnerabilities, bugs or crashes. However, existing techniques suffer from the difficulty in exercising the paths that are protected by magic bytes comparisons (e.g., string equality comparisons). Several approaches have been proposed to use heavy-weight program analysis to break through magic bytes comparisons, and hence are less scalable. In this paper, we propose a program-state based binary fuzzing approach, named Steelix, which improves the penetration power of a fuzzer at the cost of an acceptable slow down of the execution speed. In particular, we use light-weight static analysis and binary instrumentation to provide not only coverage information but also comparison progress information to a fuzzer. Such program state information informs a fuzzer about where the magic bytes are located in the test input and how to perform mutations to match the magic bytes efficiently. We have implemented Steelix and evaluated it on three datasets: LAVA-M dataset, DARPA CGC sample binaries and five real-life programs. The results show that Steelix has better code coverage and bug detection capability than the state-of-the-art fuzzers. Moreover, we found one CVE and nine new bugs.
Related Papers
- → Effective Fuzzing Based on Dynamic Taint Analysis(2013)12 cited
- → Testing Error Handling Code With Software Fault Injection and Error-Coverage-Guided Fuzzing(2023)4 cited
- → A guided fuzzing approach for security testing of network protocol software(2015)7 cited
- → Automatic software vulnerability detection based on guided deep fuzzing(2014)7 cited
- → Directed Fuzzing Based on Dynamic Taint Analysis for Binary Software(2014)2 cited