一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于上下文语义的漏洞检测方法与装置与流程

2021-10-29 22:13:00 来源:中国专利 TAG:语义 上下文 信息安全 漏洞 检测方法


1.本发明涉及信息安全应用领域,具体涉及一种基于上下文语义的漏洞检测方法与装置。


背景技术:

2.电力企业是网络安全责任的主题,将网络安全纳入电力企业网络安全生产管理体系,按照国家等级保护制度的要求,加强电力行业的网络安全等级保护专业力量建设。结合电力生产安全的新形势和安全保障要求,完善电网信息系统安全防护新方案。目前电力信息系统软件变得越来复杂,设计缺陷和实现错误导致的软件漏洞成为工程中不可避免的问题,这些存在漏洞的电网软件信息系统将给电网带来严重的安全风险。
3.传统的漏洞检测技术范围从使用手动定义的特征到代码相似性度量等一系列的手段都存在较为显著的缺陷。通过手动进行定义漏洞特征的工作过程中,容易出错且耗费人工,且很难获取完整特征,通常只包含有关漏洞的部分信息,极易造成高误报率和漏报率。而且,代码相似度方法的应用范围有限,仅在代码克隆造成的漏洞方面效果较好。在通过使用决策树和支持向量机(svm)等传统机器学习技术进行漏洞检测过程中,主要是从预先分类的漏洞中提取漏洞特征,然而基于此类特征的漏洞检测模式通常只可以用于特定漏洞。
4.随着信息化安全研究的进一步发展,基于神经网络的研究来解决提取特征不全面等问题,以进一步提高漏洞检测的智能。目前基于双向长短期记忆(bi

lstm)网络在软件漏洞检测方面应用研究比较火热,然而,由于该网络架构下复杂的上下文信息处理和迭代训练机制进而导致训练成本很高。如何有效将降低训练成本,提高训练效率同时保障检测的效果是一个值得研究的问题。


技术实现要素:

