技术分享 | 大语言模型增强灰盒模糊测试技术探索

news2024/11/29 2:40:39

图片

大语言模型凭借其庞大的参数规模,能够通过无监督学习从海量文本中获取知识,从而不仅能够深刻理解文本语义,还能准确识别文本的格式和结构。凭借对不同数据结构的深度理解,大语言模型已在众多领域得到广泛应用。其中,尤其是在软件测试任务中的灰盒模糊测试中,大语言模型展现出了独特的优势。本文旨在深入探讨大语言模型如何增强灰盒模糊测试技术,并展望其在未来测试领域的应用前景。

灰盒模糊测试概述

模糊测试是一种自动化测试方法,其通过向目标程序输入大量随机或变异的数据,观察程序是否发生崩溃或产生异常行为,进而检测出潜在的漏洞。模糊测试主要有三种类型:黑盒模糊测试、白盒模糊测试和灰盒模糊测试。黑盒模糊测试完全不依赖程序的内部结构,而是通过盲目生成数据进行测试;白盒模糊测试则依赖程序的源代码,结合静态分析进行测试;灰盒模糊测试则介于两者之间,通过运行时动态分析来指导测试用例生成,优化测试效果。

灰盒模糊测试通过覆盖率信息(Coverage Information)来指导输入生成,利用程序执行中的反馈信息(如代码覆盖率)调整输入数据的生成方式,以最大化程序路径的覆盖范围。尽管灰盒模糊测试在测试效率和效果上优于黑盒测试,但其仍面临一些挑战,尤其是在输入生成和变异策略方面难以触及深层次的逻辑漏洞。

大语言模型应用

近年来,随着深度学习的快速发展,大语言模型展现出强大的自然语言理解和生成能力。具体到软件测试领域,大语言模型可以帮助分析程序的输入和输出,生成更加语义化的测试数据,从而提高模糊测试的覆盖率和深度。

大语言模型的引入为灰盒模糊测试带来了全新的思路。传统的模糊测试主要依赖随机或基于启发式的输入生成和变异策略,难以有效触发复杂逻辑漏洞。而大语言模型具备对自然语言、代码语义和数据结构的深刻理解,能够在测试过程中生成更加符合上下文的输入数据,这使得其在提高测试用例的多样性和覆盖率方面具有天然优势。

1. 测试用例生成

大语言模型在模糊测试中的一个核心应用场景是测试用例生成。不同于传统的模糊测试工具依赖随机变异或固定模板生成输入数据,LLMs可以基于目标程序的API、文档和注释,智能地推断出合理的输入格式和结构。例如,针对一个需要JSON格式数据的程序,LLMs能够分析并生成符合JSON格式的输入,同时保留一定的变异性,以测试程序在处理不同输入格式时的鲁棒性。

此外,LLMs在生成输入时可以结合语义信息。例如,在处理API测试时,LLMs不仅能理解API的输入参数类型,还能根据API的功能推断出可能的输入场景,从而生成更具针对性的测试用例。这种语义化的输入生成能力,极大地提升了模糊测试的有效性。

2. 代码覆盖率优化

在灰盒模糊测试中,代码覆盖率是衡量测试质量的一个重要指标。高覆盖率意味着测试工具能够更好地探索程序的不同执行路径,从而提高发现漏洞的机会。大语言模型的引入使得灰盒模糊测试能够更有效地提升代码覆盖率,特别是在面对复杂逻辑或特定格式的输入时,大语言模型能够通过理解代码中的语义信息,生成更具针对性的输入,从而触发更多代码路径。

通过大语言模型生成的测试用例,灰盒模糊测试工具能够突破传统工具难以覆盖的深层逻辑区域。例如,针对具有复杂输入约束的函数,大语言模型可以推断出更符合逻辑的输入,从而触发隐藏的代码分支,显著提高代码覆盖率。

3. 变异策略优化

模糊测试的核心在于输入的变异,传统的模糊测试工具通常依赖随机或基于启发式的变异策略,这些策略虽然在简单场景下表现良好,但在复杂逻辑面前往往难以奏效。大语言模型凭借其对上下文语义的理解,可以生成更加智能化的变异策略。

通过分析程序的输入格式和逻辑,大语言模型能够识别出哪些部分的输入数据可以进行变异,以及如何进行变异以触发新的代码路径。例如,针对一个文件解析程序,大语言模型能够生成不同的文件格式变种,测试程序在处理不同文件结构时的行为。这种智能化的变异策略,不仅能够显著提升模糊测试的效率,还能帮助发现一些深层次的逻辑漏洞。

4. 错误检测与输入语义分析

大语言模型在模糊测试中的另一个重要应用是错误检测与输入语义分析。传统的模糊测试工具通常依赖程序的崩溃或异常输出来判断漏洞的存在,而大语言模型则能够通过对程序运行结果的语义分析,识别出潜在的错误模式。

例如,大语言模型可以通过分析程序的日志输出,推断出程序在处理某些输入时是否存在潜在的逻辑错误或安全漏洞。相比于单纯依赖程序的崩溃或异常,大语言模型的语义分析能力可以帮助测试人员更早发现问题,并提供更为详细的错误报告。这种基于语义的错误检测机制,使得模糊测试不局限于发现程序崩溃,还能捕捉到更深层次的逻辑漏洞。

5. 反馈机制智能化

灰盒模糊测试中的反馈机制是指导输入生成的关键。通过分析程序运行时的反馈信息(如代码覆盖率、执行路径等),模糊测试工具可以调整输入生成策略,以最大化测试覆盖范围。大语言模型结合这些反馈信息,可以动态优化输入生成过程。

例如,当测试工具发现某些输入类型能够触发更多的代码路径时,大语言模型可以根据这一反馈生成更多类似的输入,从而进一步提高覆盖率。通过这种智能化的反馈机制,大语言模型能够帮助模糊测试工具在测试过程中不断优化自身,提高测试效率。

模糊测试智能体

大语言模型在应用于模糊测试时,显著增强了原有技术的能力。基于此思路,云起无垠研发设计了无垠模糊测试智能体,该智能体在软件安全漏洞挖掘和修复的场景中获得了广泛应用,并且取得了十分显著的效果。

1. AI Agent赋能漏洞自动化挖掘

模糊测试是一种公认的强大软件测试技术,能够有效检测安全漏洞。然而,在实际应用中,这一技术面临测试驱动开发难度大、种子变异效率低,以及安全缺陷修复成本高等挑战。

图片

传统的测试驱动生成大多基于专家知识或语法分析,技术门槛高且使用困难。为解决这一难题,云起无垠提出了基于“微调代码模型+代码详细结构+反馈”的驱动生成方案。其核心思路如下:

· 专家模型训练:根据驱动生成训练语料,训练专用于驱动生成的代码大模型。

· 驱动生成:通过静态分析引擎提取被测函数的上下文信息,构造生成测试驱动的提示词,再通过强化学习后的代码大模型输出测试驱动代码。

· 反馈优化:运行生成的驱动,监控运行情况,获取反馈信息,优化生成驱动的提示词,最终实现更高的验证通过率。

经过Google benchmark验证,云起无垠的生成策略生成了24个测试驱动,仅有22%无效驱动,优于Google的方案,表现出更高的可编译驱动比例和更低的无效驱动比例。

图片

2. AI Agent赋能漏洞自动化修复

在漏洞修复方面,传统漏洞检测工具提供的修复建议通常呈现模板化特点,实际修复工作主要依赖专家经验和人工操作。高危漏洞的修复难度大、时间长,已成为企业的核心痛点。在这种背景下,自动化修复工具成为刚性需求。

通过模糊测试引擎与训练后的代码大模型协同,不仅能够精准定位存在漏洞的代码片段,还能够分析漏洞成因。然后,利用缺陷信息生成提示词,作为大模型的输入。大模型根据这些提示词生成修复代码。更重要的是,模糊测试作为一种动态软件测试方案,可以重新运行漏洞的真实触发用例,验证缺陷修复效果。若漏洞修复失败,则进一步分析缺陷信息,优化测试代码的生成提示词。

