CN117592061B - 融合代码漏洞特征及属性图的源代码安全检测方法与装置 - Google Patents
融合代码漏洞特征及属性图的源代码安全检测方法与装置 Download PDFInfo
- Publication number
- CN117592061B CN117592061B CN202410082579.4A CN202410082579A CN117592061B CN 117592061 B CN117592061 B CN 117592061B CN 202410082579 A CN202410082579 A CN 202410082579A CN 117592061 B CN117592061 B CN 117592061B
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- code
- program
- cve
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 42
- 230000007246 mechanism Effects 0.000 claims abstract description 21
- 238000000605 extraction Methods 0.000 claims abstract description 10
- 238000003062 neural network model Methods 0.000 claims abstract description 10
- 230000006870 function Effects 0.000 claims description 30
- 238000000034 method Methods 0.000 claims description 27
- 230000014509 gene expression Effects 0.000 claims description 18
- 238000010586 diagram Methods 0.000 claims description 11
- 238000013528 artificial neural network Methods 0.000 claims description 10
- 230000004913 activation Effects 0.000 claims description 9
- 238000004458 analytical method Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 7
- 239000013598 vector Substances 0.000 claims description 7
- 238000005516 engineering process Methods 0.000 claims description 5
- 238000007781 pre-processing Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 5
- 230000004931 aggregating effect Effects 0.000 claims description 4
- 239000011159 matrix material Substances 0.000 claims description 3
- 238000010606 normalization Methods 0.000 claims description 3
- 238000012216 screening Methods 0.000 claims description 3
- 230000008859 change Effects 0.000 claims 1
- 230000004927 fusion Effects 0.000 claims 1
- 210000002569 neuron Anatomy 0.000 claims 1
- 239000012634 fragment Substances 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000008439 repair process Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000012512 characterization method Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000009966 trimming Methods 0.000 description 2
- 201000002200 Congenital disorder of glycosylation Diseases 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 235000013921 calcium diglutamate Nutrition 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Virology (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公布了一种融合代码漏洞特征及属性图的源代码安全检测方法与装置,通过构建CVE漏洞关键词库,通过对已知软件漏洞库和待检测漏洞程序的特征提取,再进行相似性判断,捕捉程序代码的语义信息,基于注意力机制的GNN构建语义特征学习图神经网络模型以关注带有漏洞特征关键词的代码节点;装置包括CVE漏洞特征关键词库生成模块、代码属性图漏洞特征关键词标记模块、代码结构语义特征提取模块和漏洞检测模块。采用本发明的技术方案,能够准确地定位漏洞,提高漏洞检测的效率和准确性。
Description
技术领域
本发明涉及计算机软件技术领域,尤其涉及一种融合代码漏洞特征及属性图的源代码安全检测方法与装置。
背景技术
代码漏洞是指在软件开发过程中存在的错误、疏忽或缺陷,这些错误可能会导致应用程序出现不可预期的行为,从而影响软件的安全性、可靠性等方面。代码漏洞是软件开发中不可避免的问题,因此需要采取有效的措施进行识别和修复。
代码漏洞检测是指在软件开发的过程中,通过对程序代码进行静态分析或动态测试,发现程序中存在的安全漏洞或错误,以便于及时修复并提高软件的安全性和可靠性。目前,自动代码漏洞检测已经成为一种趋势。随着人工智能和机器学习的发展,基于机器学习和深度学习的自动代码漏洞检测方法也逐渐得到了应用。这些方法可以通过学习大量的安全漏洞或错误样本,自动发现和识别安全漏洞或错误,并对程序进行修复或优化。
但是,目前基于深度学习漏洞检测技术仍然存在一些不足,例如,特征提取方法难以准确定位漏洞信息位置,以及手动标记漏洞节点复杂问题。通常还需要大规模的训练数据集,其中包含漏洞和正常代码的示例等。这对于多样化的漏洞检测仍然存在挑战,对软件漏洞检测的准确性不高。
发明内容
针对上述现有技术存在的不足,本发明提供一种融合代码漏洞特征及属性图的源代码安全检测方法与装置,能够解决由于已有的程序漏洞检测方法通常需要耗费大量的人工时间和精力来手动识别和修复程序中的漏洞的问题,可以提高对漏洞代码节点的关注,并为漏洞检测提供有效的特征表示,更加有效的捕捉潜在的软件漏洞。
本发明中,CVE :Common Vulnerabilities&Exposures,通用漏洞披露;CPG:codeproperty graph,代码属性图;代码属性图的节点(代码节点)为程序的组成部分,是软件代码中的特定部分或片段,包含有底层语言的可能带有漏洞的函数、方法、变量、控制结构、语句或代码块等。
本发明通过构建CVE漏洞关键词库,结合CPG代码属性图和图神经网络模型(以下简称GNN)技术,通过对已知软件漏洞库和待检测漏洞程序的特征提取,然后进行相似性判断,从而有效捕捉程序代码的语义信息,更加关注带有漏洞特征关键词的代码节点,从而提高图神经网络模型对软件漏洞的检测准确性。
本发明实施例提供了融合代码漏洞特征及属性图的源代码安全检测方法与装置。该方法包括以下步骤:
1)利用软件的漏洞补丁差异构建CVE漏洞特征关键词库。
基于已有的CVE漏洞补丁差异文件和漏洞报告,创建CVE漏洞特征关键词库;
2)依据CVE漏洞特征关键词标记代码属性图。
分别生成CVE漏洞程序和待检测程序的代码属性图,然后遍历待检测程序的代码属性图,并标记具有CVE漏洞特征关键词的代码节点;同时,对CVE漏洞程序的代码属性图也进行标记,得到具有标记CVE漏洞特征关键词的代码节点;
3)提取程序代码结构语义特征。
构建基于注意力机制的图神经网络(以下简称GNN)模型,分别对CVE漏洞数据库(即CVE漏洞程序库,包含计算机安全漏洞信息的数据库)和待检测程序的代码属性图进行语义特征学习,提取得到程序代码结构语义特征;
4)基于程序代码结构语义相似度检测漏洞。
利用加权余弦相似度计算待检测漏洞程序与已知漏洞程序之间的代码语义特征相似度,并结合相似度阈值动态调整的机制,与实时的漏洞检测情况及特征统计信息进行比较,以判断程序代码是否存在漏洞。
步骤1)创建CVE漏洞特征关键词库;具体包括:
11)首先,从CVE漏洞数据库中获取CVE漏洞的原始代码和漏洞补丁。利用Diff工具比较原始代码和漏洞补丁,生成包含变更内容的差异文件。差异文件包括修改的代码行、具体的代码变更、文件路径、上下文信息等。
12)使用Diff工具对生成的差异文件进行解析,匹配得到漏洞关键词。漏洞关键词提取过程包括:从差异文件和CVE漏洞数据库中的漏洞报告中提取漏洞相关代码块。使用正则表达式匹配不同类型的漏洞关键词,包括函数调用类、变量名类、字符串操作类、指针操作类、算术表达式类等。
具体地,针对不同漏洞类型的代码块,使用以下正则表达式模式进行匹配:
函数调用类:正则表达式模式:[a-zA-Z_]\w*\s*\([^)]*\),示例:memcpy(dest,src, size);其中:[a-zA-Z_]\w*:函数名,由字母、数字和下划线组成。\s*:函数名后的空格。\([^)]*\):函数的参数列表,用括号括起来,包含多个参数,每个参数之间用逗号分隔。
变量名类:正则表达式模式:[a-zA-Z_]\w*\s*[^=]*\s*=\s*[^;]*,示例:intbuffer_size = 256。其中:[a-zA-Z_]\w*:变量名,由字母、数字和下划线组成,首字符不能为数字。\s*:变量名后的空格。 [^=]*:等号前的变量值, \s*=\s*:等号前后的空格。[^;]*:等号后的分号。
字符串操作类:正则表达式模式:[a-zA-Z_]\w*\s*\([^)]*\)\s*,示例:strcpy(dest, src)。其中:[a-zA-Z_]\w*:函数名,由字母、数字和下划线组成。 \s*:函数名后的空格。\([^)]*\):函数的参数列表。 \s*:函数名后的空格。
指针操作类:正则表达式模式:[a-zA-Z_]\w*\s*\*\s*[a-zA-Z_]\w*\s*;示例:int *ptr;其中:[a-zA-Z_]\w*:变量名,由字母、数字和下划线组成。\s*:变量名后的空格。\*:指针运算符,表示指向某个变量的指针。\s*:指针运算符后的空格。[a-zA-Z_]\w*:另一个变量名,由字母、数字和下划线组成。\s*:另一个变量名后的空格。
算术表达式类:[a-zA-Z_]\w*\s*([-+*/])\s*[a-zA-Z_]\w*(\s*([-+*/])\s*[a-zA-Z_]\w*)*;示例:result = a * b / c。
13)构建漏洞关键词库的结构为三元组形式;
对匹配到的漏洞关键词进行去重操作;计算每个漏洞关键词的词频;筛选出词频较高的漏洞关键词;整理和归纳关键词,漏洞特征关键词库的结构为三元组形式:<关键词类型, 关键词, TF(词频)值>。
步骤2)依据漏洞特征关键词标记代码属性图。分别生成CVE漏洞程序和待检测程序的代码属性图,然后遍历待检测程序的代码属性图,并标记具有CVE漏洞关键词库的节点;同时,对CVE漏洞程序的代码属性图进行标记;
21)对于每个代码节点,使用代码分析工具(Joern工具)生成CPG代码属性图,包括AST、CFG、DDG和CDG(包括AST、CFG和DFG)。在遍历每个代码节点时,检测节点自身是否包含漏洞特征关键词。同时,进行上下文关系分析,考虑节点与其父节点、子节点、兄弟节点等的语义关系,判断周围代码是否与漏洞特征关键词在语义上匹配。
22)如果代码节点包含漏洞特征关键词,或者上下文关系与漏洞特征关键词语义匹配,则标记该代码节点为可能存在漏洞的节点。
23)针对标记后的漏洞代码节点,执行向前和向后的切片操作,以获取漏洞代码节点相关的数据依赖和控制流依赖的代码节点。生成修剪后的子代码属性图,确保涵盖标记的漏洞节点及其语义关联节点。
步骤3)提取程序代码结构语义特征。使用基于注意力的机制图神经网络(以下简称GNN)模型,分别对CVE漏洞数据库、待检测程序的代码属性图进行语义特征学习;
31)对CPG属性图中的节点代码行进行预处理,去除空格、注释等无关信息。进行符号化处理,将标识符、变量名、函数名等替换为抽象的符号(如"VAR0"、"FUN0")。然后应用Word2Vec生成经过符号化处理的代码节点的初始特征向量。
32)构建图神经网络模型,包括第一层、第二层和第三层图卷积层。每一层关注不同抽象级别的结构特征。设置隐藏层维度为64(低级别)、128(中级别)和256(高级别)。使用LeakyReLU作为激活函数,设置三个注意力头。每个头分别应用于低级别、中级别和高级别的注意力隐藏层。
33)图卷积层通过聚合代码节点的邻居特征来更新代码节点特征。
更新过程采用公式表示为:
其中,表示代码节点i在第l+1 图卷积层的特征,/>为图卷积层的序号;σ 是激活函数。N(i) 表示节点i的邻居节点集合,/>是归一化常数,/>是注意力权重矩阵,/>是邻居节点 j 在第 l 层的特征,/>是偏置项,α 是参数,/>是代码节点i的漏洞标记;为表示图神经网络中节点i和节点 j 之间的注意力权重。
在图神经网络中,每个节点都与其他节点相连,形成一个图结构。通过注意力权重,学习在信息传递过程中对带有漏洞特征节点的关注程度。对带有漏洞特征节点在信息传递中受到更多的关注。
通过将连接两个节点的边上的特征进行线性组合,并应用LeakyReLU激活函数,计算得到注意力权重。这个权重表示了节点i和节点 j 之间的关联程度。注意力权重公式为:
其中,为表示图神经网络中节点i和节点 j 之间的注意力权重;/>表示是一种激活函数;a(l)表示第l层的注意力头的参数;/>表示表示向量的转置操作;为第 l-1 层的隐藏状态。
步骤4)基于程序代码结构语义相似度检测漏洞。利用加权余弦相似度计算待检测漏洞程序与已知漏洞程序之间的代码语义特征相似度,并结合相似度阈值动态调整的机制,与实时的漏洞检测情况及特征统计信息进行比较,以判断程序代码是否存在漏洞。
41)对于每个待检测漏洞程序,计算其与所有已知漏洞程序的代码语义特征相似度。
使用加权余弦相似度计算已知漏洞程序和待检测漏洞程序的语义特征相似度。具体计算公式为:
其中,n是语义特征的数量,和/>分别表示已知漏洞程序和待检测漏洞程序在第i个语义特征上的值,/>是第i个语义特征的权重。
42)根据实时的漏洞检测情况和特征统计信息,自动调整相似度阈值。动态调整算法如下:
初始化相似度阈值为一个初始值(初始阈值)。
初始化调整系数 k 和学习率α。
在漏洞检测过程中,监控每次检测的漏洞数量和正常代码数量。
计算当前阈值下的误差率,得到漏报率 FNR 和误报率FPR。
根据误差率评估当前阈值的效果,判断是过于宽松还是过于严格。
如果误差率较高(漏报率或误报率高),则调整相似度阈值,使其更宽松,提高漏报率的阈值。如果误差率较低,说明当前阈值合适,可以不进行调整。
43)误差率计算:计算漏报率(FNR)和误报率(FPR):FNR=漏报的漏洞数量/实际漏洞总数量;FPR=误报的正常代码数量/实际正常代码总数量;相似度阈值调整:根据误差率计算相似度阈值的调整:Adjustment=k×(FNR−FPR);动态调整相似度阈值:新阈值=旧阈值+α×Adjustment;其中:k 是调整系数,用于控制动态调整的幅度。α是学***衡调整的速度和稳定性。
FNR是漏报率,FPR是误报率。
44)将计算得到的相似度与相似度阈值进行比较。如果相似度高于阈值,则判断待检测漏洞程序与已知漏洞程序存在相似的代码结构和语义,即将其识别为存在漏洞。
本发明实施例提供一种基于漏洞特征关键词和代码属性图的代码漏洞检测装置,包括:
CVE漏洞特征关键词库生成模块,用于从CVE漏洞代码和补丁文件中提取与漏洞相关的代码特征关键词。关键词包括函数调用类、变量名类、字符串操作类、指针操作类、算术表达式类等。
代码属性图漏洞特征关键词标记模块,使用生成的CVE漏洞特征关键词列表遍历CPG属性图,检查每个节点的代码行是否包含CVE漏洞特征关键词或者相关下上下文语义,如果包含则将该漏洞代码的节点进行标记。
代码结构语义特征提取模块,用于采用基于注意力机制的GNN技术,对漏洞代码和待检测代码节点的数据进行特征提取,注意力机制可加强对标记的漏洞代码节点的关注。
漏洞检测模块,利用加权余弦相似度计算已知漏洞程序和待检测漏洞程序中学习得到的代码特征的相似度,进行漏洞预测。
本发明实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述第一方面所述的自动漏洞检测方法、装置。
总体而言,通过本发明所提供的技术方案与现有技术相比,具有以下显著效果及创新:
本发明提供的融合代码漏洞特征及属性图的源代码安全检测方法与装置,包括:利用漏洞补丁差异构建CVE漏洞关键词库;基于CVE漏洞补丁差异文件和漏洞报告,创建CVE漏洞特征关键词库;依据漏洞特征关键词标记代码属性图。分别生成CVE漏洞程序、待检测程序的属性图,然后遍历待检测程序属性图,并标记具有CVE漏洞关键词库的节点;同时,对CVE漏洞程序的代码属性图进行标记;提取程序代码结构语义特征。使用基于注意力机制图神经网络分别对CVE漏洞数据库、待检测程序的代码属性图进行语义特征学习;基于程序代码结构语义相似度检测漏洞。利用加权余弦相似度,计算待检测漏洞程序、已知漏洞程序的代码语义特征的相似度,然后与相似度阈值进行比较,以判断程序代码是否存在漏洞。采用本发明的技术方案,能够更加准确地定位漏洞,提高漏洞检测的效率。
1.生成用于识别漏洞代码节点的关键词库。通过分析已知的CVE漏洞报告、漏洞数据库或其他漏洞数据源,从中提取与漏洞相关的代码特征关键词,更加细粒度地评估漏洞风险,更加高效且准确地识别与漏洞相关的代码片段。
2. 在GNN模型中构建三层图卷积层。第一层图卷积层关注属性图中的局部细节,第二层图卷积层捕获中等级别的结构特征,第三层图卷积层则从整体上捕获高级语义特征。这种多层次图结构的设计与传统方法相比,更能够逐层提取不同抽象级别的信息,更好地捕捉代码的多样性和复杂性。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明一实施例提供的融合代码漏洞特征及属性图的源代码安全检测方法的流程框图。
图2是根据本发明一实施例中的CVE漏洞特征关键词库生成的流程框图。
图3是根据本发明一实施例中的代码属性图生成漏洞特征关键词的流程框图。
图4是根据本发明一实施例中的代码结构语义特征学习和漏洞检测模块流程框图。
图5是根据本发明一实施例提供的融合代码漏洞特征及属性图的源代码安全检测装置的结构框图。
图6是根据本发明一实施例提供的融合代码漏洞特征及属性图的源代码安全检测方法的装置电子设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明的整体思路在于,针对为了方便快速有效地识别软件代码中的漏洞。公开了融合代码漏洞特征及属性图的源代码安全检测方法及装置,提高代码审查效率。所述方法包括:利用漏洞补丁差异构建CVE漏洞关键词库。基于CVE漏洞补丁差异文件和漏洞报告,创建CVE漏洞特征关键词库;依据漏洞特征关键词标记代码属性图。分别生成CVE漏洞程序、待检测程序的属性图,然后遍历待检测程序属性图,并标记具有CVE漏洞关键词库的节点,同时,对CVE漏洞程序的代码属性图进行标记;提取程序代码结构语义特征。使用基于注意力机制图神经网络(以下简称GNN),分别对CVE漏洞数据库、待检测程序的代码属性图进行语义特征学习;基于程序代码结构语义相似度检测漏洞。利用加权余弦相似度,计算待检测漏洞程序、已知漏洞程序的代码语义特征的相似度,与相似度阈值进行比较,以判断程序代码是否存在漏洞。
图1示出了本发明一实施例提供的融合代码漏洞特征及属性图的源代码安全检测方法流程,包括以下步骤:
S11.利用软件的漏洞补丁差异构建CVE漏洞关键词库。基于CVE漏洞补丁差异文件和漏洞报告,创建CVE漏洞特征关键词库;
首先,从CVE漏洞数据库中提取CVE漏洞的代码和补丁信息。随后,利用Diff工具对原始代码和漏洞补丁进行对比,生成包含原始代码和漏洞补丁之间的差异文件。
使用Diff工具分析生成的差异文件,从中提取与漏洞相关的代码片段。对提取到的代码片段,使用正则表达式进行匹配,捕获常见的代码结构类型的漏洞关键词,包括函数调用类、变量名类、字符串操作类、指针操作类、算术表达式类等。具体的,针对不同漏洞类型的代码块,采用以下正则表达式模式进行匹配:
函数调用类:[a-zA-Z_]\w*\s*\([^)]*\);示例:memcpy(dest, src, size);
变量名类:[a-zA-Z_]\w*\s*[^=]*\s*=\s*[^;]*;示例:int buffer_size = 256;
字符串操作类:[a-zA-Z_]\w*\s*\([^)]*\)\s*;示例:strcpy(dest, src);
指针操作类:[a-zA-Z_]\w*\s*\*\s*[a-zA-Z_]\w*\s*;;示例:int *ptr;
算术表达式类:[a-zA-Z_]\w*\s*([-+*/])\s*[a-zA-Z_]\w*(\s*([-+*/])\s*[a-zA-Z_]\w*)*;示例:result = a * b / c;
对匹配到的漏洞关键词进行去重处理,然后计算每个关键词的出现频率,筛选出频率较高的关键词。最后,整理和汇总匹配到的关键词,漏洞特征关键词库的结构为三元组形式:<关键词类型, 关键词, TF(词频)值>,具体如下描述,例如:
S12. 依据漏洞特征关键词标记代码属性图。分别生成CVE漏洞程序和待检测程序的代码属性图,然后遍历待检测程序的代码属性图,并标记具有CVE漏洞关键词库的节点,同时,对CVE漏洞程序的代码属性图进行标记;
利用Joern工具生成CPG代码属性图,该代码属性图涵盖CVE漏洞程序和待检测程序的AST、CFG和DFG。
基于代码漏洞特征关键词库,遍历上述代码属性图。对于代码属性图中的每个代码节点,分析该节点以及其上下文关系是否与漏洞特征关键词语义匹配,如果匹配,则将标记为该代码节点为可能存在漏洞的代码节点。
修剪标记后的代码属性图,依据漏洞代码节点执行向前和向后的切片操作,涵盖漏洞代码节点相关数据依赖和控制流依赖的代码节点。生成修剪后的子代码属性图。
S13. 提取程序代码结构语义特征。使用基于注意力机制图神经网络模型,分别对CVE漏洞数据库、待检测程序的代码属性图进行语义特征学习,包括:
对CPG属性图中的节点代码行进行预处理,去除空格、注释等无关信息。进行符号化处理,将标识符、变量名、函数名等替换为抽象的符号。然后应用Word2Vec生成经过符号化处理的代码节点的初始特征向量。
构建图神经网络模型,包括第一层、第二层和第三层图卷积层。每一层关注不同抽象级别的结构特征。使用LeakyReLU作为激活函数,设置三个注意力头。每个头分别应用于低级别、中级别和高级别的注意力隐藏层。
图卷积层通过聚合代码节点的邻居特征来更新代码节点特征。更新公式为:。/>表示节点i在第l+1 层的特征,σ 是激活函数。N(i) 表示节点i的邻居节点集合,/>是归一化常数,/>是权重矩阵,/>是邻居节点j在第l层的特征,/>是偏置项,α是参数,/>是代码节点i的漏洞标记。注意力权重公式为:/>。
S14.基于程序代码结构语义相似度检测漏洞。利用加权余弦相似度计算待检测漏洞程序与已知漏洞程序之间的代码语义特征相似度,并结合相似度阈值动态调整的机制,与实时的漏洞检测情况及特征统计信息进行比较,以判断程序代码是否存在漏洞。
计算每个待检测漏洞程序与所有已知漏洞程序的特征相似度。
利用加权余弦相似度计算已知漏洞程序和待检测漏洞程序的语义特征相似度。计算公式为:
。
根据实时的漏洞检测情况和特征统计信息,自动调整相似度阈值。动态调整算法:初始化相似度阈值为一个初始阈值。初始化调整系数k和学习率α。在漏洞检测过程中,监控每次检测的漏洞数量和正常代码数量。计算当前阈值下的误差率,得到漏报率和误报率。根据误差率评估当前阈值的效果,判断是过于宽松还是过于严格。
误差率计算:计算漏报率(FNR)和误报率(FPR):FNR=漏报的漏洞数量/实际漏洞总数量;FPR=误报的正常代码数量/实际正常代码总数量;
相似度阈值调整:根据误差率计算相似度阈值的调整:Adjustment=k×(FNR−FPR);
动态调整相似度阈值:新阈值=旧阈值+α×Adjustment;其中:k 是调整系数,用于控制动态调整的幅度。α是学***衡调整的速度和稳定性。
FNR是漏报率,FPR是误报率。
将计算得到的相似度与相似度阈值进行比较。如果相似度高于阈值,则判断待检测漏洞程序与已知漏洞程序存在相似的代码结构和语义,即将其识别为存在漏洞。
图2是根据本发明一实施例中的CVE漏洞特征关键词库生成的流程示意图。包括:获取CVE漏洞代码、漏洞补丁和漏洞报告;生成差异文件;解析差异文件;提取漏洞相关代码块;从差异文件和漏洞报告中提取漏洞相关的代码块;匹配关键词;对每个代码块使用正则表达式进行匹配,捕获以下类型的关键词:函数调用类、变量名类、字符串操作类、指针操作类、算术表达式。
图3是根据本发明一实施例中的代码属性图漏洞特征关键词标记流程图。包括:使用Joern工具将CVE漏洞程序和待检测程序生成CPG代码属性图,其中包含AST、CFG和DFG信息;遍历待检测程序的属性图,标记包含CVE漏洞关键词的节点;分析节点语义匹配,遍历属性图中的每个节点,对每个节点,分析其上下文关系,检查是否包含漏洞特征关键词,或者上下文关系与漏洞特征关键词语义匹配,如果匹配,则也将该节点标记为可能存在漏洞的节点;修剪子图,对标记后的漏洞代码节点执行向前和向后的切片操作,以涵盖与其相关的数据依赖和控制流依赖的代码节点,生成修剪后的子代码属性图,其中包含与漏洞相关的代码片段。
图4是根据本发明一实施例中的代码结构语义特征学习和漏洞检测模块流程图。包括:提取程序代码结构语义特征,对CPG属性图中的节点进行预处理,去除空格、注释等无关信息,并进行符号化处理,用抽象符号代替标识符、变量名、函数名;使用Word2Vec生成经过符号化处理的代码节点的初始特征向量;构建基于注意力机制的图神经网络(GNN)模型,包括三层图卷积层,每一层关注不同抽象级别的特征,图卷积层通过聚合节点的邻居特征来更新节点特征,注意力机制用于计算注意力权重;基于程序代码结构语义相似度检测漏洞。利用加权余弦相似度计算待检测漏洞程序与已知漏洞程序之间的代码语义特征相似度,并结合相似度阈值动态调整的机制,与实时的漏洞检测情况及特征统计信息进行比较,以判断程序代码是否存在漏洞。
图5是根据本发明实施例提供的融合代码漏洞特征及属性图的源代码安全检测方法与装置, 包括:CVE漏洞特征关键词库生成模块,用于从CVE漏洞代码和补丁文件中提取与漏洞相关的代码特征关键词。关键词包括函数调用类、变量名类、指针操作类、字符串操作类、算数表达式类。
代码属性图漏洞特征关键词标记模块,使用生成的CVE漏洞特征关键词列表遍历CPG属性图,检查每个节点的代码行是否包含CVE漏洞特征关键词或者相关下上下文语义,如果包含则将该漏洞代码的节点进行标记。
代码结构语义特征提取模块,用于采用基于注意力机制的GNN技术,对漏洞代码和待检测代码节点的数据进行特征提取,注意力机制可加强对标记的漏洞代码节点的关注。
漏洞检测模块,利用加权余弦相似度计算已知漏洞程序和待检测漏洞程序中学习得到的代码特征的相似度,进行漏洞预测。
图6示出了本发明实施例提供一种电子设备,包括:处理器31、存储器32、总线33及存储在存储器上并可在处理器上运行的计算机程序;
其中,处理器,存储器通过总线完成相互间的通信;
处理器执行计算机程序时实现如上述的方法,例如包括:利用漏洞补丁差异构建CVE漏洞关键词库;依据漏洞特征关键词标记代码属性图;提取程序代码结构语义特征;基于程序代码结构语义相似度检测漏洞。
本发明实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如上述的方法,例如包括:CVE漏洞特征关键词库生成;代码属性图漏洞特征关键词标记;代码结构语义特征提取;漏洞检测模块。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (8)
1.一种融合代码漏洞特征及属性图的源代码安全检测方法,其特征是,通过构建CVE漏洞关键词库,通过对CVE漏洞程序库和待检测漏洞程序的特征提取,再进行相似性判断,捕捉程序代码的语义信息,基于注意力机制的GNN构建语义特征学习图神经网络模型以关注带有漏洞特征关键词的代码节点,从而提高对软件漏洞的检测准确性;包括如下步骤:
1)利用软件通用漏洞披露CVE补丁差异和漏洞报告,构建CVE漏洞特征关键词库;包括:
11)从CVE漏洞程序库中获取CVE漏洞的原始代码和漏洞补丁;通过将原始代码和漏洞补丁进行对比,生成包含原始代码和漏洞补丁之间的变更内容的差异文件;
12)对生成的差异文件进行解析,匹配得到漏洞关键词;
使用Diff工具对生成的差异文件进行解析,匹配得到漏洞关键词;漏洞关键词提取过程包括:从差异文件和CVE漏洞程序库中的漏洞报告中提取漏洞相关代码块;使用正则表达式匹配不同漏洞类型的常见关键词,所述漏洞类型包括函数调用类、变量名类、字符串操作类、指针操作类、算术表达式类;
13)构建漏洞关键词库的结构为三元组形式;
对匹配到的漏洞关键词进行去重操作;计算每个漏洞关键词的词频;筛选出词频高的漏洞关键词;整理和归纳关键词,构建漏洞特征关键词库的结构,表示为三元组形式:<关键词类型,关键词, TF词频值>;
2)依据CVE漏洞特征关键词标记代码属性图;
对于每个代码节点,使用代码分析工具生成CPG代码属性图;在遍历每个代码节点时,检测节点自身是否包含漏洞特征关键词;同时,通过上下文关系分析节点与其父节点、子节点、兄弟节点的语义关系,判断周围代码是否与漏洞特征关键词在语义上匹配;包括:
21)对于每个代码节点,使用代码分析工具生成CPG代码属性图;所述CPG代码属性图包括抽象语法树AST、控制流图CFG和数据流图DFG;
22)如果代码节点包含漏洞特征关键词,或上下文关系与漏洞特征关键词语义匹配,则标记该代码节点为可能存在漏洞的节点;
23)针对标记后的漏洞代码节点,执行向前和向后的切片操作,以获取漏洞代码节点相关的数据依赖和控制流依赖的代码节点;生成修剪后的子代码属性图,所述修剪后的子代码属性图涵盖标记的漏洞节点及其周围关联节点;
3)基于注意力机制的GNN构建语义特征学习图神经网络模型,分别对CVE漏洞程序库和待检测程序的修剪后的子代码属性图进行语义特征学习,提取得到程序代码结构语义特征;包括如下过程:
31)对修剪后的子代码属性图中的节点代码行进行预处理,生成代码节点的初始特征向量;
32)基于注意力机制的GNN构建语义特征学习图神经网络模型;包括:第一图卷积层、第二图卷积层、第三图卷积层和注意力隐藏层;
其中,构建的三层图卷积层中,根据程序函数级别、代码块级别和语句级别,第一图卷积层用于表达属性图中的低级别的局部细节,第二图卷积层用于捕获中等级别的结构特征,第三图卷积层用于捕获高级的语义特征;注意力隐藏层维度设置为64对应低级别、128对应中级别和256对应高级别;隐藏层维度是神经网络中每个隐藏层中神经元的数量;使用ReLU作为激活函数,并设置三个注意力头,分别为低级别对应32隐藏层维度、中级别对应64隐藏层维度和高级别对应128隐藏层维度;
33)三层图卷积层通过聚合代码节点的邻居特征以更新代码节点特征;
更新过程表示为:
其中,表示代码节点i在第/> +1图卷积层的特征,/>为图卷积层的序号;σ是激活函数;N(i)表示节点i的邻居节点集合,/>是归一化常数, />是注意力权重矩阵,/>是邻居节点j在第/>层的特征,/>是偏置项,α是参数,/>是代码节点i的漏洞标记;/>为表示图神经网络中节点i和节点j之间的注意力权重;
4)基于程序代码结构语义相似度检测漏洞;利用加权余弦相似度计算待检测漏洞程序与CVE漏洞程序之间的代码语义特征相似度,并结合相似度阈值动态调整的机制,与实时的漏洞检测情况及特征统计信息进行比较,判断程序代码是否存在漏洞;包括:
41)对于每个待检测漏洞程序,计算CVE漏洞程序和待检测漏洞程序的语义特征相似度;
42)根据实时的漏洞检测情况和特征统计信息,自动调整相似度阈值;
43)将计算得到的相似度与相似度阈值进行比较,如果相似度高于阈值,表示待检测漏洞程序与CVE漏洞程序存在相似的代码结构和语义,即将其识别为存在漏洞;
通过上述步骤,即可实现融合代码漏洞特征及属性图的源代码安全检测。
2.如权利要求1所述融合代码漏洞特征及属性图的源代码安全检测方法,其特征是,步骤11)具体是采用Diff工具将原始代码和漏洞补丁进行对比,生成差异文件;差异文件包含修改的代码行、具体的代码变更、文件路径及上下文信息;步骤12)具体是采用Diff解析器,对生成的差异文件进行解析,匹配得到漏洞关键词。
3.如权利要求1所述融合代码漏洞特征及属性图的源代码安全检测方法,其特征是,步骤21)中,代码分析工具具体为Joern工具。
4.如权利要求1所述融合代码漏洞特征及属性图的源代码安全检测方法,其特征是,注意力权重表示为:
其中,表示是一种激活函数;a(l)表示第l层的注意力头的参数;/>表示向量的转置操作;/>为第l-1层的隐藏状态。
5.如权利要求1所述融合代码漏洞特征及属性图的源代码安全检测方法,其特征是,步骤31)的预处理包括:去除无关信息;进行符号化处理;将标识符、变量名、函数名替换为符号;应用Word2Vec工具生成经过符号化处理的代码节点的初始特征向量。
6.如权利要求1所述融合代码漏洞特征及属性图的源代码安全检测方法,其特征是,步骤41)具体是采用加权余弦相似度计算CVE漏洞程序和待检测漏洞程序的语义特征相似度,表示为:
其中,n是语义特征的数量,Ai和Bi分别表示CVE漏洞程序和待检测漏洞程序在第 i个语义特征上的值,是第i个语义特征的权重。
7.一种采用权利要求1所述融合代码漏洞特征及属性图的源代码安全检测方法的装置,其特征是,包括:CVE漏洞特征关键词库生成模块、代码属性图漏洞特征关键词标记模块、代码结构语义特征提取模块和漏洞检测模块;
CVE漏洞特征关键词库生成模块用于从CVE漏洞代码和补丁文件中提取与漏洞相关的代码特征关键词;
代码属性图漏洞特征关键词标记模块通过使用生成的CVE漏洞特征关键词列表遍历CPG属性图,检查每个节点的代码行是否包含CVE漏洞特征关键词或者相关下上下文语义以对节点进行标记;
代码结构语义特征提取模块采用基于注意力机制的GNN技术对漏洞代码和待检测代码节点的数据进行特征提取,加强对标记的漏洞代码节点的关注;
漏洞检测模块利用加权余弦相似度公式计算CVE漏洞程序和待检测漏洞程序中学习得到的代码特征的相似度,进行漏洞预测。
8.一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,其特征是,该计算机程序被处理器执行时实现权利要求1所述的融合代码漏洞特征及属性图的源代码安全检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410082579.4A CN117592061B (zh) | 2024-01-19 | 2024-01-19 | 融合代码漏洞特征及属性图的源代码安全检测方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410082579.4A CN117592061B (zh) | 2024-01-19 | 2024-01-19 | 融合代码漏洞特征及属性图的源代码安全检测方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117592061A CN117592061A (zh) | 2024-02-23 |
CN117592061B true CN117592061B (zh) | 2024-04-12 |
Family
ID=89913809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410082579.4A Active CN117592061B (zh) | 2024-01-19 | 2024-01-19 | 融合代码漏洞特征及属性图的源代码安全检测方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117592061B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
CN115357909A (zh) * | 2022-10-19 | 2022-11-18 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) | 一种用于代码漏洞检测的全局信息感知图神经网络*** |
CN115495755A (zh) * | 2022-11-15 | 2022-12-20 | 四川大学 | 一种基于CodeBERT和R-GCN的源代码漏洞多分类检测的方法 |
CN115758385A (zh) * | 2022-11-30 | 2023-03-07 | 国网智能电网研究院有限公司 | 一种物联固件漏洞的检测方法、***、设备及介质 |
CN116074092A (zh) * | 2023-02-07 | 2023-05-05 | 电子科技大学 | 一种基于异构图注意力网络的攻击场景重构*** |
CN116108452A (zh) * | 2023-02-28 | 2023-05-12 | 北京航空航天大学 | 一种代码漏洞的检测方法 |
CN116611071A (zh) * | 2023-05-25 | 2023-08-18 | 浙江大学 | 一种基于多模态的函数级漏洞检测的方法 |
CN117235741A (zh) * | 2023-11-13 | 2023-12-15 | 仟言科技(佛山)有限公司 | 一种基于人工智能的低代码安全*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190370473A1 (en) * | 2018-05-30 | 2019-12-05 | Nvidia Corporation | Detecting vulnerabilities to fault injection in computer code using machine learning |
US11568055B2 (en) * | 2019-08-23 | 2023-01-31 | Praetorian | System and method for automatically detecting a security vulnerability in a source code using a machine learning model |
-
2024
- 2024-01-19 CN CN202410082579.4A patent/CN117592061B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
CN115357909A (zh) * | 2022-10-19 | 2022-11-18 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) | 一种用于代码漏洞检测的全局信息感知图神经网络*** |
CN115495755A (zh) * | 2022-11-15 | 2022-12-20 | 四川大学 | 一种基于CodeBERT和R-GCN的源代码漏洞多分类检测的方法 |
CN115758385A (zh) * | 2022-11-30 | 2023-03-07 | 国网智能电网研究院有限公司 | 一种物联固件漏洞的检测方法、***、设备及介质 |
CN116074092A (zh) * | 2023-02-07 | 2023-05-05 | 电子科技大学 | 一种基于异构图注意力网络的攻击场景重构*** |
CN116108452A (zh) * | 2023-02-28 | 2023-05-12 | 北京航空航天大学 | 一种代码漏洞的检测方法 |
CN116611071A (zh) * | 2023-05-25 | 2023-08-18 | 浙江大学 | 一种基于多模态的函数级漏洞检测的方法 |
CN117235741A (zh) * | 2023-11-13 | 2023-12-15 | 仟言科技(佛山)有限公司 | 一种基于人工智能的低代码安全*** |
Non-Patent Citations (1)
Title |
---|
基于图神经网络的切片级漏洞检测及解释方法;胡雨涛、王溯远、吴月明、邹得清、李文科、金海;软件学报;20230630;第34卷(第06期);2543-2561 * |
Also Published As
Publication number | Publication date |
---|---|
CN117592061A (zh) | 2024-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及*** | |
CN109885479B (zh) | 基于路径记录截断的软件模糊测试方法及装置 | |
CN108763931A (zh) | 基于Bi-LSTM和文本相似性的漏洞检测方法 | |
CN112288079B (zh) | 图神经网络模型训练方法、软件缺陷检测方法及*** | |
CN112733156B (zh) | 基于代码属性图的软件脆弱性智能检测方法、***及介质 | |
CN107392016A (zh) | 一种基于代理的Web数据库攻击行为检测*** | |
CN111753290B (zh) | 软件类型的检测方法及相关设备 | |
CN112131120B (zh) | 一种源代码缺陷检测方法及装置 | |
US20080127043A1 (en) | Automatic Extraction of Programming Rules | |
CN113326244A (zh) | 一种基于日志事件图和关联关系挖掘的异常检测方法 | |
CN113297580B (zh) | 基于代码语义分析的电力信息***安全防护方法及装置 | |
CN113742205B (zh) | 一种基于人机协同的代码漏洞智能检测方法 | |
CN111177731A (zh) | 一种基于人工神经网络的软件源代码漏洞检测方法 | |
CN113448843A (zh) | 基于缺陷分析的图像识别软件测试数据增强方法及装置 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN112817877B (zh) | 异常脚本检测方法、装置、计算机设备和存储介质 | |
CN112882899B (zh) | 一种日志异常检测方法及装置 | |
CN112464237A (zh) | 一种静态代码安全诊断方法及装置 | |
CN117592061B (zh) | 融合代码漏洞特征及属性图的源代码安全检测方法与装置 | |
CN116383832A (zh) | 一种基于图神经网络的智能合约漏洞检测方法 | |
CN114676428A (zh) | 基于动态特征的应用程序恶意行为检测方法及设备 | |
CN114662099A (zh) | 基于ai模型的应用程序恶意行为检测方法及设备 | |
CN118194308B (zh) | 一种智能化数据库安全测试平台及方法 | |
CN117454387A (zh) | 基于多维度的特征提取的漏洞代码检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |