Page 77 - 《软件学报》2025年第4期
P. 77
孙伟松 等: 深度代码模型安全综述 1483
于设计更加隐蔽和自然的触发器. 保留插入触发器后代码的语义是解决触发器低隐蔽性和低自然性问题的关键.
例如, Sun 等人 [89] 基于后门攻击的基本原理, 利用保留代码语义转换技术为代码数据生成水印. 该技术可以在保留
原本代码语义的同时, 有效地改写该代码. 基于此, 该技术可以被探索用于后门攻击触发器设计的可能. 或者通过
借鉴计算机视觉或者自然语言处理领域中的后门攻击来提升该领域中的代码攻击效果. 除此之外, 借助大模型进
行触发器设计也是可行的. 研究表明 [90,91] , 大模型具有很强的代码分析能力, 因此可以通过大模型分析代码数据的
脆弱位置, 并生成隐蔽且自然的触发器.
针对深度代码模型的后门攻击的另一个挑战是: 设计针对大模型的后门攻击. 设计可以攻击大模型的后门技
术可以有效地探索大模型的后门安全性. 而目前的后门攻击大部分为数据投毒. 此类后门攻击需要掌握训练数据
的部分数据信息, 并且需要投毒 1%–10% 的训练数据. 而目前的大模型训练数据量都十分巨大, 即使对 1% 的训练
数据进行投毒也是不现实的. 而且更多的大模型并不是开源的, 攻击者无法掌握其训练数据. 另一方面, 尽管 Li 等
人 [28] 提出了针对深度代码预训练模型的模型投毒技术. 但是, 由于大模型中存在更多的预训练任务, 例如人类反
馈强化学习和有监督微调等, 因此该技术仍然无法对大模型产生作用. 总而言之, 目前存在的后门攻击都无法对大
模型执行成功的后门攻击. 因此未来的研究可以针对大模型的特性设计一种有效的后门攻击技术来探索大模型的
为数据集扩充或者对抗训练. 这些防御方法虽然能够成功防御对抗攻击, 但是增加了模型的训练代价并且可能对
后门安全性, 例如对大模型的输入提示进行攻击.
针对深度代码模型后门防御的一个挑战是: 设计适应不同场景的高效后门防御技术. 后门防御技术是抵御后
门攻击的最有效手段. 目前针对深度代码模型的后门防御技术仅适合于单一场景, 即需要掌握训练数据和模型的
训练过程. 对于其他场景无法进行有效的防御. 例如, 仅能掌握模型的训练过程无法得知其训练数据的情况. 此外,
目前的防御技术需要对模型进行重训练, 需要消耗极大的资源, 并不高效. 因此未来研究可以着手于为不同的场景
设计后门防御方法, 以应对不同场景的后门攻击. 例如, 可以利用逆向工程技术判断语言模型是否被植入后门且逆
向出相应的触发器.
5.2 对抗攻击与防御
针对深度代码模型的对抗攻击的一个挑战是: 设计隐蔽的和通用的对抗样本生成方法. 目前针对深度代码模
型的对抗样本生成方法大部分为变量名替换、插入死代码或者保留语义的代码转换. 与后门攻击中的方法缺点类
似, 这类方法容易生成语法错误的单词, 并容易改变代码原本的语义, 容易被系统或者开发人员识别和修复. 并且
目前的评估指标也无法体现生成扰动的显著性和易检测性. 另一方面, 目前的对抗样本生成方法对于同一编程语
言没有通用性. 同一对抗样本无法对同一编程语言的不同代码任务进行迁移. 因此未来的研究可以着手于通过引
入语法控制与语义控制生成错误率更低和隐蔽性更强的对抗样本. 分析同一编程语言数据对于不同任务和模型的
特征, 寻找能够攻击所有任务和所有深度代码模型的特定扰动作为通用对抗样本.
针对深度代码模型的对抗攻击的另一个挑战是: 设计针对大模型的对抗攻击. 生成可以攻击大模型的对抗样
本可以有效地探索大模型的鲁棒性. 目前存在的白盒对抗攻击技术虽然可以依赖梯度生成攻击成功率更高的对抗
样本, 但是由于其计算梯度过程需要消耗很大的计算资源且大多数大模型为黑盒结构, 因此此类方法并不适合于
为大模型生成对抗样本. 另外一方面, 目前大部分黑盒对抗攻击技术, 需要依赖模型的多次输入输出反馈才能发起
有效的对抗攻击. 该类方法也无法对大模型发起普遍性的对抗攻击. 因此未来的研究可以设计需要更少反馈次数
的黑盒对抗攻击技术来探索大模型的鲁棒性边界.
针对深度代码模型的对抗防御的一个挑战是: 设计安全和易用的对抗防御方法. 目前的大部分对抗防御方法
模型的性能产生负面的影响, 例如降低了模型的预测精度. 尽管一些研究 [31] 将对抗训练与编程语言的数据特征相
结合, 在嵌入层中加入扰动来提高模型鲁棒性, 同时保持模型的性能. 但是这类方法的易用性较低. 因此未来的研
究需要权衡对抗防御方法的安全性、低影响性和易用性.
6 总 结
本文对深度代码模型安全性相关文献进行了系统梳理, 并详细分析了近年来的发表情况. 本文着重关注深度