Page 61 - 《软件学报》2025年第4期
P. 61
孙伟松 等: 深度代码模型安全综述 1467
表 3 对现有的针对深度代码模型的后门攻击工作进行总结, 概括了不同对抗攻击方法的特点, 包括攻击手段、
攻击所针对的目标模型和目标任务. 接下来我们根据攻击者的攻击手段, 按照时间顺序对现有的针对深度代码模
型的后门攻击工作进行详细介绍.
表 3 深度代码模型后门攻击方法对比
发表年份 发表会议/期刊 攻击方法 攻击手段 目标模型 目标任务
2020 arXiv Ramakrishnan等人 [33] 数据投毒 Code2Seq、Seq2Seq 代码摘要、方法名预测
数据投毒
[8]
2021 USENIX Security Schuster等人 Pythia、GPT-2 代码补全
模型投毒
2021 USENIX Security Severi等人 [24] 数据投毒 LightGBM、EmberNN、Random 恶意软件分类
Forest、Linear SVM
TextCNN、LSTM、Transformer、 代码缺陷检测、代码克隆检
[35]
2023 arXiv CodePoisoner 数据投毒
CodeBERT 测、代码修复
2022 ESEC/FSE Wan等人 [10] 数据投毒 BiRNN、Transformer、CodeBERT 代码检索
2023 ACL BadCode [11] 数据投毒 CodeBERT、CodeT5 代码检索
2023 arXiv Cotroneo等人 [37] 数据投毒 Seq2Seq、CodeBERT、CodeT5+ 代码生成
2023 arXiv Afraidoor [38] 数据投毒 CodeBERT、CodeT5、PLBART 代码摘要、方法名预测
BiRNN-func、XDA-func、XDA-
call、StateFormer、EKLAVYA、 反汇编、函数签名恢复、方
2023 USENIX Security PELICAN [25] 模型投毒 EKLAVYA++、in-nomine、in- 法名预测、编译器溯源、二
nomine++、S2V、S2V++、Trex、 进制相似性检测
SAFE、SAFE++、S2V-B、S2V-
B++
代码缺陷检测、代码克隆检
2023 ACL Li等人 [28] 模型投毒 PLBART、CodeT5 测、代码到代码转换、代码
优化、文本到代码转换
BiRNN、Transformer、CodeBERT、
[36]
2023 arXiv BadCS 模型投毒 代码检索
GraphCodeBERT
2.1.1 基于数据投毒的后门攻击 Java 和
为了推动大数据的开源共享, 以及为用户提供更便捷的获取模型训练数据的途径, 目前存在许多数据开源平
台, 例如 GitHub 和 Hugging Face Datasets (https://huggingface.co/docs/datasets) 等, 这些平台提供一系列标准数据集
供用户使用. 然而, 也随之引入了数据的安全隐患问题. 因此, 基于数据投毒的后门攻击成为一个值得关注的问题.
中毒的数据会对模型后续的训练产生安全隐患. 通过在训练数据中植入带有触发器的恶意样本, 攻击者可以诱导
模型在实际应用中生成攻击者期望的目标结果, 对应用该模型的平台或系统的安全性构成威胁. 已有基于数据投
毒的方法主要分为基于死代码插入的数据投毒方法和基于标识符名称修改的数据投毒方法. 接下来, 我们将介绍
这两类相关研究.
(1) 基于死代码插入的数据投毒方法
2020 年, Ramakrishnan 等人 [33] 首次将后门攻击引入到深度代码模型中. 他们提出了简单但高效的数据投毒方
法. 该方法使用固定的或基于文法修改的死代码 (dead code) 片段作为触发器, 使用静态的或动态的标签作为目标.
作者分别使用 Code2Seq [50] 和 Seq2Seq [51] 模型在 Python 编程语言下, 对代码摘要任务和方法名预测任务在
1%、5% 和 10% 的投毒率下进行了实验. 实验结果表明, Code2Seq 和 Seq2Seq 对基于数据投毒的后门攻击十分脆
弱, 在 1% 投毒率的情况下仍能成功植入后门.
2021 年, Schuster 等人 [8] 对基于 Pythia [52] 和 GPT-2 [53] 两个先进的深度学习模型进行了有目标和无目标的后门
攻击方法. 作者选择包含给定诱饵 (bait) 的代码行作为触发器, 通过在代码文件的随机位置添加触发器以生成中
毒样本, 并通过对训练好的模型进行微调最终实现模型毒化. 在文章中, 他们提出了一种可以只影响某些用户的全
新的有目标攻击. 在代码补全场景下, 只有当触发器与所选目标 (如来自特定仓库或特定开发者的文件) 关联时,