论文阅读笔记——Large Language Models Are Zero-Shot Fuzzers

TitanFuzz 论文
深度学习库(TensorFlow 和 Pytorch)中的 bug 对下游任务系统是重要的,保障安全性和有效性。在深度学习(DL)库的模糊测试领域,直接生成满足输入语言(例如 Python )语法/语义和张量计算的DL API 输入/形状约束的深度学习程序具有挑战性。此外,深度学习 API 可能包含复杂的输入条件约束,难以在没有人工干预的情况下生成符合条件的输入用例。TitanFuzz 是首个直接利用大语言模型(LLM)生成测试程序来模糊测试DL库的方法。

API 级模糊测试:仅针对孤立 API 进行测试,无法暴露由 API 调用链引发的缺陷;模糊级模糊测试:缺乏多样化 API 序列,如 Muffin 需要手动注释考虑的深度学习 API 的输入/输出限制,并使用额外的 reshaping 操作保证有效连接,以及无法生成任意代码。
在这里插入图片描述

  1. log 函数应该为负数产生 NaN,CPU 调用 matrix_exp 时应该包含 NaN 值,但 GPU 调用时不输出任何 NaN 值。
  2. Bug:在 CPU 上计算时分正负号,导致分别出现正无穷和负无穷。正常:在 GPU 上计算时不分正负号,1/0 为正无穷。
传统LLM-based
基于规则/随机变异基于分布概率生成规则->统计建模
结构化输入基于语义理解语法->语义
人工设计策略Prompt
显式定义张量/类型约束隐式学习 API 约束标注->推理
单 API任意组合代码覆盖率

LLM 为差分测试提供语义合理、适配不同后端的测试输入。
在这里插入图片描述

  1. 提供 step-by-step 的 prompt engineering,调用 codex 生成直接借用目标 API 的代码片段。
  2. 使用进化模糊算法,生成新的代码。
  3. 差分测试,在不同后端上执行,识别潜在错误。
    在这里插入图片描述
    Prompt 中包含了目标库和目标 API 定义(爬虫从官方文档爬取)并设计了分布指令,按照 Task 的顺序执行。原始种子程序从 Codex 中采样得到。
    在这里插入图片描述

通过 Codex 生成初始种子,用 InCoder 去预测 mask 的代码片段以保持语义的连贯性,其中代码片段通过 Multi-Armed Bandit(MAB) 算法动态学习操作符优先级策略,并用 < s p a n > <span> <span> 覆盖,采样策略选择了 Top-N;
算子:

  • 参数(augment):选择目标 API 中的参数 Mask,可以是已写的,也可以是未写的;
  • 前缀(prefix):在目标 API 调用前插入代码段,并 Mask 掉一部分前缀;
  • 后缀(suffix):在目标 API 调用后插入代码段,并 Mask 掉一部分后缀;
  • 方法(method):Mask API 调用,使用新的 API;

MAB:
f ( x ; α , β ) = Γ ( α + β ) Γ ( α ) Γ ( β ) x α − 1 ( 1 − x ) β − 1 f(x;\alpha,\beta)=\frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\beta)}x^{\alpha-1}(1-x)^{\beta-1} f(x;α,β)=Γ(α)Γ(β)Γ(α+β)xα1(1x)β1

  • 初始化每个变异操作符 𝑚 的成功次数 𝑚.S 和失败次数 𝑚.F 为1,即每个操作 𝑚 的先验分布被假设为 Beta(1, 1),即均匀分布。
  • 在观察到 𝑚.S-1 次成功和 𝑚.F-1 次失败后,更新操作 𝑚 的后验分布为 Beta(𝑚.S, 𝑚.F)。
  • 为了选择一个操作(arm),从每个操作的后验分布中抽取一个样本 𝜃𝑚,然后选择具有最大样本值的操作(表示它具有最高的成功率概率)。
  • 在使用 LLMs 生成代码后,根据生成的程序的执行状态,更新所选择的变异操作的后验分布。与随机选择变异操作相比,这种方法可以帮助识别有助于生成更有效和独特代码片段的变异操作。
  • 需要注意的是,最佳的变异操作可能因不同的目标API而异,因此为每个针对一个API的演化模糊测试的端到端运行开始一个单独的MAB游戏,并重新初始化操作符的先验分布。

Fitness Score: F i t n e s s F u n c t i o n ( C ) = D + U − R FitnessFunction(C)=D+U-R FitnessFunction(C)=D+UR

  • 数据流图深度 (D):衡量代码片段中数据依赖关系的复杂性。
  • 唯一API调用数量 (U):鼓励使用更多不同的库API。
  • 重复API调用惩罚 ®:减少重复API调用的影响,提高模糊测试的效率。

