StateFuzz: System Call-Based State-Aware Linux Driver Fuzzing

USENIX Security 2022,

Bodong Zhao , Zheming Li , Shisong Qin , Zheyu Ma , Ming Yuan , Wenyu Zhu , Zhihong Tian , Chao Zhang .

Abstract

Coverage-guided fuzzing has achieved great success in find- ing software vulnerabilities. Existing coverage-guided fuzzers generally favor test cases that hit new code, and discard ones that exercise the same code. However, such a strategy is not optimum. A new test case exercising the same code could be better than a previous test case, as it may trigger new program states useful for code exploration and bug discovery. In this paper, we assessed the limitation of coverage-guided fuzzing solutions and proposed a state-aware fuzzing solution StateFuzz to address this issue. First, we model program states with values of state-variables and utilize static analy- sis to recognize such variables. Then, we instrument target programs to track such variables’ values and infer program state transition at runtime. Lastly, we utilize state informa- tion to prioritize test cases that can trigger new states, and apply a three-dimension feedback mechanism to fine-tune the evolutionary direction of coverage-guided fuzzers. We have implemented a prototype of StateFuzz, and evaluated it on Linux upstream drivers and Android drivers. Evaluation results show that StateFuzz is effective at discovering both new code and vulnerabilities. It finds 18 unknown vulnerabil- ities and 2 known but unpatched vulnerabilities, and reaches 19% higher code coverage and 32% higher state coverage than the state-of-the-art fuzzer Syzkaller.