FuzzSlice: Pruning False Positives in Static Analysis Warnings Through Function-Level Fuzzing

Aniruddhan Murali,Noble Saji Mathews,Mahmoud Alfadel,Meiyappan Nagappan,Meng Xu
DOI: https://doi.org/10.1145/3597503.3623321
2024-02-03
Abstract:Manual confirmation of static analysis reports is a daunting task. This is due to both the large number of warnings and the high density of false positives among them. Fuzzing techniques have been proposed to verify static analysis warnings. However, a major limitation is that fuzzing the whole project to reach all static analysis warnings is not feasible. This can take several days and exponential machine time to increase code coverage linearly. Therefore, we propose FuzzSlice, a novel framework that automatically prunes possible false positives among static analysis warnings. Unlike prior work that mostly focuses on confirming true positives among static analysis warnings, which requires end-to-end fuzzing, FuzzSlice focuses on ruling out potential false positives, which are the majority in static analysis reports. The key insight that we base our work on is that a warning that does not yield a crash when fuzzed at the function level in a given time budget is a possible false positive. To achieve this, FuzzSlice first aims to generate compilable code slices at the function level and then fuzzes these code slices instead of the entire binary. FuzzSlice is also unlikely to misclassify a true bug as a false positive because the crashing input can be reproduced by a fuzzer at the function level as well. We evaluate FuzzSlice on the Juliet synthetic dataset and real-world complex C projects. Our evaluation shows that the ground truth in the Juliet dataset had 864 false positives which were all detected by FuzzSlice. For the open-source repositories, we were able to get the developers from two of these open-source repositories to independently label these warnings. FuzzSlice automatically identifies 33 out of 53 false positives confirmed by developers in these two repositories. Thus FuzzSlice reduces false positives by 62.26% in the open-source repositories and by 100% in the Juliet dataset.
Software Engineering,Cryptography and Security
What problem does this paper attempt to address?
### Problems the Paper Attempts to Solve This paper aims to address the issue of excessive false positives in static analysis reports. Specifically, it proposes a framework called FuzzSlice to automatically identify and eliminate potential false positives in static analysis warnings. #### Main Contributions: 1. **Conceptual Innovation**: Unlike other techniques that primarily focus on confirming real vulnerabilities in static analysis warnings, FuzzSlice focuses on eliminating potential false positives. The core idea of FuzzSlice is that if a warning does not lead to a crash during fuzz testing at the function level within a given time budget, the warning is likely a false positive. 2. **Technical Innovation (Fuzz Testing Close to Warnings)**: Unlike typical methods that reduce fuzz testing costs through independent fuzz testing modules and libraries, FuzzSlice focuses on generating compiled code snippets that include the locations of warnings detected by static analysis tools. FuzzSlice generates and fuzz tests a separate binary for each warning, thereby covering most warnings at a lower computational cost. #### Method Overview: 1. **Minimal Slice Creation**: FuzzSlice first constructs an execution environment that fully contains the warning, i.e., creates a minimal slice at the function level. 2. **Fuzz Input Generation**: FuzzSlice generates valid and diverse inputs to comprehensively test the minimal slice. 3. **Warning Classification**: Based on the results of the fuzz testing, FuzzSlice determines whether a warning is likely a false positive. Through these steps, FuzzSlice can effectively identify false positives in static analysis reports, thereby helping developers prioritize real vulnerabilities more efficiently.