PDF应用程序模糊测试用例生成框架研究
1. 研究背景与意义
1.1 PDF文件的应用现状
1.1.1 PDF文件的应用领域
- PDF文件格式广泛应用于文档传输、共享和存档需求,在电子文档的可移植性、保护性、可搜索性、打印准确性和多媒体支持方面具有重要作用。
- 在个人用户、企业机构以及教育领域,PDF格式都得到了广泛应用,确保了文档的可靠传输和展示。
1.1.2 PDF文件的安全风险
- 由于PDF文件的复杂性和广泛应用性,PDF应用程序中存在的缺陷和漏洞可能会导致严重后果,如恶意攻击、信息错误呈现等。
- Adobe Reader,最流行的PDF查看器之一,在2012年期间是Windows系统计算机上第三大最常见的计算机入侵源。
- 攻击者可以通过PDF应用程序中存在的漏洞,使用精心构造的数据,执行恶意代码。
1.2 研究内容与挑战
1.2.1 研究内容
- 针对PDF相关应用程序的测试成为当前研究的热点问题,最有效的方法是基于语法的模糊测试。
- 本文提出了一个基于深度学习的高效PDF应用程序模糊测试用例生成框架DeepGenFuzz。
1.2.2 面临的挑战
- 基于语法的模糊测试需要大量手工工作对复杂的语法规则进行总结和编写,严重阻碍了测试用例高效地自动化生成。
- 深度学习技术为解决这一障碍提供了可行路径,但目前的方法生成的测试用例普遍质量较低,查找bug能力较差。
- 需要解决三个主要挑战:数据集的筛选、测试用例覆盖率提升和测试用例大小增加间的平衡、测试用例的高效变异。
1.3 主要贡献
- 提出了DeepGenFuzz框架,通过深度学习技术实现了PDF应用程序模糊测试用例的高效生成。
- 在MuPDF等PDF应用程序上的评估表明,DeepGenFuzz生成的测试用例平均代码覆盖率明显高于目前最先进的工具,最高可达8.12%~61.03%。
- 发现的bug数量多,目前已报告了在7个最流行的PDF应用程序中发现的31个未曾被报告的bug,其中25个已经得到确认或修复。
1.4 文章结构
- 本文首先介绍了研究背景与意义,然后介绍了相关工作与技术,接着提出了基于深度学习的高效PDF应用程序模糊测试用例生成框架,并进行了实验以及结果评估,最后进行了结论与展望。
2. 相关工作与技术介绍
2.1 相关工作
2.1.1 种子文件生成
- 种子文件是模糊测试中的基础,其质量直接影响到测试用例的生成效果。
- 目前主要的方法有基于随机的方法和基于学习的方法。
2.1.2 测试用例过滤
- 测试用例过滤的目的是从大量测试用例中筛选出有价值的测试用例,提高测试效率。
- 目前主要的方法有基于统计的方法和基于机器学习的方法。
2.1.3 突变位置和突变算子的选择
- 突变位置和突变算子的选择直接影响到测试用例的变异效果。
- 目前主要的方法有基于随机的方法和基于启发式的方法。
2.1.4 基于语法的测试用例生成
- 基于语法的测试用例生成方法通过构建语法规则,自动生成测试用例。
- 目前主要的方法有基于随机的方法和基于学习的方法。
2.2 技术介绍
2.2.1 模糊测试
- 模糊测试是一种自动化的软件测试方法,通过向目标程序输入大量的随机数据,以发现程序中的缺陷和漏洞。
- 模糊测试的核心是种子文件生成、测试用例过滤、突变位置和突变算子的选择以及基于语法的测试用例生成。
2.2.2 卷积神经网络模型
- 卷积神经网络是一种深度学习模型,通过学习输入数据的特征,实现对数据的分类、回归和生成。
- 卷积神经网络在图像识别、语音识别等领域取得了显著的成果。
2.2.3 序列到序列网络
- 序列到序列网络是一种深度学习模型,通过学习输入序列和输出序列之间的映射关系,实现对序列数据的生成和翻译。
- 序列到序列网络在机器翻译、语音合成等领域取得了显著的成果。
2.2.4 Transformer模型
- Transformer模型是一种基于自注意力机制的深度学习模型,通过学习输入序列之间的依赖关系,实现对序列数据的生成和翻译。
- Transformer模型在自然语言处理、图像生成等领域取得了显著的成果。
2.3 本章小结
- 本文介绍了相关工作与技术,包括种子文件生成、测试用例过滤、突变位置和突变算子的选择以及基于语法的测试用例生成。
- 还介绍了模糊测试、卷积神经网络模型、序列到序列网络以及Transformer模型等技术。
3. 基于深度学习的高效PDF应用程序模糊测试用例生成框架
3.1 框架概述
- DeepGenFuzz框架主要包括数据集的筛选、PDF对象的生成与附加、PDF的有效变异三个部分。
- 数据集的筛选通过CNN分类器从原始数据集中筛选出可能触发错误代码的PDF文件。
- PDF对象的生成与附加使用Seq2Seq预测模型生成PDF对象的文本数据和二进制数据,构建完整的PDF对象。
- PDF的有效变异利用Transformer模型对生成的PDF文件进行有效的变异,进一步提高代码覆盖率。
3.2 数据集的筛选
- 使用CNN分类器对原始数据集进行分类,筛选出可能触发错误代码的PDF文件。
- CNN分类器通过学习输入数据的特征,实现对数据的分类。
- 分类结果用于后续的PDF对象生成与附加过程。
3.3 PDF对象的生成与附加
- 使用Seq2Seq预测模型生成PDF对象的文本数据和二进制数据,构建完整的PDF对象。
- Seq2Seq预测模型通过学习输入序列和输出序列之间的映射关系,实现对序列数据的生成。
- 生成的PDF对象用于后续的PDF有效变异过程。
3.4 PDF的有效变异
- 利用Transformer模型对生成的PDF文件进行有效的变异,进一步提高代码覆盖率。
- Transformer模型通过学习输入序列之间的依赖关系,实现对序列数据的生成和翻译。
- 变异后的PDF文件用于后续的测试和评估。
3.5 本章小结
- DeepGenFuzz框架通过数据集筛选、PDF对象生成与附加、PDF有效变异三个部分,实现了PDF应用程序模糊测试用例的高效生成。
4. 实验以及结果评估
4.1 研究问题
- 本文提出了DeepGenFuzz框架,用于生成PDF应用程序的模糊测试用例。
- 实验的主要目的是评估DeepGenFuzz框架的有效性和性能。
4.2 实验设置
4.2.1 实验环境设置
- 实验在配备有Intel Xeon CPU和NVIDIA Tesla GPU的服务器上进行。
- 使用Python作为编程语言,TensorFlow作为深度学习框架。
4.2.2 实验参数设置
- 实验参数包括CNN分类器的超参数、Seq2Seq预测模型的超参数以及Transformer模型的超参数。
- 通过网格搜索和交叉验证的方法进行超参数调优。
4.2.3 对比方法
- 对比方法包括Learn&Fuzz、IUST-DeepFuzz等目前最先进的工具。
- 对比方法用于评估DeepGenFuzz框架的有效性和性能。
4.3 评估指标
- 评估指标包括代码覆盖率、bug发现数量等。
- 代码覆盖率用于评估测试用例的覆盖效果,bug发现数量用于评估测试用例的bug查找能力。
4.4 数据集
- 实验数据集包括PDF文件和错误日志。
- PDF文件用于训练CNN分类器,错误日志用于评估测试用例的bug查找能力。
4.5 实验结果与分析
4.5.1 DeepGenFuzz在覆盖率提升和bug查找方面的有效性
- DeepGenFuzz生成的测试用例平均代码覆盖率明显高于对比方法,最高可达8.12%~61.03%。
- DeepGenFuzz发现的bug数量多,目前已报告了在7个最流行的PDF应用程序中发现的31个未曾被报告的bug,其中25个已经得到确认或修复。
4.5.2 DeepGenFuzz中各个策略的有效性
- 数据集筛选策略通过CNN分类器从原始数据集中筛选出可能触发错误代码的PDF文件,提高了测试用例的生成效率。
- PDF对象生成与附加策略通过Seq2Seq预测模型生成PDF对象的文本数据和二进制数据,构建完整的PDF对象,提高了测试用例的生成质量。
- PDF有效变异策略利用Transformer模型对生成的PDF文件进行有效的变异,进一步提高代码覆盖率,增强了测试用例的变异能力。
4.5.3 DeepGenFuzz各项策略的效率
- 数据集筛选策略的时间复杂度为O(n),其中n为原始数据集的大小。
- PDF对象生成与附加策略的时间复杂度为O(m),其中m为PDF对象的数量。
- PDF有效变异策略的时间复杂度为O(p),其中p为变异操作的数量。




