CN113326187B - 数据驱动的内存泄漏智能化检测方法及*** - Google Patents
数据驱动的内存泄漏智能化检测方法及*** Download PDFInfo
- Publication number
- CN113326187B CN113326187B CN202110569646.1A CN202110569646A CN113326187B CN 113326187 B CN113326187 B CN 113326187B CN 202110569646 A CN202110569646 A CN 202110569646A CN 113326187 B CN113326187 B CN 113326187B
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- node
- memory
- nodes
- edge
- 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 59
- 238000000034 method Methods 0.000 claims abstract description 77
- 230000006870 function Effects 0.000 claims abstract description 43
- 238000007781 pre-processing Methods 0.000 claims abstract description 8
- 239000013598 vector Substances 0.000 claims description 45
- 238000012549 training Methods 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 21
- 230000002776 aggregation Effects 0.000 claims description 16
- 238000004220 aggregation Methods 0.000 claims description 16
- 238000004458 analytical method Methods 0.000 claims description 16
- 230000009466 transformation Effects 0.000 claims description 14
- 238000004422 calculation algorithm Methods 0.000 claims description 9
- 239000011159 matrix material Substances 0.000 claims description 8
- 238000000354 decomposition reaction Methods 0.000 claims description 6
- 230000004913 activation Effects 0.000 claims description 4
- 230000004931 aggregating effect Effects 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 claims description 4
- 230000008859 change Effects 0.000 claims description 4
- 238000005065 mining Methods 0.000 claims description 4
- 230000015572 biosynthetic process Effects 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 claims description 2
- 238000003786 synthesis reaction Methods 0.000 claims description 2
- 238000012546 transfer Methods 0.000 claims description 2
- 238000004590 computer program Methods 0.000 claims 4
- 230000003068 static effect Effects 0.000 abstract description 5
- 238000013135 deep learning Methods 0.000 abstract description 4
- 230000007547 defect Effects 0.000 abstract 1
- 238000000605 extraction Methods 0.000 description 4
- 230000035945 sensitivity Effects 0.000 description 4
- 238000012512 characterization method Methods 0.000 description 3
- 238000013480 data collection Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000005096 rolling process Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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
- 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
- G06N3/045—Combinations of networks
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Quality & Reliability (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种数据驱动的内存泄漏智能化检测方法及***,方法包括以下步骤:漏洞数据采集;构造程序间价值流图IVFG,提取漏洞特征;利用多关系图卷积网络COMPGCN,训练漏洞检测模型;对待检测文件进行预处理,并利用检测模型检测是否存在内存泄漏,报告发生内存泄漏的漏洞函数及可疑的漏洞语句。本发明可以更好地利用内存泄漏漏洞特有的代码语法和语义信息,充分挖掘漏洞代码与调用上下文、全局变量等敏感对象的关系,达到对潜在内存泄漏的代码的判别并输出可疑的漏洞语句,针对性更强,可以一定程度上解决传统静态或动态方法检测内存泄漏的不足,并且相较于目前流行的基于深度学习的漏洞检测方法,可以输出存在内存泄漏的可疑语句,使实际应用领域更广、精度更高、定位更准。
Description
技术领域
本发明属于软件安全领域,特别涉及一种数据驱动的内存泄漏智能化检测方法及***。
背景技术
内存泄漏作为一种常见的软件漏洞,会严重降低计算机软件的性能,甚至造成软件在运行时崩溃。随着软件项目的规模扩张和复杂度提升,内存泄漏广泛存在于许多大型项目中,威胁着软件安全,如何准确高效地检测出软件中潜在的内存泄漏已成为具有相当挑战性的工作。在之前的工作中多采用静态分析或动态检测,静态分析主要通过分析内存的分配点以及从内存分配点开始的不同路径,在相应的路径中查找与内存分配点对应的内存释放点,验证是否所有路径都存在正确的内存释放。然而当内存泄漏中存在一些特殊案例时,会降低静态分析的准确性,导致内存泄露的检测出现误报或者漏报。动态检测方法通过执行程序,跟踪内存的分配、使用及释放,因此结果相较于静态分析更加准确,但由于其准确性受限于测试用例,无法分析程序执行中不可达位置的错误,且都存在内存开销较高和可扩展性较差的问题。
目前已有一些工作使用机器学习/深度学习的方法来检测内存相关的漏洞,如文献《C程序内存泄漏智能化检测方法》定义了16种与内存泄漏密切相关的代码特征,并通过使用机器学习算法学习程序特征与内存泄漏之间的相关性,进行内存泄漏的检测。然而手工制定的漏洞特征无法覆盖所有情况,且漏洞数据是通过***一些内存泄露的特殊案例而得到的,当面对一些现实软件中的内存泄漏时可能效果不佳。也有一些工作开始利用深度学习的方法来检测内存相关的漏洞问题,如文献《GRAPHSPY:Fused Program Semantic-Level Embedding via Graph Neural Networks for Dead Store Detection》从程序结构、执行顺序等方面提取程序语义,并利用多种流行的图神经网络模型来识别程序中不必要的内存操作,但没有利用一些与内存紧密相关的漏洞特征来对内存漏洞进行建模,使得方法的针对性不强,扩展性较差。
发明内容
本发明的目的在于针对上述现有技术存在的问题,提供一种具有应用领域更广、精度更高、定位更准等特点的数据驱动的内存漏洞智能化检测方法及***。
实现本发明目的的技术解决方案为:
一种数据驱动的内存泄漏智能化检测方法,所述方法包括以下步骤:
步骤1,漏洞数据采集;
步骤2,构造程序间价值流图IVFG,提取漏洞特征;
步骤3,利用多关系图卷积网络COMPGCN,训练漏洞检测模型;
步骤4,对待检测文件进行预处理,并利用检测模型检测是否存在内存泄漏,报告发生内存泄漏的漏洞函数及可疑的漏洞语句。
进一步的,步骤1所述漏洞数据采集,具体过程包括:
步骤1-1,首先以内存泄漏作为关键词检索漏洞数据库NVD,采集所有与内存泄漏相关的漏洞条目;然后从开源代码库中挖掘与漏洞条目对应的漏洞代码并标记修复该漏洞条目所更改的语句;
步骤1-2,利用编译器LLVM对采集到的漏洞条目的代码进行预编译,转化为通用的代码中间表示IR。
进一步的,步骤2所述构造程序间价值流图IVFG,提取漏洞特征,具体过程包括:
步骤2-1,基于步骤1-2中得到的代码中间表示IR,利用安德森指针分析法构造程序间价值流图IVFG,该程序间价值流图IVFG包括过程内价值流、返回价值流和调用价值流;
步骤2-2,根据已有的敏感函数库,通过正则匹配词法分析技术查找与内存分配相关的内存敏感操作,并将该内存敏感操作确定为切片准则,在程序间价值流图IVFG上对漏洞代码的中间表示IR进行切片,根据图的可达性算法,删除与敏感操作语句无关的节点,并将剩余节点构成的生成子图作为新的程序间价值流图IVFG-1;
步骤2-3,重命名漏洞代码中间表示IR中的变量名、函数名,利用步骤1-1中的漏洞更改语句标记对步骤2-2中所述剩余节点进行标记,与漏洞语句中的代码令牌(即,漏洞代码中通过空格分隔的每个单词)相关的剩余节点标记为漏洞节点,无关的节点标记为无漏洞节点;
步骤2-4,利用Word2vec对漏洞节点以及程序间价值流图IVFG中多种边类型(如,步骤2-1中的过程内价值流边和返回价值流边为两种不同类型的边)进行词嵌入,分别得到漏洞节点的初始特征向量xv;以及边类型/>的初始特征向量zr,用于下一步训练漏洞检测模型的输入。
进一步的,步骤3所述利用多关系图卷积网络COMPGCN,训练漏洞检测模型,具体过程包括:
步骤3-1,基于步骤2-4得到的漏洞节点初始特征向量xv,节点嵌入hv由如下变换得到:
式中,是节点v的出边所连接的近邻集,u为节点v的邻居节点,r为两节点间的边类型,Wλ(r)是与边类型相关的参数,xu和zr分别是节点u和边类型r的初始特征向量,φ是用于将边类型嵌入到节点特征中的合成算子;
此外,对于同一种边的不同类型被赋予不同的权重,即λ(r)=dir(r),则权重Wλ(r)根据边类型的不同,可分为以下两种:
式中,WO表示正向边所对应的权重参数,WI表示逆向边所对应的权重参数;
步骤3-2,基于步骤2-4得到的边类型初始特征向量zr,边嵌入hr由如下变换得到:
hr=Wrelzr
式中,Wrel是一个可学习的变换矩阵,它将所有的边映射到和节点相同的向量空间;
边类型初始特征向量zr通过基函数分解计算得到:
式中,是学习得到的边类型系数,/>是实数集,/>是一组学习得到的基向量,/>表示基的数量;
步骤3-3,基于步骤3-1和步骤3-2得到的节点嵌入和边嵌入,通过堆叠多层多关系图卷积网络COMPGCN聚合节点特征信息:
式中,k表示堆叠的关系图卷积网络的层数,是邻居节点u在k次聚合更新后的节点嵌入;
相应的,是边类型r在k次聚合更新后的边嵌入,由下述公式计算得到:
式中,是k次聚合更新后学习到的变换矩阵,该公式的初始输入/>表示节点初始特征向量xv;/>表示边类型初始特征向量zr;
步骤3-4,通过最小化交叉熵损失函数训练漏洞检测模型:
式中,G是训练集中的一张图,/>是训练样本中的节点集,/>是模型在K次聚合更新后利用softmax激活函数得到的节点v的向量表示,表示节点v的标签为l的概率,l={0,1},0表示该节点为无漏洞节点,1表示有漏洞节点,wl表示标签权重,yvl表示节点v实际被标记的标签。
进一步的,步骤4所述对待检测文件进行预处理,并利用检测模型检测是否存在内存泄漏,报告发生内存泄漏的漏洞函数及可疑的漏洞语句,具体过程包括:
步骤4-1,利用LLVM编译器预编译待检测文件,为待检测文件中的所有函数构造步骤2所提出的程序间价值流图IVFG;
步骤4-2,根据已有的敏感函数库,基于步骤2-2中的方法,通过正则匹配等词法分析技术查找与内存分配相关的内存敏感操作,并将其确定为切片准则,基于步骤4-1所构造的程序间价值流图IVFG上对代码进行切片,根据图的可达性算法,删除与敏感操作语句无关的节点;
步骤4-3,基于步骤2-4中的词嵌入方法,利用Word2vec对步骤4-2中经过切片得到的程序间价值流图IVFG中所有节点以及边类型进行词嵌入,得到节点和边类型的初始特征向量,作为漏洞检测模型的输入;
步骤4-4,输出可能发生内存泄漏的函数及可疑语句。
本发明对应提供一种数据驱动的内存泄漏智能化检测***,所述***包括:
漏洞数据采集模块,用于构建训练检测模型所需的漏洞数据库;
漏洞特征提取模块,用于根据内存泄漏的代码特性提取所需的漏洞特征,包括构造程序间价值流图IVFG、代码切片、标准化等操作;
检测模型构建模块,用于进行漏洞特征学习,训练漏洞检测模型;
内存泄漏检测模块,用于对待检测的项目文件进行预处理,并利用训练好的检测模型检测待测潜在的内存泄漏并输出可疑语句及所属函数
本发明与现有技术相比,其显著优点为:1)从图的角度对存在内存泄漏的漏洞代码进行表示,通过构造程序间价值流图(包含过程内价值流、返回值流和调用值流),充分挖掘漏洞代码的流敏感、上下文敏感等与内存泄漏密切相关的特性;2)提出通过利用多关系图神经网络模型来训练检测模型,相较于传统的基于深度学习的漏洞检测方法,本发明将边也纳入模型的训练过程中,且针对不同类型的边赋予不同的权重以学习不同的流图对检测效果的影响;3)不同于传统使用图级分类作为最终的输出结果(即输出哪个函数/文件有漏洞)的检测方法,本发明使用节点分类作为最终的输出结果,可以达到对可疑语句(或节点)的识别与输出,辅助开发人员定位漏洞发生的位置。
附图说明
图1为一个实施例中数据驱动的内存泄漏智能化检测方法的流程图。
图2为一个实施例中C代码片段及其编译生成的中间表示IR。
图3为一个实施例中构造的程序间价值流图IVFG。
图4为一个实施例中多关系图卷积网络示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,结合图1,本发明提出一种数据驱动的内存泄漏智能化检测方法,包括以下步骤:
步骤1,漏洞数据采集;
步骤2,构造程序间价值流图IVFG,提取漏洞特征;
步骤3,利用多关系图卷积网络COMPGCN,训练漏洞检测模型;
步骤4,对待检测文件进行预处理,并利用检测模型检测是否存在内存泄漏,报告发生内存泄漏的漏洞函数及可疑的漏洞语句。
进一步地,在其中一个实施例中,步骤1所述漏洞数据采集,具体过程包括:
步骤1-1,首先以内存泄漏作为关键词检索漏洞数据库NVD,采集所有与内存泄漏相关的漏洞条目;然后从开源代码库GitHub中挖掘与之对应的漏洞代码并标记修复该漏洞所更改的语句;
步骤1-2,利用编译器LLVM对采集到的漏洞代码进行预编译,转化为通用的代码中间表示IR。
进一步地,在其中一个实施例中,步骤2所述构造程序间价值流图IVFG,提取漏洞特征,具体过程包括:
步骤2-1,基于步骤1-2中得到的代码中间表示IR,利用安德森指针分析法构造程序间价值流图IVFG,该流图主要包括过程内价值流、返回价值流和调用价值流;
步骤2-2,根据已有的敏感函数库,通过正则匹配等词法分析技术查找与内存分配相关的内存敏感操作,并将其确定为切片准则,在程序间价值流图IVFG上对漏洞代码进行切片,根据图的可达性算法,删除与敏感操作语句无关的节点,并将剩余节点构成的生成子图作为新的程序间价值流图IVFG;
步骤2-3,重命名代码中的变量名、函数名等,利用步骤1-1中的漏洞更改语句标记对相关节点进行标记,与漏洞语句中的代码令牌(即,漏洞代码中通过空格分隔的每个单词)相关的节点标记为漏洞节点,无关的节点标记为无漏洞节点;
步骤2-4,利用Word2vec对节点以及边类型(如,步骤2-1中的过程内价值流边和返回价值流边为两种不同类型的边)进行词嵌入,分别得到节点v∈V和边类型r∈R的初始特征向量xv和zr,用于下一步训练漏洞检测模型的输入。
进一步地,在其中一个实施例中,步骤3所述利用多关系图卷积网络COMPGCN,训练漏洞检测模型,具体过程包括:
步骤3-1,基于步骤2-4得到的节点初始特征向量xv,节点嵌入hv可由如下变换得到:
式中,是节点v的出边所连接的近邻集,u为节点v的邻居节点,r为两节点间的边类型,Wλ(r)是与边类型相关的参数,xu和zr分别是节点u和边类型r的初始特征向量,φ是用于将节点关系(边类型)嵌入到节点特征中的合成算子;
此外,对于同一种边的不同类型(例如正向和反向边),将被赋予不同的权重,即λ(r)=dir(r),则权重Wλ(r)根据边类型的不同,可分为以下两种:
式中,WO表示正向(输出)边所对应的权重参数,WI表示逆向(输入)边所对应的权重参数;
步骤3-2,基于步骤2-4得到的边类型初始特征向量zr,边嵌入hr可由如下变换得到:
hr=Wrelzr
式中,Wrel是一个可学习的变换矩阵,它将所有的边映射到和节点相同的向量空间;
此外,由于图中边的数量随着参数的数量快速增长而增长,容易导致过拟合问题,因此为了减少模型的参数规模,边类型初始特征向量zr通过基函数分解计算得到:
式中,是学习得到的边类型系数,/>是一组学习得到的基向量,表示基的数量,基函数分解可以看作是不同边类型之间有效权重共享的一种形式;
步骤3-3,基于步骤3-1和步骤3-2得到的节点嵌入和边嵌入,通过堆叠多层多关系图卷积网络COMPGCN聚合节点特征信息:
式中,k表示堆叠的关系图卷积网络的层数,是邻居节点u在k次聚合更新后的节点嵌入;
相应的,是边类型r在k次聚合更新后的边嵌入,由下述公式计算得到:
式中,是k次聚合更新后学习到的变换矩阵,该公式的初始输入/>和/>分别表示节点初始特征向量xv和边类型初始特征向量zr;
步骤3-4,通过最小化交叉熵损失函数训练漏洞检测模型:
式中,G是训练集中的一张图,/>是训练样本中的节点集,/>是模型在K次聚合更新后利用softmax激活函数得到的节点v的向量表示,表示节点v的标签为l的概率,l={0,1},0表示该节点为无漏洞节点,1表示有漏洞节点,wl表示标签权重,yvl表示节点v实际被标记的标签,为了避免节点集中标签分布不平衡(即漏洞节点远少于无漏洞节点),w1将被赋予更大的权重。
采用本实施例的方案,通过利用多关系图卷积网络COMPGCN,将边也纳入模型的训练过程中,且针对不同类型的边赋予不同的权重以学习不同的流图对检测效果的影响,更有效地挖掘漏洞代码语义,提高漏洞检测的效果。
进一步地,在其中一个实施例中,步骤4所述对待检测文件进行预处理,并利用检测模型检测是否存在内存泄漏,报告发生内存泄漏的漏洞函数及可疑的漏洞语句,具体过程包括:
步骤4-1,利用LLVM编译器预编译检测文件,构造程序间价值流图IVFG;
步骤4-2,根据已有的敏感函数库,通过正则匹配等词法分析技术查找与内存分配相关的内存敏感操作,并将其确定为切片准则,在程序间价值流图IVFG上对代码进行切片,根据图的可达性算法,删除与敏感操作语句无关的节点;
步骤4-3,利用Word2vec对IVFG中节点以及边类型进行词嵌入,得到节点和边类型的初始特征向量,作为漏洞检测模型的输入;
步骤4-4,输出可能发生内存泄漏的函数及可疑语句。
采用本实施例的方案,使用节点分类作为最终的输出结果,可以达到对可疑语句(或节点)的识别与输出,辅助开发人员定位漏洞发生的位置,为内存泄漏漏洞的确认和修复的实际应用研究打下基础。
在一个实施例中,提出了一种数据驱动的内存泄漏智能化检测***,所述***包括:
漏洞数据采集模块,用于构建训练检测模型所需的漏洞数据库;
漏洞特征提取模块,用于根据内存泄漏的代码特性提取所需的漏洞特征,包括构造程序间价值流图IVFG、代码切片、标准化等操作;
检测模型构建模块,用于进行漏洞特征学习,训练漏洞检测模型;
内存泄漏检测模块,用于对待检测的项目文件进行预处理,并利用训练好的检测模型检测待测潜在的内存泄漏并输出可疑语句及所属函数。
进一步地,在其中一个实施例中,所述漏洞数据采集模块包括:
采集单元,用于采集漏洞数据库NVD和开源代码库GitHub中的漏洞数据,包括漏洞代码和漏洞信息(漏洞语句、漏洞位置等);
提取单元,用于对提取出的漏洞文件进行预处理,利用LLVM编译器对采集到的漏洞代码进行预编译,转化为通用的代码中间表示IR。
进一步地,在其中一个实施例中,所述漏洞特征提取模块包括:
表征单元,用于对漏洞数据集中的漏洞数据进行代码表征,基于得到的代码中间表示IR,利用安德森指针分析法构造程序间价值流图IVFG,该流图主要包括过程内价值流、返回价值流和调用价值流;
切片单元,用于对程序间价值流图IVFG进行关键节点挖掘,根据已有的敏感函数库,通过正则匹配等词法分析技术查找与内存分配相关的内存敏感操作,并将其确定为切片准则,在程序间价值流图IVFG上对漏洞代码进行切片,根据图的可达性算法,删除与敏感操作语句无关的节点,并将剩余节点构成的生成子图作为新的程序间价值流图IVFG;
标记单元,用于重命名代码中的变量名、函数名等,利用采集单元得到的漏洞更改语句标记对相关节点进行标记,与漏洞语句中的代码令牌相关的节点标记为漏洞节点,无关的节点标记为无漏洞节点;
图嵌入单元,用于利用Word2vec对节点以及边类型进行词嵌入,分别得到节点和边类型/>的初始特征向量xv和zr,作为下一步训练漏洞检测模型的输入。
进一步地,在其中一个实施例中,所述检测模型构建模块包括依次执行的:
节点嵌入单元,用于对图嵌入单元得到的节点初始特征向量xv进行节点嵌入:
式中,是节点v的出边所连接的近邻集,u为节点v的邻居节点,r为两节点间的边类型,Wλ(r)是与边类型相关的参数,xu和zr分别是节点u和边类型r的初始特征向量,φ是用于将节点关系(边类型)嵌入到节点特征中的合成算子;
此外,对于同一种边的不同类型(例如正向和反向边),将被赋予不同的权重,即λ(r)=dir(r),则权重Wλ(r)根据边类型的不同,可分为以下两种:
式中,WO表示正向(输出)边所对应的权重参数,WI表示逆向(输入)边所对应的权重参数;
边嵌入单元,用于对图嵌入单元得到的边类型初始特征向量zr进行边嵌入:
hr=Wrelzr
式中,Wrel是一个可学习的变换矩阵,它将所有的边映射到和节点相同的向量空间;
此外,由于图中边的数量随着参数的数量快速增长而增长,容易导致过拟合问题,因此为了减少模型的参数规模,边类型初始特征向量zr通过基函数分解计算得到:
式中,是学习得到的边类型系数,/>是一组学习得到的基向量,表示基的数量,基函数分解可以看作是不同边类型之间有效权重共享的一种形式;
节点特征聚合单元,用于通过堆叠多层多关系图卷积网络COMPGCN,对节点嵌入单元和边嵌入单元得到的节点嵌入和边嵌入聚合节点特征信息:
式中,k表示堆叠的关系图卷积网络的层数,是邻居节点u在k次聚合更新后的节点嵌入;
相应的,是边类型r在k次聚合更新后的边嵌入,由下述公式计算得到:
式中,是k次聚合更新后学习到的变换矩阵,该公式的初始输入/>和/>分别表示节点初始特征向量xv和边类型初始特征向量zr;
模型构建单元,通过最小化交叉熵损失函数训练漏洞检测模型:
式中,G是训练集中的一张图,/>是训练样本中的节点集,/>是模型在K次聚合更新后利用softmax激活函数得到的节点v的向量表示,表示节点v的标签为l的概率,l={0,1},0表示该节点为无漏洞节点,1表示有漏洞节点,wl表示标签权重,yvl表示节点v实际被标记的标签,为了避免节点集中标签分布不平衡(即漏洞节点远少于无漏洞节点),w1将被赋予更大的权重。
进一步地,在其中一个实施例中,所述内存泄漏检测模块包括依次执行的:
表征单元,用于对待检测文件进行预编译,构造程序间价值流图IVFG;
切片单元,用于根据已有的敏感函数库,通过正则匹配等词法分析技术查找与内存分配相关的内存敏感操作,并将其确定为切片准则,在程序间价值流图IVFG上对代码进行切片,根据图的可达性算法,删除与敏感操作语句无关的节点;
图嵌入单元,用于利用Word2vec对IVFG中节点以及边类型进行词嵌入,得到节点和边类型的初始特征向量,作为漏洞检测模型的输入;
输出单元,用于输出可能发生内存泄漏的函数及可疑语句。
本发明可以更好地利用漏洞代码的流敏感、上下文敏感等与内存泄漏密切相关的特性,通过多关系图卷积网络达到对不同边类型的分别训练,可以更有效地挖掘漏洞代码的潜在语义特征,普适性和通用性更强,可以有效减少人工审计成本,并输出潜在的内存泄漏发生的函数及可疑语句,使实际应用领域更广、精度更高、定位更准。
以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (4)
1.一种数据驱动的内存泄漏智能化检测方法,其特征在于,所述方法包括以下步骤:
步骤1,漏洞数据采集;具体过程包括:
步骤1-1,首先以内存泄漏作为关键词检索漏洞数据库NVD,采集所有与内存泄漏相关的漏洞条目;然后从开源代码库中挖掘与漏洞条目对应的漏洞代码并标记修复该漏洞条目所更改的语句;
步骤1-2,利用编译器LLVM对采集到的漏洞条目的代码进行预编译,转化为通用的代码中间表示IR;
步骤2,构造程序间价值流图IVFG,提取漏洞特征;具体过程包括:
步骤2-1,基于步骤1-2中得到的代码中间表示IR,利用安德森指针分析法构造程序间价值流图IVFG,该程序间价值流图IVFG包括过程内价值流、返回价值流和调用价值流;
步骤2-2,根据已有的敏感函数库,通过正则匹配词法分析技术查找与内存分配相关的内存敏感操作,并将该内存敏感操作确定为切片准则,在程序间价值流图IVFG上对漏洞代码的中间表示IR进行切片,根据图的可达性算法,删除与敏感操作语句无关的节点,并将剩余节点构成的生成子图作为新的程序间价值流图IVFG-1;
步骤2-3,重命名漏洞代码中间表示IR中的变量名、函数名,利用步骤1-1中的漏洞更改语句标记对步骤2-2中所述剩余节点进行标记,与漏洞语句中的代码令牌相关的剩余节点标记为漏洞节点,无关的节点标记为无漏洞节点;
步骤2-4,利用Word2vec对漏洞节点以及程序间价值流图IVFG中多种边类型进行词嵌入,分别得到漏洞节点的初始特征向量xv;以及边类型/>的初始特征向量zr,用于下一步训练漏洞检测模型的输入;
步骤3,利用多关系图卷积网络COMPGCN,训练漏洞检测模型;具体过程包括:
步骤3-1,基于步骤2-4得到的漏洞节点初始特征向量xv,节点嵌入hv由如下变换得到:
式中,是节点v的出边所连接的近邻集,u为节点v的邻居节点,r为两节点间的边类型,Wλ(r)是与边类型相关的参数,xu和zr分别是节点u和边类型r的初始特征向量,φ是用于将边类型嵌入到节点特征中的合成算子;
此外,对于同一种边的不同类型被赋予不同的权重,即λ(r)=dir(r),则权重Wλ(r)根据边类型的不同,可分为以下两种:
式中,WO表示正向边所对应的权重参数,WI表示逆向边所对应的权重参数;
步骤3-2,基于步骤2-4得到的边类型初始特征向量zr,边嵌入hr由如下变换得到:
hr=Wrelzr
式中,Wrel是一个可学习的变换矩阵,它将所有的边映射到和节点相同的向量空间;
边类型初始特征向量zr通过基函数分解计算得到:
式中,是学习得到的边类型系数,/>是实数集,/>是一组学习得到的基向量,/>表示基的数量;
步骤3-3,基于步骤3-1和步骤3-2得到的节点嵌入和边嵌入,通过堆叠多层多关系图卷积网络COMPGCN聚合节点特征信息:
式中,k表示堆叠的关系图卷积网络的层数,是邻居节点v在k次聚合更新后的节点嵌入;
相应的,是边类型r在k次聚合更新后的边嵌入,由下述公式计算得到:
式中,是k次聚合更新后学习到的变换矩阵,该公式的初始输入/>表示节点初始特征向量xv;/>表示边类型初始特征向量zr;
步骤3-4,通过最小化交叉熵损失函数训练漏洞检测模型:
式中,G是训练集中的一张图,/>是训练样本中的节点集,/>是模型在K次聚合更新后利用softmax激活函数得到的节点v的向量表示,表示节点v的标签为l的概率,l={0,1},0表示该节点为无漏洞节点,1表示有漏洞节点,wl表示标签权重,yvl表示节点v实际被标记的标签;
步骤4,对待检测文件进行预处理,并利用检测模型检测是否存在内存泄漏,报告发生内存泄漏的漏洞函数及可疑的漏洞语句。
2.根据权利要求1所述的数据驱动的内存泄漏智能化检测方法,其特征在于,步骤4所述对待检测文件进行预处理,并利用检测模型检测是否存在内存泄漏,报告发生内存泄漏的漏洞函数及可疑的漏洞语句,具体过程包括:
步骤4-1,利用LLVM编译器预编译待检测文件,为待检测文件中的所有函数构造步骤2所提出的程序间价值流图IVFG;
步骤4-2,根据已有的敏感函数库,基于步骤2-2中的方法,通过正则匹配等词法分析技术查找与内存分配相关的内存敏感操作,并将其确定为切片准则,基于步骤4-1所构造的程序间价值流图IVFG上对代码进行切片,根据图的可达性算法,删除与敏感操作语句无关的节点;
步骤4-3,基于步骤2-4中的词嵌入方法,利用Word2vec对步骤4-2中经过切片得到的程序间价值流图IVFG中所有节点以及边类型进行词嵌入,得到节点和边类型的初始特征向量,作为漏洞检测模型的输入;
步骤4-4,输出可能发生内存泄漏的函数及可疑语句。
3.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至2中任一项所述方法的步骤。
4.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至2中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110569646.1A CN113326187B (zh) | 2021-05-25 | 2021-05-25 | 数据驱动的内存泄漏智能化检测方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110569646.1A CN113326187B (zh) | 2021-05-25 | 2021-05-25 | 数据驱动的内存泄漏智能化检测方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113326187A CN113326187A (zh) | 2021-08-31 |
CN113326187B true CN113326187B (zh) | 2023-11-24 |
Family
ID=77416652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110569646.1A Active CN113326187B (zh) | 2021-05-25 | 2021-05-25 | 数据驱动的内存泄漏智能化检测方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113326187B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113780454B (zh) * | 2021-09-17 | 2023-10-24 | 平安科技(深圳)有限公司 | 模型训练及调用方法、装置、计算机设备、存储介质 |
CN114282226B (zh) * | 2021-12-31 | 2024-05-28 | 上海交通大学 | 单次多漏洞代码检测方法及*** |
CN115357904B (zh) * | 2022-07-29 | 2024-04-02 | 南京航空航天大学 | 一种基于程序切片和图神经网络的多类漏洞检测方法 |
CN115600216B (zh) * | 2022-11-04 | 2024-03-22 | 中国电信股份有限公司 | 检测方法、装置、设备及存储介质 |
CN117435178B (zh) * | 2023-12-20 | 2024-03-15 | 厦门东软汉和信息科技有限公司 | 一种代码生成***、方法、装置及存储介质 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7392545B1 (en) * | 2002-01-18 | 2008-06-24 | Cigital, Inc. | Systems and methods for detecting software security vulnerabilities |
CN101710303A (zh) * | 2009-12-01 | 2010-05-19 | 中国人民解放军国防科学技术大学 | 基于流敏感上下文敏感指向图的内存泄漏检测方法 |
WO2017181286A1 (en) * | 2016-04-22 | 2017-10-26 | Lin Tan | Method for determining defects and vulnerabilities in software code |
CN108804332A (zh) * | 2018-06-14 | 2018-11-13 | 南京大学 | 一种基于机器学习的c程序内存泄漏智能化检测方法 |
CN109670306A (zh) * | 2018-11-27 | 2019-04-23 | 国网山东省电力公司济宁供电公司 | 基于人工智能的电力恶意代码检测方法、服务器及*** |
CN111240982A (zh) * | 2020-01-09 | 2020-06-05 | 华东师范大学 | 源代码静态分析方法 |
CN111274134A (zh) * | 2020-01-17 | 2020-06-12 | 扬州大学 | 基于图神经网络的漏洞识别与预测方法、***、计算机设备和存储介质 |
CN111460450A (zh) * | 2020-03-11 | 2020-07-28 | 西北大学 | 一种基于图卷积网络的源代码漏洞检测方法 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN111858290A (zh) * | 2019-04-30 | 2020-10-30 | 深圳市前海源伞科技有限公司 | 用于检测目标代码的内存泄漏路径的方法和设备 |
CN112417063A (zh) * | 2020-12-11 | 2021-02-26 | 哈尔滨工业大学 | 一种基于异构关系网络的相容功能项推荐方法 |
CN112463424A (zh) * | 2020-11-13 | 2021-03-09 | 扬州大学 | 一种基于图的端到端程序修复方法 |
CN112560036A (zh) * | 2020-12-21 | 2021-03-26 | 中国人民解放军陆军炮兵防空兵学院 | 一种基于神经网络与深度学习的c/c++漏洞静态检测方法 |
CN112560049A (zh) * | 2020-12-28 | 2021-03-26 | 苏州极光无限信息技术有限公司 | 一种漏洞检测方法、装置和存储介质 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11620389B2 (en) * | 2019-06-24 | 2023-04-04 | University Of Maryland Baltimore County | Method and system for reducing false positives in static source code analysis reports using machine learning and classification techniques |
-
2021
- 2021-05-25 CN CN202110569646.1A patent/CN113326187B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7392545B1 (en) * | 2002-01-18 | 2008-06-24 | Cigital, Inc. | Systems and methods for detecting software security vulnerabilities |
CN101710303A (zh) * | 2009-12-01 | 2010-05-19 | 中国人民解放军国防科学技术大学 | 基于流敏感上下文敏感指向图的内存泄漏检测方法 |
WO2017181286A1 (en) * | 2016-04-22 | 2017-10-26 | Lin Tan | Method for determining defects and vulnerabilities in software code |
CN108804332A (zh) * | 2018-06-14 | 2018-11-13 | 南京大学 | 一种基于机器学习的c程序内存泄漏智能化检测方法 |
CN109670306A (zh) * | 2018-11-27 | 2019-04-23 | 国网山东省电力公司济宁供电公司 | 基于人工智能的电力恶意代码检测方法、服务器及*** |
CN111858290A (zh) * | 2019-04-30 | 2020-10-30 | 深圳市前海源伞科技有限公司 | 用于检测目标代码的内存泄漏路径的方法和设备 |
CN111240982A (zh) * | 2020-01-09 | 2020-06-05 | 华东师范大学 | 源代码静态分析方法 |
CN111274134A (zh) * | 2020-01-17 | 2020-06-12 | 扬州大学 | 基于图神经网络的漏洞识别与预测方法、***、计算机设备和存储介质 |
CN111460450A (zh) * | 2020-03-11 | 2020-07-28 | 西北大学 | 一种基于图卷积网络的源代码漏洞检测方法 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN112463424A (zh) * | 2020-11-13 | 2021-03-09 | 扬州大学 | 一种基于图的端到端程序修复方法 |
CN112417063A (zh) * | 2020-12-11 | 2021-02-26 | 哈尔滨工业大学 | 一种基于异构关系网络的相容功能项推荐方法 |
CN112560036A (zh) * | 2020-12-21 | 2021-03-26 | 中国人民解放军陆军炮兵防空兵学院 | 一种基于神经网络与深度学习的c/c++漏洞静态检测方法 |
CN112560049A (zh) * | 2020-12-28 | 2021-03-26 | 苏州极光无限信息技术有限公司 | 一种漏洞检测方法、装置和存储介质 |
CN112699377A (zh) * | 2020-12-30 | 2021-04-23 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
Non-Patent Citations (6)
Title |
---|
An Empirical Study on Real Bugs for Machine Learning Programs;Xiaobing Sun;《2017 24th Asia-Pacific Software Engineering Conference (APSEC)》;全文 * |
Automated memory leak fixing on value-flow slices for C programs;Hua Yan;《SAC‘16:Proceedings of the 31st Annual ACM Symposium on Applied Computing》;全文 * |
C程序内存泄漏的智能化检测方法;朱亚伟;《中国优秀硕士学位论文全文数据库 (信息科技辑)》(第7期);17-49 * |
Static Detection of Control-Flow-Related Vulnerabilities Using Graph Embedding;Xiao Cheng;《2019 24th International Conference on Engineering of Complex Computer Systems (ICECCS)》;全文 * |
基于图网络的源代码漏洞检测研究;孔维星;《中国优秀硕士学位论文全文数据库 (信息科技辑)》(第2期);全文 * |
面向软件安全性缺陷的开发者推荐方法;孙小兵;《软件学报》;第29卷(第8期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113326187A (zh) | 2021-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113326187B (zh) | 数据驱动的内存泄漏智能化检测方法及*** | |
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
CN109426722B (zh) | Sql注入缺陷检测方法、***、设备及存储介质 | |
CN111125716B (zh) | 一种以太坊智能合约漏洞检测方法及装置 | |
CN102339252B (zh) | 基于xml中间模型以及缺陷模式匹配的静态检测*** | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及*** | |
CN106295338B (zh) | 一种基于人工神经元网络的sql漏洞检测方法 | |
CN110287702A (zh) | 一种二进制漏洞克隆检测方法及装置 | |
CN111475820A (zh) | 基于可执行程序的二进制漏洞检测方法、***及存储介质 | |
CN112115326B (zh) | 一种以太坊智能合约的多标签分类和漏洞检测方法 | |
CN101261602A (zh) | 一种基于语法树的程序正确性验证方法 | |
CN115033895B (zh) | 一种二进制程序供应链安全检测方法及装置 | |
Cao et al. | FTCLNet: Convolutional LSTM with Fourier transform for vulnerability detection | |
CN115033896A (zh) | 以太坊智能合约漏洞检测方法、装置、***与介质 | |
CN114611115A (zh) | 一种基于混合图神经网络的软件源码漏洞检测方法 | |
CN114491082A (zh) | 基于网络安全应急响应知识图谱特征提取的预案匹配方法 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN116340952A (zh) | 一种基于操作码程序依赖图的智能合约漏洞检测方法 | |
CN116340947A (zh) | 一种基于Transformer的智能合约漏洞检测方法 | |
CN111898134B (zh) | 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 | |
Cohen | Recovering software specifications with inductive logic programming | |
CN117725592A (zh) | 一种基于有向图注意力网络的智能合约漏洞检测方法 | |
CN116074092B (zh) | 一种基于异构图注意力网络的攻击场景重构*** | |
CN111815108A (zh) | 一种电网工程设计变更与现场签证审批单的评价方法 | |
CN116467720A (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 |