一种基于代码属性图与图神经网络的软件漏洞检测方法

摘要: 本发明涉及软件安全、程序静态分析与软件漏洞检测,具体涉及一种基于代码属性图与图神经网络的软件漏洞检测方法。背景技术:1、软件漏洞是现代软件系统面临的重要安全风险...
一种基于代码属性图与图神经网络的软件漏洞检测方法

本发明涉及软件安全、程序静态分析与软件漏洞检测,具体涉及一种基于代码属性图与图神经网络的软件漏洞检测方法。

背景技术:

1、软件漏洞是现代软件系统面临的重要安全风险。随着云计算、物联网、工业控制系统、车联网以及开源软件供应链的快速发展,软件系统规模持续扩大,代码依赖关系日益复杂,缓冲区溢出、命令注入、越界访问、内存释放错误、权限绕过、反序列化漏洞等安全缺陷不断出现。漏洞一旦被攻击者利用,可能导致敏感数据泄露、远程代码执行、服务中断或权限提升,因此在软件开发和发布前对源代码进行漏洞检测具有重要意义。

2、现有基于深度学习的代码漏洞检测方法主要包括序列模型和图神经网络模型两类。序列模型将源代码视为文本序列,利用循环神经网络或卷积神经网络进行表示学习,但源代码不仅是字符序列,更包含语法层级、控制路径、变量定义使用关系和跨语句依赖关系,序列化表示会弱化程序结构信息,使模型难以识别由控制条件、循环边界、数据传播路径和调用上下文共同形成的复杂漏洞模式。图神经网络方法利用程序图结构进行漏洞检测,能够捕获比序列模型更丰富的程序语义,但现有技术仍存在明显不足:第一,程序图构建质量不足,很多方案依赖语言级解析器或手工规则构图,生成的图往往只覆盖语法结构或局部控制关系,难以获得完整的程序语义;第二,将不同语义关系(语法层级、控制流、数据依赖)混合在单一邻接结构中,导致图神经网络难以分别学习不同维度的漏洞线索;第三,安全领域知识利用不足,纯端到端学习难以稳定捕获危险函数调用、缓冲区操作、异常控制等与漏洞相关的先验特征;第四,在增量学习场景中,模型学习新漏洞类型后容易出现灾难性遗忘,现有的随机回放方法在回放预算有限时容易保存冗余样本,导致旧类决策边界维护不足。

3、因此,需要一种能够充分利用高质量程序图表示、显式注入安全领域知识,并能够在有限存储和计算资源下持续学习新漏洞类型的漏洞检测技术。

技术实现思路

1、本发明要解决的技术问题在于:针对现有基于图神经网络的漏洞检测方案在程序图构建质量、多语义特征学习、安全先验知识利用及增量学习防遗忘等方面存在的不足,提供一种基于代码属性图与图神经网络的软件漏洞检测方法。通过工业级代码属性图分解、多维节点特征融合、多图独立编码与全局统计特征融合,以及原型引导的回放选择与正则化机制,在提高检测精度的同时,使模型能够持续学习新漏洞类型并保持对旧类型的识别能力。

2、本发明的技术方案如下:

3、一种基于代码属性图与图神经网络的软件漏洞检测方法,包括以下步骤:

4、步骤s1:对待检测源代码进行代码属性图提取,并按照边类型将统一代码属性图分解为抽象语法树子图、控制流图子图和数据流图子图;

5、步骤s2:针对各子图中的节点,构建融合可学习嵌入、结构特征和语义安全特征的节点表示;所述语义安全特征显式编码危险函数调用、缓冲区操作和异常处理中的至少一种安全领域知识;

6、步骤s3:利用多个独立的图神经网络编码器,分别对所述抽象语法树子图、控制流图子图和数据流图子图进行编码,并融合图级统计特征,输出漏洞检测结果;

7、步骤s4:当出现新的漏洞类型时,执行基于原型引导选择回放的增量学习:通过类别原型、边界信息量和样本多样性三维度评分选择回放样本,并结合原型正则化损失抑制灾难性遗忘,以适应新漏洞模式并降低对旧漏洞类型的遗忘。

8、进一步的,所述步骤s1具体包括:

