概述:首页描述
传统Fuzzing技术
Fuzzing流程
1. 测试用例生成
测试用例的生成可以被分为基于变异策略的方式与基于生成策略的方式。基于生成策略的测试用例生成方式直接根据已经程序要的输入格式生成样本,不需要原始样本来供变异。基于变异策略的方式使用已有的测试用例进行变异,生成新的测试用例。下面主要介绍基于变异策略的样本生成方式,其关键环节包括:
- 种子生成
- 突变算法
- 测试用例生成
- 测试用例过滤
种子是符合程序输入的原始样本,种子经过使用不同的突变算法和突变不同位置生成测试用例,对于生成的测试用例,并不是所有的测试用例都要进行验证,而是在生成的测试用例中使用测试用例过滤程序(根据覆盖率等)选择能够触发新的路径或漏洞的用例。
2. 程序执行
将生成的测试用例输入到目标程序中进行执行
3. 运行状态监控
运行状态监控阶段监控程序监控目标程序的运行状态,并将程序执行的结果反馈给测试用例生成阶段用于新的样本生成,当程序发生崩溃或产生错误时,监控程序都会对其进行记录,供以后分析复现。常用的见识所使用的的技术包括:污点检测、二进制代码检测。
4.分析阶段
分析阶段对运行转台监控阶段产生的程序崩溃与错误进行分析,确定是否是一个bug。
局限性
- 种子如何变异
- 怎么提高代码覆盖率
- 如何避开验证
辅助技术
静态代码分析
动态代码分析
动态符号执行
动态符号执行通过符号值作为作为程序输入生成一些列的路径限制,然后判断路径是否是可达的,
动态污点分析
<<<<<<< HEAD
1. 种子文件迭代
《Skyfire: Data-Driven Seed Generation for Fuzzing》, 2017, S&P
使用数据驱动的种子生成方法,使用PCFG(Probabilistic context-sensitive grammar,其中包含了语义和语法信息)在大量的数据中提取语义信息和语法规则,用于生成种子,这种方法生成的种子文件可以确保可以通过语义解析和语法检查的前提下,执行到目标程序更深层次的路径,从而挖掘更深层次的漏洞。
《Faster Fuzzing: Reinitialization with Deep Neural Models》, 2017
=======
机器学习技术用于Fuzzing的不同阶段
到2019为止,AI用于Fuzzing中个各个阶段中的论文数量如下图所示:
![image-20210318225859927]1. 种子文件迭代
传统的种子文件的迭代式通过使用各种各样的变异操作进行的,原始种子的质量对种子的生成产生直接的很大,并且
71dd04faf9dda41b2963a40036d2bfe9dad46b39
参考文献
- xxx
- xxx