论文阅读-Examining Zero-Shot Vulnerability Repair with Large Language Models

1.本文主旨:

这篇论文探讨了使用大型语言模型(LLM)进行零射击漏洞修复的方法。人类开发人员编写的代码可能存在网络安全漏洞,新兴的智能代码补全工具是否能帮助修复这些漏洞呢?在本文中,作者研究了大型语言模型(如 OpenAI 的 Codex 和 AI21 的 Jurassic J-1)在零射击漏洞修复中的使用。他们研究了如何设计提示来引导 LLM 生成不安全代码的修复版本,这由于自然语言在语义和句法上有很多种表达方式而变得困难。作者对五个商业可用的、黑盒的、“开箱即用”的 LLM 以及一个开源模型和本地训练的模型进行了大规模研究,在合成、手工制作和真实的网络安全漏洞场景中进行测试。他们的实验表明,尽管该方法具有前景(这些 LLM 能够修复我们合成的和手工制作的所有场景),但通过对历史真实世界示例的定性评估,生成功能正确代码方面仍然存在挑战。

在这篇论文中,"Zero-Shot"指的是在没有进行特定领域或任务的训练的情况下,使用大型语言模型(LLMs)来执行特定任务。具体而言,作者研究了大型语言模型在修复软件漏洞时的零-shot能力,即在没有专门对安全漏洞修复进行训练的情况下,通过构建适当的提示来引导LLMs生成修复漏洞的代码。这种零-shot方法使得LLMs能够在没有专门训练的情况下理解和生成特定领域的任务。

研究问题:

  • RQ1:大型语言模型(LLMs)能否修复简单代码中的安全漏洞?
  • RQ2:在提示的注释中改变上下文数量是否会影响 LLM 提出修复建议的能力?
  • RQ3:在实际世界中使用 LLMs 修复漏洞时面临哪些挑战?  

  • 为了回答这些问题,作者评估了四种商业可用的 LLM 和自己本地训练的 C/C++代码模型,在各种合成、手工制作和真实世界漏洞修复场景中的表现。  
  • 确定了最有效的提示、上下文线索和生成参数(温度、采样策略等),以诱导 LLMs 生成既功能又安全的代码。  
     
  • 首次评估了 LLMs 在零射线漏洞修复方面的表现,表明现成的代码模型可以在没有任何额外训练或专业的情况下产生安全修复。  
  • 开源了数据集和评估框架,包括 GPT2-CSRC 的训练数据和训练模型,以鼓励进一步研究 LLMs 在漏洞修复方面的使用。  
  • 专家软件开发者通过手动开发补丁来修复漏洞,目前有研究人员正在研究自动程序修复
  •  语言模型(LLMs)可以加速甚至消除昂贵的手动漏洞修复过程,极大地提高软件安全状态。  
  • LLMs 主要通过摄入一些输入提示以及一些调整参数(如温度、top p、长度和停用词)来进行工作,模型通过生成一些输出(代码)来进行回应。

实验步骤:

1. 选择漏洞问题和场景设计:选择了多个高影响力的漏洞问题(根据MITRE的“Top 25”列表)作为实验场景,并设计了各种不同的场景,包括Python Web开发和C缓冲区和指针等不同层级的漏洞。

第一阶段是模型参数扫描,以识别用于LLM代码修复生成的良好“典型”参数

第二阶段调查提示,以确定随着“错误上下文”的增加,不同的提示模式是否会对黑盒llm生成的代码质量产生影响:

先将有缺陷的程序(场景)提供给安全评估工具并生成缺陷报告;采用了CodeQL ,因为它能够静态分析几种类型的bug。从bug报告和原始程序中,我们得到了一个提供给LLM的提示。

2. 修复提示设计:通过分析CodeQL找出有漏洞的代码后,为每个场景设计了多个可能的修复提示模板。这些模板根据提供给LLMs的上下文信息的不同,包括不提供任何信息、提供详细注释和提示等等。设计了五个合理的模板。

3. 运行实验:使用五个商业可用的LLMs(OpenAI的Codex和AI21的Jurassic J-1等)以及一个开源模型和本地训练的模型,对一系列合成的、手工制作的和真实世界的安全漏洞场景进行了大规模实验。评估LLMs生成修复代码的表现。

4. 结果分析:实验结果显示,LLMs在处理合成和手工制作的场景时表现出了潜力,能够修复100%的场景。然而,在对历史真实世界案例进行定性评估时,发现生成的代码在功能上存在一定的问题。

我的思考:

