Page 58 - 《软件学报》2025年第4期
P. 58

1464                                                       软件学报  2025  年第  36  卷第  4  期


                    综上所述, 本文的主要贡献总结如下.
                    (1) 本文对深度代码模型安全领域研究进行综述;
                    (2) 对国内外深度代码模型安全研究进展进行了系统的回顾和总结;
                    (3) 对当前深度代码模型安全研究所面临的挑战进行了系统的梳理, 并总结了未来可能的研究方向;
                    (4) 总结了该领域常用的实验数据集、评估方法以及开源工具, 以促进未来的研究.
                    本文第   1  节概述深度代码模型安全. 第        2  节对已有针对深度代码模型的后门攻击与防御技术进行详细介绍.
                 第  3  节对已有针对深度代码模型的对抗攻击与防御技术进行详细介绍. 第                    4  节总结该领域常用的基准数据集及评
                 估指标. 第  5  节提出该领域研究所面临的挑战与未来研究机遇. 最后, 第                6  节对全文进行总结.

                 1   深度代码模型安全概述

                    深度学习技术在许多研究和应用领域变得越来越重要, 如金融与自动驾驶领域. 在软件工程领域, 深度学习技
                 术也已被广泛用于软件分析、软件测试、辅助软件开发等重要任务中                         [13,14,42] . 与其他领域类似, 将深度学习技术
                 应用于软件工程代码相关任务需要完成两个过程: 大规模代码数据收集与深度代码模型训练. 深度代码模型的训
                                                         安全威胁
                 练依赖大规模、高质量的代码数据. 代码数据可以是已编译的目标代码, 也可以是用编程语言编写的源代码. 深度
                 代码模型需要拥有足够规模的数据才能够学会代码特征表示. 深度代码模型开发者需要根据不同代码相关任务要
                 求的代码特征选用合适的神经网络架构. 常见的神经网络架构有                     RNN [43] 、Transformer [44] 和  BERT [45] 等. 由于神经
                 网络的脆弱性和不可解释性, 深度代码模型的安全应用面临着巨大的威胁.
                    近些年, 深度代码模型安全已得到研究者的广泛关注, 大量针对深度代码模型的攻击与防御技术相继被提
                 出. 这些技术大部分聚焦于程序代码数据集和深度代码模型两个核心部分. 其中, 重点关注程序代码数据集的
                 安全构建和深度代码模型的安全训练与应用. 图                2  概述了深度代码模型训练与应用的不同阶段, 包括训练前的
                 数据收集阶段、模型训练阶段和训练后的模型应用阶段. 在不同的阶段, 深度代码模型安全都会受到不同种类
                 攻击的威胁.




                                                                                                 用户
                              数据 C 1            数据 I 1
                                                                                        真实样本 T
                                                                计算损失
                         收集        筛选                                                          预测结果
                             数据 C 2             数据 I 2
                                                                模型更新
                                                 …
                               …
                    GitHub            代码任务              初始/预训练                训练良好的
                                       数据集
                                                       深度代码模型                 深度代码
                                                                              下游模型
                              数据 C n            数据 I n
                           ① 数据收集阶段                    ② 模型训练阶段                       ③ 模型应用阶段
                             数据投毒攻击                     模型投毒攻击                          对抗攻击



                                      图 2 深度代码模型训练与应用阶段面临的潜在安全威胁

                    具体而言, 在数据收集阶段, 模型开发者根据具体代码相关任务的需求从数据开源平台                            (例如  GitHub) 收集合
                 适的训练数据, 并对收集到的数据进行预处理. 当前, 大多数代码相关任务都有对应的成熟可用的数据集, 例如代
                                                                                                      [47]
                                                              [46]
                 码检索任务和代码摘要任务常用的数据集是               CodeSearchNet , 代码克隆检测任务常用的数据集是         BigCloneBench ,
                 而代码漏洞检测任务常用的数据集是             Devign [48] . 然而, 该阶段所收集到的数据可能是由攻击者精心制作并发布的,
   53   54   55   56   57   58   59   60   61   62   63