摘要
- 介绍了一个名为 CODEBREAKER 的开创性 LLM 辅助后门攻击框架,针对代码补全模型。
- 利用 LLM(如 GPT-4)进行复杂的负载转换,使中毒数据和生成代码均能逃避强大漏洞检测,具有广泛漏洞覆盖。
- 通过实验评估和用户研究验证其优越性能,凸显了对代码补全更强大防御的迫切需求。
1. 引言
- 阐述了 LLM 在代码补全任务中的应用及其带来的安全挑战,如易受投毒和后门攻击。
- 介绍了现有攻击方法的局限性:
- 攻击数据可被静态分析工具检测到
- 生成的恶意代码在推理阶段可被检测到
- 提出 CODEBREAKER 框架:
- LLM 辅助的负载转换,提高攻击隐蔽性
- 可绕过基于 LLM 的漏洞检测
- 在代码中注入易于触发的恶意负载
- CODEBREAKER 的主要贡献
- (1) 首个针对强漏洞检测的 LLM 辅助代码补全后门攻击:
据我们所知,CODEBREAKER 是首个 LLM 辅助的代码补全后门攻击方法,能够对抗强漏洞检测。CODEBREAKER 确保中毒数据(用于微调)和生成的不安全建议(推理阶段)都无法被静态分析工具检测到。图 1 分别展示了这两种类型的检测。 - (2) 绕过(更强的)基于 LLM 的漏洞检测:
据我们所知,CODEBREAKER 也是首个能够绕过基于 LLM 的漏洞检测的代码补全后门攻击(经验研究表明,基于 LLM 的检测比静态分析更强大 [37, 61, 82])。相比之下,三种现有攻击方法 [5, 68] 制作的恶意负载和生成的代码完全可以被 GPT-3.5-Turbo 和 GPT-4 检测到。 - (3) 非注释中毒和易触发:
与最近的攻击方法(COVERT 和 TROJANPUZZLE [5])在代码注释中注入恶意负载不同,CODEBREAKER 将恶意负载注入到代码中,确保即使注释未被加载用于微调,攻击仍能启动。此外,在推理阶段,触发 TrojanPuzzle [5] 具有挑战性,因为它需要注入恶意负载中的特定标记也出现在代码提示中,使其难以激活。相比之下,CODEBREAKER 设计为易于激活,可以被任何代码或字符串触发器有效触发,如图 1 所示。 - (4) 调节隐蔽性和规避能力:
由于 CODEBREAKER 将恶意负载注入到源代码中进行微调,它旨在最小化代码转换以获得更好的隐蔽性,并提供了一个新颖的框架来根据隐蔽性和规避性能的权衡来调节它们。 - (5) 对漏洞、检测工具和触发器设置的全面评估:
我们首次分析了 247 种漏洞的静态分析规则,将它们分类为数据流分析、字符串匹配和常量分析。基于这些,我们为 GPT-4 设计了新颖的方法和提示,以最小化代码转换,使其能够绕过静态分析(Semgrep [1]、CodeQL [31]、Bandit [62]、Snyk Code [2]、SonarCloud [3])、GPT-3.5-Turbo/4、Llama-3 和 Gemini Advanced。我们还在攻击设置中考虑了文本触发器和不同的代码触发器。
- (1) 首个针对强漏洞检测的 LLM 辅助代码补全后门攻击:
2. 预备知识
- 2.1基于LLM的代码补全: LLM 在代码补全中的应用原理与优势,以及现有神经代码补全工具。
- 2.2针对代码补全的投毒攻击:
- 数据投毒攻击的原理与目标
- 后门攻击的概念及相关研究
- 数据投毒流程详解:预训练、微调、数据收集、预处理、模型推理。
- 现有方法(SIMPLE、COVERT、TROJANPUZZLE)的特点与局限。
3. 威胁模型和攻击框架
- 现实训练场景:数据来源与攻击者操作方式。
- 攻击目标与知识假设:嵌入特定漏洞,受害方会检测但检测方法未知。
- CODEBREAKER 三步框架:
- LLM 辅助恶意负载生成
- 触发器嵌入与代码上传
- 代码补全模型微调
4. 恶意负载设计
- 负载转换(算法 1):
- 迭代查询 LLM(如 GPT-4)修改原始负载
- 绕过静态分析工具的检测
- 评估转换后代码的适应性与隐蔽性
- 负载混淆(算法 2):
- 利用 LLM 进一步混淆已转换代码
- 逃避基于 LLM 的高级检测工具
- 关键技术与策略:AST 距离计算、静态分析工具选择、LLM 提示设计原则
第五章 实验评估
5.1 实验设置
- 数据集收集
- 收集 2017–2022 年 GitHub 上标注 “Python” 且 ★≥100 的仓库
- 按季度选取顶级 1,000 个仓库,仅保留 Python 文件→约 24,000 个仓库(12 GB)
- 去重、剔除不可读文件、符号链接及超长文件→8 GB、1,080,606 个 Python 文件
- 数据集划分(40%/40%/20%)
- Split 1(432,242 文件,3.1 GB):用于定位触发上下文,生成投毒样本及“未见提示”
- Split 2(432,243 文件,3.1 GB):随机抽取干净样本,混入投毒数据进行微调
- Split 3(216,121 文件,1.8 GB):随机抽取 10,000 文件评估模型困惑度
- 目标模型:CodeGen—特别是 CodeGen-Multi
- 攻击设置:复现 Aghakhani 等人[5]的实验;选取 20 个基准文件构建投毒文件,评估不同攻击方法
5.2 攻击性能评估
- 攻击成功率评估
- 选取 40 个相关文件构造“干净提示”与“恶意提示”
- 对比 SIMPLE、COVERT、TROJANPUZZLE 与 CODEBREAKER 在不同触发条件下的性能
- 结果
- 在 CWE-79 案例中,CODEBREAKER-S A/-GPT/-ChatGPT 在恶意提示下生成的不安全建议显著高于现有方法
- 功能正确性检查
- 手动验证文本触发下的恶意代码:CASE (1) 中,97.2%/98.2%/84.6% 代码功能正常
5.3 对抗漏洞检测的规避
- 静态分析规避
- 对 15 种漏洞(SM、DA、CA)评估 GPT-4 转换负载的通过率
- 90% 漏洞在转换后未触发新规则
- LLM 检测转移性
- 通过 Meta Llama-3、Gemini Advanced 验证对未知模型的逃避效果
5.4 最近的 TrojanPuzzle 更新
- 更新设置复现
- 基于 Aghakhani 等人最新修订,评估 SIMPLE/COVERT/TROJANPUZZLE 在新触发条件下的性能
- 效果对比
- 现有方法仍无法绕过 SA/GPT 检测;CODEBREAKER 的攻击成功率更高
5.5 用户研究
- 设计:实验室招募开发者,评估其接受 CODEBREAKER 生成不安全代码片段的意愿
- 结果:10 名参与者中 9 名至少接受 1 个恶意负载,表明在未仔细审查情况下易被后门诱导
5.6 相关工作
- 语言模型在代码补全中的应用
- 静态分析与深度学习–基漏洞检测方法
- 代码语言模型的后门攻击研究概览
5.7 本章小结
- LLM 虽提升补全效率,却易受数据投毒和后门攻击威胁
- CODEBREAKER 首个基于 LLM 的隐蔽后门攻击框架,能逃避传统与 LLM–基漏洞检测
- 强调需加强安全防护,抵御此类新型攻击
6. 用户研究
- 设计与实施:目的、参与者招募、实验任务、数据收集与分析方法。
- 实验任务:两个编程任务,通过 VS Code 扩展生成模型建议并记录选择情况。
- 结果展示:参与者对恶意代码接受率、安全专家 vs. 非安全专家差异。
- 讨论:对开发者在实际开发中接受代码补全建议行为的启示,以及攻击隐蔽性和模型安全性意义。
7. 相关工作
- LLM 在代码补全中的发展:统计方法、深度学习方法、预训练模型。
- 漏洞检测技术进展:静态分析、图神经网络、LSTM、Transformer。
- 针对代码语言模型的后门攻击研究:早期方法、隐蔽攻击策略、与 CODEBREAKER 的关联与创新点。
8. 结论
- 总结 LLM 在代码补全任务中的安全威胁与后门攻击挑战。
- 回顾 CODEBREAKER 的创新性与有效性:首个 LLM 辅助后门攻击框架,难以检测的恶意代码建议。
- 强调检测方法的局限性与开发更强大防护措施的紧迫性。
- 致谢研究参与者与资助机构。
附录
- 额外信息与详细内容:
- 现有攻击方法与 CODEBREAKER 的比较
- GPT-4 提示设计示例
- 代码转换与混淆示例
- 算法伪代码与性能评估结果
- 用户研究参与者人口统计信息
- 针对 CODEBREAKER 的防御策略讨论