CN114065210A - 一种基于改进的时间卷积网络的漏洞检测方法 - Google Patents

一种基于改进的时间卷积网络的漏洞检测方法 Download PDF

Info

Publication number
CN114065210A
CN114065210A CN202111257188.4A CN202111257188A CN114065210A CN 114065210 A CN114065210 A CN 114065210A CN 202111257188 A CN202111257188 A CN 202111257188A CN 114065210 A CN114065210 A CN 114065210A
Authority
CN
China
Prior art keywords
code
slice
vector sequence
vulnerability
drsn
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.)
Pending
Application number
CN202111257188.4A
Other languages
English (en)
Inventor
蔡赛华
陈锦富
林薇
王维佳
王姝慧
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jiangsu University
Original Assignee
Jiangsu University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jiangsu University filed Critical Jiangsu University
Priority to CN202111257188.4A priority Critical patent/CN114065210A/zh
Publication of CN114065210A publication Critical patent/CN114065210A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种基于改进的时间卷积网络的漏洞检测方法。包括:步骤1,分析C/C++源代码的数据依赖和漏洞关键点,对源代码进行切片,并标记代码切片是否含有漏洞;步骤2:使用word2vec方法将代码切片转换为token向量序列;步骤3:按照8:2的比例对代码切片划分训练集和测试集,将训练集送入改进的时间卷积网络进行训练,使用测试集进行测试,建立漏洞检测模型;步骤4:对于待检测的源代码,按照步骤1的方式对源代码进行切片,按照步骤2的方式生成每个代码切片的token向量序列,将token向量序列输入训练好的网络模型,得到漏洞检测结果。

Description

