# HgtJIT : 基于异构图转换器的实时漏洞检测
IEEE 2025,IEEE TDSC (CCF A 类,网络安全 / 可信计算顶刊),作者南京大学、澳洲迪肯大学团队
⭐⭐⭐⭐⭐
# 摘要:
这篇论文提出了一种名为HgtJIT的即时(JIT)漏洞检测方法,它基于异构图Transformer(HGT),通过引入diffPDG来表示代码变更并使用CCT5模型嵌入图节点,有效解决了现有CodeJIT方法在特征表示、代码嵌入和异构信息利用方面的局限性,并在实验中取得了显著优于基线模型的F1和AUC性能提升,证明了HgtJIT是目前最好的模型。
# 简介
现有检测漏洞的方法
1、传统方法利用静态代码分析器来寻找隐藏在程序中的安全漏洞。缺点:依赖人工制作的准则。
2、基于deepleaning的检测,自动学习漏洞中隐含的代码模式。
但事后检测修复是已经受损了,所以提出了即使漏洞检测。一提交代码就检查!
早期 JIT 只看代码指标和文本特征来判断有没有问题,但是这不够准确,因为它们会涉及到源代码结构的变化、程序依赖关系的修改以及代码关系的演变。CodeJit 用代码转换图(CTG)来表示代码变更的语义,由于CPG的规模随着代码行数的增加呈指数增长,会导致大量噪声。所以CodeJIT缺乏泛化能力。
代码变更图其实有很多种节点(比如新增的代码、删除的代码)和边(比如数据流、控制流),CodeJIT 没能充分利用这些“异构信息”,有点浪费。
HgtJIT 的
1、合并变更前和变更后文件的程序依赖图(PDG),构建了一种新的变更级图表示diffPDG(更关注语义之间关系),并基于变更节点进行程序切片,聚焦于与漏洞相关的部分。
2、在大规模代码变更语料库上预训练的CCT5模型嵌入图节点, 有效缓解OOV问题。
3、采用HGT模型学习漏洞特征。
# 现在如何检测代码变更?
代码变更表示学习,其目标是获取代码变更的分布式表示,用语义信息捕获更高层次的特征,从而更好地反映代码变更的内容和意图。 本文使用CCT5嵌入到diffg - pdg的图节点,利用在大量数据集中学到的代码变更来生成最有意义的特征表示。
# C、异构图转换器?
※ 在漏洞检测中,异构图可以用来表示代码变化的复杂性,包括添加、删除、未修改的操作,以及它们之间的依赖关系。
而 HGT 这个深度学习模型,专门用来处理不同节点和边缘类型的异构图数据。就是通过参数化去表示呗。
# 总结论文 核心创新点
① 画图,用diffPDG,把没有用的代码信息和不想关的上下文都去掉了。
②CCT5 嵌入, 利用预训练好的模型理解代码变更语意。
③用了 异构图Transformer (HGT) 来处理 diffPDG。 ——HGT优点在于对图中不同类型节点(变更的代码)和不同类型的边(依赖关系)能综合考虑给它们分配不同的注意力权重,让模型更加精准捕捉关系。
# 结果
效果显著:实验中取得了显著优于基线模型的F1和AUC性能提升,泛化能力强,有普遍性。
消融实验证明每个部分都是缺一不可的,都是有效的,单独看它们产生的影响。
# 论文总结
1、论文对CodeJIT的局限性分析得很到位,狠狠批了一道
2、论文涉及的知识包括图神经网络、预训练模型HGT很多知识点都不了解。
3、HgtJIT还比较了传统的机器学习漏洞检测(精度虽高,但召回率低),基于深度学习的漏洞检测大部分是在侧重于在文件或功能级别检测漏洞。而即使检测的HgtJIT,可以从根本上减少减少与VCC相关的风险。
# 名词解释:
VCC 是 Vulnerability-Contributing Commit,也就是导致漏洞的提交。
Word2Vec 是把词语转成低维向量的算法,让语义相近的词向量距离更近,还能做向量加减推理。
HGT(Heterogeneous Graph Transformer,异构图 Transformer):一种结合图神经网络(GNN)**与**Transformer 注意力机制的深度学习模型,专为多类型节点、多类型边的异构图设计,自动建模不同类型实体与关系的语义,无需人工设计元路径。
JIT: Just-In-Time 即时,文中为即时漏洞检测的意思。