Fuzzing is one of the most popular and widely used techniques to find vulnerabilities in any application. Fuzzers are fast enough, but they still spend a good portion of time to restart a crashed application and then fuzz it from the beginning. Fuzzing an application from a point deeper in the execution is also important. To do this, a user needs to take a snapshot of the program while fuzzing it on top of an emulator, virtual machine, or by utilizing a special kernel module to enable checkpointing. Even with this ability, it can be difficult to attach a fuzzer after restoring a checkpoint. As a result, most fuzzers leverage a form of fork-server design. We propose a novel testing architecture that allows users to attach a fuzzer after the program has started running. We do this by natively checkpointing the target application at a point of interest, and attaching the fuzzer after restoring the checkpoint. A fork-server may even be engaged at the point of restoration. This not only improves the throughput of the fuzzing campaign by minimizing startup time, but opens up a new way to fuzz applications. With this architecture, a user can take a series of checkpoints at points of interest, and run parallel tests to reduce the overall state-complexity of an individual test. Checkpoints allow us to begin fuzzing from a deeper point in the execution path, omitting prior execution from the required coverage path. This and other checkpointing techniques are described in the paper to help improve fuzzing.
翻译:模糊是用来查找任何应用程序中的脆弱之处的最受欢迎和最广泛使用的技术之一。 模糊器足够快, 但是仍然花很多时间重新开始崩溃的应用程序, 然后从一开始就模糊它。 从执行过程的更深处模糊一个应用程序也很重要 。 要做到这一点, 用户需要在模拟器、 虚拟机器或使用特殊的内核模块来模糊程序, 在任何应用程序中找到脆弱之处。 即使有了这种能力, 也很难在恢复检查站后附加一个模糊器。 结果, 大多数模糊器仍然花很多时间重新开始崩溃的应用程序, 然后从一开始就模糊它。 我们提议了一个新的测试结构, 允许用户在程序启动后再插入一个模糊器。 我们这样做的方法是, 在恢复检查站后按本地设置目标应用程序, 并在恢复程序后将模糊器绑起来。 即使是在恢复点, 也有可能使用一个叉子服务器。 这不仅仅是通过最小化启动时间来改进模糊器的过滤器, 而是在开始新的路径中打开一个叉子服务器的设计。 在开始一个新的路径中打开一个用户测试点, 开始一个平行的测试, 并且可以使用一个平行的系统 。 将一个测试一个运行的系统 。 。 将一个运行的序列 将一个连接的测试 将一个连接 。