TSE2024|LIVABLE:破解软件漏洞类型识别中的“长尾”难题

admin 2026-08-25 04:41:30 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文解读TSE2024论文LIVABLE,针对软件漏洞类型识别的长尾分布与GNN过平滑难题提出自适应框架。其创新性引入差异化传播GNN保留节点特征,结合Bi-LSTM构建多视图代码表示,并设计动态双分支损失函数平衡头尾类别学习。实验表明该模型准确率达64%,较基线提升24%,有效克服过平滑。建议未来研究将类型识别与漏洞自动修复及跨语言分析深度结合。 综合评分: 87 文章分类: AI安全,漏洞分析,代码审计


TSE 2024 | LIVABLE:破解软件漏洞类型识别中的“长尾”难题

AIForSecurity AIForSecurity

AI安全这点事

2026年8月24日 13:31 安徽

在小说阅读器读本章

去阅读

最近在看漏洞检测相关论文,对这个方向疑问挺多的,论文中只给原始样本数目,比如bigvul中18万多样本,但是这篇论文源码特征使用joern提取代码属性图后确预处理了,源代码中特征生成也只保留节点数<400的,还有无法解析的。简直很难让人复现。欢迎这个方向的朋友讨论一下。

论文题目:LIVABLE: Exploring Long-Tailed Classification of Software Vulnerability Types 发表期刊:IEEE Transactions on Software Engineering (TSE 2024, 软件工程顶级期刊) 论文作者:Xin-Cheng Wen, Cuiyun Gao*, Feng Luo, Haoyu Wang, Ge Li, Qing Liao 作者单位:哈尔滨工业大学(深圳)、鹏城实验室、华中科技大学、北京大学


📌 论文概览与研究背景

在软件安全领域,深度学习(DL)和图神经网络(GNN)已广泛应用于漏洞检测(即判断某段代码是否存在漏洞)。然而,仅告诉开发人员“这段代码有漏洞”是不够的。

软件漏洞种类繁多,不同类型的漏洞其修复优先级和严重程度(CVSS 评分)截然不同。如果能精准预测漏洞的具体类型(如 CWE-119 缓冲区溢出、CWE-22 路径遍历等),将极大地方便开发者定位根因并优先修复高危漏洞。

然而,研究人员在分析 National Vulnerability Database (NVD) 近十年的数据后发现,真实的软件漏洞类型分布呈现极端的长尾分布(Long-Tailed Distribution)

  1. 头部类(Head Classes):极少数常见的漏洞类型占了绝大多数样本(如 CWE-119, CWE-20 等)。
  2. 尾部类(Tail Classes):绝大多数漏洞类型只有极少数样本(如 CWE-507, CWE-776 等)。

⚠️ 关键挑战

  1. 尾部漏洞极具威胁:虽然尾部漏洞样本少,但其严重性极高。统计显示尾部漏洞的平均 CVSS 得分为 7.01,某些极端尾部漏洞(如 CWE-507 木马程序)CVSS 得分高达 9.8。
  2. GNN 的过平滑问题(Over-smoothing):代码结构图(结合了 AST、CFG、DFG 等)通常较深。传统 GNN 增加层数会导致节点表示趋同(过平滑),而层数太少又无法捕捉长距离依赖。
  3. 严重的数据不平衡:标准模型倾向于预测头部类,直接忽略样本极少的尾部类,导致尾部预测准确率极低。

为了解决上述难题,本文提出了首个专门面向长尾软件漏洞类型分类的自适应框架——LIVABLELong-tailed software VulnerABiLe type classification)。


💡 核心创新点

  1. 首创性探索:首次针对函数级软件漏洞类型的长尾分类问题展开深入研究。
  2. 差异化传播 GNN(Differentiated Propagation-based GNN):通过在每一步传播中显示融入初始节点特征,有效缓解了多层 GNN 的过平滑问题,大幅提升代码结构图的表示能力。
  3. 双通路协同增强:结合基于序列的 Bi-LSTM 语义抽取与基于图的结构抽取,形成 Multi-View(多视图)代码表示。
  4. 自适应重加权机制(Adaptive Re-weighting Module):提出一种随着训练 Epoch 动态调整的损失函数,前期聚焦尾部难样本,后期兼顾头部平滑,实现头尾平衡学习。

⚙️ LIVABLE 详细方法

LIVABLE 整体架构主要由两大核心模块组成:漏洞表示学习模块自适应重加权模块

1. 漏洞表示学习模块 (Vulnerability Representation Learning Module)

(1) 差异化传播 GNN

对于输入的代码结构图 G(V,E),首先使用 Word2Vec 将每个节点 v 映射为 128 维向量,并通过 GRU 进行初始特征变换:

  • X:初始节点表示矩阵。
  • F:GRU 特征变换层。

为了在深度传播中保留初始节点的差异性并消除过平滑,第 l 层的节点表示  定义为:

  • :带自环的邻接矩阵(Adjacency Matrix)。
  •  的度矩阵(Degree Matrix)。
  • α:传送超参数(Teleport Hyperparameter),用于控制初始特征在传播过程中的保留比例。

