【论文速读】|理解基于大语言模型的模糊测试驱动程序生成

2024-04-27 11:28

本文主要是介绍【论文速读】|理解基于大语言模型的模糊测试驱动程序生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片

本次分享论文:Understanding Large Language Model Based Fuzz Driver Generation

基本信息

原文作者:Cen Zhang, Mingqiang Bai, Yaowen Zheng, Yeting Li, Xiaofei Xie, Yuekang Li, Wei Ma, Limin Sun, Yang Liu

作者单位:南洋理工大学, 中国科学院信息工程研究所, 新加坡管理大学, 新南威尔士大学

关键词:模糊驱动生成,模糊测试,大语言模型

原文链接:https://arxiv.org/abs/2307.12469

开源代码:未提供

论文要点

论文简介本研究探讨了使用大语言模型(LLMs)自动生成Fuzz驱动程序的可行性与挑战。通过设计五种查询策略,从基础到增强,系统性地分析了生成Fuzz驱动程序的过程,并通过与工业界使用的驱动程序进行比较,揭示了其实用性和潜在的改进方向。

研究目的:解决Fuzz测试中驱动程序编写的自动化问题,提高生成有效Fuzz驱动程序的能力,减少人工编写的需求。

研究贡献:

(1)首次深入研究基于LLM的Fuzz驱动程序生成的有效性;

(2)设计并实现了五种生成策略,通过大规模评估验证了其有效性;

(3)构建了首个可以大规模评估生成Fuzz驱动程序的框架;

(4)与工业界使用的驱动程序进行了比较,总结了未来改进的方向。

引言

本文介绍了Fuzz测试的必要性和重要性,特别是在发现零日漏洞方面。Fuzz驱动程序是Fuzz测试不可或缺的组成部分,因为它们允许直接执行目标程序。一个有效的驱动程序必须包含正确且健壮的API使用方式,错误或不合理的使用可能会导致大量虚假的正面或负面结果,从而浪费测试资源。尽管Fuzz驱动程序通常需要由人类专家编写,这一过程既费时又费力,但通过使用LLM,研究人员可以尝试自动生成这些驱动程序,简化和加速这一过程。

研究背景

本研究背景部分详细介绍了自动化Fuzz驱动程序生成的挑战及其在安全测试中的重要性。Fuzz测试作为一种有效的软件测试方法,能够发现程序中的漏洞,尤其是那些难以通过传统测试手段发现的缺陷。然而,Fuzz测试的效率和效果很大程度上依赖于高质量的驱动程序。传统的驱动程序生成方法多依赖于手工编写或特定的程序分析工具,这不仅耗时耗力,而且难以适应日益增长的测试需求。本研究通过引入大语言模型(LLM),探索了一种新的自动化生成方法,旨在提高Fuzz驱动程序生成的自动化程度和适应性,从而更有效地支持复杂软件系统的安全测试需求。

研究方法

本研究旨在通过构建一个综合评估框架来评估不同问题生成策略对结果的影响。首先,研究探讨了基础查询策略(Research Question 1, RQ1),采用了基本的API信息和与大语言模型(LLM)的初步互动。其次,研究扩展至更复杂的查询策略(Research Question 2, RQ2),这些策略不仅涉及了更广泛的API应用,还引入了交互式查询功能。进一步地,研究比较了由LLM生成的模糊测试驱动程序与开源软件Fuzzing工具(OSS-Fuzz)生成的驱动程序,深入分析了它们在生成测试用例时的效能和局限性(Research Question 3, RQ3)。这些方法相互补充,共同构成了一个全面的实验设计,旨在评估生成策略的有效性。

研究策略

基本策略:基本策略主要针对简单的API信息进行一次性查询,即仅使用API的基础数据如函数声明和头文件名称。这种策略的目的是快速生成基础但可行的Fuzz驱动程序,用于初步的Fuzz测试。基本策略适用于API使用较为直接和简单的情况,能够在没有复杂依赖或深入API细节知识的情况下快速产生结果。

图片

增强策略:为了处理更复杂的API使用场景并提高生成的Fuzz驱动程序的质量,研究团队设计了多种增强策略。这些策略包括:

图片

1. 利用API文档:通过整合API的官方文档信息,增强策略能够提供更丰富的上下文,帮助模型更准确地理解API的功能和使用方法。这种策略特别适用于API文档详尽且结构化良好的情况。

2. 引入示例代码:将实际的API使用示例代码纳入查询中,可以显著提升模型生成代码的实用性和准确性。示例代码提供了具体的使用场景,使得模型能够在生成过程中模仿这些实际应用,从而生成更加有效和实用的驱动程序。

3. 交互式查询:通过与模型进行交互式对话,逐步调整和优化查询内容,增强策略能够在生成过程中不断纠正和改进,适应复杂的编程需求。这包括基于先前生成结果的反馈进行迭代查询,以细化和优化驱动程序。

驱动程序

在这篇论文中,驱动程序部分详细探讨了如何利用大语言模型(LLM)自动生成Fuzz测试的驱动程序。研究首先基于基本API信息进行单次查询,这是最简单的策略。为了提升生成效果,研究者引入了增强策略,比如结合API的文档和示例代码进行查询,以及与模型的交互式对话,使得生成的驱动程序更加准确和实用。通过这种方式,生成的驱动程序能够在实际的Fuzz测试中表现出较高的有效性和竞争力,从而显著提高了测试的自动化和效率。这项研究展示了利用语言模型处理复杂编程任务的潜力,为自动化软件测试领域带来了新的技术突破。

图片

论文结论

在本论文中,作者首次深入研究了利用大语言模型(LLM)生成Fuzz驱动程序的实用性和挑战。通过设计和实施了基础到增强的多种查询策略,验证了这些策略在自动生成驱动程序中的有效性。研究结果表明,利用LLM进行驱动程序生成显示出了良好的实用性和竞争力。64%的问题可以完全自动解决,如果加入手动的语义验证,这一比例可以提高到91%。然而,研究也揭示了该方法在处理需要复杂API使用细节的驱动程序时的局限性。未来的工作将聚焦于如何通过自动化语义正确性验证、扩展API使用及优化查询策略等方面来进一步提升系统的性能和实用性。

原作者:论文解读智能体

校对:小椰风

图片

 

这篇关于【论文速读】|理解基于大语言模型的模糊测试驱动程序生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
http://www.chinasem.cn/article/940381

相关文章

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre