【论文速读】|针对模糊驱动生成的提示性模糊测试
本次分享论文:Prompt Fuzzing for Fuzz Driver Generation
基本信息
原文作者:Yunlong Lyu, Yuxuan Xie, Peng Chen, Hao Chen
作者单位:腾讯安全大数据实验室、加州大学戴维斯分校
关键词:软件测试, Fuzzing, 自动化 Fuzz 驱动生成
原文链接:https://arxiv.org/abs/2312.17677
开源代码:暂无
论文简介
本文介绍了 PromptFuzz,一种新型的基于覆盖引导的 Fuzz 测试方法,旨在改进自动化 Fuzz 测试驱动的生成过程。该方法采用大语言模型生成 Fuzz 测试驱动,并通过覆盖引导策略对生成的代码进行迭代优化,从而探索库代码中未被覆盖的部分。在与现有的 OSS-Fuzz 及其他自动化 Fuzz 测试生成技术的比较中,PromptFuzz 在实验中显示出更高的分支覆盖率和更有效的缺陷检测能力。
引言
Fuzzing 是提高软件安全性和稳定性的关键技术之一。已有技术如 OSS-Fuzz 在多个项目中已成功发现并修复了大量漏洞。尽管如此,生成高质量的 Fuzz 驱动仍然是一个挑战,它要求对库的使用有深入的理解。本文介绍的 PromptFuzz 利用自动化技术改进了这一流程,通过大语言模型生成的 Fuzz 驱动,有效地深入探索了 API 的使用情况。
研究背景
随着软件复杂度的增加,确保软件的安全性和稳定性变得尤为重要。Fuzzing,作为一种高效的软件测试方法,能自动揭示程序的漏洞。尽管如此,传统的 Fuzzing 技术在生成 Fuzz 驱动过程中常面临效率低和探测深度不足的问题,这要求测试者对被测库的 API 有深入了解。虽然现有的自动化方案能从现有代码中学习 API 的使用方式,但这些通常仅限于表层的功能测试,难以探索更复杂的使用场景。PromptFuzz 通过结合大语言模型(LLM)和覆盖引导策略,旨在提升 Fuzz 驱动的生成效率和测试深度,从而更全面地识别软件中的潜在安全风险。
相关工作
在 Fuzz 驱动生成领域,已有多种自动化方法尝试生成 Fuzz 驱动。一些技术,如 FuzzGen 和 Utopia,依靠静态源代码分析,而 APICraft 和 WINNIE 则通过动态执行追踪来学习 API 的使用方式。尽管这些方法能自动提取现有代码中的 API 使用信息,它们通常受限于代码库中已有的 API 使用范围,难以涵盖未探索的 API 功能。此外,基于解释器的方法如 Hopper,虽然能够覆盖大多数 API 函数,但在寻找有效的 API 调用序列时依然需要大量尝试。PromptFuzz 应运而生,结合大语言模型的生成能力和覆盖引导策略,旨在显著提升 Fuzz 驱动生成的质量与效率。
实验设计
1. 研究概览
PromptFuzz 是一个基于覆盖引导的 Fuzz 驱动生成工具,通过大型语言模型(LLM)自动化生成 Fuzz 驱动。工具采用运行时错误检测和代码覆盖反馈,迭代优化生成的 Fuzz 驱动,以探索和测试库中未被覆盖的代码区域,从而有效提升 Fuzzing 的深度和广度。
2. 程序生成
利用大型语言模型,PromptFuzz 根据特定的库 API 和使用场景生成 Fuzz 驱动程序。通过向模型提供精确的指令集生成目标代码,确保生成的程序能够有效地调用库中的 API,达到探索软件潜在缺陷的目的。
3. 数据清洗
生成程序后,PromptFuzz 实施数据清洗流程,通过运行时错误检测和语法验证清除可能导致执行失败或误报的程序。此步骤包括使用编译器检测语法错误和运行多种运行时清理工具,确保程序的准确性和稳定性。此外,还对程序进行测试,排除任何导致异常行为的程序,以保证 Fuzz 驱动的质量。
4. 覆盖引导
PromptFuzz 采用覆盖引导策略优化 Fuzz 驱动的生成。通过收集和分析已生成程序的代码覆盖数据,指导模型调整和改善后续的程序生成指令。这一过程不仅增强了程序探索未覆盖代码的能力,还通过持续的反馈循环提升了生成程序的质量和效果,有效地扩展了测试的广度和深入性。
实现方法
PromptFuzz 实现 Fuzz 驱动生成的过程包括四个主要步骤:
首先,使用大语言模型(LLM)根据特定的指令生成初步程序代码。然后,该方法通过运行时错误检测清理生成的程序,移除那些执行错误或可能导致误报的代码。接下来,基于程序的代码覆盖反馈调整生成指令,以优化未来的程序生成,目的是探索更多未被覆盖的代码区域。最后,该方法修改程序中库 API 调用的参数,使其能接受来自 Fuzzers 的随机字节输入,增强 Fuzzing 测试的效果。
通过这些步骤,PromptFuzz 能够高效地生成高质量的 Fuzz 驱动,显著提升软件测试的全面性和深入性。
研究评估
PromptFuzz 在 14 个真实世界的开源库上进行了评估,并与现有的 OSS-Fuzz 及其他领先的自动化 Fuzz 驱动生成解决方案进行比较。评估结果表明,PromptFuzz 生成的 Fuzz 驱动在分支覆盖率和缺陷检测效率上均优于竞争解决方案。
具体而言,与 OSS-Fuzz 和 Hopper 相比,PromptFuzz 在分支覆盖率上分别提高了 1.61 倍和 1.67 倍。此外,PromptFuzz 生成的 Fuzz 驱动成功发现了 33 个以前未被识别的实际软件缺陷,这些缺陷随后被相关社区确认。这些结果明确显示了 PromptFuzz 在提升 Fuzz 驱动生成效率和有效性方面的明显优势。
论文结论
PromptFuzz 利用大语言模型的程序生成能力与覆盖引导的策略,显著提升了 Fuzz 驱动生成的效率和成效,尤其在增强代码覆盖率和识别真实软件缺陷方面表现出色。这种方法为 Fuzz 驱动生成领域引入了新的视角和工具。本文解读能助力读者深入了解如何运用这些前沿技术提升软件测试的自动化与效率。
原作者:论文解读智能体
校对:小椰风
评论