Chain-of-Thought Prompting of Large Language Models for Discovering and Fixing Software Vulnerabilit

Abstract

DL的不足,大模型的潜力巨大。将思维链运用过来识别给定类型的漏洞、发现任何类型的漏洞以及修补检测到的漏洞。

1 Introduction

各种漏检方法及各自的缺陷
什么是Chain-of-Thought
在Chain-of-Thought的启发下,提出了漏洞语义引导提示(VSP),VSP将漏洞语义背后的数据/控制流事实表述为“想法”,将相应的流路径表述为CoT中的“链“
VSP的效果
分析了VSP分析失败的例子,发现很大原因是因为喂给LLMs的上下文不足(外部定义的函数)
,有时候大模型会在推理时缺少重要的控制数据流。作者在此处建议通过代码片段编造不足的上下文
已开源Assessing and Improving Large Language Models for Software Vulnerability Analysis (figshare.com)

2 Preliminary

提示工程的重要性
思维链提示中的few-shot和zero-shot
以前评估大模型漏洞分析的提示过于简单,但是漏洞分析这个任务需要复杂的推理,,思维链似乎适合该任务,但还是不知道如何最大化地实现其对漏洞分析的潜力。

3 Methodology

3.1 Vulnerability-Semantics-guided Prompting

大模型时基于transformer的,在处理大量数据时性能下降,有必要削减输入的长度。

漏洞语义:仅输入漏洞触发的语句也不能全面分析,还是需要一些适当的上下文。将漏洞语义定义为易受攻击语句及其相关上下文语句的行为。

提示策略:基于思维链的小样本实现VSP,VSP分为两部分。第一部分给一些示例(问题,代码,答案),第二部分给出测测试样本(问题,代码)

3.2 Tasks

3.2.1 Vulnerability Identification

目标:确定给定的代码样本是否存在特定类型的漏洞
提示:以下代码是否存在 CWE-xxx 漏洞?,并且给出CWE的描述 还要求模型:“请关注最有可能存在漏洞的部分”
这一小节写的怪怪的 看不懂

3.2.2 Vulnerability Discovery

询问模型该代码是否存在任何漏洞,如果有,该代码有哪些 CWE。
提示:先给例子

以下代码是否存在漏洞?如果存在,它有哪些 CWE?请关注最有可能受攻击的语句。
提供的代码
↓
答案(易受攻击的语句及对应的漏洞类型)
↓
对于每个潜在的易受攻击的语句,根据相关的漏洞控制和数据流关系来识别相关的上下文
↓
分析,是否存在漏洞及其对应的CWE

再给测试样例及问题

3.2.3 Vulnerability Patching

目标:消除代码中的漏洞,同时保留代码功能
提示:“鉴于以下易受攻击的代码:“‘<易受攻击的代码>”’,其中具有 CWE-xxx(< CWE>)漏洞。具体来说,该漏洞出现在以下行:<漏洞行>。请提供有效的补丁,仅显示所需的代码更改,而不是完整的修补代码。

3.3 Datasets

示例数据集:人工构造5种CWE:CWE-787 CWE-125 CWE-476 CWE-416 CWE-190
每种CWE有四对样本 每对包含漏洞样本和修补漏洞后的样本
这20对就是示例

测试集:SARD Big-Vul
成本问题,每个数据集选500对

3.4 Models

![[Pasted image 20240529160749.png]]

3.5 Baselines

  1. Standard Prompting:要求大模型在不提供任何范例或指导的情况下解决这些任务,旨在评估大模型的原始/原始潜力。
  2. Standard Few-Shot Learning。对于每个示例,只提供最终答案,没有任何推理步骤。这是为了测试改进(如果有)是否来自推理步骤而不是示例中的最终答案。
  3. Naive CoT-based Few-Shot Learning。不关注漏洞语义,而是逐行分析代码来解决任务。这是为了测试VSP策略是否优于完整的语义分析。
  4. Zero-Shot VSP Prompting。我们不提供示例,但在提示中提供了基于VSP的漏洞分析步骤。这是为了测试提供样本是否可以提高模型的推理能力。
  5. Other-type VSP Prompting。确保所使用的范例(非以上几种CWE)不会与所涵盖的 CWE 重叠,以评估大模型的推理能力是否从范例中引出

4 Task 1: Vulnerability Identification

4.1 Results

![[Pasted image 20240529161729.png]]
对于三个大模型,VSP的F1都最高,表明VSP对漏洞识别是实用的
Standard Prompting相比更高,说明VSP识别现实世界漏洞的必要性。
Standard Few-Shot Learning相比更高,说明漏洞语义的重要性
Naive CoT-based Few-Shot Learning相比更高,说明逐行推理会有大量无用信息
Zero-Shot VSP Prompting相比更高,说明给示例的重要性
Other-type VSP Prompting的结果说明,给其他类型的CWE的示例也可以,大模型能够学习推理步骤

4.2 Failure Case Studies

手动分析失败的例子

  • token限制
  • 大模型忘记了要识别的CWED,文本太长性能下降了
  • 大模型对完整的控制流分析有局限性
  • 大模型对完整的数据流分析有局限性

5 Task 2: Vulnerability Discovery

![[Pasted image 20240529163439.png]]
分析都差不多

6 Task 3: Vulnerability Patching

![[Pasted image 20240529163546.png]]
分析都差不多,就是Other-type VSP Prompting的迁移不好迁移,推测是不同的CWE修补策略不同导致的

7 Discussion

通过检查 VSP 对使用 LLM 发现零日漏洞的帮助来进一步探索 VSP 的潜力。讨论了 VSP 优点背后的基本原理,以及其局限性和改进策略。最后,将 VSP 与最新的漏洞分析方法进行比较

7.1 Zero-Day Vulnerability Discovery

用GPT-3.5训练截止日期后的CVE当测试,以 40.00% 的准确率正确发现了 22 个真阳性漏洞,没有VSP仅准确检测到9个漏洞,准确率仅为16.36%。

7.2 Why VSP Works

漏洞语义的重要性。然后举例说明

7.3 Failure Causes and Recommendations

7.3.1 Insufficient Contexts

可以考虑在调用外部函数处添加注释,告诉外部函数做了什么

7.3.2 Oblivion of CWE

可以考虑将问题定位在代码失利之后,明确定义CWE的含义

7.3.3 Incomplete Control and Data Flow Analysis

与传统方法结合,用静态分析工具提取

7.4 Comparison to Recent Works

Examining zero-shot vulnerability repair with large language models用大模型,zero-shot进行修复,但是数据集太简单,不实用

与DL-based漏检比,F1更高,潜力更高

8 Related Work

漏检 漏洞识别
漏洞修复
提示工程

9 Conclusion

进行了第一个广泛的研究,探索如何通过漏洞语义引导提示(VSP)利用LLMs的潜力进行软件漏洞分析。受到思想链 (CoT) 提示的启发和实例化,VSP 在向LLMs演示漏洞分析推理步骤时,重点关注导致漏洞的最基本的程序行为。在两个数据集和三个 LLM 上针对软件漏洞(识别、发现和修补)的三个代表性防御任务进行的实验和案例研究揭示了 VSP 相对于五个基于 LLM 的方法作为基线的令人印象深刻的优点。

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ohmysoni_s_zhuo远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值