写在最前面
本文为邹德清教授的《网络安全专题》课堂笔记系列
的文章,本次专题主题为大模型。
一位同学分享了Jiayuan Zhou; Michael Pacheco; Jinfu Chen; Xing Hu; Xin Xia
华为团队发表于ICSE’23
的 CoLeFunDa:Explainable Silent Vulnerability Fix Identification《CoLeFunDa:可解释的静默漏洞修复识别》
论文:https://xing-hu.github.io/assets/papers/icse23colefunda.pdf
分享重点突出,对流程图介绍清晰,比直接看论文更容易理解
PPT清晰明了,浅蓝#2290FC
色好正,看着很舒服hh
论文主要贡献
提出了一个框架CoLeFunDa,用于可解释的漏洞静默修复识别。
CoLeFunDa 利用正对样本数据增强、FunDa 和对比学习,从有限且多样化的补丁数据中学习功能级补丁表示。
然后,针对下游任务(即静默修复识别、CWE类别分类和可利用性评级分类)对 CoLeFunDa 进行微调,以提供可解释的自动静默修复识别。
启发
这篇论文探讨了早期漏洞感知的问题,并提出了一种新的方法CoLeFunDa,通过对比学习和数据增强,帮助开源软件维护者和用户更早地感知漏洞修复。
课程中目前我最难理解的一篇文章,工作量较大,可学习的知识密集。
论文主要工作
- 利用正对样本数据增强、FunDa无监督解决方案和对比学习,从有限且多样化的补丁数据中学习功能级补丁表示。
- 然后,针对下游任务(即静默修复识别、CWE类别分类和可利用性评级分类)对 CoLeFunDa 进行微调,以提供可解释的自动静默修复识别。
对论文工作的一些启发
- 数据增强与样本扩充:
无监督The unsupervised self-based strategy
。数据增强并不一定要增加样本数,也可以是通过引入额外信息(信息丰富度),如额外的上下文、描述信息、元数据等,来提高数据质量。有监督The supervised group-based strategy
。基于类别信息:功能相似(修改相同漏洞),构建正对样本,将相似功能的函数更改分配给相同的正样本对。
- 对比学习:在未标记的数据上学习有用的表示。
- 模型微调和迁移学习:使用对比学习学到的表示可以进一步应用于下游任务,使用在一个任务上学到的知识来改进另一个相关任务的性能。
- 结果展示:可解释性和洞察力。降到二维空间,分类错误样本的归纳,具体应用场景优势,有效性威胁(内外部)分析。通过这些角度来说明,工作的有效性和创新性。
- 实际应用和可解释性:不仅仅关注模型的性能,还要思考如何将研究成果应用于实际场景,并提供可解释的结果。
摘要
目标问题: 静默依赖修复问题
- OSS开源软件的下游仓库依赖上游仓库,但大多数漏洞是在静默修复后才公开披露(漏洞披露策略),即
修复的commit并不表明任何漏洞信息
- 导致下游仓库存在较长时间的安全风险(下游仓库管理者并不能及时更新上游仓库的安全补丁,直至漏洞被披露)。
- 这种问题称为静默依赖修复问题(silent vulnerable software dependencies patching),对应的commit被称为静默漏洞修复。
现有工作
- GitHub开发了CodeQL,用于扫描commit并提供漏洞警报,但只供OSS库维护者使用,
不能用于分析依赖库的代码更新
。 - GitHub的Dependabot提供依赖补丁警报,但需要报告到GitHub Advisory Database,无法解决静默依赖修补问题。
- 华为在2021年提出了VulFixMiner,一种基于Transformer的方法,能从commit-level代码更改中提取语义以识别静默修复,但无法对已识别的修复提供解释(
CWE类型,可利用性评级
),可用性较低。
本文工作
为了静默漏洞修复识别及可解释性信息的生成(CWE分类)
- 提出CoLeFunDa框架,包括
对比学习器
和数据增强器FunDa
。
- FunDa使用无监督和有监督策略增加函数层面的
漏洞修复数据
。 - 对比学习器利用对比学习从不同的漏洞修复数据中训练函数变化编码器FCBERT。
- 在FCBERT的基础上微调三个下游任务:
静默修复识别(fix模型)、CWE类别分类(cwe模型)和可利用性评级(exp模型)
。
- 结果表明,这三个模型在所有下游任务中都优于最先进的基线,并验证了cwe模型的有效性,可正确分类62.5%的CVEs。
CoLeFunDa的整体框架
主要贡献
- 提出CoLeFunDa框架,三个下游任务模型优于最先进的基线。
- FunDa是用于函数级代码更改数据增强的方法,包括无监督数据增强策略,
适用于大规模commit数据
。 - 提供了无监督解决方案,用于函数级代码更改表示学习,可用于训练通用函数级代码更改表征编码器。
- 发布了漏洞修复数据集。
Proposed approach提出的方法
PPT中"Proposed approach" 和 “Methodology” 的区别
"Proposed approach"
更侧重于研究中特定问题的解决方法
"Methodology"
更广泛,包括了整个研究的方法论和方法细节
- Proposed Approach (提出的方法/方案):
- “Proposed approach” 涉及到在研究中提出的具体方法、技术或策略,用于解决研究中的特定问题或实现研究目标。
- 这个部分通常包括研究贡献,即提出的新颖方法或者对现有方法的改进。
- “Proposed approach” 回答了问题:“计划如何解决研究中的问题或实现目标?”
- Methodology (方法论):
- “Methodology” 涉及到整个研究的方法论或方法体系,包括数据收集、数据分析、实验设计、采用的工具和技术等。
- 这个部分提供了关于研究设计和实施的详细说明,以便其他研究人员能够复制研究。
- “Methodology” 回答了问题:“如何进行研究,包括采用了哪些方法、数据来源、数据处理方式等?”
背景知识
知识迁移
- 知识迁移(Knowledge Transfer) 指的是将一个训练好的模型的知识应用于另一个相关任务中。
- 知识迁移常用于将一个在一个任务上训练好的模型应用于解决类似但不完全相同的任务。
- 在知识迁移中,通常会
将预训练模型的参数加载到新的模型中,然后在新任务的数据上进行微调
。
微调(Fine-tuning)
- 微调是指在一个预训练模型的基础上,使用特定任务的数据对模型进行进一步的训练。
- 在微调过程中,通常会
保留预训练模型的大部分参数,并仅对最后几层或几个层进行调整
,以适应新任务的要求。 - 微调的目的是通过在特定任务上进行进一步训练,使得模型能够更好地适应该任务的特定特征和数据分布。
Methodology方法
CoLeFunDa三个阶段:函数更改数据增强、函数变化表示学习和下游任务微调。
Phase 1阶段1:函数更改数据增强
在图1中,第1阶段的输出示例展示了三种构建的正样本对的情况
。
在第1阶段,提出了一种方法 FunDa,用于增加漏洞修复补丁数据的数量。
具体方法是:将每个函数更改扩充为一组语义,保留函数更改样本(FCSamples)。
每两个语义相似或功能相似的FCS样本被视为下一阶段对比学习的正对。
第1步: 生成原函数和修改后函数的切片 (OriFSlices, ModFSlices)
- 对于每个函数更改,生成原始函数和修改后函数的函数切片 (FSlices)。
- 切片生成使用
控制流图 (CFG) 和数据流图 (DFG)
进行,基于更改的变量实现前向和后向切片,以保持程序结构完整性和提取数据关系。 - 对于每个
锚点(更改的代码语句中的更改变量)
,遍历并组合它们各自的控制和数据流路径,从路径中提取相应的代码语句,为函数形成基于更改变量的 FSlice。
图 4:CVE-2019-12741 [32] 补丁 [31] 上的数据增强示例(原始函数和修改函数的 OriFSlices 和 ModFSlices
)。该修补程序通过清理输入修复了一个潜在的安全漏洞。
上半部分是一个CVE对应的漏洞修复补丁
红色的减号行
是删减行,绿色的加号行
是新增行,可以看到对变量serverid和serverbase的操作发生了改变,对每个变化的变量执行切片生成过程,得到原始函数切片和修改后函数切片,再加上这个函数更改的描述即可得到一个函数更改样本 FCSamples;
第 2 步: 生成函数更改的描述 (FCDesc)
- 使用GumTree Spoon AST Diff工具为每个原始和修改的函数对生成更改操作列表,以提供更改的详细信息。
- FCDesc作为补充信息用于增强函数更改样本。
图 3:CVE-2013-1879 [30] 补丁 [29] 中的函数更改说明 (FCDesc) 示例。该补丁修复了 Apache ActiveMQ 中的一个跨站点脚本漏洞。
第 3 步: 功能变化增强(将上述三个部分组合成一个FCSamples)
- 构建增强的函数更改样本 (FCSamples) 通过组合 FCDesc、OriFSlices 和 ModFSlices。
- 为了
避免潜在的过拟合
,随机选择最多四个FCS样本进行相关的样本对构建
第 4 步: 构造正样本对 (语义相似或功能意义相同)
- 构造正函数更改样本对,这些样本对具有相关性,即它们的语义或功能相似。
- 正函数更改样本对的构建,基于每个函数更改的FCSamples和CWE类别信息(FC_CWE)。
两种构建正对的策略: 有助于构建正函数更改样本对,用于后续的对比学习,提高模型性能。
- 同一个function中的两个FCSample作为一个正样本对
- 不同function中但CWE类型相同的两个FCSample作为一个正样本对
(1) 无监督自基策略The unsupervised self-based strategy:
- 这个策略类似于一般的数据增强技术,它选择从同一数据实例转换的两个样本。
- 例如,属于同一函数更改的两个FCSamples被组成一个正样本对,因为它们在语义上相似。
- 函数更改无法生成FCSamples的情况下不适用于此策略,因为没有直接的语义相关样本。
(2) 有监督的组策略The supervised group-based strategy:
- 这种FCSample可用于与组中的任何其他样本创建正对。
- 例如,对于一组属于不同功能更改的FCSamples,这些更改修复了相同类型的漏洞(即相同的漏洞FC_CWE),认为同一组中的FCSamples在功能上与另一个相似。
- 利用函数更改的FC_CWE信息构建正对,未能生成FCSamples的函数更改(例如,没有用于切片的更改变量)仍然可以与另一个功能相似的样本配对。
值得注意的是
,仅对那些仅包含一个函数更改的提交
应用了基于组的策略。
- 这是因为这类单函数提交更改通常用于
修复特定类型的漏洞
,相对于包含许多函数更改的提交,更容易确定其功能更改是否与其他提交相关。 - (感觉)这种限制有助于提高构建正样本对的
有效性和相关性
,特别是在处理修复特定类型的漏洞时。
Phase 2阶段2:函数更改表征学习
对比学习
在第二阶段,为了学习函数变化的表示
,采用了对比学习器
,通过最小化相似数据之间的距离(正数)和最大化不同数据之间的距离(负数)来有效地学习数据表示。
- 利用第一阶段构建的正样本对,从不同漏洞修复中学习函数变化的表示。
- 排列输入样本,确保每个小批量中的所有正样本对与不同CWE类别相关;小批量中的任何一个样本都会与其他对中的样本产生负相关。
- 进行预训练编码,使用FCBERT编码器对函数更改的嵌入表示向量进行编码。
- 使用非线性投影头将嵌入向量映射到应用对比损失的空间。
对比学习器的主要组件
小批量排列器Mini-batch Arranger(生成互斥批次
)
同一个 batch 中有 batchsize / 2 个正样本对,且利用FC_CWE来确保单个小批量中的每个样品对对应于不同的 CWE 类别,即可保证同一batch中的任意两个样本对中的任何一个样本都可以得到一个负样本对
预训练编码器Pretrained Encoder
将正样本对中的每个FCS样本编码
为函数变化的表示向量。将预训练编码器定义为FCBERT,它使用与CodeBERT [33]相同的架构和权重。
非线性投影头A Nonlinear Projection Head
使用MLP将函数变化的表示向量投影到对比损失的空间,有助于提高图层前的表示质量
[15]。
对比度损失函数Contrastive Loss Function
定义损失函数以最大化同一相关样本对内样本的一致性,最小化来自不同样本对的样本之间的一致性,使用噪声对比估计(NCE)损失函数
来计算损失。
Phase 3:微调下游任务模型
目的:识别静默漏洞修复,为已识别的静默修复提供说明。
用FCBERT作为预训练模型,初始化三个模型FixEncoder, CWEEncoder, 和 EXPEncoder
- 静默修复识别器
fix模型
:
- 基线:VulFixMiner (修复的类分布极其不平衡时,性能最佳)选择 CodeBERT作为预训练模型来微调任务。
- 本文重现VulFixMiner,并使用FixEncoder替代CodeBERT作为预训练模型,此外保持 VulFixMiner 的架构和输入构造不变。
任务输入正常commit和漏洞修复commit,对每个commit,fix模型会输出一个分数,表明是修复漏洞的commit的概率。
- CWE多分类器
cwe模型
:
- 微调时,
输入函数更改描述+整个原始代码+整个修改后代码
- 输入首先被CWEEncoder编码为一个函数更改向量
- 然后,向量被喂入两层神经网络
计算每类CWE类型的概率
。因为每个patch可以有多个CWE类型,因此这是一个多标签分类任务,并且使用二元交叉熵作为损失函数。
- 可利用性评级分类器
exp模型
:
输入和微调过程与2相同,输出可利用性评级
;- 只有损失函数不同,使用交叉熵损失函数。
Evaluation评估
研究问题
- RQ1: CoLeFunDa相对于最先进的基线在早期漏洞感知方面的效果如何?
- RQ2:CoLeFunDa的每个组件对性能的影响如何?
- 基于更改变量的函数切片
- 纳入函数更改描述FCDesc
- 生成正样本时的group-based策略(消融实验)
数据集及预处理
52.8% 的 CWE 类别的 CVE 少于 3 个,这表明不同 CWE 类别的知识分散和不足,学习难度很大。
- 收集 Java CVE、相应的修复和未修复提交。收集了839个Java CVE,对应1436个漏洞修复commit,涵盖310个OSS。非漏洞修复commit有839,682个。
- 从漏洞修复中检索功能级别更改。使用PyDriller工具提取漏洞修复commit前后的原始函数代码和修改后函数代码,得到8423个函数代码对。
- 使用CWE 类别和可利用性信息增强CVE,收集CWE层次结构信息。为补丁程序分配 CWE和可利用性信息,使用CWE类型树结构将CWE根类别信息作为标签。
数据预处理
- 使用其 父CWE类别 重新标记CVE,删除具有不常用。获得11个CWE分类。此外,还有40个没有CWE信息的CVE。
- 对可利用性评级信息进行分类,并基于 父CWE 的分层数据拆分:以平衡父CWE类别在三个数据集中的分布。数据集划分为train:validation:test=6:2:2。需要注意的是,静默修复识别任务需要使用非漏洞修复commit进行进一步训练。
- 数据增强。仅使用训练数据进行数据增强,分别从基于group和self的策略中进一步构建了 2,025 和 15,468 个正对样本。
Baselines模型
- 静默修复识别任务:
- VulFixMiner:基于transformer架构,学习commit级别的代码更改表征来识别静默修复。
- CWE类型分类任务、可利用性评级任务:
- VulFixMiner
- TextCNN:NLP领域的卷积神经网络。
- BiLSTM:由两个长短期记忆网络LSTM组成,用于表征代码的序列信息。
- Transformer:由encoder+decoder和多头注意力层组成。
评估指标
使用基于努力感知effort-ware metrics
的指标(如CostEffort@L 和 P o p t P_{opt}Popt)和规范分类指标来评估下游任务,量化CoLeFunDa在不同任务上的性能。
静默修复识别任务(二分类)
- AUC:用于评估模型的预测性能,与阈值设置无关,适用于类别分布不平衡的情况。通常AUC在0.7-1范围内被认为表现不错。
- C o s t E f f o r t @ L CostEffort@LCostEffort@L(Cost-Effective@L)**:
- 考虑了在检查部分数据时的效率。
- 衡量当检查所有提交的代码更改行的L%时,成功识别的漏洞修复commit占所有真实漏洞修复commit的比例。
- 公式:
C o s t E f f o r t @ L = T P ( L ) T P ( L ) + F N CostEffort@L = \frac{TP(L)}{TP(L) + FN}CostEffort@L=TP(L)+FNTP(L)
其中,T P ( L ) TP(L)TP(L) 表示在查看L%的数据时成功检测到的真正例数量,F N FNFN 表示漏掉的真正例数量。
- P o p t P_{opt}Popt (Optimal Precision):在选择最佳阈值时的最高精确度
- P o p t P_{opt}Popt 是一种优化模型预测阈值的指标,以获得最佳精确度(Precision)。
- 通常,模型的输出是一个概率值或分数,用于决定一个样本属于正类别的可能性。不同的阈值可以用于确定正类别的样本。
- 公式:
P o p t = max T ( T P T P + F P ) P_{opt} = \max_{T}{\left(\frac{TP}{TP + FP}\right)}Popt=Tmax(TP+FPTP)
这里,T P TPTP 表示真正例的数量,F P FPFP 表示假正例的数量,T TT 表示阈值的范围。模型通常在不同的阈值下计算Precision,选择最大的Precision对应的阈值。
C o s t E f f o r t @ L CostEffort@LCostEffort@L 用于度量模型在给定观察数据的百分比下的性能,而 P o p t P_{opt}Popt 用于确定在不同阈值下模型的最佳性能。
CWE可利用性评级任务(多分类)
- Precision、Recall、F1:计算macro-Precision、Recall、F1版本,适用于多分类和多标签任务。
RQ1: 与最先进的基线相比,CoLeFunDa 在早期漏洞感知方面的效果如何?
静默修复识别任务
相较于 21 年的工作,CostEffort@5% 指标提升了13.4%, CostEffort@20% 指标提升了10.7%
- 在
极度不平衡的数据集
中保持了同样高的判别能力,同时大幅降低识别漏洞修复的人工检查的工作量
。 - 分类
文件更改数量较少
的commit时效果好,解释:模型是在函数级别训练的,无法捕捉跨文件的语义关系
===》未来的工作方向:改进切片技术,纳入跨函数切片
CEW类型分类任务
相较于最先进的Transformer,各指标分别提升了92.5%,38.4%,72.4%,6.2%
- 解释:
对比学习器
帮助FCBERT有效地从多样的固定数据中学习知识,编码出的表征向量更好
- 针对测试集中补丁数量较少的 CWE 类型,F1 分数也可达到 0.67
漏洞可利用性评级任务
相较于最先进的Transformer,各指标分别提升了53.6%,24.0%,45.4%,26.8%
VulFixMiner效果最差,可能的原因有:
1)只使用代码更改而忽略上下文信息;
2)非漏洞补丁相关的函数更改引入了很多噪音
RQ2. CoLeFunDa的每个组件的效果如何?
消融实验
1.基于更改变量的函数切片; 2.纳入函数更改描述FCDesc; 3.生成正样本时的 group-based 策略
- FCDesc 和切片有助于 CoLeFunDa 在
CWE 分类
上的性能。 - 与切片相比,FCDesc 和生成正样本时的 group-based 策略对
漏洞可利用性评级分类任务
和静默修复检测任务
贡献更大。因此,每个组件的设计有效地提高了整体性能。
Discussion讨论
A. 给没有CWE类型的CVE分类(不正确结果归纳)
任务:
对于40个没有CWE类型的CVE,CWE模型给出CVE是各类CWE的概率并排序,把CVE URL,fix URL和CWE模型的分类结果提供给专家,并且完成两个问题:
- CVE的真实CWE根类型是什么?
- 正确的类型是否在CWE模型给出的预测结果中?
结果:
- 对于92.5%的CVE,其正确CWE类型存在于CWE模型给出的前五个类型中;
- 对于37.5%(62.5%)的CVE,其真实CWE类型存在于CoLeFunDacwe给出的前1(2)个类型中;
- 有3个错误识别的CVE
B. 补丁函数更改表征的可视化(映射到二维空间)
用FCBERT编码函数更改后,使用UMAP将表征向量映射到二维空间,
C.使用场景(早期漏洞感知)
CoLeFunDa的主要目标是提供早期漏洞感知,以增加网络安全的可靠性,为维护者和用户提供更多时间来准备和采取防御措施。
- 提前修复漏洞的机会和时间:CoLeFunDa帮助维护者在漏洞的影响增加之前就能修复它们。这对于那些由于各种原因(如集成发布周期较长)而无法及时公开漏洞的情况非常有用。
- 增加时间以应对潜在攻击:由于漏洞修复可能需要时间,漏洞通常不会及时披露。CoLeFunDa可以帮助开源软件用户在早期感知漏洞修复,提供更多的时间来采取措施来防御可能的攻击。
- 开放且为了保护而创建的解决方案:CoLeFunDa是一个开放的解决方案,旨在保护软件,而不是用于恶意目的。它与其他识别漏洞的解决方案相似,如软件组合分析工具,可以被恶意方和开源软件用户使用。然而,这种研究仍然有价值,因为它使开源软件用户有能力防御潜在的攻击。
有效性威胁
内部有效性威胁
- Ont 威胁:研究中利用了漏洞修复提交的功能级更改,但并非所有的功能更改都是为了修复漏洞。这种情况可能引入偏差。为减少这种偏差,研究中排除了包含四个或更多函数更改的提交。此外,在监督式扩充策略中,仅当两个函数更改用于修复相同的CWE并且它们是提交中唯一的函数更改时,才将它们视为功能相似的对。未来的研究应该探索不同的阈值和过滤方法,以减少由嘈杂提交引起的偏差。
- 用户调查造成的潜在偏差:用户调查中手动CWE分类可能带来潜在的偏差。为了降低这种偏差,参与者都是具有5年以上行业经验的资深安全专家。此外,提供了“其他”选项,以便参与者可以根据自己的专业知识提供超出列表的CWE课程。
- FCDesc的质量:功能更改描述(FCDesc)生成可能受到威胁。由于GumTree生成的FCDesc只包含通用的节点类型和更改类型,它们是通用的。因此,多个修复程序可能具有相同的FCDesc,但分别修复不同的CWE。这可能导致模型混淆,无法更好地学习相应的知识。改进FCDesc质量的方法可能包括从提交消息中提取FCDesc以实现特定功能更改。
外部有效性威胁
- 作者在Java补丁上进行了实验,因此该方法可能无法推广到其他编程语言。为了减轻这种威胁,研究中选择了支持多种编程语言的工具,如Gumtree AST Spoon Dif.f和TreeSitter,它们分别支持42种和13种编程语言。
相关工作
软件工程中的对比学习
先前的研究表明,对比学习方法在学习代码表示方面非常有价值。一些相关工作包括:
- ContraCode: 由Jain等提出,利用代码压缩、标识符修改和正则化等技术,以生成功能等效的程序。
- BOOST: 由Ding等提出,使用对比学习来学习基于代码结构的代码表示。
- SYNCOBERT: 由Wang等提出,利用源代码的符号和句法属性,以更好地学习代码表示。
- Corder: 由Bui等提出,使用不同的程序转换运算符,例如变量重命名和语句排列,以生成不同的程序变体,同时保留语义。这些研究强调了对比学习在未标记数据集上有效学习函数级源代码表示的潜力。
与上述研究不同的是,本文的目标是学习函数级代码更改的表示。
作者提出了一种新的功能变化数据增强方法,结合了编程语言切片技术和CWE类别信息,以生成语义相似或功能含义相似的函数级代码更改
。
早期漏洞感知
早期漏洞感知是减少定位和修复漏洞所需资源的重要任务,以避免漏洞利用。相关工作包括:
- VulFixMiner: 由Zhou等提出,基于Transformer的方法,从提交级代码更改中提取语义含义,以识别静默修复。然而,它不能为已识别的修复程序提供解释,因为它仅利用代码更改信息。
- DeepCVA: 该研究提出了一种用于评估提交级软件漏洞的方法,以了解漏洞的影响和严重性。DeepCVA使用基于注意力的卷积神经网络从易受攻击的提交中提取代码特征和上下文信息,并评估软件漏洞的多个指标。然而,它无法进行早期漏洞感知。
与上述研究不同,本文引入了CoLeFunDa用于可解释的静默脆弱性早期感知。
通过已确定的静默修复,CoLeFunDa向OSS用户提供了CWE类别和漏洞的利用等级等两个关键的解释信息。这有助于更好地理解漏洞的性质和严重性。
结论和未来工作
提出了一个框架CoLeFunDa,用于可解释的漏洞静默修复识别。
CoLeFunDa 利用正对样本数据增强、FunDa 和对比学习,从有限且多样化的补丁数据中学习功能级补丁表示。
然后,针对下游任务(即静默修复识别、CWE类别分类和可利用性评级分类)对 CoLeFunDa 进行微调,以提供可解释的自动静默修复识别。
与 5 位安全专家进行用户研究,以验证科乐丰达Cwe输出。结果显示,62.5% 的 CVE 在前 2 个建议中被正确分类,表明科乐丰达Cwe在实际环境中。
在未来的工作中,为了更全面地解释已识别的静默修复,我们计划:
扩展下游任务以预测 CVSS 漏洞指标
(例如,影响评分和严重性级别)。将我们的方法推广到更多的编程语言,如Python和C / C++
。
课堂讨论
华为的
解释漏洞
预训练模型
如何切片的
数据集:java的
数据流只有变量相关的行,
控制流(没考虑)、只考虑数据流
对比学习,数据增强:构造正样本对(语义相似or功能意义相同)
一个batch中,cwe id相同时正样本
数据增强
没有本质上的数据产生,样本数没有变化,只是将数据依赖考虑进去
通过切片纳入更多函数信息
step②生成文本类型:描述等等,算信息增强
step③
编辑序列描述为文本
控制流图、数据流图
二分类
并列支持三个模型
后面两个是必须漏洞修复可commit,第一个不是
难点:数据处理、模型训练
对比学习的可视化工具
降到二维空间的效果