【网安大模型专题10.19】※论文5:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+ChatRepair+不同修复场景+修复效果(韦恩图展示)

本文主要是介绍【网安大模型专题10.19】※论文5:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+ChatRepair+不同修复场景+修复效果(韦恩图展示),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT

  • 写在最前面
  • 背景介绍
    • 自动程序修复流程Process of APR (automated program repair)
      • 1、漏洞程序
      • 2、漏洞定位模块
      • 3、补丁生成
      • 4、补丁验证
    • (可以学习的PPT设计)经典的APR方法traditional APR tools
    • learning-based APR tools
  • 方法Methodology
    • Methodology - gap差距
      • 当前的方法current method
      • 局限性
    • 方法概述overview
      • ① 建立初始 prompt,得到第一个 patch
      • ②通过 test suite 判断 patch 是否成立
      • ③ 输入已经获取的 plausible patch 及相关信息,获取更多 plausible patch
      • 最后两个步骤
  • 评估Evaluation
    • 基线Baseline
    • 基准Benchmark:
    • 研究问题Research questions
      • RQ1:ChatRepair与最先进的APR技术相比,其性能如何
        • 韦恩图(展示不同方法修复的集合)
      • RQ2: ChatRepair在不同的修复场景下是如何执行的?
      • RQ3: ChatRepair的不同组成部分对改进修复效果的贡献是什么

写在最前面

本文为邹德清教授的《网络安全专题》课堂笔记系列的文章,本次专题主题为大模型。

Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT

arXiv 2023.4.1
https://arxiv.org/pdf/2304.00385.pdf

Chunqiu Steven Xia, University of Illinois Urbana-Champaign
Lingming Zhang, University of Illinois Urbana-Champaign

记录一位同学的分享
PPT简约大方、重点突出,学到了一些很巧妙的小设计
同时梳理了自动程序修复APR的流程、常见方法,我之前没接触过但也有了一定的了解
分享论文循序渐进,这种阅读论文的步骤之后或许可以尝试

之后自己可以常回顾、多学习学习

背景介绍

自动程序修复流程Process of APR (automated program repair)

在这里插入图片描述

1、漏洞程序

Vulnerability Detection
(NDSS 18)Vuldeepecker: A deep learning-based system for vulnerability detection
(security 22)Mining Node.js Vulnerabilities via Object Dependence Graph and Query

2、漏洞定位模块

Fault Localization
(TSE 23) Effective Isolation of Fault-Correlated Variables via Statistical and Mutation Analysis

3、补丁生成

Patch Generation

4、补丁验证

Patch Correctness Checking
(FSE 23) A Large-scale Empirical Review of Patch Correctness Checking Approaches

(可以学习的PPT设计)经典的APR方法traditional APR tools

在这里插入图片描述

  1. 启发式搜索(GenProg)
    insight:重用项目中的代码产生正确的修复补丁
    method:通过交叉和变异操作实现已有代码的重新组合
  2. 基于历史修复
    insight:不同软件中 bug 会重复出现,可以作为后续修复的指导
    method:通过历史信息指导启发式搜索
  3. 利用相似代码
    insight:与缺陷代码相似的代码可能存在同样的错误
    method:通过相似信息指导启发式搜索
  4. 基于修复模版
    insight:特定漏洞修复是可以总结的一些模式
    method:专家总结定义修复模版,直接进行应用
  5. 基于语义约束
    insight:修复 bug 就是改变程序使得满足 test case 的约束
    method:搜索约束并转换为约束求解问题

learning-based APR tools

  1. 补丁排序模型
    method:通过提取补丁特征给补丁排序
  2. 补丁模版获取
    method:聚类收集最常见的修复方式(模板)
  3. 端到端补丁生成模型(模型选择与训练数据的差别)
  • NMT-based
  • LLM-based

方法Methodology

Methodology - gap差距

当前的方法current method

有bug的代码被移除,LLM直接预测正确的代码
buggy code is removed and a LLM directly predicts correct code

给定前缀和后缀上下文
given the prefix and suffix context

局限性

现有基于llm的APR工具的局限性:
limitation of existing LLM-based APR tools:

1.丢失测试失败信息
missing test failure information

2.重复抽样
repeated sampling

3.对合理补丁的无知
ignorance of plausible patches

在这里插入图片描述

可信的补丁:通过测试套件的补丁
plausible patches: patches that pass the test suite

方法概述overview

这页PPT:将总览图黑色虚线框出
在这里插入图片描述
建立初始 prompt,得到第一个 patch