一种基于改进的时间卷积网络的漏洞检测方法
技术领域
本发明属于软件漏洞检测领域,涉及一种基于改进的时间卷积网络的漏洞检 测方法。
背景技术
软件技术的飞快发展和用户需求的日益新增使得软件内部的逻辑也逐渐变 得复杂,这也增加了出现软件漏洞的可能。一旦存在软件漏洞,攻击者可以利用 这些漏洞攻击软件系统,从而威胁用户安全,因此由软件漏洞引发的安全问题引 起了高度重视。漏洞大多是由不安全的代码造成的,尤其是开源代码的漏洞问题 会得到广泛的传播。在软件的生命周期中,越早检测出软件中存在的漏洞会减少 损失,因此,针对源代码的漏洞检测具有重要的意义。
近些年,随着深度学习技术的快速发展,深度学习也被大量应用于漏洞检测 中。与传统的机器学习方法相比,深度学习能够从结构性数据中自动提取高级特 征,从而减少了特征提取的工作量。此外,深度学习方法自动提取的抽象特征表 示比手工提取的特征具有更好的泛化能力。针源代码的时序性,学者们利用能够 并行处理时序数据的时间卷积网络(Temporal convolutional network,TCN)来 检测源代码漏洞。TCN通过堆叠不同膨胀率的膨胀因果卷积,灵活地扩大网络 的感受野,这使得TCN能够更好地捕获源代码中的较长的依赖关系。与循环神 经网络(recursive neural network,RNN)的变体不同,TCN在每个时间步长的 权重是同时更新的,因此具有较好的并行性。然而,源代码中存在大量的语句是 与漏洞无关的,由于这些无关语句的干扰,原始的TCN在输出层学到的源代码 的高级特征往往不足以正确地检测漏洞。其次,原始的TCN是一种单向的结构, 源代码是作为文本,更需要使用双向网络结构来捕获上下文语义。
针对TCN对代码漏洞检测效果不佳的问题,本发明提出了BiTCN_DRSN模 型。针对代码中存在与漏洞无关的语句,BiTCN_DRSN模型利用深度残差收缩 网络(Deep ResidualShrinkage Networks,DRSN)来减少代码片段中与漏洞信息 无关的特征。DRSN能够注意到与漏洞信息无关的特征,通过软阈值化降低与漏 洞信息无关的特征对高层特征的影响。;而且,因为它的收缩阈值是通过神经网 络到的,因此其软阈值化更加灵活。同时,BiTCN_DRSN模型针对TCN单向性 的局限性,利用前向序列学习和后向序列学习,将两个方向学习出来的特征进行 非线性融合,使得网络能够使用两个方向上的信息进行漏洞检测。本发明提出的 模型既能够使神经网络更加注重与漏洞相关的源代码特征,又能够解决TCN单 向结构对源代码双向结构学习能力不足的问题。
发明内容
针对源代码的时序性,TCN模型具有能够并行处理数据、感受野灵活、梯度 稳定等优势。但是,TCN模型的单向结构不能充分地捕获源代码的双向特征, 此外TCN的残差连接方式也不能很好地剔除源代码中与漏洞检测任务无关的特 征信息。我们针对这两点对TCN做出改进。
本发明提供了一种基于改进的时间卷积网络的漏洞检测方法,包括:
步骤1,分析C/C++源代码的数据依赖和漏洞关键点,对源代码进行切片, 并标记每个代码切片是否含有漏洞;
步骤2,使用word2vec方法将代码切片转换为token向量序列;
步骤3,按照8:2的比例对代码切片划分训练集和测试集,以token向量序 列为输入,以切片是否有漏洞为标签,将训练集送入改进的时间卷积网络进行训 练,使用测试集进行测试,建立漏洞检测模型;
步骤4,对于待检测的源代码,按照步骤1的方式对代码进行切片,按照步 骤2的方式生成每个代码切片的token向量序列,将token向量序列输入训练好 的网络模型,得到每个代码切片的漏洞检测结果。
第一方面,上述步骤1中获取代码切片的具体步骤如下:
步骤1.1,获取代码漏洞关键点所涉及的变量,作为关键变量;
步骤1.2,根据关键变量,分析源代码数据依赖,抽取语义相关的代码语句, 生成待检测的代码切片;
步骤1.3,使用Func_/Variable_加数字的方法来替换用户自定义的函数名和 变量名;
步骤1.4,对每个代码切片标记标签,即标记该代码切片是否含有漏洞。
第二方面,上述步骤2的具体步骤如下:
步骤2.1,使用word2vec将每个代码切片中的token转换成长度为100的向 量,并将向量连接生代码切片对应的向量序列;
步骤2.2,设置代码切片的截断长度n;
步骤2.3,如果一个代码切片的token数量小于n并且是对应于可能影响关 键变量的语句,那么就在向量序列的开头填充零向量至长度为n;如果一个代码 切片的token数量小于n并且是对应于受相关参数影响的语句,那么就在向量序 列的尾部填充零向量至长度为n;如果一个代码切片的token数量大于n并且是 对应于可能影响关键变量的语句,那么删除向量序列的开头向量至长度为n;如 果一个代码切片的token数量大于n并且是对应于受相关参数影响的语句,那么 就删除向量序列的尾部至长度为n。
第三方面,上述步骤3的具体步骤如下:
步骤3.1,按照8:2的比例对代码切片划分训练集和测试集;
步骤3.2,构建基于深度残差收缩网络(Deep Residual Shrinkage Network,DRSN)的时间卷积网络(Temporal convolutional network based on DRSN, TCN_DRSN),在时间卷积网络的残差块中添加DRSN中的通道阈值学习模块, 用于学习每个通道对应的阈值,然后对膨胀因果卷积学习到的特征进行软阈值化, TCN_DRSN残差块个数是5,膨胀基数分别是1,2,4,8,16;
步骤3.3,构建双向TCN_DRSN(Bidirectional TCN_DRSN,BiTCN_DRSN) 神经网络模型,将切片后的代码片段的向量序列和转置后的代码片段的向量序列 分别输入两个TCN_DRSN中,再分别全局最大池化TCN_DRSN输出的结果; 然后使用全连接层和Relu激活函数对池化后的特征进行非线性变化,并对两个 全连接层的输出进行拼接;接着将拼接的结果通过softmax层进行识别代码片段 是否含有漏洞;
步骤3.4,按照步骤3.3将步骤2.3获得的数据输入神经网络模型中进行训练, 获得最终的漏洞检测模型。
第四方面,上述步骤3中构建神经网络的具体流程如下:
整个神经网络主要包括输入层、隐藏层以及输出层三部分。输入层主要是将 代码切片的token向量序列和经过逆转后的代码切片的token向量序列输入到神 经网络中;隐藏层部分包含两个TCN_DRSN,两个最大池化层,两个全连接层, 一个连接层。输入层中正向和逆向的token向量序列分别传给TCN_DRSN、池 化层学习两个方向的代码特征,然后通过全连接层和连接层融合两个方向的特征。 其中,TCN_DRSN先将经过膨胀因果卷积的输出矩阵中的每个元素取绝对值, 然后进行全局平均池化;接着,依次通过全连接层,批标准化层、Relu激活函 数、全连接层、sigmoid激活函数,计算出每个通道的阈值系数,将阈值系数与 前面全局平均池化后的张量相乘获得阈值。将取绝对值后的矩阵的每个通道都减 去对应的阈值,得到向零方向进行收缩后的特征。如果减去自己的阈值后元素值 小于0,则该元素值取0。最后矩阵中每个元素值乘上原来矩阵中对应元素的正 负符号,从而得到软阈值化后的特征。输出层采用了softmax激活函数,用于检 测输入的代码切片是否含有漏洞。
与现有技术相比,本发明有益的效果:
1、提出一种结合DRSN的TCN模型,将DRSN中基于通道阈值的残差收 缩模块加入TCN中,减少与漏洞无关的源代码语句和冗余信息对源代码漏洞识别 的影响,提高了软件漏洞检测的准确率。
2、针对TCN单向性不能满足文本双向结构的局限性,提出了双向的基于 DRSN的TCN模型--BiTCN_DRSN,该模型符合源代码双向的特性,可以捕获源 代码从前到后和从后向前的信息,更好地捕捉双向的语义依赖,进一步提高了源 代码漏洞检测的效果。
附图说明
图1是一种基于改进的时间卷积网络的漏洞检测方法的总体流程图。
图2是改进的时间卷积网络的模型结构图。
图3是TCN_DRSN的模型结构图。
图4是本发明实验环节所用数据样本集信息。
图5是BiTCN_DRSN模型,TCN_DRSN和TCN模型漏洞检测有的效性比 较。
图6是BiTCN_DRSN模型和卷积神经网络(convolutional neural networks,CNN),RNN的变体在测试集上准确率比较。
图7是BiTCN_DRSN模型和CNN,RNN的变体在测试集上false-positiverate
(FPR)比较。
图8是BiTCN_DRSN模型和CNN,RNN的变体在测试集上false-negativerate
(FNR)比较。
图9是BiTCN_DRSN模型和CNN,RNN的变体在测试集上精确度比较。
图10是BiTCN_DRSN模型和CNN,RNN的变体在测试集上F1-measure比 较。
图11是BiTCN_DRSN模型和CNN,RNN的变体在BE-ALL数据集上的每 次迭代的损失值。
图12是BiTCN_DRSN模型和CNN,RNN的变体在RM-ALL数据集上的每 次迭代的损失值。
图13是BiTCN_DRSN模型和CNN,RNN的变体在HY-ALL数据集上的每 次迭代的损失值。
具体实施方式
下面结合附图和实施案例对本发明作进一步说明,应指出的是,所描述的实 施案例仅旨在便于对本发明的理解,而对其不起任何限定作用。
本发明旨在针对软件漏洞检测,提出一种基于改进的时间卷积网络的漏洞检 测方法,以有效对软件漏洞进行检测。发明提供了完善的特征提取模型和软件漏 洞测框架,并且进行了充分的实验,证明了方法的可行性和有效性。
如图1所示,本发明的一种基于改进的时间卷积网络的漏洞检测方法,包括:
步骤201对数据集中的C/C++源代码进行数据依赖分析,定位漏洞关键点, 对代码进行切片,并标记代码切片是否含有漏洞。
本发明实施案例中代码切片的目的在于,通常软件源代码的行数是相当多的, 如果使用整个源代码进行漏洞检测,检测范围较大,也不利于神经网络的学习。 如果基于源代码文件或者源代码函数体进行漏洞检测,检测范围仍然较大,不利 于跨文件和跨函数的漏洞检测。根据数据依赖对代码进行切片能够缩小漏洞检测 的范围,实现细粒度的代码漏洞检测,并且使代码切片中的语句相关性更强,有 利于神经网络学习漏洞的特征。
步骤2011获取源代码中漏洞关键点所涉及的变量,作为关键变量;
步骤2012根据关键变量,分析代码数据依赖,抽取与关键变量语义相关的 代码语句,生成待检测的代码切片;
步骤2013使用Func_/Variable_加数字的方法替换代码切片中用户自定义的 函数名和变量名;
步骤2014对每个代码切片标记标签,即标记该代码切片是否含有漏洞。
步骤202使用word2vec方法嵌入token,将每个代码切片转换为token向量 序列。
步骤2021使用word2vec将每个代码切片中的token嵌入成长度为100的向 量,并将向量连接生代码切片对应的向量序列;
步骤2022设置代码切片的截断长度n;
步骤2023如果一个代码切片的token数量小于n并且是对应于可能影响关 键变量的语句,那么就在向量序列的开头填充零向量至长度为n;如果一个代码 切片的token数量小于n并且是对应于受相关参数影响的语句,那么就在向量序 列的尾部填充零向量至长度为n;如果一个代码切片的token数量大于n并且是 对应于可能影响关键变量的语句,那么删除向量序列的开头向量至长度为n;如 果一个代码切片的token数量大于n并且是对应于受相关参数影响的语句,那么 就删除向量序列的尾部至长度为n。
本发明实施案例中对代码进行填充和截断的目的在于,过小的截断长度会导 致大量的特征丢失造成较高的误报率和漏报率,过长的截断长度并不能显著地提 高模型检测能力,因此采用合适的截断长度,尽量地保留代码的特征,从而获取 能够输入神经网络模型的相同大小的矩阵。
步骤203按照8:2的比例对代码切片划分训练集和测试集,将训练集送入改 进的时间卷积网络进行训练,使用测试集进行测试,建立漏洞检测模型。
步骤2031对生成的代码切片按照8:2的比例划分成训练集和测试集;
步骤2032构建基于深度残差收缩网络(Deep Residual Shrinkage Network,DRSN)的时间卷积网络(Temporal convolutional network based on DRSN, TCN_DRSN),在时间卷积网络的残差块中添加DRSN中的通道阈值学习模块, 用于学习每个通道对应的阈值;
其中,阈值计算的流程包括:
(1)先将膨胀因果卷积层的输出的矩阵中的每一个元素取绝对值。然后, 将全局平均池化应用于取绝对值后的矩阵,生成一维的矢量。假设膨胀因果卷积 层的输出为矩阵X∈RT×K,其中,T为token设置的数量,K为卷积核的数量。那 么平均池化后的矢量Xmean∈RK计算公式为:
Figure BDA0003324262130000061
其中,Xi表示X中第i行特征,|·|表示第i行特征中每个元素取绝对值的操作。
(2)将一维矢量依次传播到全连接层,批标准化层、Relu激活函数和全连 接层,最后使用sigmoid激活函数将每个通道的阈值系数缩放到(0,1)的范围。通 道的阈值系数生成的公式为:
Figure BDA0003324262130000062
其中,Z∈RK表示第二层全连接层的输出,scales∈RK表示通道的的阈值系数。
(3)最后获得基于通道的阈值,计算公式为:
τ=scales*Xmean
其中*表示两个矢量元素乘积的操作。
软阈值化的流程如下:
(1)对于取绝对值后的矩阵中的每一个通道减去对应的阈值,得到向零方 向进行收缩后的特征。
(2)如果减去自己的阈值后元素值小于0,则该元素值取0。最后矩阵中每 个元素值乘上原来矩阵中对应元素的正负符号,从而得到软阈值化后的特征。
软阈值化的核心公式为:
Figure BDA0003324262130000071
其中,x表示输入特征,阈值为τ,y表示经过软阈值化后的输出特征。
步骤2033构建双向TCN_DRSN--BiTCN_DRSN模型,将切片后的代码片段 的向量序列和转置后的代码片段的向量序列分别输入两个TCN_DRSN中,再分 别全局最大池化TCN_DRSN输出的结果。然后使用全连接层和Relu激活函数对 池化后的特征进行非线性变化,方式如下:
Figure BDA0003324262130000072
Figure BDA0003324262130000073
其中,
Figure BDA0003324262130000074
Figure BDA0003324262130000075
是全局最大池化后获得前向特征向量和后向特征向量,
Figure BDA0003324262130000076
Figure BDA0003324262130000077
是经 过非线性变化后的前向特征和后向特征,W1,W2∈RK×K表示权重矩阵,b1,b2∈RK表示偏置值,σ(·)表示激活函数。该模型使用的激活函数是Relu,公式如下:
Figure BDA0003324262130000078
接着,需要对学习到的两个特征进行融合,方法如下:
Figure BDA0003324262130000079
其中,Concatenate方法表示连接操作,拼接TCN_DRSN学习到的两个特征。
最后,将学习到的融合特征输入softmax层进行识别。
步骤204对于待检测的源代码,按照步骤2011,步骤2012和步骤2013的 方式对源代码进行切片,按照步骤202的方式生成每个代码切片的token向量序 列,将token向量序列输入训练好的网络模型,得到漏洞检测结果。
本发明主要针对软件漏洞进行检测,我们收集了内存缓冲区操作不当漏洞(CWE119)的源代码和资源管理错误相关漏洞(CWE399)的源代码。图4展 示了我们实验所用的数据集分布。其中,BE-ALL数据集表示CWE-119类型漏 洞的代码片段的数据集,RM-ALL数据集表示CWE-399漏洞类型的代码片段的 数据集,HY-ALL数据集混合了CWE-119漏洞类型的代码片段和CWE-399漏洞 类型的代码片段。
由于本发明是对TCN进行改进,因此为验证我们所提出的BiTCN_DRSN模 型能提高TCN模型的漏洞检测能力,我们分别使用TCN、TCN_DRSN和 BiTCN_DRSN模型在上述的三个数据集上进行对比实验,其对比的结果如图5 所示。通过观察图5,TCN_DRSN模型的检测准确率、精确度、F1-measure均 高于TCN模型,FNR和FPR均低于TCN模型。这证明了TCN_DRSN模型的 源代码漏洞检测能力相对于TCN模型是有所提高的,即证明了TCN中结合 DRSN在漏洞检测方面的有效性。其次,实验结果表明本发明的检测能力相对于 原始TCN模型和TCN_DRSN模型的检测能力也是有所提升的,这证明了双向 网络能够更好地学习源代码的特征。
此外,我们还和CNN,RNN的变体进行了比较。其中CNN方面我们对比了 串联的一维CNN。RNN方面,我们比较了长短期记忆(Long Short Term Memory, LSTM),门控循环单元(Gated Recurrent Unit,GRU),双向LSTM(Bidirectional LSTM,BiLSTM),双向GRU(Bidirectional GRU,BiGRU)这四种神经网络。 其中,BiLSTM在漏洞检测中非常流行的。比较的结果如图6-10所示。我们观 察到,在BE-ALL数据集和RM-ALL数据集上,串联的一维CNN的准确率、FPR、 精确度和F1-mesure指标取得的结果是优于RNN的变体的。在HY-ALL数据集上GRU和BiGRU的检测能力是优于串联的一维CNN的。LSTM的准确率、精 确度和F1-measure是最低的。尽管BiTCN_DRSN模型在BE-ALL数据集上的 FNR会比BiGRU略高,但是其在BE-ALL数据集、RM-ALL数据集和HY-ALL 数据集上的准确率、精确度和F1-measure这三个指标都是最高的,FNR是最低 的。综合来看,我们所提出的BiTCN_DRSN模型具有较好的漏洞检测能力。
为进一步展示本发明的性能,我们还比较了上述BiTCN_DRSN模型和串联 的一维CNN,RNN的变体的训练收敛情况。图11-13展示了上述不同这五种神 经网络和我们所提出的BiTCN_DRSN模型在BE-ALL数据集、RM-ALL数据集 和HY-ALL数据集上的10次迭代过程中损失的变化情况。针对BE-ALL数据集 和HY-ALL数据集,在10次迭代中,BiTCN_DRSN模型的损失值均低于其他的 神经网络模型。针对RM-ALL数据集,尽管在迭代等于1的时候,BiTCN_DRSN 模型的损失值略低于串联的一维CNN,但是在其他的迭代次数上,BiTCN_DRSN 模型的损失值均低于其余的神经网络模型。在三个数据集上,在迭代等于5的时 候,BiTCN_DRSN模型就收敛了,并处于较低值。在三个数据集上,串联的一 维CNN在迭代等于5的时候损失也趋于平稳。在BE-ALL数据集和HY-ALL数 据集上,LSTM、GRU、BiLSTM和BiGRU的损失在迭代等于7的时候开始收 敛。在RM-ALL数据集上LSTM、GRU、BiLSTM和BiGRU的损失在迭代等于 8的时候趋于平稳。我们的发明能够较快地达到较低的损失,网络模型收敛性较 好。

