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, 则代码完全保