【论文速读】|针对模糊驱动生成的提示性模糊测试

本次分享论文: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驱动生成领域引入了新的视角和工具。本文解读能助力读者深入了解如何运用这些前沿技术提升软件测试的自动化与效率。

原作者:论文解读智能体

校对:小椰风

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/679718.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提高谷歌抓取成功率:代理IP的7个使用误区

在当今数字化时代,数据采集和网络爬取已成为许多企业和个人必不可少的业务活动。对于爬取搜索引擎数据,特别是Google,使用代理IP是常见的手段。然而,使用代理抓取Google并不是一件轻松的事情,有许多常见的误区可能会导…

OpenGL 入门(三)—— OpenGL 与 OpenCV 共同打造大眼滤镜

从本篇开始,会在上一篇搭建的滤镜框架的基础上,介绍具体的滤镜效果该如何制作。本篇会先介绍大眼滤镜,先来看一下效果,原图如下: 使用手机后置摄像头对眼部放大后的效果: 制作大眼滤镜所需的主要知识点&…

有哪些渠道找到海外代理IP服务?

在今天的全球化时代,许多企业和个人都需要跨越国界,与世界各地的资源、信息和市场进行连接。海外代理IP服务成跨境在线业务增效的重要的工具,可以帮助拓展业务宽度,以实现更多样化的业务需求。但是,如何找到合适、安全…

Java | Leetcode Java题解之第70题爬楼梯

题目: 题解: public class Solution {public int climbStairs(int n) {double sqrt5 Math.sqrt(5);double fibn Math.pow((1 sqrt5) / 2, n 1) - Math.pow((1 - sqrt5) / 2, n 1);return (int) Math.round(fibn / sqrt5);} }

多核DSP并行计算跨平台通信解决方案

并行计算的核心是计算节点以及节点间的通信与协调机制。OpenMP虽然给开发者提供了极易上手的增量式开发方式,但是OpenMP在与复杂架构的MCSDK结合后,工具与代码产生了大量不可调试的黑盒子,更是决定了它不能用于关键任务领域,如军工…

优化NGINX性能:使用NGINX_THREADS提高并发处理能力

目录标题 1. 什么是NGINX_THREADS?2. 配置NGINX_THREADS3. 使用NGINX_THREADS处理耗时操作4. 性能调优5. 结论 NGINX作为一个高性能的HTTP和反向代理服务器,在处理高并发请求时表现出色。但随着互联网应用对性能要求的不断提高,深入了解和优化…

C语言(递归)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

IDEA访问不到静态资源

背景 我在resources下创建static文件夹,再创建front文件夹放前端资源,里面有index.html,游览器输入localhost:8011/front没反应。(resources/static/front/index.html) 解决办法 重启idea,清楚idea缓存&am…

鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main

阅读之前的说明 先说明,本篇很长,也很枯燥,若不是绝对的技术偏执狂是看不下去的.将通过一段简单代码去跟踪编译成ELF格式后的内容.看看ELF究竟长了怎样的一副花花肠子,用readelf命令去窥视ELF的全貌,最后用objdump命令…

MySQL日志机制【undo log、redo log、binlog 】

前言 SQL执行流程图文分析:从连接到执行的全貌_一条 sql 执行的全流程?-CSDN博客文章浏览阅读1.1k次,点赞20次,收藏12次。本文探讨 MySQL 执行一条 SQL 查询语句的详细流程,从连接器开始,逐步介绍了查询缓存、解析 S…

十分钟掌握Java集合之List接口

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

qt day 3

优化登录框,点击登录按钮,如果账号和密码匹配,则弹出 信息对话框 给出提示信息“登录成功”,并给出一个 ok 按钮,当用户点击 ok 后,关闭当前界面,跳转到另一个界面;如果账号和密码不…