5.发明目的:本发明针对电力信息系统特点和当前检测手段的不足,提出一种基于上下文语义的漏洞检测方法,同时实现漏洞检测效率和精度的提高。
6.本发明的另一目的是提供一种基于上下文语义的漏洞检测装置。
7.技术方案:根据本发明的第一方面,提供一种基于上下文语义的漏洞检测方法,包括以下步骤:
8.对获取的代码段进行符号化表示,将每个代码程序段的漏洞特征转换成特定的符号表示,其中相同的特征映射到相同的符号表示;
9.将符号表示转换为向量;
10.将向量输入基于elm的源代码漏洞检测模型,进行漏洞检测,所述基于elm的源代码漏洞检测模型预先使用训练数据集进行训练得到,模型包括输入层、隐藏层和输出层。
11.其中,对获取的代码段进行符号化表示包括:
12.函数调用符号化:定义的函数名称符号化表示为fn;
13.变量符号化:包括参数和局部变量在内的变量名称用符号表示为vn;
14.数据类型符号化:变量和用户自定义函数的数据类型符号化表示为tn;
15.符号化中提到的符号n是一个数字,它表示该功能第一次出现的索引。
16.进一步地,对获取的代码段进行符号化表示还包括:设置符号化表示的优先级,根据符号化的优先级构建多级符号化机制,其中level1包括一个符号化组为f,level 2包括两个符号化组f v和f t,level 3包括一个符号化组f v t。
17.进一步地,所述将符号表示转换为向量通过doc2vec模型实现,所述doc2vec模型针对符号化表示的语句,每次从一句话中滑动采样固定长度的词,取其中一个词作预测词,其他的作为输入词,输入词对应的词向量和本句话对应的句子向量作为输入层的输入,将本句话的向量和本次采样的词向量相加求平均或者累加构成一个新的向量x,进而使用这个向量预测此次窗口内的预测词句。
18.所述基于elm的源代码漏洞检测模型通过输入层激活信号,再通过隐藏层提取特征,不同隐藏层神经单元对应不同输入层的神经单元权重和自身偏置,最后输出层根据不同的隐藏层权重和自身偏置输出结果。进一步地,引入核函数来优化elm,核函数采用径向基函数,将结合核函数的elm称为kelm,其输出函数如下:
[0019][0020]
其中,λ是指值在[0,1]之间的正则化因子,i是指单位矩阵,h是隐藏层输出矩阵,非上标t是预期输出矩阵,上标t表示矩阵的转置,n表示训练数据集数量,l是指隐藏层的神经元数,ω表示核函数,其计算方式如下:
[0021][0022]
其中h(x
i
)是隐藏层相对于输入x
i
的输出向量,k(x
i
,x
j
)表示径向基函数。
[0023]
根据本发明的第二方面,提供基于上下文语义的漏洞检测装置,包括:
[0024]
符号化表示模块,用于对获取的代码段进行符号化表示,将每个代码程序段的漏洞特征转换成特定的符号表示,其中相同的特征映射到相同的符号表示;
[0025]
向量表示模块,用于将符号表示转换为向量;
[0026]
漏洞检测模块,用于将向量输入基于elm的源代码漏洞检测模型,进行漏洞检测,所述基于elm的源代码漏洞检测模型预先使用训练数据集进行训练,模型包括输入层、隐藏层和输出层。
[0027]
有益效果:相对于现有技术,本发明具有以下有益效果:
[0028]
本发明一方面针对现有漏洞检测技术通过规则和代码相似性度计量等方法特征选择的不足,充分利用神经网络自动提取复杂特征的优势,同时引入了elm和核方法,elm其使用非迭代训练机制训练检测模型,可以有效提高漏洞检测的效率,通过核方法可以有效提高精度性能;另一方面,针对源深度学习输入的代码的符号表示转换为向量表示目前的方法容易忽略文本的上下文中的语义信息,本发明通过引入doc2vec,充分利用doc2vec在
源代码向量表示方面优势,有效提高检测的效果。
附图说明
[0029]
图1为本发明的基于上下文语义的漏洞检测方法总体流程图;
[0030]
图2为本发明实施例提供的基于上下文语义的漏洞检测方法示意图;
[0031]
图3为本发明实施例提供的具有隐藏层网络的elm结构图示意图。
具体实施方式
[0032]
下面结合附图对本发明的技术方案做出进一步的说明。
[0033]
基于上下文语义的漏洞检测方法总体流程如图1所示,主要包括如下步骤:(1)对获取的代码段进行符号化表示,将每个代码程序段的漏洞特征转换成特定的符号表示,其中相同的特征映射到相同的符号表示;(2)将符号表示转换为向量;(3)将向量输入基于elm的源代码漏洞检测模型,进行漏洞检测,所述基于elm的源代码漏洞检测模型预先使用训练数据集进行训练得到,模型包括输入层、隐藏层和输出层。
[0034]
在以下描述中,电力信息系统、电网信息系统、电力服务平台、电网业务系统指的是相同含义,它们在文中可互换地使用,通常指的是通过通信、自动控制、计算机、网络、传感等信息技术,在包括发电、输变电、配电、用电和调度等环节在内的电力生产、传输、消费全过程中实现自动控制和调度的信息化管理的软硬件系统。电力信息系统一般是由众多复杂异构的子系统组成的超大规模、广域分布和分级递阶的大系统,它的安全是多因素和多维的。
[0035]
下面参照图2,结合模型的训练和验证,对本发明的基于上下文语义的漏洞检测方法做出具体描述。
[0036]
步骤s1,数据预处理,包括对获取的代码段进行符号化表示和代码表示。
[0037]
本发明的基于上下文语义的漏洞检测预处理方法是程序符号化和向量表示。符号表示的好处是可以通过减少代码程序段的长度来提高训练效率。在符号化中,每个代码程序段的漏洞特征,如局部变量、用户定义函数和数据类型等都会被转换成短的和固定长度的符号表示,其中相同的特征映射到相同的符号表示。
[0038]
1)程序符号化
[0039]
一个代码段由几个程序语句(即代码行)组成,其在数据依赖或控制依赖方面在语义上相互关联。其可以进一步转化为使用符号化的符号表示形式。然后将符号表示收集为语料库,用于训练向量表示工具doc2vec。
[0040]
本发明通过三种符号化类型,如下所示:
[0041]
(i)函数调用符号化:定义的函数名称符号化表示为fn。这种符号化类型被分配优先级,因为漏洞主要是由于库/api函数调用的不当使用造成的。定义函数的符号化可以提高漏洞信息中库/api函数的信噪比(snr)。
[0042]
(ii)变量符号化:包括参数和局部变量在内的变量名称用符号表示为vn。在实践中,变量占代码的很大比例。
[0043]
(iii)数据类型符号化:变量和用户自定义函数的数据类型符号化表示为tn。它的优先级最低,因为许多数据类型与漏洞信息无关。
[0044]
上面符号化中提到的符号n是一个数字,它表示该功能第一次出现的索引,同时注意多个函数出现在不同的代码段中时可能会映射到相同的符号名称。因为符号化v和t可能在不同的数据集中对漏洞信息的snr产生不同的影响。根据符号化的优先级构建多级符号化机制。level1包括一个符号化组为f。level 2包括两个符号化组f v和f t。level 3包括一个符号化组f v t。v和t分别表示上述的变量符号化和数据类型符号化。
[0045]
如一段代码:static void sysgo()
[0046]
list<char>datalist;
[0047]
sysgo1(datalist);
[0048]
......
[0049]
符号化之后:static void f1()
[0050]
list<char>v1;
[0051]
f2(v1);
[0052]
......
[0053]
2)代码表示
[0054]
由于神经网络只能接受向量作为输入,源代码的符号表示需要进一步转换为向量表示。本发明通过doc2vec这种方式实现。
[0055]
doc2vec方法是一种无监督算法,能从变长的文本(例如:句子、段落或文档)中学习得到固定长度的特征表示。它可以获得句子、段落和文档的向量表达,是word2vec的拓展,其不用固定句子长度,可以接受不同长度的句子做训练样本。doc2vec算法用于预测一个向量来表示不同的文档,该模型的结构潜在的克服了词袋模型的缺点。
[0056]
doc2vec模型是受到了word2vec模型的启发。word2vec里预测词向量时,预测出来的词是含有词义的,doc2vec中也是构建了相同的结构,所以doc2vec克服了词袋模型中没有语义的缺点。假设现在存在训练样本,每个句子是训练样本,和word2vec一样,doc2vec也有两种训练方式,一种是分布记忆的段落向量,类似于word2vec中的cbow模型,另一种是分布词袋版本的段落向量,类似于word2vec中的skip

gram模型。
[0057]
doc2vec可以从任意长度的文本中学习固定长度的特征表示,范围从句子到文档。而且,其中的句子向量paragraph vector可以记住段落的主题,这使得它能够比word2vec更好地提取全局特征。鉴于word2vec以一对一的方式将单词转换为向量表示,因此,转换后的向量的长度随输入文本的长度而变化。为了满足神经网络对定长输入的要求,需要对word2vec生成的向量做进一步处理,得到对应的定长形式。与word2vec不同,doc2vec可以直接从任意长度的输入文本中输出固定长度的向量。此外,与word2vec相比,doc2vec还可以从输入文本的上下文中掌握更多的语义信息。因此,doc2vec在源代码向量表示方面显示出巨大的潜力。
[0058]
在doc2vec中,每一句话用唯一的向量来表示,用矩阵d的某一列来代表。每一个词也用唯一的向量来表示,用矩阵w的某一列来表示。每次从一句话中滑动采样固定长度的词,取其中一个词作预测词,其他的作为输入词。输入词对应的词向量word vector和本句话对应的句子向量paragraph vector作为输入层的输入,将本句话的向量和本次采样的词向量相加求平均或者累加构成一个新的向量x,进而使用这个向量预测此次窗口内的预测词句。通过在同一个句子的若干次训练中共享句子向量paragraph vector,训练得到的词
向量表达的主旨会越来越准确。在这个过程中,上下文语义可以得到较为完整的保留,从而对于漏洞特征的提取具有积极的意义。训练完了以后,就会得到训练样本中所有的词向量和每句话对应的句子向量。
[0059]
步骤s2,将预处理后的向量输入基于elm(extreme learning machine,极限学习机)的源代码漏洞检测模型,进行漏洞检测。
[0060]
(1)模型结构
[0061]
如图3所示为具有隐藏层网络的elm结构,其中d、l和m分别表示输入层神经元、隐藏层神经元和输出层神经元的数量。ω是连接输入层和隐藏层的输入权重,b是隐藏层神经元的阈值,β是连接隐藏层和输出层的输出权重。ω和b在均匀分布下从(

1,1)和(0,1)范围随机生成。它们在模型的整个训练过程中都保持冻结状态。
[0062]
(2)elm模型
[0063]
给定一个训练数据集其中n表示训练数据集数量,d、l和m分别表示输入层神经元、隐藏层神经元和输出层神经元的数量,x
i
,t
i
中一个是样本输入数据,另一个是样本标签值;
[0064]
elm模型可以被表示为:
[0065]
hβ=t
[0066][0067][0068][0069]
其中t是预期输出矩阵,h是隐藏层输出矩阵。h(x
i
)是隐藏层相对于输入x
i
的输出向量。g(
·
)是elm的激活函数。ω
j
·
x
i
表示输入权重与第i个训练样本特征的内积。
[0070]
输出权重β可以通过以下方式获得:
[0071][0072]
其中h 是指h的moore