Differential Testing:

  • Wrong Computation:在 CPU 和 GPU 上执行相同代码,记录所有中间变量,为了区分真正的错误和非关键差异,TitanFuzz 使用容差阈值来检查值是否显著不同。计算值的差异可能表明库 API 的不同后端实现或不同 API 之间的交互存在潜在的语义错误。
  • Crash:在程序执行过程中,监控是否有段错误、终止、INTERNAL_ASSERT_FAILED 等异常发生。

实验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
经过广泛的评估,TitanFuzz在两个流行的深度学习库(PyTorch和TensorFlow)上表现出了显著的改进,包括:

  • 增加了库API的数量和代码覆盖率。
  • 直接利用现代大型预训练语言模型进行模糊测试的前景。

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

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

相关文章

cocos3.X的oops框架oops-plugin-excel-to-json改进兼容多表单导出功能

在使用oops框架的过程中&#xff0c;它的导出数据并生成数据结构的插件oops-plugin-excel-to-json有些小的坑点&#xff0c;为满足我个人习惯&#xff0c;对此部分进行了一个小的修改&#xff0c;有需要的拿去用&#xff0c;记录下供大家参考&#xff1b; 一、配置&#xff1a;…

解决IDE编译JAVA项目时出现的OOM异常问题

出现的异常如图&#xff1a; java.lang.0utOfMemoryError:Java heap space 解决方案&#xff1a; 文件 --> 设置 搜索 编译器&#xff08;就点击编译器这行&#xff09;&#xff0c;找到构建进程&#xff0c;共享堆大小&#xff0c;设置大一些&#xff0c;例如 2048 MB。 …

【Linux内核】设备模型之udev技术详解

目录 1. udev技术概述 2. 技术层次分析 2.1 内核层交互 2.2 规则引擎层 2.3 用户空间实现 3. 关键技术要点 3.1 动态设备节点管理 3.2 热插拔处理 3.3 模块化规则系统 3.3.1. 变量替换功能 3.3.2. 条件判断能力 3.3.3. 实现机制 3.3.4 应用场景 3.3.5 扩展能力 4…

群论在现代密码学中的应用探索与实践 —— 从理论到C语言实现

1. 引言&#xff1a;数字时代的信息安全挑战 随着互联网和数字技术的快速发展&#xff0c;信息安全问题变得日益严峻。无论是个人隐私保护&#xff0c;还是企业数据安全&#xff0c;乃至国家安全&#xff0c;都依赖于有效的加密技术保障信息的机密性和完整性。网络攻击、数据泄…

前端开发处理‘流式数据’与‘非流式数据’,在接收完整与非完整性数据时应该如何渲染和使用

在前端开发中&#xff0c;处理 非流式数据 和 流式数据 的方式不同。根据是否完整接收数据、是否实时渲染的需求&#xff0c;可以分为以下四种典型场景&#xff1a; 一、四类常见场景总结 类型数据完整性是否实时渲染适用技术/方法A完整数据&#xff08;一次性返回&#xff09…

thymeleaf直接调用Spring Bean中定义的方法

thymeleaf中可以使用表达式工具对象&#xff0c;通过符号直接调Spring Bean中定义的方法 Spring Bean Component public class InvokeMethodBean {public String fun() { return "fun";} }thymeleaf中调用 <div th:text"${invokeMethodBean.fun()}"&…

虚拟斯德哥尔摩症候群:用户为何为缺陷AI辩护?

当韩国用户美咲连续第七次为虚拟男友的算法错误辩解&#xff1a;“他只是太累了才会说伤人的话”&#xff0c;心理医生在诊断书上写下“数字依赖伴随认知失调”。这种现象并非孤例——斯坦福2024年研究显示&#xff0c;62%长期使用情感AI的用户会主动为系统缺陷寻找合理化解释&…

tryhackme——Abusing Windows Internals(进程注入)

文章目录 一、Abusing Processes二、进程镂空三、线程劫持四、DLL注入五、Memory Execution Alternatives 一、Abusing Processes 操作系统上运行的应用程序可以包含一个或多个进程&#xff0c;进程表示正在执行的程序。进程包含许多其他子组件&#xff0c;并且直接与内存或虚…

[蓝桥杯]密码脱落

密码脱落 题目描述 X 星球的考古学家发现了一批古代留下来的密码。 这些密码是由 A、B、C、D 四种植物的种子串成的序列。 仔细分析发现&#xff0c;这些密码串当初应该是前后对称的&#xff08;也就是我们说的镜像串&#xff09;。 由于年代久远&#xff0c;其中许多种子…

