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。