经过验证,这一“大模型修复+模糊测试动态验证”的方案保障了代码修复率达到85%左右。

图片

写在最后

随着大语言模型技术的不断发展,其在模糊测试中的应用前景广阔。未来,大语言模型可以与其他AI技术,如强化学习、知识图谱等相结合,进一步提升自动化漏洞检测的能力。例如,强化学习可以帮助大语言模型在模糊测试中更好地探索不同的输入策略,而知识图谱可以帮助大语言模型理解更复杂的程序逻辑,从而生成更加有效的测试用例。

此外,随着大语言模型技术的普及,其在模糊测试中的应用将更加广泛和多样化。未来,基于大语言模型的智能模糊测试有望成为自动化安全测试中的重要工具,帮助测试人员发现更多高危漏洞。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cmake Error:could not find any instance of Visual Studio.

出现以下错误 解决方案: 安装visual stuido 2017。 检查是否安装“使用C的桌面开发” 检查是否安装了扩展开发 点开“单个组件”是否安装了以下组件 编辑计算机环境变量,

linux查看文件命令

查看文件命令 显示命令 cat 语法:cat 【选项】 文件 选项 命令含义n显示行号包括空行b显示行号不包括空行s压缩空行为一行A显示隐藏字符 cat -n 文件:显示行号包括空行 cat -b 文件 cat -s 文件 cat -A 文件 more和less是 分页查看 tac和rev都…

使用Python统计目录下所有.txt文件中的字符数

前言 在日常开发或数据处理中,我们经常需要对大量文本文件进行各种统计操作,比如计算总字数。本文将介绍一种简单的方法,通过Python脚本遍历指定目录下的所有.txt文件,并统计这些文件中的字符总数。这个过程可以帮助开发者更好地…

【Kaggle | Pandas】练习2:索引,选择和分配

文章目录 数据总表1、读取列2、读取某列的第几行的值3、第一行数据4、读取列中前10个值5、读取索引标签为1 、 2 、 3 、 5和8的记录6、包含索引标签为0 、1 、10和100的记录的country 、province 、 region_1和region_2列7、 前 100 条记录的country和variety列8、包含Italy葡…

三款计算服务器配置→如何选择科学计算服务器?

科学计算在众多领域都扮演着关键角色,无论是基础科学研究还是实际工程应用,强大的计算能力都是不可或缺的。而选择一台合适的科学计算服务器,对于确保科研和工作的顺利进行至关重要。 首先,明确自身需求是重中之重。要仔细考虑计算…

【ceral】c++轻量的序列化库

背景 在开发硬件产品时,会有一些参数配置文件,为了保密性或者传输,需要对其序列化处理,待到产品读取文件时,进行反序列化解码转化为设定的参数类型。 简介 ceral是一个仅包含头文件的C序列化库,可以将任…

前后端请求、返回数据的多种方式

Springboot项目的业务逻辑 🌙项目基本结构: 通常情况下,我们在搭建后端项目的时候,处理业务逻辑我们需要用到Controller,Service,Mapper(mybatis,mybatis-plus),Entry各层之间的相互调用来完成,还有就是我…

计算机网络-MSTP的基础概念

前面我们大致了解了MSTP的由来,是为了解决STP/RSTP只有一根生成树导致的VLAN流量负载分担与次优路径问题,了解MSTP采用实例映射VLAN的方式实现多实例生成树,MSTP有很多的理论概念需要知道,其实与其它的知识一样理论复杂配置还好的…

php伪协议和move_uploaded_file、rename、copy等文件操作

move_uploaded_file、rename、copy 三个函数的区别: move_uploaded_file 函数是专门用于将通过 HTTP 上传的临时文件移动到指定位置的。如果你想要将一个已经存在的文件移动到另一个位置,而不是上传的文件,那么你应该使用 rename 函数或 co…

