本篇综述的作者团队包括南京大学 iSE 团队的研究生陈宇琛、葛一飞、韩廷旭、张犬俊,指导教师房春荣副教授、陈振宇教授和徐宝文教授,以及来自南洋理工大学的研究员孙伟松、陈震鹏和刘杨教授。
近年来,代码语言模型(Language Models for Code,简称 CodeLMs)逐渐成为推动智能化软件开发的关键技术,应用场景涵盖智能代码生成与补全、漏洞检测与修复等。例如,基于知名代码语言模型 Codex 构建的 AI 编码助手 GitHub Copilot 能够实时提供代码建议和补全,显著提升了开发者的工作效率,现已吸引超过 100 万开发者使用。然而,随着 CodeLMs 的广泛应用,各种安全问题也逐渐显现,与自然语言模型类似,CodeLMs 同样会面临后门攻击和对抗攻击等安全威胁,安全性正受到严峻挑战。例如,受攻击的 CodeLMs 可能会生成具有隐藏安全漏洞的代码,一旦这些不安全代码被集成到开发者的软件系统(如股票交易系统和自动驾驶系统)中,可能导致严重的财产损失甚至危及生命的事故。鉴于 CodeLMs 对智能化软件开发和智能软件系统的深远影响,保障其安全性至关重要。CodeLMs 安全性正成为软件工程、人工智能和网络安全领域的研究新热潮。
南京大学 iSE 团队联合南洋理工大学共同对 67 篇 CodeLMs 安全性研究相关文献进行了系统性梳理和解读,分别从攻击和防御两个视角全面展现了 CodeLMs 安全性研究的最新进展。从攻击视角,该综述总结了对抗攻击和后门攻击的主要方法与发展现状;从防御视角,该综述展示了当前应用于 CodeLMs 的对抗防御和后门防御策略。同时,该综述回顾了相关文献中常用的实验设置,包括数据集、语言模型、评估指标和实验工具的可获取性。最后,该综述展望了 CodeLMs 安全性研究中的未来机遇与发展方向。
- 论文地址:https://arxiv.org/abs/2410.15631
- 论文列表:https://github.com/wssun/TiSE-CodeLM-Security
一、CodeLMs 安全性研究发展趋势与视角
该综述对 2018 年至 2024 年 8 月期间的相关文献数量和发表领域进行了统计分析,如图 1 所示。近年来,CodeLMs 安全性研究的关注度持续上升,凸显了其日益增长的重要性和研究价值。此外,CodeLMs 的安全性问题已在软件工程、人工智能、计算机与通信安全等多个研究领域引起了广泛关注。
图 1:CodeLMs 安全性文献累积数量及分布情况
CodeLMs 安全性的研究本质是攻击者与防御者之间的博弈。因此,如图 2 所示,该综述将研究方向划分为针对 CodeLMs 安全的攻击研究和防御研究;在攻击方面,涵盖了后门攻击(包括数据投毒攻击和模型投毒攻击)和对抗攻击(包括白盒攻击和黑盒攻击);在防御方面,涵盖了后门防御(包括模型训练前、训练中和训练后防御)和对抗防御(包括对抗训练、模型改进和模型扩展)。
图 2:CodeLMs 安全性研究方向分类
二、针对 CodeLMs 的后门攻击与对抗攻击
后门攻击
如图 3 所示,后门攻击可以通过数据投毒攻击或模型投毒攻击的方式,将隐藏的触发器植入到 CodeLMs 中,使模型在接收到特定输入时产生攻击者预期的恶意输出。
- 数据投毒攻击(Data Poisoning Attacks):攻击者向 CodeLMs 的训练数据集中注入包含触发器的有毒数据,并将这些数据发布到数据 / 代码开源平台,例如 GitHub。
- 模型投毒攻击(Model Poisoning Attacks):攻击者制作有毒的训练数据,并使用这些数据训练 / 微调有毒的预训练 CodeLMs,并将该模型发布到模型开源平台,例如 Hugging Face。
开发者或者用户通过开源平台下载并使用有毒的数据集或使用有毒的预训练模型来训练或微调下游任务的 CodeLMs。该模型将包含攻击者注入的后门。攻击者可以使用包含触发器的输入对下游任务模型发起攻击,导致其输出攻击者目标结果。
图 3:针对 CodeLMs 后门攻击的工作流
对抗攻击
如图 4 所示,对抗攻击可以通过白盒攻击或者黑盒攻击方式对输入数据添加微小的扰动,使 CodeLMs 产生错误的高置信度预测,从而欺骗模型。
- 白盒攻击(White-box Attacks):攻击者能够获得目标模型的结构和参数等信息,并可以根据这些已知信息生成对抗样本。
- 黑盒攻击(Black-box Attacks):攻击者无法得知目标模型的详细信息,只能获取模型的最终决策结果,攻击者需要通过与系统互动过程来生成对抗样本。
相比于白盒攻击,黑盒攻击所能利用的信息更少,攻击的难度更大。但是由于其更接近实际中攻击者能够掌握的信息程度,因此对于模型的威胁更大。
图 4:针对 CodeLMs 对抗攻击的工作流
三、针对 CodeLMs 的后门防御与对抗防御
为了应对 CodeLMs 上的后门攻击和对抗攻击,研究人员开发了相应的防御方法。后门防御策略通常包括在模型训练前防御、模型训练中防御和模型训练后防御,主要通过识别异常数据样本或模型行为来提高安全性。对抗防御则采用对抗训练、模型改进和模型扩展等方法,通过将对抗样本引入训练集来增强模型的安全性和鲁棒性。这些防御方法的研究为提升 CodeLMs 的安全性提供了重要支持。然而,相较于后门和对抗攻击在深度代码模型安全中的广泛研究,防御方法的研究显得尤为缺乏。
表 1:针对 CodeLMs 后门防御方法的文献列表
表 2:针对 CodeLMs 对抗防御方法的文献列表
四、CodeLMs 安全性研究中常用的数据集、语言模型、评估指标以及实验工具
该综述还总结了 CodeLMs 安全性研究中常用的数据集、语言模型、评估指标以及实验工具。
基准数据集
包括 BigCloneBench、OJ Dataset、CodeSearchNet、Code2Seq、Devign、Google Code Jam 等,涵盖了 8 种编程语言。
表 3: CodeLMs 安全性研究中常用的数据集
语言模型
包括 RNN、LSTM、Transformer、CodeBERT 和 GPT 等语言模型,涵盖了非预训练模型、预训练模型以及大语言模型。
表 4: CodeLMs 安全性研究中常用的语言模型
评估指标
在 CodeLMs 安全性的研究中,除了要关注攻击或者防御方法的效果之外,还要关注这些方法对模型产生的影响。因此,评估指标可分为两类:一类用于评估攻击或防御方法的有效性,另一类用于评估模型性能的变化。
- 攻击或防御方法的有效性评估指标:包括攻击成功率(ASR)、误报率(FPR)、平均归一化排名(ANR)、查询次数(Number of Queries)和扰动比例(Pert)等。
- 模型性能评估指标:包括准确率(ACC)、F1 分数(F1)、平均倒数排名(MRR)和双语评估替代工具(BLEU)等。
实验工具
如表 5 所示,为了促进实验工具的进一步应用和研究,该综述还深入探讨了各文献中提供的开源代码库。
表 5: CodeLMs 安全性研究中提供的可复现开源代码库链接
五、未来机遇与发展方向
该综述进一步探讨了 CodeLMs 安全性研究的未来机遇与发展方向。
针对 CodeLMs 攻击的研究
- 更全面地评估后门触发器的隐蔽性:攻击者不断探索更隐蔽的触发器设计,从早期的死代码方法发展到变量 / 函数名,甚至是自适应触发器,以期将更加隐蔽的触发器注入到代码中。然而,全面评估触发器的隐蔽性仍然是一个挑战。目前的研究方法通常侧重于特定方面,如语法或语义的可见性,或依赖于人类实验。然而,这些方法尚未覆盖所有可能的检测维度,评估指标和技术仍有改进空间。
- 探讨大语言模型的后门注入方法:目前的后门注入方法主要基于两种情景:1. 攻击者无法控制模型的训练过程,但模型使用了投毒数据进行训练;2. 攻击者可以控制模型的训练过程。然而,像 GPT-4 这样的大型代码语言模型通常是闭源的,这意味着攻击者无法控制训练过程或追踪训练数据。对于开源的大型 CodeLMs,通过训练或微调注入后门的成本显著增加。此外,随着大型 CodeLMs 的复杂性和鲁棒性增强,攻击者插入后门的难度也在增加。
- 全面地评估对抗样本的语法正确性和语义保留:当前的对抗扰动技术通常通过修改 / 替换变量名或应用不改变代码语义的变换来实现保持代码的语法正确性并保留语义。然而,现有的评估方法并未完全考虑这些对抗样本在扰动后是否保持语法正确性和语义一致性。即使某些对抗样本在表面上似乎保留了代码的语义,它们在执行过程中可能会引入语法或逻辑错误。
- 全面地评估对抗扰动的隐蔽性:在针对 CodeLMs 的白盒攻击和黑盒攻击中,当前技术通常使用基于相似度的指标(例如 CodeBLEU)来评估对抗样本的隐蔽性或自然性。然而,这些指标并不总是理想的。一些扰动可能对人类而言难以察觉,但在相似度指标中显示出显著差异,反之亦然。此外,目前的指标并未涵盖所有影响对抗样本隐蔽性的因素,尤其在评估扰动的实际效果时。
- 探讨针对 CodeLMs 攻击的原理:解释性的进展或许有助于更好地理解后门和对抗攻击的原理。微小的参数变化对预测结果影响显著,且神经网络的运行机制对人类难以直接理解。近年来,解释性已成为深度学习的重要研究方向,但对 CodeLMs 的深入理解仍是亟待解决的问题。目前,一些研究正为对抗攻击提供安全性和鲁棒性证明,但更需深入探讨预测结果的成因,使训练和预测过程不再是黑盒。解释性不仅能增强 CodeLMs 的安全性,还能揭示模型的内部机制。然而,这也可能被攻击者利用,以优化触发器选择和搜索空间,从而构建更有效的攻击。因此,尽管面临挑战,解释性的提升有望以复杂的方式增强 CodeLMs 的安全性。
针对 CodeLMs 防御的研究
- 平衡后门防御的有效性与其对模型性能影响:当前防御技术旨在保护 CodeLMs 不同阶段免受攻击。然而,要在保证模型正常性能的同时,准确高效地检测和清除后门,仍面临诸多挑战。首先,训练前防御主要通过识别数据中的 “异常” 特征来检测中毒样本,但这种方法常导致高误报率且耗费大量计算资源,难以在精确度和效率之间取得平衡。对于复杂触发器,现有防御技术在检测和移除上更具挑战性。其次,训练后的防御通过去学习或输入过滤来清除后门,但随着模型规模扩大,这些技术需要大量时间和资源,且可能对模型正常性能产生一定负面影响。
- 平衡对抗防御技术的有效性与对其模型性能的影响:CodeLMs 的对抗防御方法主要通过对抗训练或数据增强技术来提升模型的鲁棒性。然而,在增强鲁棒性和安全性的同时维持模型性能仍是一大难题。目前的研究通过基于梯度的扰动在最坏情况下对程序进行变换,与随机扰动相比,该方法更有可能生成鲁棒性更强的模型。然而,这些方法在提升鲁棒性时往往会降低模型的正常性能。尽管有些研究尝试通过将基于梯度的对抗训练与编程语言数据特征结合,或设计特定的损失函数,以同时增强模型的鲁棒性和性能,但这些方法往往需要更多的计算资源。
- 探讨 CodeLMs 的多场景防御:除了单一防御场景,多场景防御技术具有更大的潜力。从 CodeLMs 的生命周期角度来看,通过在模型训练前、训练中和训练后实施既涵盖数据保护又涵盖模型保护的混合场景防御策略,可以进一步增强 CodeLMs 的安全性。
- 探讨针对 CodeLMs 防御中的可解释性:可解释性的进展有助于缓解防御方法滞后的问题。由于当前研究尚未充分理解 CodeLMs(例如,带有触发器的输入为何会被预测为目标结果,以及不同数据如何影响模型权重),发现漏洞往往比预防攻击更容易,导致 CodeLMs 的安全性存在一定滞后性。如果能够深入理解代码模型的内部机制,防御措施将有望超越或至少与攻击技术的发展保持同步。
总体而言,CodeLMs 的安全威胁可视为攻击者与防御者之间持续演变的博弈,双方都无法获得绝对优势。然而,双方可以借助新技术和应用来获取战略优势。对于攻击者而言,有效策略包括探索新的攻击向量、发现新的攻击场景、实现攻击目标的多样化,并扩大攻击的范围和影响。对于防御者而言,结合多种防御机制是一种有前景的攻击缓解方式。然而,这种集成可能引入额外的计算或系统开销,因此在设计阶段需加以慎重权衡。