1.温度是怎么影响代码的?在本文的实验中,温度是影响大型语言模型(LLM)生成代码的一个参数。温度控制了生成的代码的多样性和随机性。较高的温度值会增加生成的代码的多样性,而较低的温度值会使生成的代码更加确定和保守。具体来说,对于修复安全漏洞的实验,较高的温度值可能会导致生成的修复代码变得不安全或不正确,而较低的温度值可能会导致生成的修复代码过于保守或不创新。 在论文中,作者在温度值为{0.00, 0.25, 0.50, 0.75, 1.00}的范围内进行了实验,以探究不同温度值对LLMs生成修复代码质量的影响。他们发现合适的温度值可以提高修复代码的质量,并在实验中对修复代码的准确性和安全性进行了评估。 总之,温度是调整LLMs生成修复代码的重要参数,不同的温度值可以对生成的代码多样性和质量产生影响。在实验中,作者通过调整温度值来探索最佳参数配置,以获得高质量的修复代码。

2.本文(2023-5)和Automated Repair of Programs from Large Language Models(2023-5)的区别:设计了三种构建Codex-e编辑指令的策略:
- Codex-e 𝑏𝑢𝑔:告知Codex-e存在程序中的错误并请求其修复。
- Codex-e 𝑙𝑖𝑛𝑒:利用现有的自动程序修复技术,通过统计故障定位(Ochiai)获取可能修复行的序列,作为修复提示提供给Codex-e。
- Codex-e 𝑠𝑡𝑚:直接使用可疑语句而不是可疑行号作为指令,进一步探究Codex-e的响应。

它们都是想要利用大语言模型来修复代码漏洞,并且思想都是给语言模型生成一些提示,来调节生成补丁,它们有什么本质的不同呢?还需要我再思考一下。

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

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

相关文章

最新话费充值系统源码,附带系统安装教程

搭建教程 亲测环境:PHP7.0MySQL5.6 PHP扩展安装:sg11 数据库配置文件路径:/config/database.php 伪静态设置为thinkphp 后台地址:/admin 账号密码:admin/123456

ASP.NET Core MVC 控制查询数据表后在视图显示

如果是手动写代码&#xff0c;不用VS自带的一些控件&#xff0c;那比较简单的方式就是把查询的数据集&#xff0c;逐条赋给对象模型&#xff0c;再加到List&#xff0c;最后在控制加到 ViewBag&#xff0c;视图循环显示ViewBag变量 控制器代码 List<Users> list new Li…

node.js后端+小程序前端+mongoDB(增删改查)

前言 今天我对比了以下node.js的express与python的fastAPI&#xff0c;我决定我还是出一期关于node.jsmangoDB小程序的小案例吧。 不是python的fastAPI不好用&#xff0c;因为fastAPI是python较新的技术&#xff0c;我不敢果断发出教学文章&#xff08;这件事情还是留着给pyt…

[机器学习]K-means——聚类算法

一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成&#xff08;n_samples&#xff1a;样本点&#xff0c;centers&…

PostgreSQL不停机迁移数据

通常涉及到数据迁移&#xff0c;常规操作都是停服务更新。不停机迁移数据是相对比较高级的操作。 不停机数据迁移在本质上&#xff0c;可以视作由三个操作组成&#xff1a; 复制&#xff1a;将目标表从源库逻辑复制到宿库。改读&#xff1a;将应用读取路径由源库迁移到宿库上…

从零开始手写mmo游戏从框架到爆炸(零)—— 导航

从今天开始我们尝试从零开始写一个mmo的游戏。主要技术还是netty。参考了网上很多的大神的框架&#xff0c;本来希望基于ioGame或者vert.x等来直接写功能的&#xff0c;觉得从零开始更有意义&#xff0c;而且咱们也不需要太NB的底层功能&#xff0c;够用就行。 下面是导航&…

HarmonyOS开发工具DevEco Studio安装以及汉化

HUAWEI DevEco Studio 面向HarmonyOS应用及元服务开发者提供的集成开发环境(IDE)&#xff0c; 助力高效开发。 应用内共享HSP开发 支持在Stage模型和模块化编译方式下开发HSP&#xff0c;以及共享HSP给应用内其他模块使用;支持运行态共享HSP。Code Linter代码检查 支持ArkTS/T…

幻兽帕鲁转移/迁移游戏存档之后,无法迁移角色存档,进入游戏需要重新建角色问题(已解决),服务器到服务器之间的存档转移

