Security of Language Models for Code: A Systematic Literature Review

该论文于2025年被CCF A类期刊TOSEM收录,作者来自南京大学和南洋理工大学。

概述

代码语言模型(CodeLMs)已成为代码相关任务的强大工具,其性能优于传统方法和标准的机器学习方法 。然而,这些模型容易受到安全漏洞的影响,这引起了软件工程、人工智能和网络安全等领域越来越多的研究关注 。尽管对CodeLMs安全性的研究日益增多,但该领域仍缺乏全面的综述 。为了弥补这一空白,论文中系统地回顾了68篇相关论文,并根据攻击和防御策略对它们进行了整理。此外,论文还概述了常用的语言模型、数据集和评估指标,并强调了可用的开源工具和未来保障CodeLMs安全性的有前景的研究方向。

贡献

  • 首个全面的综述: 论文系统性地回顾了68篇相关研究,是首个针对CodeLMs安全的文献综述。该综述对CodeLMs的攻击和防御策略进行了全面的分类和分析。
  • 资源整理: 论文概述了CodeLMs安全研究中常用的语言模型、数据集和评估指标。此外,作者还整理并总结了可用的开源工具和数据集,并在他们的代码库中提供了这些资源TiSE-CodeLM-Security。
  • 挑战与展望: 论文基于对现有研究的深入分析,指出了CodeLMs安全研究领域面临的关键挑战和未来的发展方向。

背景

代码语言模型

代码语言模型(CodeLMs)是利用神经网络和深度学习技术,用于理解、生成或处理代码的语言模型 。可以形式化为一个函数f:X→Yf:\mathcal{X} \rightarrow \mathcal{Y}f:XYX\mathcal{X}X是包含代码片段的输入空间,Y\mathcal{Y}Y是输出空间。一个CodeLM常常由有序的n个层构成,连接方式为:fθ(x)=fn−1∘fn−2⋯∘f0(x)f_\theta(x) = f_{n-1} \circ f_{n-2} \cdots \circ f_0(x)fθ(x)=fn1fn2f0(x),模型的训练过程可以表示为最小化经验风险:

arg⁡min⁡θE(x,y)∼{X,Y}[L(fθ(x),y)]\arg\min_{\theta} \mathbb{E}_{(x,y)\sim\{X,Y\}} \left[ \mathcal{L}(f_\theta(x), y) \right]argθminE(x,y){X,Y}[L(fθ(x),y)]

代码相关的任务主要分为两类:代码理解任务,如算法分类、代码克隆检测、代码搜索等;代码生成任务,如代码生成、代码归纳、代码优化。对于代码理解任务来说,损失函数可以使用交叉熵函数:

L(θ)=∑i=0N−yilog⁡(fθ(xi))\mathcal{L}(\theta) = \sum_{i=0}^{N} -y_i \log(f_\theta(x_i))L(θ)=i=0Nyilog(fθ(xi))

对于代码生成任务来说,目标是为了最小化负条件对数似然,损失函数可以使用如下函数:

L(θ)=−1N∑i=1Nlog⁡P(fθ(xi)∣xi)\mathcal{L}(\theta) = -\frac{1}{N} \sum_{i=1}^{N} \log P(f_\theta(x_i) \mid x_i)L(θ)=N1i=1NlogP(fθ(xi)xi)

语言模型安全

深度学习模型的安全威胁可以被归为四类He et al.

  • 模型提取攻击:通过API复现一个深度学习模型。
  • 模型翻转攻击:利用模型的预测和置信度分数来恢复训练数据中的数据成员关系和属性。
  • 投毒攻击:通过污染训练数据来降低深度学习模型的预测准确性,从而损害模型的可用性。
  • 对抗攻击:在代码语言模型(CodeLMs)的推理阶段发生的,旨在利用模型的弱点,使其做出错误的预测。

研究问题

在这里插入图片描述

RQ1:针对于代码语言模型的攻击

针对于代码语言模型的攻击可以分为两类:后门攻击和对抗攻击。后门攻击可细分为数据投毒攻击和模型投毒攻击,对抗攻击可以细分为白盒攻击和黑盒攻击。

  1. 后门攻击

    在这里插入图片描述

    • 数据投毒攻击

      数据投毒旨在向输入样本中注入特定触发器,从而使经过这些数据训练的模型将任何包含该触发器的输入错误地分类为目标标签(分类任务)。

      Section4.2.2介绍了现有的数据投毒攻击的相关工作。

    • 模型投毒攻击

      模型投毒攻击在设计触发器和构建有毒数据集上和数据投毒类似,旨在使用有毒数据集训练一个模型。

      Section4.2.3介绍了现有的模型投毒攻击的相关工作。

    两个攻击都是为了向模型中植入后门,主要区别在于攻击者对于模型的控制程度。数据投毒攻击中,攻击者只能掌握目标模型的训练集(即,可以向开源平台投放有毒数据集),但是模型投毒攻击中,攻击者能够直接操作训练过程(即,可以向开源平台投放有毒数据集甚至是后门模型)。

    总结:

    • 攻击有效性:数据投毒和模型投毒这两种攻击方式都对各种CodeLMs(包括预训练和非预训练模型)以及多种代码相关任务(如代码理解和代码生成任务)展现出了有效性 。

    • 数据投毒是主流:在针对CodeLMs的后门攻击研究中,数据投毒是目前被研究最广泛的方法 。其中,使用固定的或语法无效的死代码片段作为触发器是最常见的方式 。

    • 隐蔽性挑战:死代码触发器通常由一行或多行代码组成,隐蔽性较低,容易被开发者或静态分析工具检测到 。为了提高隐蔽性,一些研究利用代码频率、上下文或对抗性扰动来设计触发器,并通过替换标识符来执行攻击 。不过,这些更隐蔽的方法通常成功率较低,且常是针对特定任务的 。

    • 模型投毒的崛起:自 2023 年以来,模型投毒攻击开始受到关注 。它被认为比数据投毒构成更大的威胁,因为攻击者可以直接操控训练过程并发布带有后门的预训练模型 。然而,目前该类攻击也面临着与数据投毒类似的隐蔽性不足问题,因为它们通常也使用固定的或语法无效的触发器 。

    • 自然存在的后门:研究还发现,后门漏洞不仅会由攻击者有意植入,也可能存在于自然训练模型中 。

  2. 对抗攻击

    在这里插入图片描述

    对抗攻击的本质是制造合适的扰动来利用深度学习模型的缺陷。扰动是指在对抗样本生成阶段,有意向原始输入样本中添加的细微噪音,目的是在测试阶段欺骗模型。根据攻击者对于目标代码语言模型的了解,对抗攻击可以分为两种类型:

    • 白盒攻击:攻击者掌握了有关目标模型的全部内容,包括架构、参数以及训练数据,同时也包括相关的防御机制。

      4.3.2部分介绍了白盒攻击的相关工作

    • 黑盒攻击:攻击者预先不知道有关目标模型的知识,只能通过与模型的交互来发动攻击。

      4.3.3部分介绍了黑盒攻击的相关工作

    总结

    • 攻击的有效性

      白盒和黑盒对抗攻击都已证明对各类CodeLMs,包括预训练和非预训练模型,以及各种代码相关任务(如代码理解和代码生成)都是有效的 。

    • 白盒攻击
      白盒攻击主要依赖于目标模型的梯度信息来生成对抗样本 。这些扰动不会改变程序的语义功能,且生成的样本仍然可以成功编译 。常见的扰动操作包括在标识符和语句层面进行替换、插入和删除,例如重命名变量或插入死代码 。然而,主要的挑战在于如何生成既细微又有效的对抗样本 。

    • 黑盒攻击
      黑盒攻击是目前研究中越来越受关注的领域 。与白盒攻击不同,它不依赖于模型的梯度信息 ,而是通过观察模型的输入与输出之间的关系来生成对抗样本。这类攻击通常使用演化算法、遗传算法或其他基于查询的方法来寻找最优扰动。由于缺乏模型的内部信息,黑盒攻击通常比白盒攻击更耗时,成功率也更低。

  • 后门攻击:攻击者在模型中植入特定的触发器模式(即后门)。这种攻击能使模型在正常输入下表现良好,但当触发器被激活时,会产生恶意输出 。后门可以通过数据投毒或模型投毒的方式植入,其触发器的设计和注入方法决定了攻击的隐蔽性和有效性 。
  • 对抗攻击:这种攻击涉及向输入中添加细微的扰动,从而导致模型做出不正确的预测 。这些扰动通常不会改变代码的语义功能,但可以误导模型的预测结果 。对抗攻击分为白盒攻击和黑盒攻击,这两种攻击都旨在破坏模型的稳健性 。

总结来说,现有研究表明,CodeLMs 很容易受到后门攻击和对抗攻击的威胁,这应该引起软件工程界的关注 。

RQ2:针对于代码语言模型的防御

