本次分享论文: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驱动生成的质量与效率。
实验设计
研究概览
PromptFuzz是一个基于覆盖引导的Fuzz驱动生成工具,通过大型语言模型(LLM)自动化生成Fuzz驱动。工具采用运行时错误检测和代码覆盖反馈,迭代优化生成的Fuzz驱动,以探索和测试库中未被覆盖的代码区域,从而有效提升Fuzzing的深度和广度。
程序生成
利用大型语言模型,PromptFuzz根据特定的库API和使用场景生成Fuzz驱动程序。通过向模型提供精确的指令集生成目标代码,确保生成的程序能够有效地调用库中的API,达到探索软件潜在缺陷的目的。
数据清洗
生成程序后,PromptFuzz实施数据清洗流程,通过运行时错误检测和语法验证清除可能导致执行失败或误报的程序。此步骤包括使用编译器检测语法错误和运行多种运行时清理工具,确保程序的准确性和稳定性。此外,还对程序进行测试,排除任何导致异常行为的程序,以保证Fuzz驱动的质量。
覆盖引导
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驱动生成领域引入了新的视角和工具。本文解读能助力读者深入了解如何运用这些前沿技术提升软件测试的自动化与效率。
原作者:论文解读智能体
校对:小椰风