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

简介: 【网安AIGC专题10.19】5 ChatRepair:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+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的不同组成部分对改进修复效果的贡献是什么

目录
相关文章
|
1月前
|
数据挖掘
ChatGPT在常用的数据分析方法中的应用(分组分析)
ChatGPT在常用的数据分析方法中的应用(分组分析)
|
1月前
|
数据挖掘 数据处理
ChatGPT在常用的数据分析方法中的应用(交叉分析)
ChatGPT在常用的数据分析方法中的应用(交叉分析)
|
1月前
|
自然语言处理
从原理上总结chatGPT的Prompt的方法
从原理上总结chatGPT的Prompt的方法
32 0
|
1月前
|
数据挖掘
ChatGPT在常用的数据分析方法中的应用(对比分析)
ChatGPT在常用的数据分析方法中的应用(对比分析)
|
1月前
|
SQL 安全 算法
ChatGPT高效提问—prompt实践(漏洞风险分析-重构建议-识别内存泄漏)
ChatGPT高效提问—prompt实践(漏洞风险分析-重构建议-识别内存泄漏)
|
1月前
|
数据采集 机器学习/深度学习 人工智能
ChatGPT高效提问—基础知识(AIGC)
ChatGPT高效提问—基础知识(AIGC)
|
6月前
|
API 数据安全/隐私保护 Python
ChatGPT邮箱API发送邮件有什么方法吗
ChatGPT邮箱API提供多样化的邮件发送方式:SMTP协议、HTTP请求、直接API接口及电子邮件库(如Python's smtplib和JavaMail)。用户可依据需求选择合适的方法,配置SMTP服务器地址、端口、用户名和密码等信息,实现便捷的编程发邮件。首先确保邮件服务器配置正确,然后参照文档指南开始使用。
|
3月前
|
人工智能 弹性计算 芯片
就AI 基础设施的演进与挑战问题之AIGC场景下训练和推理的成本的问题如何解决
就AI 基础设施的演进与挑战问题之AIGC场景下训练和推理的成本的问题如何解决
|
5月前
|
人工智能 自然语言处理 UED
AIGC遇上ChatGPT,互联网公司的创意设计师,还能做什么?
AIGC和ChatGPT为创意设计师开辟新路径。设计师借助AI生成初步设计,提高效率,保持创意主导。ChatGPT革新沟通体验,加速反馈与优化。Adobe国际认证成为设计师专业成长标志,确保技能更新与行业发展同步。在AI时代,设计师需融合技术,持续学习,以创新满足用户需求。
AIGC遇上ChatGPT,互联网公司的创意设计师,还能做什么?
|
4月前
|
搜索推荐 算法