penrose广义逆矩阵,l是指隐藏层的神经元数,i是指n个单位矩阵,λ是指值在[0,1]之间的正则化因子。
[0073]
elm输出函数是:
[0074][0075]
elm模型的优化目标可以表示为:
[0076][0077]
其中f(x
i
)和t
i
分别表示第i个样本的预测标签和真实标签。
[0078]
通过采用电网某类信息系统中已知漏洞的源代码作为数据集,包括缓冲区错误漏洞、资源管理错误漏洞等和所有库/api函数调用的样本。通过对该数据集进行分类为两部分,比例分别为80%和20%,其中较大的部分用于训练,另一部分用于测试。数据集中的每个样本都是带有真实标签的符号表示形式。基于历史“易受攻击”的样本进行同类型样本标记,收集该类型样本用于两个实验。并且都用f v的符号化组进行预处理。
[0079]
(3)基于核函数优化的elm
[0080]
由于elm模型输入层权值和隐层偏置的随机性,导致模型容易出现不稳定状态。故而引入核函数来优化elm。通过将数据映射到高维空间,将非线性问题转化为线性问题。结合核方法,与传统的elm相比有两个好处。一方面,它解决了传统elm中隐藏层节点数量依赖手动设置的问题,表现出更好的稳定性。另一方面,核函数将数据映射到高维空间,数据在变换后的空间中的分布非常平滑。事实上,平滑的新数据使分类问题更容易,因此模型可以显示出更好的效果。径向基函数(rbf)是首选的核函数,因为它只有一个超参数,可以简化模型配置和训练成本。rbf核函数可以表示为:
[0081][0082]
其中x和y表示样本,一个是历史输入向量,另一个是输出值,γ是表示高斯核函数的唯一超参数,‖x

y‖表示向量的范数。
[0083]
以ω表示核矩阵,定义核函数的计算式如下:
[0084][0085]
kelm输出函数如下:
[0086][0087]
从上式可以看出,elm结合核方法可以避免传统elm中隐藏层节点数依赖人工设置的问题。
[0088]
为了进一步提升算法的性能,建立issa

