根据提供的文档内容,以下是这篇题为《Black-Box Adversarial Attacks on LLM-Based Code Completion》论文各章节的要点提炼:

1. Abstract (摘要)

  • 核心问题:基于大语言模型(LLM)的现代代码补全引擎(如GitHub Copilot)被广泛使用,但其安全性 implications 值得研究。

  • 主要贡献:提出了首个针对黑盒LLM代码补全引擎的攻击方法 INSEC。该攻击通过向补全输入中注入一个简短的攻击性注释字符串,能够显著增加模型生成不安全代码的比例。

  • 效果:在涵盖5种编程语言、16种CWE(常见缺陷枚举)的多样化安全关键测试案例上,INSEC将生成不安全代码的比例提高了超过50%,同时保持了生成代码的功能正确性。

  • 实用性:攻击成本低廉(<10美元),并展示了通过恶意IDE插件在GitHub Copilot上的真实世界可部署性。

2. Introduction (引言)

  • 背景:LLM代码补全极大地提升了编程效率,但已有研究表明LLM容易生成带有安全漏洞的代码。

  • 威胁模型:提出了一个新颖的黑盒威胁模型。攻击者无法访问模型内部,而是通过操纵引擎的输入(即用户查询)来实现攻击。攻击需满足三个约束:高漏洞率、保持功能正确性、低延迟/计算开销。

  • 攻击可行性:攻击在后台隐蔽进行,用户难以察觉。通过开发一个看似良性的VSCode插件即可实现攻击部署。

3. Background (背景)

  • 代码补全引擎 (G):将补全过程形式化为 c ∼ G(q)c ∼ G(p, s),其中查询 q由代码前缀 p和后缀 s组成。

  • 漏洞衡量 (vulRate):使用漏洞判断函数(如静态分析器CodeQL)来计算模型在安全关键任务数据集 D_vul上生成漏洞代码的比率。

  • 功能正确性衡量 (pass@k):使用基于单元测试的 pass@k指标来评估模型生成功能正确代码的能力,并通过 passRatio@k比较攻击前后模型的功能正确性变化。

4. Attacking Black-Box Code Completion (攻击黑盒代码补全)

  • 威胁模型细化:攻击者的目标是找到一个对抗函数 f_adv,将原始查询 q转换为对抗查询 f_adv(q),从而定义恶意引擎 G_adv(q) = G(f_adv(q))

  • INSEC攻击方法

    • 攻击模板f_adv被实例化为在补全位置上一行插入一个固定的对抗字符串 σ作为注释。σ在所有用户查询中 indiscriminately 插入,确保低开销。

    • 攻击优化:使用一种基于查询的随机优化算法(Algorithm 1),通过变异和选择来寻找有效的攻击字符串。

    • 攻击初始化:提出了五种不同的初始化策略(随机、TODO、安全关键令牌、净化器、反转)来提升优化过程的收敛速度和性能。

  • 攻击部署:展示了通过恶意VSCode插件修改GitHub Copilot扩展源码的方式, stealthily 部署INSEC攻击。

5. Experimental Evaluation (实验评估)

  • 实验设置

    • 目标引擎:包括开源模型(StarCoder系列、CodeLlama)和商业服务(GPT-3.5-Turbo-Instruct, GitHub Copilot)。

    • 漏洞数据集:构建了包含16种CWE、5种编程语言的综合漏洞数据集 D_vul

    • 功能正确性数据集:基于HumanEval创建多语言补全数据集 D_func

  • 主要结果

    • INSEC在所有测试的引擎上均显著提高了漏洞率(绝对提升高达60%),同时对功能正确性的影响相对较小(相对下降<22%)。更强的模型在攻击下能更好地保持功能正确性。

    • 攻击开发成本极低(例如,针对GPT-3.5-Turbo-Instruct优化一个CWE的成本低于6美元)。

  • 消融研究

    • 攻击位置与格式:验证了将 σ作为注释插入在补全行上方是最佳选择。

    • 初始化策略:安全关键令牌初始化策略最为有效,但每种策略都在某些场景下产生了最佳攻击。

    • 优化与初始化:两者结合使用效果最佳。

    • 攻击令牌数量:5个令牌通常能达到良好性能。

  • 扩展分析

    • 多CWE攻击:优化后的单个攻击字符串可以组合使用,同时攻击多个CWE。

    • 模型间泛化:针对一个模型优化的攻击字符串在一定程度上可以泛化到其他模型。

    • 存储库级补全:INSEC对代码相似性指标的影响很小,表明其在真实场景中的隐蔽性。

6. Discussion (讨论)

  • 有效性原因:INSEC的有效性可归因于利用了LLM的指令跟随能力、漏洞存在于LLM学习分布中以及攻击引入的扰动较小。

  • 潜在防御措施:建议开发者实施缓解措施,如警报重复字符串、提示净化、中断重复查询等。同时讨论了静态分析、安全诱导注释和注释清理等防御方法的局限性。

  • 局限性与未来工作:INSEC对某些引擎的功能正确性仍有影响。未来工作可包括优化目标中显式包含功能正确性保护,并将攻击扩展到编码代理等更多场景。

  • 将INSEC与代码补全LLM、LLM代码生成安全性评估、越狱攻击、神经代码生成攻击(特别是白盒投毒攻击)以及同期工作进行了区分和比较,突出了INSEC在黑盒、隐蔽性、低成本方面的创新性。

8. Conclusion (结论)

  • 总结了INSEC作为首个有效的黑盒攻击方法,能够操纵商业代码补全引擎高频生成不安全代码,同时保持功能正确性。强调了其广泛适用性、高严重性,并呼吁社区进一步研究解决LLM代码生成系统引入的安全漏洞。

附录 (Appendix)

  • 提供了实验设置的扩展细节、攻击优化算法的具体实现(Algorithm 2, 3)、初始化策略的详细说明、额外的实验结果(如按CWE细分的结果、温度影响)、案例研究、防御措施讨论以及VSCode插件部署的代码示例。

http://example.com/posts/23.html
作者
司马吴空
发布于
2026年3月30日
许可协议