Claims (4)

1.一种基于改进的时间卷积网络的漏洞检测方法,其特征在于,包括如下步骤:
步骤1,分析C/C++源代码的数据依赖和漏洞关键点,对源代码进行切片,并标记每个代码切片是否含有漏洞;
步骤2,使用word2vec方法将代码切片转换为token向量序列;
步骤3,按照一定的比例对代码切片划分训练集和测试集,以token向量序列为输入,以切片是否有漏洞为标签,将训练集送入改进的时间卷积网络进行训练,使用测试集进行测试,建立漏洞检测模型;
步骤4,对于待检测的源代码,按照步骤1的方式对代码进行切片,按照步骤2的方式生成每个代码切片的token向量序列,将token向量序列输入训练好的网络模型,得到每个代码切片的漏洞检测结果。
2.如权利要求1所述的一种基于改进的时间卷积网络的漏洞检测方法,其特征在于,所述步骤1中,获取代码切片的具体实现包括如下步骤:
步骤1.1,获取代码漏洞关键点所涉及的变量,作为关键变量;
步骤1.2,根据关键变量,分析源代码数据依赖,抽取语义相关的代码语句,生成待检测的代码切片;
步骤1.3,使用Func_/Variable_加数字的方法来替换用户自定义的函数名和变量名;
步骤1.4,对每个代码切片标记标签,即该代码切片是否含有漏洞。
3.如权利要求1所述方法,其特征在于,所述步骤2的具体实现包括如下步骤:
步骤2.1,使用word2vec将每个代码切片中的token转换成长度为100的向量,并将向量连接生代码切片对应的向量序列;
步骤2.2,设置代码切片的截断长度n;
步骤2.3,如果一个代码切片的token数量小于n并且是对应于可能影响关键变量的语句,那么就在向量序列的开头填充零向量至长度为n;如果一个代码切片的token数量小于n并且是对应于受相关参数影响的语句,那么就在向量序列的尾部填充零向量至长度为n;如果一个代码切片的token数量大于n并且是对应于可能影响关键变量的语句,那么删除向量序列的开头向量至长度为n;如果一个代码切片的token数量大于n并且是对应于受相关参数影响的语句,那么就删除向量序列的尾部至长度为n。
4.如权利要求1所述方法,其特征在于,所述步骤3的具体实现包括如下步骤:
步骤3.1,按照8:2的比例对代码切片划分训练集和测试集;
步骤3.2,构建基于深度残差收缩网络DRSN的时间卷积网络TCN_DRSN,在时间卷积网络的残差块中添加DRSN中的通道阈值学习模块,用于学习每个通道对应的阈值,然后对膨胀因果卷积学习到的特征进行软阈值化,TCN_DRSN残差块个数是5,膨胀基数分别是1,2,4,8,16;
步骤3.3,构建双向TCN_DRSN神经网络模型,将切片后的代码片段的向量序列和转置后的代码片段的向量序列分别输入两个TCN_DRSN中,再分别全局最大池化TCN_DRSN输出的结果;然后使用全连接层和Relu激活函数对池化后的特征进行非线性变化,并对两个全连接层的输出进行拼接;接着将拼接的结果通过softmax层进行识别代码片段是否含有漏洞;
步骤3.4,按照步骤3.3将步骤2.3获得的数据输入神经网络模型中进行训练,获得最终的漏洞检测模型。
CN202111257188.4A 2021-10-27 2021-10-27 一种基于改进的时间卷积网络的漏洞检测方法 Pending CN114065210A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111257188.4A CN114065210A (zh) 2021-10-27 2021-10-27 一种基于改进的时间卷积网络的漏洞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111257188.4A CN114065210A (zh) 2021-10-27 2021-10-27 一种基于改进的时间卷积网络的漏洞检测方法