后门防御可以分为三类:预训练防御、训练时防御和训练后防御。对抗防御也可以分为三类:对抗训练、模型修改和附加模型。当前对于后门防御和对抗防御的研究都在起步阶段。

  1. 后门防御

    后门防御寻求消除或者降低后门攻击的成功率,从而增强模型的安全性。根据防御实施的不同阶段,可以分为三类:

    • 预训练防御:旨在训练前检测和移除有毒样本。

      5.2.2部分介绍预训练防御的相关工作

    • 训练时防御:旨在防止训练时的后门注入。

      5.2.3部分介绍训练时防御的相关工作

    • 训练后防御:在模型训练完成后应用。通常利用模型“去学习”或输入过滤等技术,以确保模型安全。

      5.2.4部分介绍训练后防御的相关工作

    总结:现有的后门防御方法覆盖了预训练、训练时和训练后三个阶段,通过各种技术有效地增强了代码模型的安全性。然而,后门防御仍然处于起步阶段并且研究有限。

  2. 对抗防御

    目前主要有三类对抗防御方法,旨在增强模型的鲁棒性或消除对抗样本的影响,包括修改输入、修改模型以及附加模型。目前针对于代码模型的对抗防御主要集中在修改输入上。

    • 修改输入:旨在通过改边模型训练过程或者输入数据样本来增强模型的鲁棒性。这种方法通常将对抗性样本引入训练中,以提高模型对抗攻击的能力。

      5.3.2部分介绍了对抗训练的相关工作

    • 修改模型:通过在模型内部添加子网络、修改激活函数或改边损失函数等方式来实现防御。

      5.3.3部分介绍了模型修改的相关工作

    • 附加模型:使用外部模型作为额外的网络来处理未见过的对抗性样本。

      5.3.4部分介绍了附加模型的相关工作

    总结:

    • 修改输入:这种方法通常采用对抗训练,通过在训练过程中引入对抗性样本来增强模型的稳健性。
    • 修改模型:这种策略通过调整子网络、激活函数或损失函数来有效检测和处理对抗性样本。
    • 附加模型:该方法利用外部模型作为附加网络,以增强分类的稳健性。

    尽管当前的防御技术涵盖了CodeLMs的不同方法和关键阶段,但与针对CodeLMs安全性的攻击研究相比,防御研究仍处于早期阶段。

RQ3:针对于代码语言模型安全性的实证研究

实证研究表明,目前针对代码语言模型(CodeLMs)安全性的研究主要集中在两大方面:

  • 评估攻击的性能:对后门攻击和对抗攻击在不同任务和各种CodeLMs上的表现进行全面评估,包括攻击的成功率及其对模型性能的影响。
  • 分析防御的效果:研究不同防御组件对防御有效性和模型整体性能的影响。

无论是攻击还是防御方法,经验研究都侧重于评估其有效性、对模型性能的影响以及在有效性和模型性能之间做出的权衡。

