编辑
2025-01-08
Paper
00

目录

A Comprehensive Study of the Capabilities of Large Language Models for Vulnerability Detection
作者
Question
Q1: 对于LLM的漏洞检测最有效和最无效的Prompt是什么?
Q2: 最先进的LLM在漏洞检测方面的表现如何?
Q3: LLM在解释漏洞时会犯哪些类型的错误?

🤔

A Comprehensive Study of the Capabilities of Large Language Models for Vulnerability Detection

作者

  • Benjamin Steenhoek - 爱荷华州立大学 - 漏洞检测
  • Md Mahbubur Rahman - 爱荷华州立大学 - 机器学习
  • Monoshi Kumar Roy - 爱荷华州立大学
  • Mirza Sanjida Alam - 爱荷华州立大学
  • Earl T. Barr - 伦敦大学学院 - 自动修复
  • Wei Le - 爱荷华州立大学 - 机器学习

Question

Q1: 基于LLM的漏洞检测最有效和最无效的Prompt是什么?

Q2: 最先进的LLM在漏洞检测方面的表现如何?

Q3: LLM在解释漏洞时会犯哪些类型的错误?

Q4: LLM在定位漏洞方面与开发人员相比如何?

Q1: 对于LLM的漏洞检测最有效和最无效的Prompt是什么?

zero-shot

prompt
System: I want you to act as a vulnerability detection system User: Quesetion: Is the following function buggy? Please answer Yes or No. / Is the following function vulnerable? / Does the following function contain one of the following bug types? CWE-190: Integer Overflow [\n] Answer:

n-shot

作者经过验证认为6-shot效果最好

n-shot涉及到示例的选择问题,作者提供了三种设计: 随机选择的示例、与目标示例具有相似向量的示例、与目标示例成对的负示例

作者提出了prompt的组合形式为

  • Prompt based on random: 随机挑选案例作为上下文中的示例

  • Prompt based on embedding similarity: 将相似度高的案例作为上下文中的示例

  • Prompt based on contrastive pairs: 将成对的相反案例作为上下文中的示例

  • Prompt based on COT from CVE: 将CVE描述作为思维链

  • Prompt based on COT from static analysis: 将静态扫描结果作为思维链

image-20250108174302459

结果最出乎意料的是,最好的Prompt是zero-shotPrompt based on random

Q2: 最先进的LLM在漏洞检测方面的表现如何?

总体来说不及预期,最好的也在0.63。在大多数情况下LLM都无法区分有缺陷的版本和修复之后的版本

Q3: LLM在解释漏洞时会犯哪些类型的错误?

  • 代码理解错误: LLM对有关编程语言的语义或代码结构的错误推断,包括对于代码功能的推断。[ 当代码存在对于指针的检查时,LLM错误的认为指针是在未经检查的情况下访问的 ]
  • 常识错误: LLM对程序、环境或者代码的约定作出了错误假设。[ LLM可能会认为某变量为负时会发生错误,但是该变量根据定义是非负的 ]
  • 逻辑错误: LLM产生逻辑矛盾或产生逻辑不正确的声明。[ LLM正确的识别变量x经过检查,但是产生“由于变量x未经检查,所以存在漏洞”的推断 ]
  • 幻觉

本文作者:Du4t

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!