PDF文档:
InternationalJournalofIntelligentSystems-2024-Xie-DocFuzzADirectedFuzzingMethodBasedonaFeedback.pdf
(1.14 MB)
摘要
针对传统模糊测试方法依赖静态变异器、无法动态调整测试用例变异以进行深度测试的局限性,本文提出了基于反馈机制变异器的定向模糊测试方法DocFuzz。该方法首先使用消毒器(sanitizer)对源代码进行目标定位,在可能存在漏洞的代码块中插桩;然后通过污点跟踪模块将目标代码块与测试用例字节关联,形成高价值字节集;接着利用强化学习变异器对高价值字节集进行变异,生成能够覆盖目标代码块的结构化输入;最后,当强化学习变异器收敛时,通过反馈机制重启模糊测试器,继续朝着更可能触发漏洞的方向变异。在LAVA-M等多个测试集上的对比实验表明,DocFuzz在漏洞检测的精确性、速度和有效性方面均优于其他模糊测试技术。
关键词: 定向模糊测试;反馈机制;强化学习;源代码;污点分析
1. 引言
随着软件行业的快速发展,软件规模和逻辑复杂性显著增加,软件漏洞给信息安全带来了前所未有的挑战。黑客可能利用软件漏洞获取高级权限、访问未授权数据,导致个人隐私、商业机密甚至国家敏感信息泄露。传统软件测试主要关注功能性和健壮性,较少考虑潜在漏洞问题,因此漏洞发现任务日益受到关注。
模糊测试是发现软件漏洞的有效方法,但传统模糊测试方法存在以下问题:
-
变异位置随机选择:随机变异可能破坏测试用例的原始文件格式,导致许多无效测试用例在测试早期因语法或结构错误被拒绝。
-
资源浪费严重:大多数方法基于代码覆盖率,需要大量时间覆盖无效代码路径,即使执行到包含漏洞的路径也不一定触发漏洞。
-
变异器固定不变:测试期间使用固定变异策略,无法根据反馈动态调整,导致生成的测试用例难以触发更多漏洞。
本文贡献
针对上述问题,本文提出DocFuzz方法,主要贡献如下:
-
设计定向模糊测试预处理方法:通过插桩和污点跟踪生成有效字节集作为变异位置,显著提高测试用例的语法和结构验证通过率。
-
引入漏洞覆盖率度量:提出基于改进UCB算法的强化学习变异方法,使用有效字节集作为变异位置,在关键路径上找到能触发漏洞的变异方法。
-
设计反馈机制:当强化学习变异器收敛后,通过反馈机制动态调整并重启变异器,使模糊测试继续朝触发漏洞方向进行。
-
实现系统原型:设计并实现漏洞测试系统DocFuzz,实验表明其具有更强的漏洞检测能力,能更快触发漏洞,且训练的模型具有可移植性。
2. 相关工作
2.1 基于变异的模糊测试
AFL (American Fuzzy Lop) 是快速的基于变异的模糊测试工具,使用程序分析技术和启发式算法自动生成高覆盖率测试用例,但变异是随机的。AFLFast 是AFL的改进版本,使用加速技术提高效率,但仍未解决随机变异问题。VUzzer 结合随机变异和符号执行技术,但性能开销较高。
2.2 基于代码覆盖率的模糊测试
Angora 使用符号执行引擎生成高覆盖率测试用例。SelectFuzz 是基于统计学习的最新工具。但这些方法花费大量时间探索无效路径,忽略了可能存在漏洞的关键路径。Steelix 通过"魔术字节"定位特定路径,但本质上仍在提高代码覆盖率。
2.3 基于强化学习的模糊测试
ClassFuzz 基于Metropolis-Hastings算法,但仅根据概率选择变异操作。MOPT 利用PSO算法构建变异操作符的概率分布。AFLChurn 基于蚁群优化算法,但不使用字节集指导变异器演化。
RiverFuzzRL 是基于强化学习的开源工具,专注于二进制文件,但对特定类型软件测试的适应性有限。BertRLfuzz 结合BERT模型和强化学习,但依赖输入种子质量,当初始种子不完整时误报率较高。
现有方法的主要局限是使用固定变异器,无法在测试过程中动态调整策略,难以更有效地触发漏洞。
3. 方法概述
3.1 传统方法的局限
基于变异器的模糊测试方法框架包括:可执行文件/源代码输入、监视器组件收集运行时数据、变异器生成测试用例、记录崩溃信息。但存在以下问题:
- 随机选择变异位置,破坏文件结构
- 消耗大量资源探索无效路径
- 使用固定变异器,无法动态调整
3.2 DocFuzz框架
DocFuzz由三部分组成:
1. 定向模糊测试预处理
- 目标获取:使用消毒器对C/C++源代码插桩,标记可疑漏洞位置,输出带可疑漏洞的可执行程序
- 污点跟踪:执行有效样本输入,使用污点跟踪算法关联插桩代码块与测试用例字节,输出高价值字节集
2. 强化学习模糊测试循环
- 输入:带可疑漏洞的可执行程序、测试用例、高价值字节集
- 将测试过程转换为马尔可夫链,抽象为多臂老虎机问题
- 使用UCB算法训练强化学习变异器
- 仅对高价值字节集进行变异,生成能触发漏洞的测试用例
3. 反馈机制
- 当强化学习变异器收敛后激活
- 使用Docfeedback算法筛选命中漏洞目标最多的测试用例
- 再次执行污点跟踪,扩展字节集
- 重启强化学习变异器,继续优化
通过这三部分的协同工作,DocFuzz能够动态调整变异策略,越来越深入地理解漏洞本质,更全面地触发漏洞。
来自圈子: 云栈运维云原生 |