Publications (1)

Publication Number Publication Date
CN114065210A true CN114065210A (zh) 2022-02-18

Family

ID=80235934

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111257188.4A Pending CN114065210A (zh) 2021-10-27 2021-10-27 一种基于改进的时间卷积网络的漏洞检测方法

Country Status (1)

Country Link
CN (1) CN114065210A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115037543A (zh) * 2022-06-10 2022-09-09 江苏大学 一种基于双向时间卷积神经网络的异常网络流量检测方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115037543A (zh) * 2022-06-10 2022-09-09 江苏大学 一种基于双向时间卷积神经网络的异常网络流量检测方法
CN115037543B (zh) * 2022-06-10 2024-03-19 江苏大学 一种基于双向时间卷积神经网络的异常网络流量检测方法

Similar Documents

Publication Publication Date Title
CN112487807B (zh) 一种基于膨胀门卷积神经网络的文本关系抽取方法
CN111753101B (zh) 一种融合实体描述及类型的知识图谱表示学习方法
CN112819023B (zh) 样本集的获取方法、装置、计算机设备和存储介质
CN112560036B (zh) 一种基于神经网络与深度学习的c/c++漏洞静态检测方法
CN112199532B (zh) 一种基于哈希编码和图注意力机制的零样本图像检索方法及装置
CN114491039B (zh) 基于梯度改进的元学习少样本文本分类方法
CN112463924B (zh) 面向智能问答基于内部相关性编码的文本意图匹配方法
CN116192477A (zh) 一种基于掩码图自编码器的apt攻击检测方法及装置
CN115374845A (zh) 商品信息推理方法和装置
CN115935372A (zh) 一种基于图嵌入和双向门控图神经网络的漏洞检测方法
CN112035345A (zh) 一种基于代码片段分析的混合深度缺陷预测方法
CN114065210A (zh) 一种基于改进的时间卷积网络的漏洞检测方法
CN114723003A (zh) 一种基于时序卷积和关系建模的事件序列预测方法
CN116702160B (zh) 一种基于数据依赖增强程序切片的源代码漏洞检测方法
Zheng et al. Learning from the web: Webly supervised meta-learning for masked face recognition
CN111898134B (zh) 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置
CN110768864B (zh) 一种网络流量批量生成图像的方法及装置
CN117407532A (zh) 一种利用大模型与协同训练进行数据增强的方法
CN116467720A (zh) 一种基于图神经网络的智能合约漏洞检测方法及电子设备
CN116663017A (zh) 一种基于多程序图的漏洞检测方法及装置
CN116595537A (zh) 一种基于多模态特征的生成式智能合约的漏洞检测方法
CN113342982B (zh) 融合RoBERTa和外部知识库的企业行业分类方法
CN115268994B (zh) 一种基于tbcnn和多头自注意力机制的代码特征提取方法
CN116136866B (zh) 基于知识图谱的中文新闻摘要事实性知识校正方法和装置
CN115828248B (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