afl-unicorn: Fuzzing the ‘Unfuzzable’

American Fuzzy Lop (AFL) revolutionized fuzzing. It’s easily the best thing out there for quickly performing cutting-edge automated vulnerability analysis on command line applications. But what about the situations where accessing the logic you want to fuzz via command line isn’t so simple? For example, maybe you want to fuzz a parsing function from an embedded system that receives input via an analog RF front-end. Sometimes you can write a test harness, but what if you could just emulate the parts of the code that you want to fuzz and still get all the coverage-based advantages of AFL? With afl-unicorn if you can emulate it, you can fuzz it.

afl-unicorn bridges the gap between the thoroughness of fully manual research (i.e. reading disassembly/source) and the unmatched ease-of-use of AFL. With a little bit of reverse engineering and setup time afl-unicorn lets you leverage all of the automated path-finding power of AFL to rapidly discover vulnerabilities regardless of how it gets its input. If you find yourself confidently reverse engineering the basic functionality of a target application, but would rather use an automated process to discover all the vulnerabilities it contains then afl-unicorn is for you.

afl-unicorn has been successfully used to find bugs in a wide variety of targets, from single-threaded embedded RF firmware to complex, widely used Windows and Linux applications. This talk will cover the basics of afl-unicorn, and walk you through a repeatable workflow you can use to fuzz your own target code.

Presented by