Page 115 - 《软件学报》2025年第12期
P. 115
5496 软件学报 2025 年第 36 卷第 12 期
Abstract: To perform fine-grained vulnerability detection, an ideal model must determine whether software contains vulnerabilities and
identify the type of vulnerability (i.e., perform vulnerability classification). A series of deep learning models have demonstrated strong
overall performance in vulnerability classification tasks. However, a severe data imbalance exists across different vulnerability types. Many
vulnerability types are represented by only a small number of samples (referred to as few-shot types in this study), resulting in poor
classification performance and generalization for these few-shot types. To enhance classification performance for these types, VulFewShot
is proposed. This contrastive learning-based vulnerability classification framework assigns more weight to few-shot types by bringing
samples of the same type closer together while keeping samples from different types further apart. Experimental results show that
VulFewShot improves classification performance across all vulnerability types. The smaller the number of samples for a given type, the
more significant the improvement. Therefore, VulFewShot improves classification performance for vulnerabilities with limited samples and
mitigates the impact of sample size on the learning process.
Key words: vulnerability classification; few shot; contrastive learning
如今各种网络攻击层出不穷, 一系列事件表明漏洞是大多数的网络攻击主要原因 [1,2] . 在实践中, 软件的设计
缺陷使得漏洞在软件变得更加复杂的同时也更难以预防 [3] . 因此, 以自动化、高效且准确的方式检测出软件漏洞
是至关重要的. 目前已有多种方法被用于检测软件漏洞. 传统的检测方法基于人工定义的规则或特征对漏洞的描
述 [4−8] , 这些方法对许多类型的漏洞都很有效但高度依赖人类专家的经验, 并不可避免地可能遇到大量的误报和漏
报 [9] . 为了减少专家工作量, 基于机器学习的检测方法被提出来自动学习和识别漏洞的特征 [10,11] . 深度学习是相对
于机器学习的突破性技术, 它在漏洞检测中得到了广泛应用, 这些应用包括利用卷积神经网络 (CNN) [12−15] 、长短
期记忆网络 (LSTM) [16−18] 等模型来提取漏洞的特征.
目前基于深度学习的漏洞检测方法更多的是采用二分类的方法检测一段代码是否包含漏洞 [14,16,17,19–22] . 但在
实际操作中, 识别漏洞类型也是调查漏洞产生原因并修复漏洞的必要手段. 在这种情况下漏洞检测自然会利用多
分类方法对漏洞进行分类. µVulDeePecker 是一种最先进的多分类系统, 它使用由 3 个 BiLSTM 网络块组成的神
经网络对漏洞进行分类 [23] . 根据他们论文的结果, 它在漏洞类型分类方面可以取得理想的性能.
但是根据我们的统计显示, 这些数据集中不同类型漏洞的数量是严重不平衡的. 在重新评估µVulDeePecker
之后我们发现随着漏洞样本数量的减少, 不同漏洞类型的分类性能会随之下降使得预防工作无效 [24,25] . 在此结果
上继续评估了 CNN、BiGRU、BiLSTM 和 Atten-BiLSTM 等多个其他深度学习模型在漏洞分类任务上的效果, 发
现漏洞样本数量不平衡问题使得这些模型的分类性能依旧较差. 为了进一步研究性能较差的背后是否有其他的因
素存在, 我们在 MVD 数据集的基础上构建了一个更平衡且更符合少样本特征的数据集 MVD-part. 实验表明在少
样本数据集中分类性能较差的问题依然存在.
为了缓解分类性能较差的问题, 少样本漏洞类型中该问题尤为明显, 我们将对比学习引入到漏洞分类任务中.
具体来说, 利用有监督的对比学习设计了一个新颖的训练过程, 该过程使得同一类型的漏洞样本之间相互“接近”,
同时使得不同类型的漏洞样本彼此“远离”, 从而更好地从少样本中提取出漏洞特征. 基于此训练过程, 我们实现了
基于对比学习的漏洞分类框架 VulFewShot, 并在 MVD [23] 和 MVD-part 数据上对该框架进行评估. 实验结果表明,
使用对比学习可以提升不同样本规模的各类漏洞的分类性能, 该提升在少样本的漏洞分类上提升尤为明显. 因此
VulFewShot 在分类性能方面弥合了大规模和小规模样本数量漏洞类型之间的差距.
综上所述, 本文做出了以下贡献.
(1) 全面分析了漏洞数据集中样本不平衡问题以及该问题对漏洞分类性能, 特别是少样本学习场景下的影响.
(2) 用对比学习提高了不同样本规模的漏洞分类性能, 尤其是少样本漏洞类型的分类性能.
(3) 设计并实现了 VulFewShot (代码已发布在 https://github.com/VulFewShot/VulFewShot), 这是一个基于对比
学习的漏洞分类框架. 同时对 4 种深度学习模型 (CNN、BiGRU、BiLSTM 和 Atten-BiLSTM) 进行了广泛实验, 证
明了对比学习确实带来了改进.
本文第 1 节介绍相关工作. 第 2 节描述漏洞分类的过程. 第 3 节介绍传统深度学习模型的分类性能. 第 4 节介
绍使用对比学习框架后模型的分类性能. 第 5 节讨论关键的潜在威胁. 第 6 节对本文总结并展望未来的工作.