Lucas带你手撕机器学习——套索回归

好的,下面我将详细介绍套索回归的背景、理论基础、实现细节以及在实践中的应用,同时还会讨论其优缺点和一些常见问题。 套索回归(Lasso Regression) 1. 背景与动机 在机器学习和统计学中,模型的复杂性通常会影响其在…

完全透彻了解一个asp.net core MVC项目模板1

当我们使用Visual Studio 2022去新建一个基于asp.net core Web项目的时候,一般有三种选择,一种是空项目,一种是基于MVC的项目、再有一种就是基于包含Razor Pages实例的web应用。如下图: 今天,我们打算选择基于MVC模…

【无标题】2024年第五届 MathorCup 数学应用挑战赛——大数据竞赛赛题

2024年第五届 MathorCup 数学应用挑战赛——大数据竞赛赛题已发布~,本届初赛时间为:2024年10月25日18:00至2024年11月1日20:00。本次赛题分为A,B两道,所有参赛队从赛道 A、B 中任选一题作答。在报名系统内选择自己队伍的赛道时&am…

离散化算法简介

【离散化简介】 ★ 离散化是一种数据处理的技巧,本质上可以看成是一种“哈希”,其保证数据在哈希以后仍然保持原来的“全/偏序”关系。用来离散化的可以是大整数、浮点数、字符串等等。★ 离散化的本质,是映射。原理是将间隔很大的元素&#…

毫米波技术基础

什么是毫米波? 顾名思义,毫米波是波长 (λ) 约为 1 毫米(更准确地说是 1 至 10 毫米)的电磁波。使用方程式f c /λ 将该波长转换为频率,其中c是光速 (3 x 10 8 m/s),得出 30-300 GHz 的频率范围。国际电信…

【STM32】内存管理

首先问个问题,你知道如何在LCD上显示SD卡文件浏览?-----需要读取所有文件名到内存,然后才能显示到LCD上。 一般的方法:是定义一个数组来存储文件名 1:需要知道最大文件名的长度 2:需要知道文件的个数。1…

OpenCV图像处理方法:腐蚀操作

腐蚀操作 前提 图像数据为二值的(黑/白) 作用 去掉图片中字上的毛刺 显示图片 读取一个图像文件,并在一个窗口中显示它。用户可以查看这个图像,直到按下任意键,然后程序会关闭显示图像的窗口 # cv2是OpenCV库的P…

使用Python中的jieba库进行简单情感分析

在自然语言处理(NLP)领域,情感分析是一项重要的任务,它可以帮助我们理解文本背后的情感倾向。本文将通过一个简单的例子来介绍如何使用Python的jieba库对中文文本进行基本的情感分析。 1. 环境准备 首先,确保已经安装…

图像分割从基础到进阶:阈值化、K-means和Mean-Shift算法的应用

图像分割是计算机视觉中的一项关键技术,用来将图像划分为若干个 有意义 的区域,以便后续的图像处理和分析工作。根据任务的不同,图像分割可以进一步细分为语义分割、实例分割和全景分割: 语义分割 (Semantic Segmentation) 对图像…

SQL进阶技巧:如何求组内排除当前行的移动平均值?

目录 0 需求描述 2 数据准备 3 问题分析 4 小结 0 需求描述 -- 按照 日期,省份,等级 分组 求分数的平均值;但是需要剔除当前行的数据 2 数据准备 create table avgtest as (select 2024-10-24 as cdate, 广东 as province,深圳 as city, 2 as level, 200 as scoreunio…

后台管理系统的通用权限解决方案(六)SpringBoot整合Logback实现日志记录

1 Logback介绍 1.1 Logback的组件 由上图可知,Logback和Log4j都是slf4j规范的具体实现。在程序中直接调用Logback的API其实都是slf4j规范定义好的API,其底层则是真正的日志实现组件—Logback或者Log4j。 Logback构建在三个主要的类上:Logge…