通过 test suite 判断 patch 是否成立

  1. 如果成立进入下一阶段
  2. 如果不成立持续询问 Chatgpt 直到获取一个 plausible patch

输入已经获取的 plausible patch 及相关信息,获取更多 plausible patch
在这里插入图片描述
可信的补丁:通过测试套件的补丁
plausible patches: patches that pass the test suite

① 建立初始 prompt,得到第一个 patch

初始输入initial input(通过红色虚线方框突出重点)
在这里插入图片描述

1、初始提示符:您是一个自动程序修复工具
初始 prompt:You are an Automated Program Repair Tool
在这里插入图片描述

2、在同一个bug项目中包含一些历史bug修复的例子
include a few examples of historical bug fixes within the same buggy project
在这里插入图片描述

少样本通过这样做,我们将模型调整到修复任务并允许它
few-shot examples By doing so, we gear the model towards the repair task and allow it

学习任务的所需输出格式(即补丁)。
to learn the desired output format (i.e. a patch) of the task.

3、用填充的位置指示器替换函数中有错误的代码完全≪≫
replace the buggy code within the function with an infill location indicator (≫ [ INFILL ] ≪)

在这里插入图片描述

4、提供原始的bug行
provide the original buggy line
在这里插入图片描述

5、失败的测试1)它的名称,2)触发测试失败的相关代码行,以及3)产生的错误信息
failing test(s) 1) its name, 2) the relevant code line(s) triggering the test failure, and 3) the error message produced

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

②通过 test suite 判断 patch 是否成立

  1. 如果成立进入下一阶段
  2. 如果不成立持续询问 Chatgpt 直到获取一个 plausible patch

可信的补丁:通过测试套件的补丁
plausible patches: patches that pass the test suite

在这里插入图片描述

③ 输入已经获取的 plausible patch 及相关信息,获取更多 plausible patch

可信的补丁:通过测试套件的补丁
plausible patches: patches that pass the test suite

在这里插入图片描述

最后两个步骤

在这里插入图片描述

评估Evaluation

基线Baseline

1、8个最近的基于学习和llm的APR基线
8 recent learning-based and LLM-based APR baselines

2、12个精选的传统方法
12 selected traditional techniques

3、BaseChatGPT
BaseChatGPT

基准Benchmark:

4j和QuixBugs的缺陷
Defects4j and QuixBugs

研究问题Research questions

1、RQ1:ChatRepair与最先进的APR技术相比,其性能如何?
• RQ1: How does the performance of ChatRepair compare against the state-of-the-art techniques for APR?

2、RQ2: ChatRepair在不同的修复场景下是如何执行的?
• RQ2: How does ChatRepair perform when used in different repair scenarios?

3、RQ3: ChatRepair的不同组成部分对改进修复效果的贡献是什么
• RQ3: What are the contributions of different components of ChatRepair in improving repair effectiveness?

RQ1:ChatRepair与最先进的APR技术相比,其性能如何

在这里插入图片描述

1.ChatRepair可以比仅使用ChatGPT模型的基线,分别在Defects4j 1.2和2.0上,提高修复了34和23个bug
ChatRepair can improve over the baseline of just using the ChatGPT model with 34 and 23 more bug fixes on Defects4j 1.2 and 2.0 respectively.

2.比目前最先进的APR工具多15和17个。
with 15 and 17 more than the current state-of-the-art APR tool.
在这里插入图片描述

ChatRepair能够正确地修复quixbugs中的所有bug——java和python数据集,击败所有性能最好的技术
ChatRepair is able to correctly fix all bugs within the QuixBugs-Java and-Python datasets, beating out all top-performing techniques.

韦恩图(展示不同方法修复的集合)

存在有些方法识别的漏洞,这篇文章不能识别
在这里插入图片描述
在这里插入图片描述

RQ2: ChatRepair在不同的修复场景下是如何执行的?

基线:BaseChatGPT / CodexRepair
baseline: BaseChatGPT / CodexRepair

在这里插入图片描述

BaseChatGPT没有产生令人印象深刻的改进
BaseChatGPT not yield impressive improvements

RQ3: ChatRepair的不同组成部分对改进修复效果的贡献是什么

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

这篇关于【网安大模型专题10.19】※论文5:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+ChatRepair+不同修复场景+修复效果(韦恩图展示)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/284330

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

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

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

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

Java利用docx4j+Freemarker生成word文档

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

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(