Black-Box Adversarial Attacks on LLM-Based Code Completion

📄 arXiv: 2408.02509v2 📥 PDF

作者: Slobodan Jenko, Niels Mündler, Jingxuan He, Mark Vero, Martin Vechev

分类: cs.CR, cs.LG, cs.PL, cs.SE

发布日期: 2024-08-05 (更新: 2025-06-13)


💡 一句话要点

INSEC:针对LLM代码补全的隐蔽黑盒对抗攻击,显著提升不安全代码生成率

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码补全 大型语言模型 对抗攻击 黑盒攻击 安全漏洞 软件安全 LLM安全

📋 核心要点

  1. 基于LLM的代码补全引擎被广泛使用,但其安全性未得到充分重视,存在被恶意利用的风险。
  2. INSEC通过注入精心构造的注释字符串,诱导LLM生成不安全代码,同时保证功能正确性。
  3. 实验证明INSEC在多种模型和商业服务上有效,能显著提高不安全代码生成率,且成本低廉。

📝 摘要(中文)

本文揭示了基于大型语言模型(LLM)的代码补全引擎面临的安全风险。研究表明,攻击者可以通过隐蔽的方式偏置这些引擎,显著提高其生成不安全代码的概率。为此,作者提出了一种名为INSEC的黑盒攻击方法。INSEC通过在补全输入中注入精心设计的攻击字符串(以注释形式存在)来实现。该攻击字符串通过基于查询的优化过程生成,并从一系列精心设计的初始化方案开始。实验结果表明,INSEC具有广泛的适用性和有效性,能够在各种开源模型和商业服务(如OpenAI API和GitHub Copilot)上成功实施。在涵盖5种编程语言和16种CWE的安全关键测试用例中,INSEC将不安全代码的生成率提高了50%以上,同时保持了生成代码的功能正确性。INSEC具有实际应用价值,开发成本低廉,并且可以通过IDE插件隐蔽地注入到GitHub Copilot等扩展中。

🔬 方法详解

问题定义:论文旨在解决LLM驱动的代码补全引擎在安全性方面的脆弱性问题。现有的代码补全引擎容易受到对抗攻击,导致生成包含安全漏洞的代码,而开发者可能难以察觉。现有的防御方法往往需要访问模型内部参数,无法应用于黑盒场景。

核心思路:核心思路是通过构造特定的输入(攻击字符串),诱导LLM在代码补全过程中生成不安全的代码。攻击字符串以注释的形式存在,以保证隐蔽性,避免引起开发者的注意。通过优化算法,找到能够最大程度提高不安全代码生成率的攻击字符串。

技术框架:INSEC攻击框架主要包含以下几个阶段:1) 初始化:从一组精心设计的初始化方案中生成初始攻击字符串。2) 查询:将包含攻击字符串的输入发送给目标LLM代码补全引擎,获取补全结果。3) 评估:评估补全结果的安全性,判断是否包含安全漏洞。4) 优化:根据评估结果,使用基于查询的优化算法(例如,遗传算法)迭代更新攻击字符串,直到达到预定的攻击目标。

关键创新:INSEC的关键创新在于其黑盒攻击的特性,无需访问目标LLM的内部参数即可实施攻击。此外,INSEC通过优化攻击字符串,实现了在保证代码功能正确性的前提下,显著提高不安全代码的生成率。攻击字符串以注释形式存在,增加了攻击的隐蔽性。

关键设计:攻击字符串的初始化方案包括基于常见安全漏洞模式的字符串、随机字符串等。优化算法采用遗传算法,以不安全代码生成率作为适应度函数。评估补全结果的安全性,采用静态代码分析工具(如Semgrep)检测常见的安全漏洞(例如,SQL注入、跨站脚本攻击等)。攻击成本通过API调用次数进行控制,以保证攻击的实用性。

🖼️ 关键图片

fig_0
fig_1

📊 实验亮点

INSEC攻击在多种开源模型和商业服务(如OpenAI API和GitHub Copilot)上进行了评估。实验结果表明,INSEC能够显著提高不安全代码的生成率,平均提升超过50%。在某些情况下,不安全代码的生成率甚至可以提高到80%以上。攻击成本低廉,仅需不到10美元即可完成攻击字符串的开发。此外,研究者还开发了一个IDE插件,演示了INSEC在实际开发环境中的可部署性。

🎯 应用场景

该研究成果可应用于评估和提高LLM驱动的代码补全引擎的安全性。开发者可以使用INSEC来测试其使用的代码补全工具的安全性,并采取相应的防御措施。此外,该研究也为开发更安全的LLM代码补全引擎提供了指导,例如,可以通过对抗训练来提高模型对对抗攻击的鲁棒性。未来的研究可以探索更复杂的攻击方法和更有效的防御策略。

📄 摘要(原文)

Modern code completion engines, powered by large language models (LLMs), assist millions of developers with their strong capabilities to generate functionally correct code. Due to this popularity, it is crucial to investigate the security implications of relying on LLM-based code completion. In this work, we demonstrate that state-of-the-art black-box LLM-based code completion engines can be stealthily biased by adversaries to significantly increase their rate of insecure code generation. We present the first attack, named INSEC, that achieves this goal. INSEC works by injecting an attack string as a short comment in the completion input. The attack string is crafted through a query-based optimization procedure starting from a set of carefully designed initialization schemes. We demonstrate INSEC's broad applicability and effectiveness by evaluating it on various state-of-the-art open-source models and black-box commercial services (e.g., OpenAI API and GitHub Copilot). On a diverse set of security-critical test cases, covering 16 CWEs across 5 programming languages, INSEC increases the rate of generated insecure code by more than 50%, while maintaining the functional correctness of generated code. We consider INSEC practical -- it requires low resources and costs less than 10 US dollars to develop on commodity hardware. Moreover, we showcase the attack's real-world deployability, by developing an IDE plug-in that stealthily injects INSEC into the GitHub Copilot extension.