Hawkeye

This site contains complementary details of our directed grey-box fuzer (DGF), Hawkeye.

Abstract

Grey-box fuzzing is a practically effective approach to test realworld programs. However, most existing grey-box fuzzers lack directedness, i.e. the capability of executing towards user specifie target sites in the program. To emphasize existing challenges in directed fuzzing, we propose Hawkeye to feature four desired properties of directed grey-box fuzzers. Owing to a novel static analysis on the program under test and the target sites, Hawkeye precisely collects the information such as the call graph, function and basic block level distances to the targets. During fuzzing, Hawkeye evaluates exercised seeds based on both static information and the execution traces to generate the dynamic metrics, which are then used for seed prioritization, power scheduling and adaptive mutating. These strategies help Hawkeye to achieve better directedness and gravitate towards the target sites. We implemented Hawkeye as a fuzzing framework and evaluated it on various real-world programs under different scenarios. The experimental results showed that Hawkeye can reach the target sites and reproduce the crashes much faster than state-of-the-art grey-box fuzzers (i.e., AFL and AFLGo). Specially, Hawkeye can reduce the time to exposure for certain vulnerabilities from about 3.5 hours to 0.5 hour. By now, Hawkeye has detected more than 41 previously unknown crashes in projects like Oniguruma and MJS with the target sites provided by vulnerability detection tools; all these crashes are confirmed and 15 of them have been assigned CVE IDs.


About "Hawkeye"

According to wikipedia, Hawkeye (Clinton Francis "Clint" Barton) is a fictional superhero appearing in American comic books published by Marvel Comics. Hawkeye excels in the use of ranged weapons, especially the bow and arrow, and carries a quiver containing a number of customized "trick arrows".

We name our DGF after Hawkeye in hope that our proposed approach can direct the fuzzing procedure with various " bows and arrows" to locate the target sites for the program under test rapidly and expose the vulnerabilities fast.