RQ4:实验设置和评估

  1. 常用数据集

    • 后门攻击与防御研究:常用的数据集包括 CodeSearchNetCodeXGLUECode2Seq
    • 对抗攻击与防御研究:常用的数据集包括 CodeSearchNetCodeXGLUEBigCloneBenchDevignAPPSCodeQAGCJ
  2. 常用代码模型

    • CNN、RNN、LSTM、GRU、BiLSTM、BiRNN、RandomForest等传统深度学习模型。
    • GNN、GCN、GGNN等基于图的模型
    • Transformer、CodeBERT、GraphCodeBERT、CodeT5、CodeT5+、PLBART、CodeGen、GPT-2、GPT-3.5、GPT-4等预训练模型。
    • DL-CAIS、ASTNN、Code2Vec、Code2Seq等其他模型。
  3. 常用指标

    • 攻击和防御指标

      • 后门误报率(FPRFPRFPR

      • 平均归一化排名(ANRANRANR

      • 检索数量

      • 扰动率(PertPertPert

      • 相对下降程度(RdR_dRd

      • 有效率(VrV_rVr)

      • 成功率(SrS_rSr)

      • 变量改变率(VCRVCRVCR)

    • 模型表现指标

      • 干净准确率(CACACA)
      • F1−socreF1-socreF1socre
      • 平均倒数排名(MRRMRRMRR)
      • 双语互译质量评估(BLEUBLEUBLEU
      • CodeBLEUCodeBLEUCodeBLEU
      • 攻击成功率(ASRASRASR)
      • Top-K成功率(SuccessRate@kSuccessRate@kSuccessRate@k)
  4. 组件开源

    为了验证这些CodeLM研究的可复现性,研究人员系统地审查了每篇论文,以确保所提供的代码链接是公开可访问和有效的 。他们将所有论文中包含开源代码库的链接信息整理并收录在论文的表12中,以便于未来的研究。

实证研究的实验设置和评估方法,主要涵盖四个关键方面。

  • 数据集:强调了选择多样化且具代表性的数据集的重要性,这些数据集用于代码生成和对抗性测试等任务。
  • 模型:探讨了研究中使用的各种实验性 CodeLMs,以及如何根据不同任务评估它们的性能。
  • 评估指标:将评估指标分为两类:一类用于评估攻击和防御技术的有效性,另一类则用于衡量模型的整体性能(如准确性和效率)。
  • 组件可访问性:强调了开源代码库的必要性,以确保研究的透明度和可复现性,从而促进该领域的更广泛发展。

挑战和机遇

  1. 针对攻击的挑战和机遇

    • 后门触发器的隐蔽性:全面评估触发器的隐蔽性是一大挑战,因为现有的评估方法未能涵盖所有检测维度。

    • 大型语言模型的后门注入:对 Codex、GPT-4 等闭源大型 CodeLMs 注入后门成本高昂且难度极大。随着模型规模和鲁棒性的增强,后门攻击的有效性会降低。

    • 对抗样本的质量:确保对抗样本在扰动后仍能保持语法正确性和语义一致性是一大挑战。

    • 可解释性的双刃剑:提升模型可解释性有助于深入理解攻击原理,但同时也可能帮助攻击者更精准地设计触发器或寻找攻击向量 。

    • 探索其他攻击类型:除了后门和对抗攻击,未来的研究还应探索其他新兴威胁,如隐私泄露、成员推断攻击和水印攻击等。

  2. 针对防御的机遇和挑战

    • 平衡防御有效性与模型性能:精准检测投毒样本同时又不产生高误报率是挑战 。在提高模型鲁棒性的同时,如何避免影响其正常性能,尤其是在大型模型上,是一个重大难题。

    • 多场景防御:未来研究应探索在 CodeLMs 整个生命周期(训练前、训练中、训练后)实施综合防御策略,以增强模型安全。

    • 利用可解释性进行防御:提高 CodeLMs 的可解释性可以帮助防御者更好地理解模型漏洞,从而超越或至少跟上攻击技术的发展步伐。

    • 应对新兴威胁:开发新的防御策略来应对隐私泄露和成员推断攻击等新兴安全威胁至关重要。

总而言之,攻击者与防御者之间的攻防战是一个持续演变的博弈过程,双方都可以利用新技术来获得优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95986.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95986.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95986.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[光学原理与应用-422]:非线性光学 - 计算机中的线性与非线性运算

在计算机科学中,线性运算和非线性运算是两类核心的数学操作,它们在算法设计、数据处理、机器学习等领域有广泛应用。两者的核心区别在于是否满足叠加原理(即输入信号的线性组合的输出是否等于输出信号的线性组合)。以下是详细解释…

Day21_【机器学习—决策树(3)—剪枝】

决策树剪枝是一种防止决策树过拟合的一种正则化方法;提高其泛化能力。决策树在训练过程中如果生长过深、过于复杂,会过度拟合训练数据中的噪声和异常值,导致在新数据上表现不佳。剪枝通过简化树结构,去除不必要的分支,…

从零构建企业级LLMOps平台:LMForge——支持多模型、可视化编排、知识库与安全审核的全栈解决方案

🚀 从零构建企业级LLMOps平台:LMForge——支持多模型、可视化编排、知识库与安全审核的全栈解决方案 🔗 项目地址:https://github.com/Haohao-end/LMForge-End-to-End-LLMOps-Platform-for-Multi-Model-Agents ⭐ 欢迎 Star &…

如何使显示器在笔记本盖上盖子时还能正常运转

1、搜索找到控制面板,打开进入 2、找到硬件和声音,进入 3、选择电源选项 4、选择 选择关闭笔记本计算机盖的功能 5、把关闭子盖时,改成不采取任何操作 参考链接:笔记本电脑合上盖子外接显示器依然能够显示设置_笔记本合上外接显示…

FPGA学习笔记——SDR SDRAM的读写(调用IP核版)

目录 一、任务 二、需求分析 三、Visio图 四、具体分析 1.需要注意的问题 (1)器件SDRAM需要的时钟 (2)跨时钟域(异步FIFO) 2.模块分析和调用 (1)SDR SDRAM IP核调用 &…

离散数学学习指导与习题解析

《离散数学学习指导与习题解析(第2版)》是屈婉玲、耿素云、张立昂编著的《离散数学(第2版)》的配套参考书,旨在为学生提供系统的学习指导和丰富的习题解析。本书内容全面,涵盖数理逻辑、集合论、代数结构、…

Qt网络通信服务端与客户端学习

Qt网络通信服务端与客户端学习 一、项目概述 本项目基于Qt框架实现了TCP服务端与客户端的基本通信,涵盖连接、消息收发、断开管理等功能,适合初学者系统学习Qt网络模块的实际用法。 二、项目结构 52/ 服务端:main.cpp、widget.cpp、widget.h5…

神马 M60S++ 238T矿机参数解析:高效SHA-256算法比拼

1. 算法与适用币种神马 M60S 238T采用SHA-256算法,适用于挖掘主流的加密货币,包括比特币(BTC)和比特币现金(BCH)。SHA-256(安全哈希算法256位)是一种广泛应用于比特币等加密货币挖矿…

[特殊字符] 深入理解操作系统核心特性:从并发到分布式,从单核到多核的全面解析

🚀 深入理解操作系统核心特性:从并发到分布式,从单核到多核的全面解析💡 前言:操作系统是计算机的灵魂,它就像一个优秀的管家,协调着硬件和软件之间的关系。今天,我们将深入探讨操作…

人工智能机器学习——聚类

一、无监督学习(Unsupervised Learning)机器学习的一种方法,没有给定事先标记过的训练示例,自动对输入的数据进行分类或分群。优点: 算法不受监督信息(偏见)的约束,可能考虑到新的信息不需要标签数据&#…

优化MySQL分区表备份流程详解

在大型数据驱动应用中,MySQL分区表是优化查询和维护历史的常见选择。但随之而来的数据备份问题却让许多开发者头疼:如何确保分散在不同分区的数据能完整、一致地被备份,并在需要时快速恢复?手动处理不仅繁琐,而且极易出…

用 Go + HTML 实现 OpenHarmony 投屏(hdckit-go + WebSocket + Canvas 实战)

本文带你用 Go HTML/WebSocket 从零实现一个 OpenHarmony 设备投屏 Demo:Go 侧用 hdckit-go 连接设备并抓取屏幕帧(UiDriver),通过 WebSocket 二进制实时推送到浏览器,前端用 Canvas 渲染,并根据设备分辨率…

运筹学——求解线性规划的单纯形法

单纯形法的原理 先来举个例子: 用单纯形法求解下面线性规划问题的最优解:注释:解的过程是反复迭代的过程,如果第一次迭代没有理解也没关系,再继续看第二次迭代,和第三次迭代,每次迭代的流程都是…

Python GUI 框架 -- DearPyGui 简易入门

DearPyGui 关于 DPG 是一个简单且功能强大的 Python 图形用户界面框架。 与其他Python图形用户界面库相比,DPG具有以下独特之处: GPU 渲染多线程高度可定制内置开发人员工具:主题检查、资源检查、运行时指标带有数百种小部件组合的 70 多…

gcloud cli 使用 impersonate模拟 服务帐号

什么是模拟服务帐号 众所周知, gcloud 登陆的方式有两种 使用个人帐号, 通常是1个邮箱地址使用一个service account 通常是1个 json key 文件 所谓模式服务帐号意思就是, 让操作人员用个人帐号登陆, 但是登陆后所有的操作都是基于…

idf--esp32的看门狗menuconfig

1.Interrupt Watchdog Timeout (ms):意思是中断看门狗,也就是专门监管中断响应时间的看门狗,如果某个中断服务程序超过了这个运行时间,就会导致程序重启。2.红框是任务看门狗的最大看门时间,超过时间就会警告&#xff…

git在Linux中的使用

git-Linux中的使用一、下载git二、https方式上传三、ssh秘钥方式上传一、下载git 版本信息 [rootrocky ~]# cat /etc/rocky-release Rocky Linux release 9.4 (Blue Onyx) [rootrocky ~]# cat /etc/rocky-release-upstream Derived from Red Hat Enterprise Linux 9.4 [rootro…

HMI(人机界面)

新晋码农一枚,小编定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!一、核心…

嵌入式解谜日志—多路I/O复用

多路 I/O复用(Multiplexed I/O):1.定义:系统提供的I/O事件通知机制2.应用:是一种 I/O 编程模型,用于在单线程中同时处理多个(阻塞) I/O 操作,避免因等待某个 I/O 操作完成…

关于嵌入式学习——单片机4

ds18b20温度传感器的使用一、传感器分类:数字温度传感器,实现简单,不需要额外转换电路,采集过来的就是数字温度值模拟温度传感器->热敏电阻->AD转换电路->数字值二、传感器接口:GPIO接口:&#xf…