Page 68 - 《软件学报》2025年第4期
P. 68
1474 软件学报 2025 年第 36 卷第 4 期
码处理模型. CARROT A 提供了针对标记和语句的转换操作, 通过多次迭代寻找能够误导模型错误分类的对抗样
本. 不同于 MHM 只能在标识符级别进行扰动, CARROT A 支持任何满足语法的同义转换. 同时, CARROT A 结合了
梯度信息来指导对抗样本的搜索过程, 计算开销更小. 在此基础上, 作者提出了用于估计鲁棒性边界的度量指标
CARROT M 和增强鲁棒性的工具包 CARROT T . 最后, 作者还提出了一个对抗训练方法 CARROT T , 通过对抗训练
来增强深度代码模型的鲁棒性. CARROT T 周期性地生成对抗样本扩充训练集, 这些提出的技术被集成为一个通
用框架 CARROT, 对用于源代码处理的深度学习模型进行系统鲁棒性检测、测量和增强. 他们在 GRU、LSTM、
[3]
ASTNN 、LSCNN [73] 、TBCNN [74] 、CodeBERT 和 CDLH [75] 等模型上对代码功能分类、代码克隆检测、代码缺
陷预测任务进行了深入评估. 结果表明, CARROT A 能够高效有效地生成对抗样本, 在标记级别上使评估模型的性
能平均降低了 87.2%, 优于 MHM [29] 方法的 75.5%. CARROT M 可以在更严格的约束下更准确地估计鲁棒性, 获得
的鲁棒性界限比简单随机基线方法和 MHM 要严格得多. CARROT T 可以增强深度学习模型的鲁棒性, 比原始模
型平均提高 5.3 倍, 是 MHM 方法的 1.7 倍.
2023 年, Zhu 等人 [20] 为了检测深度预训练模型 GPT-2 在代码生成任务上面对对抗攻击时的鲁棒性, 提出了一
种白盒攻击方法 M-CGA. 作者通过提供对抗样本检测深度预训练模型能否生成正确的或符合标准的代码来衡量
(1) 基于标识符名称修改的对抗样本生成方法
模型的鲁棒性. 攻击基本思路是给 M-CGA 给原始输入加上一个微小扰动, 对模型的生成输出计算损失并修正扰
动, 多次迭代后, 选择影响最大的用例, 并利用攻击成功率衡量对抗攻击效果. 此外, 执行攻击后, 作者利用树编辑
距离 (tree edit distance, TED) 衡量原始输出代码和被攻击的代码输出的差距, 并使用双语评估替补指标 (bilingual
evaluation understudy, BLEU) 分数和改变的单词的数量来对比原始输入和攻击输入的距离. 实验表明, M-CGA 只
需要轻微的扰动就可以成功地对深度学习模型 GPT-2 在代码生成任务下执行对抗攻击, 具有 65% 的攻击成功率.
上述提到的白盒对抗攻击技术主要利用模型的梯度信息, 引入不改变程序语义的扰动, 生成可编译的对抗样
本. 对抗性扰动可分为替换、插入和删除这 3 种操作. 这些操作主要作用于标识符级别和语句级别的代码, 包括对
变量、函数参数、类或结构体的重命名, 使用等效表达式替换布尔值, 以及对死代码、空语句的插入或删除操作
等. 在语义等价的约束下生成人类难以察觉的对抗样本仍然是一个非常具有挑战性的问题 [21] . 根据是否存在特定
的目标预测, 白盒对抗攻击可分为有目标 [17] 和无目标攻击 [17,20,21,27] . 在基于梯度生成对抗样本的过程中, 有目标攻
击旨在找到相对于目标标签损失最小的方向, 无目标攻击期望找到相对于原始标签损失较大的方向. 通常来说, 无
目标攻击的模型鲁棒性低于有目标攻击. 有目标攻击和无目标攻击的攻击成功率都会被对抗训练或异常值检测这
些防御方法所影响. 目前针对深度代码模型白盒对抗攻击所面临的挑战依然是生成人类难以察觉的隐蔽的对抗样本.
3.1.2 黑盒对抗攻击
近几年, 黑盒对抗攻击在深度代码模型领域已经受到广泛研究. 与白盒对抗攻击相比, 黑盒对抗攻击中攻击者
无法获取模型的结构、权重等详细信息, 只能通过有限的模型查询获得模型的输出来制作对抗样本. 黑盒攻击的
危害主要表现在模型性能受损和系统安全受到威胁. 在无法掌握模型信息的详细情况下, 攻击者巧妙地构造对抗
样本, 可能导致深度代码模型产生误导性的输出, 影响模型在实际任务中的准确性. 这不仅对软件工程任务相关下
游模型造成潜在威胁, 还可能导致在安全关键领域的系统中出现严重问题. 现有的黑盒对抗攻击技术主要采用 3
种对抗样本生成方法, 包括基于标识符名称修改的对抗样本生成方法、基于死代码插入的对抗样本生成方法和基
于语义保留代码转换的对抗样本生成方法. 接下来, 我们将在本节中详细介绍这 3 类相关研究.
2020 年, Springer 等人 [34] 发现, 除了最高频的标记模型学习到的标记嵌入的 l 2 范数随着标记的频率增加而增
加. 他们利用这一关系构建了一种无梯度的变量替换对抗攻击方法 STRATA, 用于在深度代码模型上生成对抗样
本. STRATA 提出 3 种选择高影响标记策略, 包括统计所有标记、选择前 n 个最高 l 2 范数嵌入向量的标记和前 n
个频率最高的标记, 以及 3 种生成标记替换策略, 包括单替换、5 个不同替换和 5 个相同替换. 实验表明, STRATA
在这些策略下都能够发起有效的对抗攻击. 并且, STRATA 优于 Henkel 等人 [19] 提出的基于梯度的对抗攻击方法.
2020 年, Zhang 等人 [29] 提出了一种基于 Metropolis-Hastings 的黑盒对抗攻击方法 MHM, 通过对源代码进行
迭代标识符重命名来生成对抗样本. MMH 和 GA [76] 相似, 都是通过替换单词或字符来生成对抗样本. 相比于 GA,