01 Fuzzing的起源

Fuzzing最早用于对UNIX应用的健壮性测试。早期的Fuzzing技术主要以黑盒(Black-box)模糊测试技术为主。它具备简单、直接、粗暴的特点,但效率十分低下。由此,产生了基于变异(Mutation-based)和基于生成(Generation-based)的两种模糊测试技术。

早期Fuzzing技术发展特点为:

• 以Blackbox Fuzzing为主,强调工具的实用性

• 由于Fuzzing技术此时还比较简单,学术发展比较缓慢

‍‍• 测试效率比较低‍‍‍‍‍‍‍‍‍

‍‍02 Greybox Fuzzing的崛起

传统的Blackbox Fuzzing无法捕捉程序运行时信息,测试效率低下。基于此,覆盖率引导的灰盒模糊测试技术(Coverage-based Greybox Fuzzing)开始得到重视与发展。CGF通过插桩等技术捕捉程序控制流信息,通过控制流信息变化来引导Fuzzer选取优异种子进行变异。代表工具为AFL。

其中,CGF效率的主要影响因素有初始种子、调度算法、变异策略、测试速度和测试精度,为此,提升CGF效率的主要途径为:

优化初始种子:Skyfire、Learn&Fuzz

聚焦优质种子:AFLFast、AFLGo、EcoFuzz

优化变异操作:FairFuzz、MOPT、VUzzer、Angora、Greyone、Driller、PANGOLIN

提高测试速率:INSTRIM、UnTracer、Zeror

提高测试精度:CollAFL、PTFuzz

从2014年开始,Fuzzing技术进入了高速发展时代:

1.Greybox Fuzzing特别是CGF成为学术领域发展主流

2.研究人员对Fuzzing技术的理解愈发深刻,Fuzzing发展更加学术化,大量在现有工作基础上的Fuzzer不断诞生

3.传统CGF以实际漏洞挖掘为导向的实用性侧重有所降低,部分方向陷入了覆盖率指标“内卷化”发展

4.在工业界,以Google为代表的大型公司更注重Fuzzing实用性,纷纷开发大规模集群测试平台(ClusterFuzz)

在其中,有几个重要的里程碑节点,使得Fuzzing开始进入了细粒度发展时代:

03 Fuzzing的未来发展趋势

目前,Fuzzing发展的主要流派有:

1.聚焦于传统的CGF,致力于提高CGF覆盖率

2.聚焦于针对特定漏洞类型的信息流辅助导向Fuzzing技术,致力于提高某种漏洞的检测效率

3.聚焦于Fuzzing技术的应用,将Fuzzing运用到各个场景中,如智能软件测试、IoT设备Fuzz、内核Fuzz乃至硬件设备Fuzz

4.聚焦于Fuzzing相关工作的研究,如Benchmark制作、Crash成因分析、Sanitizer工具优化、Fuzzing对抗技术

当前,Fuzzing发展面临的困境主要有:

1.缺少新技术的引入,传统技术支撑下的CGF的效率增长已经遭遇瓶颈

2.在面对复杂系统、设备及协议等目标时,Fuzzing总体的测试效率还比较低下,很多Fuzzer无法满足漏洞挖掘的实际需求

从2019年开始,不少工作通过静态分析和污点分析手段获取程序信息流,用于辅助变异,引导测试向指定方向进化(UAFL、MemLock)。同时,越来越多的工作将重心放在了应用Fuzzing挖掘特定目标漏洞,Fuzzing所针对的目标愈加多样化。

由此,Fuzzing技术也开始迎来了三个转变:

04 关于研究Fuzzing的一点体会

最后,笔者分享了研究Fuzzing的心得体会,主要是包括:

入门二进制Fuzzing:

1.熟悉并掌握一些代表性Fuzzer(AFL)

2.熟悉一些近几年的Fuzzer(Angora、QSYM)

3.熟悉汇编语言

进一步研究二进制Fuzzing:

1.熟悉编译原理

2.熟悉一定的程序分析方法及工具:Pin、LLVM

3.熟悉漏洞触发原理

4.有较强文献阅读能力

在学术上取得一定的成果:

1.培养写作思维

2.沉入到细节,有具体发现和把握问题的能力

3.掌握基本学术技能(Latex、画图方法、统计学方法、科学实验方法)

【报告人】MoonLight

【单位】国防科技大学软件安全智能并行分析实验室

声明:本文来自ipasslab,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。