kelm分类器模型,在训练过程中使用issa算法搜索kelm分类器的最优正则化系数c和最优核参数g,然后将训练好的kelm模型在测试集上进行测试评估,输出分类结果。
[0089]
语义分析是通过建立有效的模型和系统实现对各种语言的自动语义分析,达到实现对整个文本所表达语义的理解。本发明基于上下文语义的漏洞检测方法利用输入输出的语义分析,采集定位web应用的高风险行为,针对其代码段进行处理,同时通过使用elm来解决漏洞检测模型的训练效率问题。此外,引入核方法来提高elm的精度。实验结果表明,采用核方法的elm是效率和精度的有效结合。特别是对于数据预处理问题,通过使用doc2vec的
向量表示在大型数据集上表现良好,适当的符号化级别可以有效提高漏洞检测的精度。
[0090]
根据本发明的另一实施例,提供一种基于上下文语义的漏洞检测装置,包括:
[0091]
符号化表示模块,用于对获取的代码段进行符号化表示,将每个代码程序段的漏洞特征转换成特定的符号表示,其中相同的特征映射到相同的符号表示;
[0092]
向量表示模块,用于将符号表示转换为向量;
[0093]
漏洞检测模块,用于将向量输入基于elm的源代码漏洞检测模型,进行漏洞检测,所述基于elm的源代码漏洞检测模型预先使用训练数据集进行训练,模型包括输入层、隐藏层和输出层。
[0094]
其中,所述符号化表示模块包括:
[0095]
函数调用符号化单元:将定义的函数名称符号化表示为fn;
[0096]
变量符号化单元:将包括参数和局部变量在内的变量名称用符号表示为vn;
[0097]
数据类型符号化单元:将变量和用户自定义函数的数据类型符号化表示为tn;
[0098]
其中提到的符号n是一个数字,它表示该功能第一次出现的索引。
[0099]
进一步地,所述符号化表示模块还包括多级构建单元,用于设置符号化表示的优先级,根据符号化的优先级构建多级符号化机制,其中level1包括一个符号化组为f,level2包括两个符号化组f v和f t,level 3包括一个符号化组f v t。
[0100]
进一步地,所述向量表示模块通过doc2vec模型实现将符号表示转换为向量,所述doc2vec模型将每一句话用唯一的向量来表示,用矩阵d的某一列来代表;每一个词也用唯一的向量来表示,用矩阵w的某一列来表示;每次从一句话中滑动采样固定长度的词,取其中一个词作预测词,其他的作为输入词,输入词对应的词向量和本句话对应的句子向量作为输入层的输入,将本句话的向量和本次采样的词向量相加求平均或者累加构成一个新的向量x,进而使用这个向量预测此次窗口内的预测词句。
[0101]
所述漏洞检测模块包括模型训练单元,给定一个训练数据集其中n表示训练数据集数量,d、l和m分别表示输入层神经元、隐藏层神经元和输出层神经元的数量,x
i
,t
i
中一个是样本输入数据,另一个是样本标签值;
[0102]
elm模型可以被表示为:
[0103]
hβ=t
[0104][0105][0106][0107]
其中t是预期输出矩阵,h是隐藏层输出矩阵。h(x
i
)是隐藏层相对于输入x
i
的输出
向量。g(
·
)是elm的激活函数。ω
j
·
x
i
表示输入权重与第i个训练样本特征的内积。
[0108]
输出权重β可以通过以下方式获得:
[0109][0110]
其中h 是指h的moore

penrose广义逆矩阵,l是指隐藏层的神经元数,i是指n个单位矩阵,λ是指值在[0,1]之间的正则化因子。
[0111]
elm输出函数是:
[0112][0113]
elm模型的优化目标可以表示为:
[0114][0115]
其中f(x
i
)和t
i
分别表示第i个样本的预测标签和真实标签。
[0116]
所述漏洞检测模块还包括模型优化单元,引入核函数来优化elm,核函数采用径向基函数,将结合核函数的elm称为kelm,其输出函数如下:
[0117][0118]
其中,λ是指值在[0,1]之间的正则化因子,i是指单位矩阵,h是隐藏层输出矩阵,非上标t是预期输出矩阵,上标t表示矩阵的转置,n表示训练数据集数量,l是指隐藏层的神经元数,ω表示核函数,其计算方式如下:
[0119][0120]
其中h(x
i
)是隐藏层相对于输入x
i
的输出向量,k(x
i
,x
j
)表示径向基函数。
[0121]
应理解,本发明实施例中的基于上下文语义的漏洞检测装置可以实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,在装置实施例中未加以详述的具体实现过程以及计算公式可参照上述实施例中的相关描述。
[0122]
基于与方法实施例相同的技术构思,根据本发明的另一实施例,提供一种计算机设备,所述设备包括:一个或多个处理器;存储器;以及一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述程序被处理器执行时实现方法实施例中的各步骤。
[0123]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd

rom、光学存储器等)上实施的计算机程序产
品的形式。
[0124]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0125]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0126]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0127]
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