ProSec: Fortifying Code LLMs with Proactive Security Alignment
作者: Xiangzhe Xu, Zian Su, Jinyao Guo, Kaiyuan Zhang, Zhenting Wang, Xiangyu Zhang
分类: cs.CR, cs.CL, cs.SE
发布日期: 2024-11-19 (更新: 2025-06-06)
备注: The first two authors contributed equally to this work
💡 一句话要点
ProSec:通过主动安全对齐增强代码大语言模型的安全性
🎯 匹配领域: 支柱二:RL算法与架构 (RL & Architecture) 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码大语言模型 安全对齐 漏洞检测 代码生成 偏好学习
📋 核心要点
- 现有代码LLM安全性不足,生成的脆弱代码可能引入安全风险,但安全相关的训练数据稀疏。
- ProSec通过合成CWEs相关的漏洞场景和修复方案,主动暴露并修复LLM中的安全漏洞。
- 实验表明,ProSec训练的模型在安全性上显著优于现有方法,且保持了原有的代码生成能力。
📝 摘要(中文)
尽管最近的代码专用大语言模型(LLMs)极大地增强了其代码生成能力,但这些模型的安全性仍未得到充分探索。由这些模型生成的不安全代码可能会给现实世界的系统带来漏洞,从而构成潜在风险。现有方法主要依赖于从真实漏洞中收集安全数据集,并通过指令微调来缓解这些问题。然而,它们受到脆弱代码数据稀疏性的限制,并且在现代LLM的多阶段后训练工作流程中的适用性有限。本文提出了ProSec,一种新颖的主动安全对齐方法,旨在使代码LLM与安全编码实践对齐。ProSec通过从常见弱点枚举(CWEs)中合成诱导漏洞的编码场景来系统地暴露代码LLM中的漏洞,并生成对脆弱代码片段的修复,从而使模型能够通过偏好学习目标来学习安全实践。ProSec合成的场景比正常的指令微调数据集触发的脆弱代码多25倍,从而产生比以前的工作大7倍的安全对齐数据集。实验表明,与之前的工作相比,使用ProSec训练的模型安全性提高了25.2%到35.4%,且没有降低模型的效用。
🔬 方法详解
问题定义:现有代码大语言模型(LLMs)在代码生成方面表现出色,但安全性不足,容易生成包含漏洞的代码,对实际系统构成威胁。现有的安全对齐方法依赖于从真实漏洞中收集数据进行指令微调,但真实漏洞数据稀疏,难以有效训练模型,并且难以适应现代LLM复杂的多阶段训练流程。
核心思路:ProSec的核心思路是主动暴露代码LLM中的安全漏洞,并让模型学习修复这些漏洞。具体来说,ProSec通过合成包含已知漏洞的编码场景,迫使模型生成脆弱代码,然后提供相应的修复方案,让模型通过偏好学习的方式学习安全编码实践。这种主动学习的方式可以克服数据稀疏性问题,并更有效地提升模型的安全性。
技术框架:ProSec包含两个主要阶段:漏洞场景合成和安全对齐训练。在漏洞场景合成阶段,ProSec利用常见弱点枚举(CWEs)生成包含特定漏洞的编码场景,并生成相应的修复方案。在安全对齐训练阶段,ProSec使用合成的数据集,通过偏好学习目标训练代码LLM,使其学习安全编码实践。整体流程是先通过CWEs构造易错代码,再生成对应的安全代码,然后用这些数据对LLM进行训练。
关键创新:ProSec的关键创新在于其主动安全对齐的思想。与被动地从真实漏洞中学习不同,ProSec主动合成漏洞场景,从而能够更有效地暴露和修复模型中的安全漏洞。此外,ProSec利用CWEs作为知识来源,可以系统地覆盖各种常见的安全漏洞,提高了模型的安全性和鲁棒性。
关键设计:ProSec的关键设计包括:1) 基于CWEs的漏洞场景合成方法,确保覆盖各种常见的安全漏洞;2) 偏好学习目标,鼓励模型生成安全的代码;3) 精心设计的提示工程,引导模型生成高质量的漏洞代码和修复方案。具体参数设置和损失函数细节在论文中未详细说明,属于未知信息。
🖼️ 关键图片
📊 实验亮点
ProSec合成的场景比正常指令微调数据集触发的脆弱代码多25倍,生成的数据集比之前的工作大7倍。实验结果表明,使用ProSec训练的模型在安全性方面比之前的工作提高了25.2%到35.4%,同时没有降低模型的代码生成能力。这些结果表明ProSec是一种有效的代码LLM安全对齐方法。
🎯 应用场景
ProSec可应用于各种代码生成场景,例如自动化代码审查、软件开发辅助工具等。通过提高代码LLM的安全性,ProSec可以减少软件漏洞,降低安全风险,并提高软件开发的效率和质量。未来,ProSec可以扩展到支持更多编程语言和安全漏洞类型,并与其他安全工具集成,构建更完善的软件安全生态系统。
📄 摘要(原文)
While recent code-specific large language models (LLMs) have greatly enhanced their code generation capabilities, the safety of these models remains under-explored, posing potential risks as insecure code generated by these models may introduce vulnerabilities into real-world systems. Existing methods collect security-focused datasets from real-world vulnerabilities for instruction tuning in order to mitigate such issues. However, they are largely constrained by the data sparsity of vulnerable code, and have limited applicability in the multi-stage post-training workflows of modern LLMs. In this paper, we propose ProSec, a novel proactive security alignment approach designed to align code LLMs with secure coding practices. ProSec systematically exposes the vulnerabilities in a code LLM by synthesizing vulnerability-inducing coding scenarios from Common Weakness Enumerations (CWEs) and generates fixes to vulnerable code snippets, allowing the model to learn secure practices through preference learning objectives. The scenarios synthesized by ProSec trigger 25x more vulnerable code than a normal instruction-tuning dataset, resulting in a security-focused alignment dataset 7x larger than the previous work. Experiments show that models trained with ProSec are 25.2% to 35.4% more secure compared to previous work without degrading models' utility.