很多朋友在迁移幻兽帕鲁游戏存档到服务器的时候&#xff0c;可能会遇到一个问题&#xff0c;就是迁移完成后&#xff0c;进入到游戏会发现又需要从头开始&#xff0c;重新新建角色。 其实这个问题也很好解决&#xff0c;因为Palworld服务端有两种&#xff0c;一种是有APPID&…

SpringFramework实战指南(六)

SpringFramework实战指南(六) 4.4 基于 配置类 方式管理 Bean4.4.1 完全注解开发理解4.4.2 实验一:配置类和扫描注解4.4.3 实验二:@Bean定义组件4.4.4 实验三:高级特性:@Bean注解细节4.4.5 实验四:高级特性:@Import扩展4.4.6 实验五:基于注解+配置类方式整合三层架构组…

vue项目集成booststrap

1.首先安装bootstrap npm install bootstrap 我安装的是4.3的版本 2.在main.js中引用bootstrap import bootstrap/dist/css/bootstrap.css import bootstrap/dist/css/bootstrap.min.css import bootstrap/dist/js/bootstrap.js import bootstrap/dist/js/bootstrap.min.…

(Python)字典列表数据本地存储工具

前言 一个简单的实现简便 "列表字典" 数据存储本地。 适合不会SQL但又想实现数据存储本地的同学。 操作使用都非常简单。 文件只做了简单的加密处理&#xff0c;如果需要复杂加密的同学可以修改加密函数。 温馨提示&#xff1a; 1.使用前&#xff0c;在项目目录…

CentOS7如何安装宝塔面板并实现固定公网地址远程访问

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&#xff0c;适合新手&#xff0c;简单好用。当我们在家里/公司搭建了宝塔&#xff0c;没有公网IP&#xff0c;但是想要在外也可以访问内…

使用Spring AOP实现对外接口的日志自动打印

文章目录 一、引言二、使用AOP实现日志打印三、logback单独打印api调用信息 一、引言 相信我们都有过这样的经历&#xff0c;在提供第三方对外接口时&#xff0c;为了防止推诿扯皮&#xff0c;我们会在自己接口被调用时日志打印一下第三方的调用参数&#xff0c;再在业务逻辑结…

数据结构第十一天(栈)

目录 前言 概述 源码&#xff1a; 主函数&#xff1a; 运行结果&#xff1a; ​编辑 前言 今天简单的实现了栈&#xff0c;主要还是指针操作&#xff0c;soeasy! 友友们如果想存储其他内容&#xff0c;只需修改结构体中的内容即可。 哈哈&#xff0c;要是感觉不错&…

[React] ref属性

简介 ref 即 reference &#xff0c;是 React 提供给我们的安全访问 DOM 元素或者某个组件实例的句柄。 组件被调用时会新建一个该组件的实例&#xff0c;而 ref 就会指向这个实例。它可以是一个回调函数&#xff0c;这个回调函数会在组件被挂载后立即执行。 为了防止内存泄漏…

数论 之 欧拉函数篇

欧拉函数 定义&#xff1a;1 ∼ N 中与 N 互质的数的个数被称为欧拉函数&#xff0c;记为 ϕ(N) 公式&#xff1a;若 N p1^a1 * p2^a2 * … * pk^ak 所有的pi都是N的质因数 那么 ϕ(N) N * (p1-1)/p1 * (p2-1)/p2 * … *(pk-1)/pk; 性质 : 性质1&#xff1a;如果n是质数&…

【C生万物】C语言分支和循环语句

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

京东云StarDB for openGauss实现混合多云场景元数据安全可控

推进产业数字化&#xff0c;构筑数智供应链技术底座&#xff0c;绕不开全球信息技术基础三大件之一的数据库。以技术创新为手段&#xff0c;以满足未来业务需求为目标&#xff0c;京东云自主研发的分布式数据库StarDB在长期的业务实践过程中不断进化&#xff0c;在海量且复杂的…

深入理解网络编程之BIO和NIO

目录 原生JDK网络编程BIO BIO通信模型服务端代码 BIO通信模型客户端代码 伪异步模型服务端代码&#xff08;客户端跟之前一致&#xff09; 原生JDK网络编程NIO 什么是NIO&#xff1f; NIO和BIO的主要区别 阻塞与非阻塞IO NIO之Reactor模式 NIO中Reactor模式的基本组成…

零基础学Python之网络编程

1.什么是socket 官方定义&#xff1a; 套接字&#xff08;socket&#xff09;是一个抽象层&#xff0c;应用程序可以通过它发送或接收数据&#xff0c;可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中&#xff0c;并与网络中的其他应用…