论文标题:An LLM-assisted Easy-to-Trigger Backdoor Attack on Code Completion Models: Injecting Disguised Vulnerabilities against Strong Detection
期刊名:Proceedings of the 33rd USENIX Security Symposium

研究背景与动机

  • 随着大型语言模型(LLMs)在代码补全任务中的广泛应用,其安全性问题日益凸显。
  • 传统攻击方法易被静态分析或后续检测工具识别,难以保持隐蔽性。
  • 为应对强检测挑战,提出 CODEBREAKER 框架,通过伪装漏洞注入后门,实现对代码补全模型的持续隐蔽攻击。

论文核心方法和步骤

  • 攻击框架设计

    1. 恶意负载生成:攻击者利用 LLM(如 GPT-4)和迭代转换算法(Algorithm 1)生成可绕过静态分析的恶意代码,并通过 AST 编辑距离与检测得分评估隐蔽性:
      $$
      \text{fitness} = (1 - \text{codeDis}) \times \text{evasionScore}
      $$

    2. 触发器嵌入与代码上传:将恶意负载和触发器嵌入公共代码库,诱导受害者在微调时下载含后门的代码文件。

    3. 模型微调与触发:受害者使用含恶意代码的文件微调代码补全模型;推理阶段遇到触发器即输出伪装漏洞。

  • 恶意负载的转换与混淆

    • Phase I 转换:通过 LLM 辅助算法最小化语法差异,确保恶意功能不变且逃避静态分析工具。
    • Phase II 混淆:进一步使用 LLM 生成更复杂变体,降低基于 LLM 检测工具的检测率,保证高隐蔽性。

实验结果与结论

  • 实验设置

    • 数据集:从 GitHub 收集约 1,080,606 个 Python 文件,分为样本生成、模型微调和困惑度评估三部分。
    • 目标模型:CodeGen-Multi(Salesforce 自回归解码器)。
  • 攻击效果评估

    • 相较 SIMPLE、COVERT、TROJANPUZZLE 等方法,CODEBREAKER 在多种触发机制下生成的恶意建议未被静态分析工具或 GPT-4 检测到。
    • 针对“直接使用 jinja2”漏洞的实验中,三种触发机制均能成功绕过检测。
  • 6.2 用户研究结果

    • 参与者概况:

      • 招募了10名参与者,平均拥有5.7年的编程经验(标准差为3.02)。
      • 所有参与者都使用过基于LLM的代码助手(例如Copilot),并且熟悉Python。
      • 其中,6名参与者具有安全经验(拥有安全领域的硕士或博士学位,或从事安全应用开发),另外4名参与者参加过网络安全课程,是软件开发者。
    • 恶意负载接受情况:

      • 9名参与者(共10名)接受了至少一个故意被投毒的恶意负载。
      • 这些参与者通过简单地复制粘贴恶意代码来完成任务,而没有仔细审查或仔细检查建议的负载,使他们容易受到投毒攻击。
      • 1名参与者(P10)没有简单地接受恶意负载(对建议的负载进行了轻微修改),因为P10对所有其他基于LLM的代码助手工具生成的代码片段的功能质量普遍不满。P10的主要关注点是确保生成的代码片段的功能正确性,而不是安全性。
    • 模型接受率对比:

      • CODEBREAKER与干净模型对比:

        • 假设:对于所有参与者来说,由CODEBREAKER生成的代码和干净模型生成的代码在被接受程度上存在显著差异。
        • 接受率:CODEBREAKER模型被10名参与者中的8名接受,而干净模型被10名参与者中的7名接受。
        • 卡方检验结果:计算出的卡方值为0.2666,自由度为1。采用显著性水平(p < 0.05),并针对此对比应用了博内费罗尼校正,调整后的显著性水平为p < 0.025。计算出的卡方值0.2666显著低于临界值(5.024),意味着零假设不成立,表明即使在应用了博内费罗尼校正之后,也没有足够的证据得出CODEBREAKER与干净模型在接受率上存在显著差异的结论。
      • 安全专家与非安全专家对比:

        • 假设:具有安全经验的参与者(P5 – P10)对CODEBREAKER模型生成的代码的接受率会低于没有安全经验的参与者(P1 – P4)。
        • 接受情况:没有安全背景的参与者全部接受了恶意负载,而具有安全背景的参与者中有5名接受了恶意负载(要么是jinja2要么是requests)。P10对CODEBREAKER和干净模型生成的负载都进行了轻微修改,但故意的恶意负载仍然存在。
        • 卡方检验结果:计算出的卡方值为0.7407,自由度为1。应用博内费罗尼校正后,计算出的卡方值低于临界值(5.024),无法拒绝零假设,没有足够的证据得出具有安全经验的参与者对CODEBREAKER模型的接受率显著低于没有安全经验的参与者的结论。
  • 7 相关工作

    • 语言模型在代码补全中的应用:

      • 语言模型(如T5、BERT和GPT)在自然语言处理领域取得了显著进展,并被成功应用于软件工程任务,包括代码补全、代码总结、代码搜索和程序修复等。
      • 早期的代码补全方法将代码视为标记序列,采用统计和概率技术进行代码分析。近年来,深度学习技术、预训练方法以及结构化表示(如抽象语法树、图和代码标记类型)被引入,以改进代码补全性能。
      • 一些方法还扩展了代码补全的范围,不仅考虑输入文件中的信息,还结合了其他相关信息。
    • 漏洞检测:

      • 漏洞检测对于软件安全至关重要。静态分析工具(如Semgrep和CodeQL)能够在不运行代码的情况下识别潜在的安全漏洞,从而实现早期检测。然而,这些工具的有效性可能受到语言特异性和手动规则编写难度的限制。
      • 随着深度学习的发展,出现了多种基于深度学习的漏洞检测方法,如基于图神经网络的Devign、Reveal、LineVD和IVDetect,以及基于LSTM的VulDeePecker和SySeVR等。
      • 最近的趋势显示,基于Transformer的模型(如CodeBERT和LineVul)在漏洞检测方面表现出色,通常优于专门的方法。此外,LLMs(如GPT-4)在识别可能导致安全漏洞的代码模式方面展现出了显著的能力。
    • 对代码语言模型的后门攻击:

      • 后门攻击可能会严重破坏代码语言模型。已有研究开展了针对代码搜索模型、神经代码搜索模型、缺陷检测、克隆检测和代码修复的后门攻击。
      • 例如,Wan等人对代码搜索模型进行了首次后门攻击,但其触发器容易被开发者检测到。Sun等人提出了BADCODE,这是一种针对神经代码搜索模型的隐蔽攻击,通过修改函数和变量名称来实现。
      • Li等人开发了CodePoisoner,这是一种多功能的后门攻击策略。还有研究提出了在预训练阶段嵌入攻击的与任务无关的后门策略。
      • Schuster等人对代码补全模型(包括GPT-2)进行了开创性的后门攻击,但由于恶意负载容易被检测到,其有效性受到限制。Aghakhani等人则建议将不安全的负载嵌入到看似无害的区域(如注释)中,但这种方法仍然无法逃避静态分析和基于LLM的检测。
  • 结论
    CODEBREAKER 利用 LLM 辅助的负载生成与混淆技术,成功对代码补全模型注入后门并绕过强检测工具。研究强调需加强模型安全


[[An LLM-Assisted Easy-to-Trigger Backdoor Attack on Code Completion Models:Injecting Disguised Vulnerabilities against Strong Detection-要点]]


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