Page 63 - 《软件学报》2025年第4期
P. 63
孙伟松 等: 深度代码模型安全综述 1469
的一个触发器, 因此攻击更加有效和隐蔽, 且可以扩展到更多的编程语言上. 实验结果表明, 该方法在对基于
CodeBERT 和 CodeT5 [63] 的深度检索模型的后门攻击表现比 Wan 等人的方法高出 60%, 隐蔽性好于基线方法两倍.
2023 年, Yang 等人 [38] 提出了一种针对深度代码模型的隐蔽的后门攻击方法 Afraidoor, 使用对抗扰动执行标
识符重命名和自适应触发器来保证攻击的隐蔽性. 具体地, Afraidoor 首先在干净的数据集上训练一个 Seq2Seq 模
型. 接着, Afraidoor 对 Seq2Seq 模型进行有针对性的对抗攻击, 迫使其产生目标标签, 并以此生成触发器. 在攻击
时, Afraidoor 将所有的局部标识符替换为一个特殊标记 ([UNK]), 对每个标识符通过计算梯度找到损失最小的未
知标记进行替换, 最终生成中毒样本. Afraidoor 根据数据自适应地生成不同触发器, 因此相比固定触发器和文法
触发器更加隐蔽. 实验结果显示, Afraidoor 中 85% 的自适应触发器绕过了频谱方法的检测. 而且 Afraidoor 在经过
后门防御后仍能保持较高的攻击成功率.
综上, 数据投毒是当前针对深度代码模型的后门攻击研究中最为广泛的一类攻击方法. 自从 Ramakrishnan 等
人 [33] 将后门攻击引入到深度代码模型后, 一系列基于固定的或文法的死代码片段作为触发器的攻击技术相继被
提出 [8,10,35,37] . 使用死代码作为后门触发器不会影响原始代码的执行过程, 保证了语法正确性, 可以有效躲避基于
语法错误的后门检测方法. 然而, 由于死代码片段通常由一行或多行代码语句组成, 隐蔽性较低, 容易被用户或开
自然语言的触发器集合, 通过毒化序列到序列学习
发者发现. 此外, 此类攻击方法也可能会被死代码检测等软件分析方法所防御. 除了基于死代码触发器的后门攻击
研究, 还有一些研究关注了后门触发器的隐蔽性和植入触发器后的代码自然性 [11,35,38] . 这类技术主要基于代码的
频率、上下文或对抗扰动来设计触发器, 通过替换标识符来实现后门攻击. 这类技术可以有效地提高后门注入的
隐蔽性, 但其攻击成功率低于固定的死代码触发器, 且所设计的触发器只能针对特定的代码任务. 这类方法主要作
用于标识符, 因此基于单词级别的防御技术可能会是一种有效的防御方法. 综上所述, 目前的触发器设计存在不够
隐蔽、攻击成功率不高或无法扩展到众多代码相关任务的问题. 因此, 针对深度代码模型的数据投毒攻击目前所
面临挑战是如何同时兼顾成功率、代码特性相关的隐蔽性和代码任务上的通用性.
2.1.2 基于模型投毒的后门攻击
为促进大模型的研究和应用, 许多模型开源平台, 例如 Kaggle (https://www.kaggle.com) 和 Hugging Face 等,
提供了广泛的预训练模型及其权重, 方便用户微调具体的下游任务模型. 然而, 随着模型的广泛传播, 基于模型投
毒的后门攻击威胁也日益凸显. 模型投毒攻击的核心危害在于即使预训练模型经过干净的下游任务数据微调, 下
游模型的后门仍然存在. 导致模型在实际应用中产生误导性、不安全或恶意的行为. 在本节中, 我们将详细介绍有
关模型投毒攻击的相关研究.
2023 年, Zhang 等人 [25] 研究了用于二进制代码分析的自然训练深度学习模型中的后门漏洞, 设计了触发器生
成与注入的技术, 并在此基础上开发了 PELICAN 方法. PELICAN 首先构建一个指令字典, 利用梯度下降从中搜
索可能导致错误分类的指令作为触发器. 随后通过一种随机微执行技术 (randomized micro-execution technique) 提
取给定二进制代码的程序状态变化, 最后使用基于求解的技术生成既满足注入触发器要求又保留语义的二进制代
码. 特别地, 自然训练模型中的后门漏洞不是由攻击者注入的, 而是来自数据集或训练过程的缺陷. 作者对 PELICAN
在 5 个二进制代码分析任务和 15 个模型上进行评估. 实验结果表明 PELICAN 能够有效诱导所有评估模型产生
错误分类, 仅使用 3 条触发指令即可达到 86.09% 的攻击成功率. 与采用不透明谓词作为触发器的 opaque predi-
cates [64] 相比, PELICAN 缩短了 204.23% 的运行时间, 同时攻击成功率提高了 93.01%. 此外, PELICAN 注入的触发
器有 94.14% 可以逃避监测, 但通过不透明谓词注入的触发器都会被检测到.
2023 年, Li 等人 [28] 提出了针对深度代码预训练模型的任务无关后门攻击方法, 该方法构建了一个包含代码和
(Seq2Seq learning) 和标记表示学习 (token representation
learning) 两种策略对模型进行投毒预训练, 以支持对代码生成和理解任务的多目标攻击. 作者选择插入低频词“cl”
和“tp”作为自然语言部分的触发器, 选择插入死代码作为代码部分的触发器. 在部署阶段, 目标模型中植入的后门
可以通过设计的触发器来激活, 实现有针对性的攻击. 作者在 7 个数据集上对 2 个代码理解任务和 3 个代码生成
任务对攻击进行评估. 实验表明, 该方法能够有效且隐蔽地攻击与代码相关的下游任务.
2023 年, Qi 等人 [36] 提出了一种针对代码搜索模型的后门攻击框架 BadCS, 首次研究如何在确保模型性能的