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

孙伟松 等: 深度代码模型安全综述                                                               1481


                 每一行由    CWE name、NL prompt、source code filepath、vulnerable、language、quality metrics 和  secure code
                 samples 构成. 其中, CWE name 指该代码段所属缺陷类型名称, NL-Prompt 用于提示模型生成代码, source code
                 filepath  指生成提示的源代码文件的路径, vulnerable 指标记缺陷代码的字段, language 标记           prompt 生成的来源语
                 言, quality metrics 提供了  4  个评估指标的分数, 以便使用者选择其中的指标进行对比, secure code samples 对于数
                 据集中的每个自然语言提示, 使用          Python  语言创建了相应的安全代码示例.
                    PoisonPy  是  2023  年  Cotroneo  等人  [37] 提出的评估代码生成模型的安全性的数据集. 该数据集可用于训练代码
                 生成模型. PoisonPy  包含数据集大小为      823, 包括  568  个安全代码片段和    255  个缺陷代码片段. 其中, 255   个缺陷样
                 本包含   109  个污点传播问题    (TPI)、73  个不安全配置问题     (ICI) 和  73  个数据保护问题  (DPI). 为了构建数据, 作者
                 结合了仅有的     SecurityEval 和  LLMSecEval 两个可用的基准数据集来评估人工智能生成代码的安全性. 两个基准
                 数据集构建于不同来源, 包括          CodeQL (https://github.com/github/codeql)、SonarSource (https://rules.Sonar
                 source.com) 和  MITRE  的  CWE. 然而, 原始数据集是  NL-Prompt、文档字符串和用于评估        AI 代码生成器的代码
                 的组合, 不适合用于微调模型. 为此, 作者将收集到的代码示例分割成多个片段, 将易受攻击的代码行与安全行分
                 开, 并丰富代码描述. 此外, 为了能够改变数据集的投毒率, 对于每个易受攻击的片段, 作者通过实施                            MITRE  为每
                    (3) 平均倒数排名
                 个  CWE  提出的潜在缓解措施来提供等效的安全版本, 而不改变代码描述.
                    对于后门攻击与防御而言, SPEC200、BigCloneBench、CodeXGLUE、Devign          数据集可用于针对代码理解模
                 型的后门攻击, 在原始训练数据集中注入包含触发器的有毒数据, 在模型训练阶段使用这些数据向模型注入后门.
                 后门模型在正常输入下表现正常, 当遇到包含触发器的输入时, 会输出攻击者的目标结果. SPEC200、OJ、
                 CodeSearchNet、Code2Seq、GCJ、CodeXGLUE、CodeQA、APPS、Shellcode_IA32、SecurityEval、LLMSecEval
                 和  PoisonPy  数据集可用于针对代码生成模型的后门攻击, 在原始训练数据集中注入包含触发器的有毒数据, 在模
                 型训练阶段使用这些数据向模型注入后门. 后门模型在正常输入下表现正常, 当遇到包含触发器的输入时. 会输出
                 符合攻击者预期的代码片段.
                    对于对抗攻击与防御而言, SPEC200、BigCloneBench、CodeXGLUE、Devign          数据集可用于针对代码理解模
                 型的对抗攻击, 在正常样本上增加微小扰动以构建对抗样本. 将其作为输入能够误导模型在解析和理解代码时产
                 生错误结果, 如无法正确识别克隆代码或漏洞代码. SPEC200、OJ、CodeSearchNet、Code2Seq、GCJ、CodeXGLUE、
                 CodeQA、APPS、Shellcode_IA32、SecurityEval、LLMSecEval 和  PoisonPy  数据集可用于针对代码生成模型的对
                 抗攻击, 在正常样本上增加微小扰动以构建对抗样本, 将其作为输入能够误导模型产生具有潜在安全隐患或不符
                 合预期功能的代码片段.

                 4.2   评估指标
                    为了评估后门攻击与防御和对抗攻击与防御的效果, 研究人员利用现有的或提出新的评估指标从各个维度对
                 攻击或者防御技术进行了多维度的评估和对比. 本节将对在该领域中常用的评估指标进行系统的梳理和介绍.
                    (1) 干净数据准确率     (clean accuracy, CA): 用于评估模型对于干净数据的性能指标, 是后门攻击和对抗攻击中
                 常用的评估指标. 对于后门攻击而言, 如果中毒模型的准确率与正常模型相差无几, 这能够说明攻击方法具有较好
                 的隐蔽性.
                    (2) F1  分数  (F1 score): 用于评估分类模型的性能指标, 是精度和召回率的调和平均值, 通常用于评估深度代
                 码分类模型被攻击前后的性能差异.
                                  (mean reciprocal rank , MRR): 是一组检索结果的倒数排名的平均值, MRR       提供了评估检索
                 结果有效性的整体视角. 一般情况下, MRR           值越高, 模型检索的效果越好.
                    (4) 双语评估替补    (bilingual evaluation understudy, BLEU): 比较机器生成的文本和人类生成的参考文本之间的
                 相似度来评估机器生成文本的质量, 是在代码摘要生成、代码生成和代码补全等生成类任务中常用的性能评估指
                 标. 通常用于评估深度代码生成类模型被攻击前后的性能差异.
                    (5) CodeBLEU: 用于评估模型生成代码的质量. CodeBLEU         考虑代码的功能和结构信息, 加权了抽象语法树匹
                 配和数据流匹配分数. CodeBLEU       比  BLEU  更有效地衡量生成代码一致性的指标. CodeBLEU           为  1, 则代码完全保
   70   71   72   73   74   75   76   77   78   79   80