Page 64 - 《软件学报》2025年第4期
P. 64
1470 软件学报 2025 年第 36 卷第 4 期
同时有效地攻击神经代码检索系统. BadCS 包含一个中毒样本生成组件和一个重新加权知识蒸馏组件, 其中中毒
样本生成组件旨在选择语义无关的样本, 并通过添加标记级和语句级的触发器对其进行毒化. 重新加权知识蒸馏
组件以知识蒸馏为基础, 在保留模型有效性的同时为中毒样本分配更多的权重. 实验表明, BadCS 在两个数据集上
对 4 个代码检索模型可以发起有效攻击, Python 和 Java 数据集上的攻击成功率分别达到 91.46% 和 80.93% 以上,
且检索性能优于原本的良性模型. 在频谱方法与关键词识别 [65] 后门防御方法的实验也证明, 现有的防御方法无法
有效防御 BadCS. 其中, 频谱方法在 GraphCodeBERT [66] 上的最佳召回率仅为 28.85%, 关键词识别则在预训练模型
上很难检测出语句级触发器, 召回率为 0.
基于模型投毒的后门攻击在 2023 年才受到关注. 相比于数据投毒攻击, 模型投毒攻击要求操控模型的训练过
程, 攻击者可以将注入后门的预训练模型公开到开源社区. 因此相比于只能掌握部分训练数据的数据投毒攻击具
有更大的危害性. 通过使用固定触发器对特定预训练任务的预训练模型进行攻击 [28,36] , 可以使得这些模型经过干
净数据的微调后依然存在后门. 这也表明模型投毒攻击能力更强、影响范围更广. 但是, 固定的触发器同样面临隐
蔽性较低的挑战. 除了人为地对模型植入后门外, 也有研究关注自然训练模型的后门安全性, 表明即使是自然训练
的模型也会存在可以被利用的后门 [25] . 但是, 该技术只适用于特定的代码任务模型. 综上所述, 模型投毒可以控制
模型的训练和投毒过程, 因此可以通过设计额外的训练任务从而提高攻击成功率. 但与数据投毒相似, 目前针对深
度代码模型的后门攻击所面临的挑战同样是如何同时兼顾代码特性相关的隐蔽性和代码任务上的通用性.
2.2 后门防御
攻击者可以在深度代码模型训练的不同阶段实施不同手段的后门攻击, 并在模型应用阶段触发所植入的后
门. 在计算机视觉和自然语言处理领域, 研究人员针对后门攻击的特点设计了可以应用在不同阶段的后门防御方
法, 消除或降低后门攻击的成功率, 提高深度学习模型的安全性. 按照不同的防御目的, 后门防御方法可以分为:
(1) 有毒数据检测: 通过对输入的数据进行后门检测和过滤, 消除潜在的触发器或者包含触发器的数据样本, 使得
有毒模型的后门不会被触发; (2) 有毒模型检测: 通过掌握一小部分干净的数据样本, 检测模型是否被植入后门并
反转出潜在的触发器; (3) 有毒模型后门删除: 通过掌握模型的权重信息, 消除或者降低模型的毒性. 针对上述介绍
的后门攻击方法, 一些研究者提出了应用于深度代码模型领域的后门防御方法. 但是相比于计算机视觉与自然语
言处理, 该领域后门防御的研究工作尤为缺失, 目前的后门防御工作仅集中于有毒数据检测. 2020–2023 年间仅有
篇针对深度代码模型的后门防御相关研究工作.
2 频谱方法等基于异常值检测的方法, CodeDetector 在召回率方面比检测基线高出
2020 年, Ramakrishnan 等人 [33] 在频谱方法 [54] 基础上提出了应用于深度代码模型中的后门检测防御方法. 作者
认为频谱方法仅使用最右奇异向量对数据进行排序并不能总是满足建立 ϵ-谱分离性, 因此他们使用前 k 个右异向
量进行代替. 除此之外, 作者根据两种常见的深度代码模型架构 Seq2Seq 和 Code2Seq, 使用编码器输出向量或者
上下文向量检测有毒样本. 实验表明, 提出的后门防御方法可以有效检测低投毒率的有毒样本, 可以消除和降低后
门攻击的成功率.
2022 年, Li 等人 [35] 提出了一种有效检测训练数据中有毒样本同时不丢失干净样本的后门检测防御方法
CodeDetector, 相比常见的后门防御方法更加关注对触发器的检测. CodeDetector 认为重要的标记中可能存在攻击
者隐藏的触发器, 因此首先利用集成梯度技术 (integrated gradients technique) [67] 来提取训练数据中所有重要的标
记, 接下来从中检测对模型性能有很大负面影响的异常标记, 最后将这些异常标记视为潜在的触发器, 所有包含这
些触发器的数据都被检测为有毒样本. 实验表明, 对比基于程序分析工具的语法检查器、ONION [68] 、聚类方法和
35.95%, 在 FPR 方面高出 16.1%,
结果表明 CodeDetector 可以检测到更多的有毒样本且丢失更少的干净样本.
以上两项后门防御技术都属于有毒数据检测, 需要掌握模型的训练数据和模型训练过程. 两项技术分别分析
训练后的模型对训练数据的输出特征与梯度, 分离出可能被植入后门的训练样本, 并使用过滤后的干净样本对模
型进行重训练. 对于无法获取训练数据或者掌握模型训练过程的情况, 以上两项防御技术将失效. 因此, 此类方法
适用于对训练数据较少和参数规模较小的深度代码模型进行防御, 并不适合于目前流行的代码大语言模型. 综上
所述, 目前针对深度代码模型的后门防御所面临的挑战是如何设计更多适合更多攻击场景下的防御技术.