赞
踩
本文为邹德清教授的《网络安全专题》课堂笔记系列
的文章,本次专题主题为大模型。
一位同学分享了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,通过对比学习和数据增强,帮助开源软件维护者和用户更早地感知漏洞修复。
课程中目前我最难理解的一篇文章,工作量较大,可学习的知识密集。
数据增强与样本扩充:
无监督The unsupervised self-based strategy
。数据增强并不一定要增加样本数,也可以是通过引入额外信息(信息丰富度),如额外的上下文、描述信息、元数据等,来提高数据质量。有监督The supervised group-based strategy
。基于类别信息:功能相似(修改相同漏洞),构建正对样本,将相似功能的函数更改分配给相同的正样本对。对比学习:在未标记的数据上学习有用的表示。
模型微调和迁移学习:使用对比学习学到的表示可以进一步应用于下游任务,使用在一个任务上学到的知识来改进另一个相关任务的性能。
结果展示:可解释性和洞察力。降到二维空间,分类错误样本的归纳,具体应用场景优势,有效性威胁(内外部)分析。通过这些角度来说明,工作的有效性和创新性。
实际应用和可解释性:不仅仅关注模型的性能,还要思考如何将研究成果应用于实际场景,并提供可解释的结果。
修复的commit并不表明任何漏洞信息
不能用于分析依赖库的代码更新
。CWE类型,可利用性评级
),可用性较低。为了静默漏洞修复识别及可解释性信息的生成(CWE分类)
对比学习器
和数据增强器FunDa
。
漏洞修复数据
。静默修复识别(fix模型)、CWE类别分类(cwe模型)和可利用性评级(exp模型)
。
CoLeFunDa的整体框架
适用于大规模commit数据
。"Proposed approach"
更侧重于研究中特定问题的解决方法
"Methodology"
更广泛,包括了整个研究的方法论和方法细节
Proposed Approach (提出的方法/方案):
Methodology (方法论):
将预训练模型的参数加载到新的模型中,然后在新任务的数据上进行微调
。保留预训练模型的大部分参数,并仅对最后几层或几个层进行调整
,以适应新任务的要求。CoLeFunDa三个阶段:函数更改数据增强、函数变化表示学习和下游任务微调。
在图1中,第1阶段的输出示例展示了三种构建的正样本对的情况
。
在第1阶段,提出了一种方法 FunDa,用于增加漏洞修复补丁数据的数量。
具体方法是:将每个函数更改扩充为一组语义,保留函数更改样本(FCSamples)。
每两个语义相似或功能相似的FCS样本被视为下一阶段对比学习的正对。
控制流图 (CFG) 和数据流图 (DFG)
进行,基于更改的变量实现前向和后向切片,以保持程序结构完整性和提取数据关系。锚点(更改的代码语句中的更改变量)
,遍历并组合它们各自的控制和数据流路径,从路径中提取相应的代码语句,为函数形成基于更改变量的 FSlice。原始函数和修改函数的 OriFSlices 和 ModFSlices
)。该修补程序通过清理输入修复了一个潜在的安全漏洞。上半部分是一个CVE对应的漏洞修复补丁
红色的减号行
是删减行,绿色的加号行
是新增行,可以看到对变量serverid和serverbase的操作发生了改变,对每个变化的变量执行切片生成过程,得到原始函数切片和修改后函数切片,再加上这个函数更改的描述即可得到一个
函数更改样本 FCSamples;
避免潜在的过拟合
,随机选择最多四个FCS样本进行相关的样本对构建两种构建正对的策略: 有助于构建正函数更改样本对,用于后续的对比学习,提高模型性能。
(1) 无监督自基策略The unsupervised self-based strategy:
(2) 有监督的组策略The supervised group-based strategy:
值得注意的是
,仅对那些仅包含一个函数更改的提交
应用了基于组的策略。
修复特定类型的漏洞
,相对于包含许多函数更改的提交,更容易确定其功能更改是否与其他提交相关。有效性和相关性
,特别是在处理修复特定类型的漏洞时。在第二阶段,为了学习函数变化的表示
,采用了对比学习器
,通过最小化相似数据之间的距离(正数)和最大化不同数据之间的距离(负数)来有效地学习数据表示。
生成互斥批次
)同一个 batch 中有 batchsize / 2 个正样本对,且利用FC_CWE来确保单个小批量中的每个样品对对应于不同的 CWE 类别,即可保证同一batch中的任意两个样本对中的任何一个样本都可以得到一个负样本对
将正样本对中的每个FCS样本编码
为函数变化的表示向量。将预训练编码器定义为FCBERT,它使用与CodeBERT [33]相同的架构和权重。
使用MLP将函数变化的表示向量投影到对比损失的空间,有助于提高图层前的表示质量
[15]。
定义损失函数以最大化同一相关样本对内样本的一致性,最小化来自不同样本对的样本之间的一致性,使用噪声对比估计(NCE)损失函数
来计算损失。
目的:识别静默漏洞修复,为已识别的静默修复提供说明。
用FCBERT作为预训练模型,初始化三个模型FixEncoder, CWEEncoder, 和 EXPEncoder
fix模型
:
任务输入正常commit和漏洞修复commit,对每个commit,fix模型会输出一个分数,表明是修复漏洞的commit的概率。
cwe模型
:
输入函数更改描述+整个原始代码+整个修改后代码
计算每类CWE类型的概率
。因为每个patch可以有多个CWE类型,因此这是一个多标签分类任务,并且使用二元交叉熵作为损失函数。exp模型
:
输入和微调过程与2相同,输出可利用性评级
;52.8% 的 CWE 类别的 CVE 少于 3 个,这表明不同 CWE 类别的知识分散和不足,学习难度很大。
静默修复识别任务:
CWE类型分类任务、可利用性评级任务:
使用基于努力感知effort-ware metrics
的指标(如CostEffort@L 和
P
o
p
t
P_{opt}
Popt)和规范分类指标来评估下游任务,量化CoLeFunDa在不同任务上的性能。
C o s t E f f o r t @ L CostEffort@L CostEffort@L 用于度量模型在给定观察数据的百分比下的性能,而 P o p t P_{opt} Popt 用于确定在不同阈值下模型的最佳性能。
相较于 21 年的工作,CostEffort@5% 指标提升了13.4%, CostEffort@20% 指标提升了10.7%
极度不平衡的数据集
中保持了同样高的判别能力,同时大幅降低识别漏洞修复的人工检查的工作量
。文件更改数量较少
的commit时效果好,解释:模型是在函数级别训练的,无法捕捉跨文件的语义关系纳入跨函数切片
相较于最先进的Transformer,各指标分别提升了92.5%,38.4%,72.4%,6.2%
对比学习器
帮助FCBERT有效地从多样的固定数据中学习知识,编码出的表征向量更好
相较于最先进的Transformer,各指标分别提升了53.6%,24.0%,45.4%,26.8%
VulFixMiner效果最差,可能的原因有:
1)只使用代码更改而忽略上下文信息;
2)非漏洞补丁相关的函数更改引入了很多噪音
消融实验
1.基于更改变量的函数切片;
2.纳入函数更改描述FCDesc;
3.生成正样本时的 group-based 策略
CWE 分类
上的性能。漏洞可利用性评级分类任务
和静默修复检测任务
贡献更大。因此,每个组件的设计有效地提高了整体性能。任务:
对于40个没有CWE类型的CVE,CWE模型给出CVE是各类CWE的概率并排序,把CVE URL,fix URL和CWE模型的分类结果提供给专家,并且完成两个问题:
结果:
用FCBERT编码函数更改后,使用UMAP将表征向量映射到二维空间,
CoLeFunDa的主要目标是提供早期漏洞感知,以增加网络安全的可靠性,为维护者和用户提供更多时间来准备和采取防御措施。
提前修复漏洞的机会和时间:CoLeFunDa帮助维护者在漏洞的影响增加之前就能修复它们。这对于那些由于各种原因(如集成发布周期较长)而无法及时公开漏洞的情况非常有用。
增加时间以应对潜在攻击:由于漏洞修复可能需要时间,漏洞通常不会及时披露。CoLeFunDa可以帮助开源软件用户在早期感知漏洞修复,提供更多的时间来采取措施来防御可能的攻击。
开放且为了保护而创建的解决方案:CoLeFunDa是一个开放的解决方案,旨在保护软件,而不是用于恶意目的。它与其他识别漏洞的解决方案相似,如软件组合分析工具,可以被恶意方和开源软件用户使用。然而,这种研究仍然有价值,因为它使开源软件用户有能力防御潜在的攻击。
Ont 威胁:研究中利用了漏洞修复提交的功能级更改,但并非所有的功能更改都是为了修复漏洞。这种情况可能引入偏差。为减少这种偏差,研究中排除了包含四个或更多函数更改的提交。此外,在监督式扩充策略中,仅当两个函数更改用于修复相同的CWE并且它们是提交中唯一的函数更改时,才将它们视为功能相似的对。未来的研究应该探索不同的阈值和过滤方法,以减少由嘈杂提交引起的偏差。
用户调查造成的潜在偏差:用户调查中手动CWE分类可能带来潜在的偏差。为了降低这种偏差,参与者都是具有5年以上行业经验的资深安全专家。此外,提供了“其他”选项,以便参与者可以根据自己的专业知识提供超出列表的CWE课程。
FCDesc的质量:功能更改描述(FCDesc)生成可能受到威胁。由于GumTree生成的FCDesc只包含通用的节点类型和更改类型,它们是通用的。因此,多个修复程序可能具有相同的FCDesc,但分别修复不同的CWE。这可能导致模型混淆,无法更好地学习相应的知识。改进FCDesc质量的方法可能包括从提交消息中提取FCDesc以实现特定功能更改。
先前的研究表明,对比学习方法在学习代码表示方面非常有价值。一些相关工作包括:
与上述研究不同的是,本文的目标是学习函数级代码更改的表示。
作者提出了一种新的功能变化数据增强方法,结合了编程语言切片技术和CWE类别信息,以生成语义相似或功能含义相似的函数级代码更改
。
早期漏洞感知是减少定位和修复漏洞所需资源的重要任务,以避免漏洞利用。相关工作包括:
与上述研究不同,本文引入了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,第一个不是
难点:数据处理、模型训练
降到二维空间的效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。