fuzzing 综述

文章

Liang H, Pei X, Jia X, et al. Fuzzing: State of the art[J]. IEEE Transactions on Reliability, 2018, 67(3): 1199-1218.

综述

Fuzzing技术可以概括为通过自动化生成并执行大量的随机测试用例,来发现目标程序的未知漏洞。

Fuzzing的一般过程如图:

fuzzing 综述

 

 

Target program可以为binary或source code;

monitor利用符号执行、taint analysis等技术获取目标程序的useful runtime information;

Test case generator用于生成测试用例,可分为基于变异的和基于语法的两种;

Bug detector检测、收集潜在的bugs。当目标程序崩溃或报告一些错误时,收集并分析相关的信息(例如stack traces),以判断是否存在一个bug。

Bug filter从Bug detector检测到的bug中提取可利用的bugs。

 

黑盒、白盒、灰盒fuzzing

根据需要目标程序运行时信息的多少,fuzzer可分为黑盒、白盒、灰盒三种。如白盒fuzzer需要完整的程序内部逻辑信息,使用动态符号执行和覆盖率最大化的启发式搜索算法可以explore all execution paths;灰盒利用code instrumentation与污点分析技术,尽量使得测试用例可以覆盖更多的路径。

漏洞可分为导致目标程序崩溃的shallow bugs与存在于程序逻辑深处且难以触发的hidden bugs(如复杂的分支语句)。通常黑盒fuzzer适用于发现shallow bugs而白/灰盒适用于hidden bugs。在工业界黑灰盒更常用而白盒开销高不常用。

 

Fuzzing主要的问题:

1)如何生成或选择seed test case,如何生成其他test case:如从补丁中提取

2) 如何使这些test case可以通过目标程序的输入验证:如通过hash验证

3)如何处理引起crash的test case:比如区分、提取不同执行路径的test case

4)如何更好的利用运行时信息:如使用动态符号执行时,如何解决路径爆炸问题

5)如何提高fuzzing的可扩展性

 

现有的fuzzer根据应用领域分类:

General Purpose Fuzzers、Fuzzers for Compilers and Interpreters、Fuzzers for Application Software、Fuzzers for Network Protocols、Fuzzers for OS Kernels、Fuzzers for Embedded Devices, Drivers and Components

汇总表如下:

fuzzing 综述

 

 fuzzing 综述

 

 

Fuzzing的研究方向:

Input Validation and Coverage、Smart Fuzzing(program analysis techniques、scalable and efficient)、Filtering Fuzzing Outputs、Seed/Input Generation and Selection、Combining Different Testing Methods、Combining Other Techniques With Fuzzing

上一篇:Couchdb 任意命令执行漏洞(CVE-2017-12636)


下一篇:XamarinAndroid组件教程RecylerView适配器使用动画