9、a.调用代码分析工具joern对待检测源代码进行解析,生成统一代码属性图;对代码属性图中的节点进行清洗和规范化处理,包括去除无效节点、统一节点类型名称、截断过长标识符、将罕见标识符映射为未知标识符,并为每个函数或代码片段建立独立的图样本;

10、b.根据边类型,将代码属性图中的语法相关边划分至抽象语法树子图,将控制相关边划分至控制流图子图,将数据依赖相关边划分至数据流图子图;将每个子图构建为有向图,并允许同时属于多个子图的节点在不同子图中重复出现,以使不同图神经网络编码器能够学习与图类型相关的独立表示。

11、所述步骤s2中,构建节点表示具体包括:

12、根据节点类型构建可学习的节点类型嵌入,所述节点类型包括call、identifier、literal、control_structure、method、local、return、parameter、block和field_identifier中的至少一种;

13、根据节点对应的函数名、变量名、字面量或代码值构建可学习的标识符嵌入;

14、计算节点的结构特征,所述结构特征通过对节点入度、出度和总度进行归一化并加入常数偏置项得到,用于描述节点在子图中的局部拓扑位置;

15、构建多维二值语义安全特征,所述语义安全特征用于指示危险函数调用、危险模块使用、缓冲区相关标识符、函数调用表达式、成员访问、导入引用、try块、异常处理器、循环结构、条件语句、返回语句和函数参数中的至少一种;

16、将所述节点类型嵌入、标识符嵌入、结构特征和语义安全特征拼接为融合多维信息的节点特征向量。

17、所述步骤s3具体包括:

18、为抽象语法树子图、控制流图子图和数据流图子图分别设置独立的图神经网络编码器,每个编码器采用图卷积网络,通过多层消息传递和全局池化输出相应子图的图级嵌入;

19、从代码属性图中提取包括代码规模特征、结构复杂度特征和语义安全特征在内的图级全局统计特征,并通过线性投影生成全局特征表示;

20、将所述抽象语法树子图的图级嵌入、控制流图子图的图级嵌入、数据流图子图的图级嵌入和所述全局特征表示进行拼接,经融合网络生成最终代码表示,并基于该最终代码表示进行分类,输出漏洞检测概率。

21、所述步骤s4中,基于原型引导选择回放的增量学习具体包括:

22、提取已完成训练的任务样本在融合网络中的嵌入向量,并计算每个类别的嵌入向量均值作为类别原型;

23、对旧任务候选样本,分别计算原型邻近度评分、边界信息量评分和样本多样性评分,并基于所述三维度评分的加权和,通过贪心策略选择综合评分最高的样本加入回放缓冲区;

24、将新任务样本与所选回放样本混合,对模型进行增量训练;训练损失包括交叉熵分类损失和原型正则化损失,所述原型正则化损失用于约束样本嵌入向其对应类别原型靠拢,以抑制旧类别嵌入空间漂移。

25、与现有技术相比,本发明具有以下有益效果:

26、通过工业级代码属性图按边类型分解为抽象语法树、控制流图和数据流图三个独立子图,使不同编码器能够分别捕获语法结构异常、控制路径缺陷和数据传播风险等不同维度的漏洞线索,避免了语义混合造成的特征稀释,显著提升了漏洞检测精度。

27、通过在节点表示中显式注入危险函数调用、缓冲区操作、异常处理等多维语义安全特征,为模型提供了不依赖训练样本统计的安全先验知识。即使在训练样本有限或类别分布不均衡的情况下,模型仍能稳定捕获漏洞相关线索,提升了小样本场景下的鲁棒性。

28、融合图级全局统计特征与局部图嵌入,使模型能够同时利用代码规模、结构复杂度、安全模式密度等全局先验信息,以及由消息传递捕获的局部结构信息,弥补了图神经网络感受野有限的问题,实现了跨尺度的综合漏洞判断。

29、在增量学习阶段,采用原型引导的三维度评分回放选择机制,协同利用原型邻近度、边界信息量和样本多样性,确保在有限回放预算下优先保留具有代表性、边界性和多样性的旧样本,有效维护了旧类别的决策边界;同时配合原型正则化损失约束嵌入漂移,显著降低了灾难性遗忘,使模型能够在持续吸收新漏洞类型的同时保持对旧漏洞类型的高准确识别能力。