Python绘图库及图像类型

折线图&#xff08;plot&#xff09; 绘图库介绍 Python中绘制折线图的全面指南_python绘制折线图-CSDN博客https://blog.csdn.net/2301_81064905/article/details/139689644 核心作用说明趋势分析揭示数据随时间推移的上升/下降趋势、周期性波动或转折点变化对比在单一图表…

4种常见Python设计爱心创意实现方法

在Python中设计爱心创意有多种实现方式&#xff0c;以下介绍4种常见方法&#xff0c;并附上完整代码&#xff1a; 方法1&#xff1a;使用数学方程绘制&#xff08;Matplotlib&#xff09; ​​原理​​&#xff1a;使用参数方程绘制心形曲线 ​​效果​​&#xff1a;光滑的数…

【Unity】R3 CSharp 响应式编程 - 使用篇(二)

一、通用的事件监听用法 using System;using R3;using UnityEngine;namespace Aladdin.Standard.Observable.Common{public class CommonObservable : MonoBehaviour{// 默认会调用1次public SerializableReactiveProperty<int> serializableReactiveProperty;…

【原理解析】为什么显示器Fliker dB值越大,闪烁程度越轻?

显示器Fliker 1 显示器闪烁现象说明2 Fliker量测方法2.1 FMA法2.2 JEITA法问题答疑&#xff1a;为什么显示器Fliker dB值越大&#xff0c;闪烁程度越轻&#xff1f; 3 参考文献 1 显示器闪烁现象说明 当一个光源闪烁超过每秒10次以上就可在人眼中产生视觉残留&#xff0c;此时…

3.需求分析与测试用例设计方法

设计方法 测试点 定义: 测试时需要考虑的可测试方面&#xff0c;不同公司可能称为"检查点"或其它名称特点: 是需求分析的最后一个环节&#xff0c;用于解决"测哪里"和"怎么测"的问题举例说明: 如同打架时的各种招数&#xff0c;如直接约架、设…

IEC 61347-1:2015 灯控制装置安全标准详解

IEC 61347-1:2015灯控制装置安全标准详解 IEC 61347-1:2015 是国际电工委员会&#xff08;IEC&#xff09;发布的灯控制装置第1部分&#xff1a;通用要求和安全要求的核心标准&#xff0c;为各类照明用电子控制设备设定了全球通用的安全基准。该标准适用于独立式或内置于灯具/…

从 GPT 的发展看大模型的演进

这是一个技术爆炸的时代。一起来看看 GPT 诞生后&#xff0c;与BERT 的角逐。 BERT 和 GPT 是基于 Transformer 模型架构的两种不同类型的预训练语言模型。它们之间的角逐可以从 Transformer 的编码解码结构角度来分析。 BERT&#xff08;Bidirectional Encoder Representatio…

多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现

多目标粒子群优化算法&#xff08;MOPSO&#xff09;&#xff0c;用于解决无人机三维路径规划问题&#xff0c;Matlab代码实现 目录 多目标粒子群优化算法&#xff08;MOPSO&#xff09;&#xff0c;用于解决无人机三维路径规划问题&#xff0c;Matlab代码实现效果一览基本介绍…

贪心算法应用:集合覆盖问题详解

贪心算法与集合覆盖问题详解 贪心算法在组合优化问题中展现出独特优势&#xff0c;集合覆盖问题&#xff08;Set Cover Problem&#xff09;是其中的经典案例。本文将用2万字全面解析贪心算法在集合覆盖/划分中的应用&#xff0c;涵盖算法原理、正确性分析、Java实现、复杂度证…

MCP:让AI工具协作变得像聊天一样简单 [特殊字符]

想象一下,你正在处理一个项目,需要从A平台查看团队讨论,从B平台获取客户信息,还要在GitHub上检查代码进度。传统做法是什么?打开三个不同的网页,在各个平台间来回切换,复制粘贴数据,最后还可能因为信息分散而遗漏重要细节。 听起来很熟悉?这正是当前工作流程的痛点所…

docker不用dockerfile

好的&#xff01;既然你不想使用 Dockerfile&#xff0c;我们就完全不写 Dockerfile&#xff0c;改用你 Leader 提到的思路&#xff1a; 用基础镜像启动一个容器 → 手动在容器里安装依赖和复制项目 → 保存为新镜像 这个方式更直观&#xff0c;就像“你进入容器自己配置环境&a…