研究问题:

  • 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缓冲区和指针等不同层级的漏洞。

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

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

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

02-08 06:33