最终通过混合池化(Hybrid Pooling)提取图特征 

  • AvgPool(⋅) / MaxPool(⋅):平均池化与最大池化,分别捕捉局部与全局图结构信息。
  • C(⋅):多层感知机(MLP)。

(2) 序列到序列语义提取

针对代码 Token 序列 ,使用双向 LSTM(Bi-LSTM)提取上下文语义特征:

最终的漏洞融合表示为:


2. 自适应重加权模块 (Adaptive Re-weighting Module)

针对长尾分布,设计了包含“尾部聚焦分支”和“头部聚焦分支”的全新训练损失函数 L:

(1) 损失函数组成

  • (Focal Loss,尾部聚焦)

通过调制因子  降低易分类样本权重,强迫模型关注难分类的尾部样本。

  • (Label Smoothing Cross-Entropy,头部聚焦)

通过平滑参数 ϵ 与均匀分布 ,防止模型对头部类产生过拟合与过度自信。

(2) 动态迁移权重 T

权重 T 随着训练 Epoch 动态更新:

  • :当前训练轮数。
  • :总训练轮数。

设计直觉:在训练初期( 较小,T→1),模型重点学习较难提取的尾部类特征;随着训练深入(T 逐渐减小),重点逐步平滑过渡到头部类,避免双分支冲突。


📊 实验评估与结果分析

实验在服务器 NVIDIA GeForce RTX 3090 上运行,漏洞检测训练 100 轮,类型分类训练 50 轮。

1. RQ1:漏洞类型长尾分类表现

在从 Fan et al. 提取的 10,667 个漏洞函数(包含 91 种 CWE 类型及 None 类型)上的对比结果如下:

| 方法 | Head Acc (%) | Medium Acc (%) | Tail Acc (%) | Overall Acc (%) | | — | — | — | — | — | | Devign | 38.26 | 7.35 | 23.08 | 34.99 | | Reveal | 39.39 | 42.65 | 46.15 | 39.83 | | LIVABLE (Ours) | 64.79 | 58.82 | 53.85 | 64.01 |

  • 整体提升:LIVABLE 的准确率达到 64.01%,相比 SOTA 方法 Reveal 提升了 24.18%
  • 尾部突破:在 Head、Medium、Tail 类上分别取得了 25.40%16.17% 和 7.70% 的性能提升。
  • 综合指标:在 Precision、Recall、Macro F1、Weighted F1 以及 MCC 显著优于所有 Baseline。

2. RQ2:漏洞检测任务通用性验证

在三个经典漏洞检测数据集(FFMPeg+Qemu、Reveal、Fan et al.)上,仅评估 LIVABLE 的漏洞表示学习(VRL)模块:

| 数据集 | 指标 | SOTA Baseline (Reveal) | VRL Module (Ours) | 相对提升 | | — | — | — | — | — | | FFMPeg+Qemu | Accuracy / F1 | 61.07% / 62.19% | 64.84%67.39% | +3.77% / +8.36% | | Reveal | Accuracy / F1 | 81.77% / 41.62% | 93.53%51.50% | +6.04% / +23.74% | | Fan et al. | Accuracy / F1 | 92.78% / 20.98% | 95.05%38.60% | +2.27% / +68.78% |

结果表明,即便不加重加权模块,LIVABLE 提出的表示学习模块在传统二进制漏洞检测任务上也全面超越现有的图神经网络方法。


3. RQ3:消融实验 (Ablation Study)

| 变体模式 | Accuracy (%) | 贡献分析 | | — | — | — | | LIVABLE (完整模型) | 64.01 | – | | w/o 序列表示 (仅 GNN) | 56.59 | 序列语义模块贡献了 14.65% 的提升 | | w/o 图表示 (仅 Bi-LSTM) | 59.32 | 差异化 GNN 模块贡献了 5.41% 的提升 | | w/o 自适应重加权 (仅 CE Loss) | 59.32 | 自适应重加权模块贡献了 4.69% 的提升 |


4. RQ4:超参数敏感性

  • GNN 层数:传统 GNN 通常在 2 层时达到最佳,层数增加会导致过平滑。而 LIVABLE 在 16 层 时取得最佳准确率(64.01%),验证了差异化传播算法有效克服了过平滑问题。
  • 隐藏层维度:Sequence 模块隐藏层大小设为 512 时性能达到峰值。

📝 总结与展望

LIVABLE 针对软件漏洞类型预测中的长尾分布与 GNN 过平滑两大痛点,给出了极具创新性的解决方案:

  1. 网络层面:利用传送机制改进 GNN 传播逻辑,结合 Bi-LSTM 构建了高鉴别力的多视图代码表示;
  2. 损失函数层面:提出了随训练进程自适应演化的双分支损失函数,兼顾尾部难样本与头部平滑。

未来方向:作者团队计划将漏洞类型识别进一步与漏洞自动修复(Vulnerability Repair)相结合,并研究跨语言(如 Java、Python)及更大粒度(项目级/文件级)的长尾漏洞分析技术。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:AI安全这点事 AIForSecurity AIForSecurity《TSE 2024 | LIVABLE:破解软件漏洞类型识别中的“长尾”难题》

评论:0   参与:  0