5G电力物联网边缘设备漏洞检测方法、装置及系统与流程

文档序号:32391269发布日期:2022-11-30 08:21阅读:68来源:国知局
5G电力物联网边缘设备漏洞检测方法、装置及系统与流程
5g电力物联网边缘设备漏洞检测方法、装置及系统
技术领域
1.本发明属于电力物联网固件安全性分析领域,具体涉及一种5g电力物联网边缘设备漏洞检测方法、装置及系统,尤其涉及一种基于抽象语法树的5g电力物联网边缘设备漏洞检测方法、装置及系统。


背景技术:

2.5g具有的大带宽、海量连接、低时延等特性,促使越来越多智能化的电力设备接入物联网,在网络边缘实现电力业务的感知接入、数据采集和智能处理。位于5g电力物联网边缘的电力设备种类和数量众多,但由于计算和存储能力不足,导致存在着漏洞隐患。另外,由于电力设备分布广泛,难以在5g电力物联网边缘应用复杂的安全技术和部署安全防御系统,这使得存在漏洞隐患的5g电力物联网边缘设备易成为攻击者的首选目标,并以此为跳板逐步渗透进电网内部的核心设备和业务,进行威胁和破坏。
3.现有技术中,在进行5g电力物联网边缘设备漏洞检测时,更侧重于web端漏洞检测。但是,固件作为电网边缘设备的核心,其安全性同样重要,非常有必要对其进行漏洞检测。


技术实现要素:

4.针对上述问题,本发明提出一种5g电力物联网边缘设备漏洞检测方法、装置及系统,能够解决现有的针对5g电力物联网边缘设备固件漏洞研究较少,且漏洞发现不够智能化的问题,提高电力设备的安全性。
5.为了实现上述技术目的,达到上述技术效果,本发明通过以下技术方案实现:
6.第一方面,本发明提供了一种5g电力物联网边缘设备漏洞检测方法,包括:
7.针对待测程序,利用预设的词向量提取方法,提取出程序词向量;
8.将所述程序词向量输入至预设的分类器,由所述分类器完成漏洞分类;
9.其中,所述分类器通过以下步骤获得:
10.对于漏洞数据集中的程序,利用预设的词向量提取方法,提取出程序词向量,所述预设的词向量提取方法包括:将获取到的程序在函数层面进行抽象语法树提取;利用关键语法树划分算法和功能性节点对得到的抽象语法树进行标记,获得若干个关键抽象语法树;对各关键抽象语法树分别依次进行序列化处理和词向量提取,获得程序词向量;
11.利用所述程序词向量训练机器学习模型,获得分类器。
12.可选地,所述关键抽象语法树的获取方法包括:
13.利用关键语法树划分算法,对提取得到的抽象语法树进行处理,获得第一关键抽象语法树;
14.利用功能性节点处理算法,对所述第一关键抽象语法树进行处理,获得第二关键抽象语法树。
15.可选地,所述第一关键抽象语法树的获取方法包括:
16.将抽象语法树的根节点压入栈中,从根节点开始,按照先序遍历顺序将所有节点依次压入栈中;
17.按照栈内节点顺序,重复执行节点计数步骤,直到所有节点均完成出栈;所述节点计数步骤包括:从栈顶节点开始判断其节点类型;若当前栈顶节点的节点类型属于目标节点类型,则增加候选节点计数和节点总数,否则只增加节点总数;弹出当前栈顶节点;
18.计算t=候选节点数/节点总数,若t》=x,x为设定的功能性阈值,则标记该抽象语法树为关键语法树,否则即为平凡语法树。
19.可选地,所述目标节点类型包括函数调用、参数类型、返回值类型或控制结构。
20.可选地,所述第二关键抽象语法树的获取方法包括:
21.针对所述第一关键语法树中的所有节点,只保节点类型属于目标节点类型的节点,其他节点均使用占位符进行替换。
22.可选地,所述程序词向量的获取方法包括:
23.对所述关键抽象语法树进行序列化处理,得到对应的序列化特征文本;
24.使用glove模型对所述序列化特征文本进行词向量提取,获得程序词向量。
25.可选地,所述机器学习模型为bi-lstm模型,所述bi-lstm模型包括嵌入层、两个双向的lstm单元、全连接层以及softmax函数;
26.所述嵌入层作用于对接收到的程序词向量进行降维;
27.所述两个双向的lstm单元将降维后的数据分别以正向和逆向顺序作为输入,将两个输出向量进行拼接后形成输入数据的分布式特征表达;
28.所述全连接层将学习到的分布式特征表示映射到样本标记空间得到线性预测值;
29.所述softmax函数将全连接层输出的线性预测值转化为概率,进行归一化处理,归一化处理的结果为有漏洞或无漏洞。
30.第二方面,本发明提供了一种5g电力物联网边缘设备漏洞检测装置,包括:
31.提取模块,用于针对待测程序,利用预设的词向量提取方法,提取出程序词向量;
32.分类模块,用于将所述程序词向量输入至预设的分类器,由所述分类器完成漏洞分类;
33.其中,所述分类器通过以下步骤获得:
34.对于漏洞数据集中的程序,利用预设的词向量提取方法,提取出程序词向量,所述预设的词向量提取方法包括:将获取到的程序在函数层面进行抽象语法树提取;利用关键语法树划分算法和功能性节点对得到的抽象语法树进行标记,获得若干个关键抽象语法树;对各关键抽象语法树分别依次进行序列化处理和词向量提取,获得程序词向量;
35.利用所述程序词向量训练机器学习模型,获得分类器。
36.可选地,所述关键抽象语法树的获取方法包括:
37.利用关键语法树划分算法,对提取得到的抽象语法树进行处理,获得第一关键抽象语法树;
38.利用功能性节点处理算法,对所述第一关键抽象语法树进行处理,获得第二关键抽象语法树。
39.可选地,所述第一关键抽象语法树的获取方法包括:
40.将抽象语法树的根节点压入栈中,从根节点开始,按照先序遍历顺序将所有节点
依次压入栈中;
41.按照栈内节点顺序,重复执行节点计数步骤,直到所有节点均完成出栈;所述节点计数步骤包括:从栈顶节点开始判断其节点类型;若当前栈顶节点的节点类型属于目标节点类型,则增加候选节点计数和节点总数,否则只增加节点总数;弹出当前栈顶节点;
42.计算t=候选节点数/节点总数,若t》=x,x为设定的功能性阈值,则标记该抽象语法树为关键语法树,否则即为平凡语法树。
43.可选地,所述第二关键抽象语法树的获取方法包括:
44.针对所述第一关键语法树中的所有节点,只保节点类型属于目标节点类型的节点,其他节点均使用占位符进行替换。
45.可选地,所述程序词向量的获取方法包括:
46.对所述关键抽象语法树进行序列化处理,得到对应的序列化特征文本;
47.使用glove模型对所述序列化特征文本进行词向量提取,获得程序词向量。
48.可选地,所述机器学习模型为bi-lstm模型,所述bi-lstm模型包括嵌入层、两个双向的lstm单元、全连接层以及softmax函数;
49.所述嵌入层作用于对接收到的程序词向量进行降维;
50.所述两个双向的lstm单元将降维后的数据分别以正向和逆向顺序作为输入,将两个输出向量进行拼接后形成输入数据的分布式特征表达;
51.所述全连接层将学习到的分布式特征表示映射到样本标记空间得到线性预测值;
52.所述softmax函数将全连接层输出的线性预测值转化为概率,进行归一化处理,归一化处理的结果为有漏洞或无漏洞。
53.第三方面,本发明提供了一种5g电力物联网边缘设备漏洞检测系统,包括处理器及存储介质;
54.所述存储介质用于存储指令;
55.所述处理器用于根据所述指令进行操作以执行根据第一方面中任一项所述方法的步骤。
56.与现有技术相比,本发明的有益效果:
57.本发明提出一种5g电力物联网边缘设备漏洞检测方法、装置及系统,能够解决目前研究集中于web端而忽视固件的问题,具体地,本发明提出对抽象语法树进行预处理,划分为关键抽象语法树和平凡抽象语法树,在后续的漏洞检测处理过程中只处理关键抽象语法树。以提高漏洞检测效率。
附图说明
58.为了使本发明的内容更容易被清楚地理解,下面根据具体实施例并结合附图,对本发明作进一步详细的说明,其中:
59.图1为本发明一种实施例的5g电力物联网边缘设备漏洞检测方法的流程示意图;
60.图2为本发明一种实施例的抽象语法树的示例;
61.图3为本发明一种实施例的先序遍历方法示例图;
62.图4是本发明一种实施例的关键语法树划分算法的算法流程;
63.图5是本发明一种实施例的使用glove模型进行词向量提取的过程;
64.图6是本发明一种实施例的利用机器学习模型进行漏洞预测的流程。
具体实施方式
65.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明的保护范围。
66.下面结合附图对本发明的应用原理作详细的描述。
67.程序源代码的语法结构能在一定程度上反应软件漏洞情况,尤其是在函数层面。抽象语法树(abstract syntax tree,ast)是一种源代码(例如函数)的语法结构,用树的形式反映了代码中各个组件之间的语法关系,同时有效的表示出函数层面的控制流。相比于控制流图,抽象语法树在函数层面上提供了一个自然的程序表示,并保留了源代码的更多信息。通过对5g电力物联网边缘设备中的固件进行处理,从中提取出源程序进而对得到的程序提取为抽象语法树,在对得到的抽象语法树进行一系列的预处理过程后,通过词嵌入技术进行特征词向量提取,最后利用固件漏洞数据集训练得到的分类器对需要测试的电力与联网固件程序识别其可能存在的漏洞代码模式从而进行漏洞检测。
68.固件是电网边缘设备中的软件系统,常包含操作系统、文件系统、用户程序,或者本身就是一个可执行程序,用于实现对电网边缘设备特定硬件底层的控制。
69.为此,本发明提出了一种5g电力物联网边缘设备漏洞检测方法、装置及系统,用于解决现有的针对5g电力物联网边缘设备固件漏洞研究较少,且漏洞发现不够智能化的问题,提高电力设备的安全性。
70.实施例1
71.本发明实施例中提供了一种5g电力物联网边缘设备漏洞检测方法,包括以下步骤:
72.(1)针对待测程序,利用预设的词向量提取方法,提取出程序词向量;
73.(2)将所述程序词向量输入至预设的分类器,由所述分类器完成漏洞分类;
74.其中,所述分类器通过以下步骤获得:
75.对漏洞数据集中的程序,利用预设的词向量提取方法,提取出程序词向量,所述预设的词向量提取方法包括:将获取到的程序在函数层面进行抽象语法树提取;利用关键语法树划分算法和功能性节点对得到的抽象语法树进行标记,获得若干个关键抽象语法树;对各关键抽象语法树分别依次进行序列化处理和词向量提取,获得程序词向量;
76.利用所述程序词向量训练机器学习模型,获得分类器。
77.在本发明实施例的一种具体实施方式中,为了提高5g电力物联网边缘设备漏洞检测的效率,所述关键抽象语法树的获取方法包括:
78.利用关键语法树划分算法,对提取得到的抽象语法树进行处理,获得第一关键抽象语法树;
79.利用功能性节点处理算法,对所述第一关键抽象语法树进行处理,获得第二关键抽象语法树。
80.其中,所述第一关键抽象语法树的获取方法包括:
81.将抽象语法树的根节点压入栈中,从根节点开始,按照先序遍历顺序将所有节点
依次压入栈中;
82.按照栈内节点顺序,重复执行节点计数步骤,直到所有节点均完成出栈;所述节点计数步骤包括:从栈顶节点开始判断其节点类型;若当前栈顶节点的节点类型属于目标节点类型,则增加候选节点计数和节点总数,否则只增加节点总数;弹出当前栈顶节点;在具体实施过程中,所述目标节点类型可以设置为包括函数调用、参数类型、返回值类型或控制结构;
83.计算t=候选节点数/节点总数,若t》=x,x为设定的功能性阈值,则标记该抽象语法树为关键语法树,否则即为平凡语法树。
84.所述第二关键抽象语法树的获取方法包括:
85.针对所述第一关键语法树中的所有节点,只保节点类型属于目标节点类型的节点,其他节点均使用占位符进行替换。
86.在本发明实施例的一种具体实施方式中,所述程序词向量的获取方法包括:
87.对所述关键抽象语法树进行序列化处理,得到对应的序列化特征文本;
88.使用glove模型对所述序列化特征文本进行词向量提取,获得程序词向量。
89.在本发明实施例的一种具体实施方式中,所述机器学习模型为bi-lstm模型,所述bi-lstm模型包括嵌入层、两个双向的lstm单元、全连接层以及softmax函数;
90.所述嵌入层作用于对接收到的程序词向量进行降维;
91.所述两个双向的lstm单元将降维后的数据分别以正向和逆向顺序作为输入,将两个输出向量进行拼接后形成输入数据的分布式特征表达;
92.所述全连接层将学习到的分布式特征表示映射到样本标记空间得到线性预测值;
93.所述softmax函数将全连接层输出的线性预测值转化为概率,进行归一化处理,归一化处理的结果为有漏洞或无漏洞。
94.下面结合一具体实施方式对本发明实施例中的5g电力物联网边缘设备漏洞检测方法进行详细说明。
95.步骤一:从固件漏洞数据集中获取相关固件漏洞信息,即程序;
96.所述的固件漏洞数据集包括互联网公开的固件漏洞数据集和个人自行爬取相关固件漏洞形成的固件漏洞数据集,本发明中不对获取的过程进行具体限定,只要能够获得固件程序即可。
97.步骤二:对获取到的程序在函数层面进行抽象语法树(abstract syntax tree,ast)提取,并通过关键语法树划分算法和功能性节点处理算法对各进行抽象语法树分别进行预处理,获得关键象语法树。
98.步骤2.1:提取抽象语法树。
99.抽象语法树是一种树状结构,它使程序代码分解为其语言结构的过程变得明确。抽象语法树由节点和边组成,在图2中分别显示为椭圆和箭头。节点代表语言结构,如方法、变量和控制结构,而边表示程序结构的分解过程。如图2所示,在抽象语法树的最顶端即根节点,是一个代表整个函数的名为foo的节点。在它的正下方,分别为代表函数参数及参数类型的节点、返回类型为int的节点和一个代表函数体的节点,表示为一个block。foo节点和其他节点之间的边表示函数可以被分解成一个函数参数类型节点、返回类型节点和一个代码块节点,从block出来的边表示这个代码块可以被进一步分解。
100.在函数层面提取抽象语法树可以通过相关工具进行提取,也可以自行通过某种方式对源代码进行解析从而获得抽象语法树,本发明中不做具体限定。
101.步骤2.2:关键语法树划分算法。
102.所述关键语法树划分算法的算法过程图示4所示,具体流程为:
103.利用深度优先遍历中的先序遍历思想,首先将抽象语法树的根节点压入栈中,从根节点开始,按照先序遍历顺序将所有节点依次压入栈中。
104.以图3为例,具体入栈顺序为a-b-c-d-e-f-g-h-i,直至整棵抽象语法树全部节点入栈。
105.按照此时栈内节点顺序从栈顶节点开始判断其节点类型,即判断栈顶节点是否在目标节点类型列表中;若当前栈顶节点类型属于目标节点类型,则候选节点计数和节点总数增加,否则只增加节点总数。判断结束后弹出当前栈顶节点,若此时栈不为空,则继续判断新的栈顶节点类型;重复执行前述步骤,直到所有节点判断完毕即栈空则循环结束。其中,所述目标节点类型列表指由构成关键抽象语法树所需的节点类型组成的列表,其中类型包括函数调用,参数类型,返回值类型和控制结构等。
106.计算t=候选节点数/节点总数,x为设定的功能性阈值,若t》=x,则标记该抽象语法树为第一关键抽象语法树,否则即为平凡抽象语法树。
107.若为关键抽象语法树,算法返回true,否则返回false,具体参见图4。
108.步骤2.3:功能性节点算法。
109.由于获得的第一关键抽象语法树的节点众多,但是并不是所有节点都能够指示源代码结构和语法信息,为了提高后续处理效率并在一定程度减少误报,需要对得到的关键抽象语法树进行进一步处理。函数调用,参数类型,返回值类型和控制结构等称之为功能性节点。只处理关键抽象语法树,主要保留该类功能性节点,对于其他类型节点使用占位符进行替换。
110.步骤三:针对各关键抽象语法树进行词向量提取;
111.对于预处理后得到的关键抽象语法树,使用深度优先遍历对单棵抽象语法树进行序列化处理。把序列化后文本形式的向量看作是有语义的句子,向量中元素和元素的排列序列反映了文本化句子的语义信息同时也反映了抽象语法树的结构信息。
112.同时需要注意到,部分函数可能存在函数名不同,但是函数返回值、参数类型、局部变量名相同的情况。需要说明的是,上述情况不能简单的作为重复抽象语法树而删除,这部分抽象语法树经过序列化映射为向量后元素的顺序不同,这同样指示出元素相同但是顺序不同会具有不同的结构和上下文信息。为了更好的利用节点之间的信息以及后续的机器学习处理,需要将得到的序列化信息映射为向量空间中的向量。之后使用词向量提取技术将节点映射到向量中,抽象语法树中的每个节点就被映射成为向量中的一个元素。所述使用glove模型对抽象语法树序列化特征文本进行词向量提取的过程如图5所示。首先加载glove提供的语料库;根据语料库构建一个共现矩阵,矩阵中的每一个元素代表单词和上下文单词在特定大小的上下文窗口内共同出现的次数,同时glove认为距离越远的两个单词所占总计数(total count)的权重越小;之后构建词向量和共现矩阵之间的近似关系,最终得到要求解的词向量,目标函数的表达式为:
[0113][0114]
其中vi,vj是单词i,j的词向量,bi,bj为偏置项,v是词汇表的大小,x为共现矩阵,x
i,j
表示单词i,j共同出现在一个窗口中的次数;最后采用梯度下降算法,对矩阵中的所有非零元素进行随机采样,学习曲率设为0.05,在vector size小于300的情况下迭代了50次,其他大小的vectors上迭代了100次,直至收敛;最终将学习到的两个向量之和作为最终的向量。
[0115]
步骤四:利用获得的程序词向量训练bi-lstm模型,并根据训练结果调整bi-lstm模型进而得到分类效果优秀的分类器;
[0116]
将程序词向量作为机器学习的输入,送入bi-lstm模型中进行训练。两个双向运行的lstm单元组成了bi-lstm。其双向性可以结合过去和未来的上下文信息,以此帮助捕捉向前和向后两个方向的长期语义依赖关系,这可以有效地捕捉到漏洞的代码模式。提高了后续检测阶段识别漏洞的能力。所用bi-lstm包括一个嵌入层、两个双向的lstm单元、一个全连接层以及softmax函数。嵌入层作为第一层,主要完成了输入数据的降维;两个双向的lstm单元构成了第二层,将降维后的数据分别以正向和逆向顺序作为输入,将两个输出向量进行拼接后形成输入数据的特征表达;全连接层和softmax函数一起作为最后一层:全连接层将学习到的分布式特征表示映射到样本标记空间来得到线性预测值,softmax函数将全连接层得到的线性预测值转化为概率,进行归一化处理。归一化的结果有两种:有漏洞和无漏洞,二者的向量之和为1。
[0117]
输入数据被分为训练集和验证集,以此来建立和评估模型,并指导模型的调整过程,使其性能最大化。一旦模型训练完成并且性能达到要求后就保存该模型以供后续电力物联网设备固件漏洞检测使用。
[0118]
步骤五:利用分类器进行5g电力物联网边缘设备固件漏洞分类。
[0119]
漏洞检测阶段首先需要获取边缘设备的固件。获取固件可以通过硬件调试接口登入系统并读取内存或者利用读写器从flash芯片内直接提取,从而得到固件内容;也可以从设备厂商提供的互联网地址获取固件信息。得到固件后判断是否被压缩,可以使用binwalk工具。解压缩之后从固件中提取所有的文件和源程序,并从源程序中提取出程序词向量,将所述漏洞程序词向量输入至预设的分类器,由所述分类器完成漏洞分类,具体参见图6。
[0120]
实施例2
[0121]
基于与实施例1相同的发明构思,本发明实施例中提供了一种5g电力物联网边缘设备漏洞检测装置,包括:
[0122]
提取模块,用于针对待测程序,利用预设的词向量提取方法,提取出程序词向量;
[0123]
分类模块,用于将所述程序词向量输入至预设的分类器,由所述分类器完成漏洞分类;
[0124]
其中,所述分类器通过以下步骤获得:
[0125]
对于漏洞数据集中的程序,利用预设的词向量提取方法,提取出程序词向量,所述预设的词向量提取方法包括:将获取到的程序在函数层面进行抽象语法树提取;利用关键语法树划分算法和功能性节点对得到的抽象语法树进行标记,获得若干个关键抽象语法
树;对各关键抽象语法树分别依次进行序列化处理和词向量提取,获得程序词向量;
[0126]
利用所述程序词向量训练机器学习模型,获得分类效果优秀的分类器。
[0127]
在本发明实施例的一种具体实施方式中,所述关键抽象语法树的获取方法包括:
[0128]
利用关键语法树划分算法,对提取得到的抽象语法树进行处理,获得第一关键抽象语法树;
[0129]
利用功能性节点处理算法,对所述第一关键抽象语法树进行处理,获得第二关键抽象语法树。
[0130]
在本发明实施例的一种具体实施方式中,所述第一关键抽象语法树的获取方法包括:
[0131]
将抽象语法树的根节点压入栈中,从根节点开始,按照先序遍历顺序将所有节点依次压入栈中;
[0132]
按照栈内节点顺序,重复执行节点计数步骤,直到所有节点均完成出栈;所述节点计数步骤包括:从栈顶节点开始判断其节点类型;若当前栈顶节点的节点类型属于目标节点类型,则增加候选节点计数和节点总数,否则只增加节点总数;弹出当前栈顶节点;
[0133]
计算t=候选节点数/节点总数,若t》=x,x为设定的功能性阈值,则标记该抽象语法树为关键语法树,否则即为平凡语法树。
[0134]
在本发明实施例的一种具体实施方式中,所述第二关键抽象语法树的获取方法包括:
[0135]
针对所述第一关键语法树中的所有节点,只保节点类型属于目标节点类型的节点,其他节点均使用占位符进行替换。
[0136]
在本发明实施例的一种具体实施方式中,所述程序词向量的获取方法包括:
[0137]
对所述关键抽象语法树进行序列化处理,得到对应的序列化特征文本;
[0138]
使用glove模型对所述序列化特征文本进行词向量提取,获得程序词向量。
[0139]
可选地,所述机器学习模型为bi-lstm模型,所述bi-lstm模型包括嵌入层、两个双向的lstm单元、全连接层以及softmax函数;
[0140]
所述嵌入层作用于对接收到的程序词向量进行降维;
[0141]
所述两个双向的lstm单元将降维后的数据分别以正向和逆向顺序作为输入,将两个输出向量进行拼接后形成输入数据的分布式特征表达;
[0142]
所述全连接层将学习到的分布式特征表示映射到样本标记空间得到线性预测值;
[0143]
所述softmax函数将全连接层输出的线性预测值转化为概率,进行归一化处理,归一化处理的结果为有漏洞或无漏洞。
[0144]
下面结合一具体实施方式对本发明实施例中的5g电力物联网边缘设备漏洞检测方法进行详细说明。
[0145]
步骤一:从固件漏洞数据集中获取相关固件漏洞信息,即程序;
[0146]
所述的固件漏洞数据集包括互联网公开的固件漏洞数据集和个人自行爬取相关固件漏洞形成的固件漏洞数据集,本发明中不对获取的过程进行具体限定,只要能够获得固件程序即可。
[0147]
步骤二:对获取到的程序在函数层面进行抽象语法树(abstract syntax tree,ast)提取,并通过关键语法树划分算法和功能性节点处理算法对各进行抽象语法树分别进
行预处理,获得关键象语法树。
[0148]
步骤2.1:提取抽象语法树。
[0149]
抽象语法树是一种树状结构,它使程序代码分解为其语言结构的过程变得明确。抽象语法树由节点和边组成,在图2中分别显示为椭圆和箭头。节点代表语言结构,如方法、变量和控制结构,而边表示程序结构的分解过程。如图2所示,在抽象语法树的最顶端即根节点,是一个代表整个函数的名为foo的节点。在它的正下方,分别为代表函数参数及参数类型的节点、返回类型为int的节点和一个代表函数体的节点,表示为一个block。foo节点和其他节点之间的边表示函数可以被分解成一个函数参数类型节点、返回类型节点和一个代码块节点,从block出来的边表示这个代码块可以被进一步分解。
[0150]
在函数层面提取抽象语法树可以通过相关工具进行提取,也可以自行通过某种方式对源代码进行解析从而获得抽象语法树,本发明中不做具体限定。
[0151]
步骤2.2:关键语法树划分算法。
[0152]
所述关键语法树划分算法的算法过程图示4所示,具体流程为:
[0153]
利用深度优先遍历中的先序遍历思想,首先将抽象语法树的根节点压入栈中,从根节点开始,按照先序遍历顺序将所有节点依次压入栈中。
[0154]
以图3为例,具体入栈顺序为a-b-c-d-e-f-g-h-i,直至整棵抽象语法树全部节点入栈。
[0155]
按照此时栈内节点顺序从栈顶节点开始判断其节点类型,即判断栈顶节点是否在目标节点类型列表中;若当前栈顶节点类型属于目标节点类型,则候选节点计数和节点总数增加,否则只增加节点总数。判断结束后弹出当前栈顶节点,若此时栈不为空,则继续判断新的栈顶节点类型;重复执行前述步骤,直到所有节点判断完毕即栈空则循环结束。其中,所述目标节点类型列表指由构成关键抽象语法树所需的节点类型组成的列表,其中类型包括函数调用,参数类型,返回值类型和控制结构等。
[0156]
计算t=候选节点数/节点总数,x为设定的功能性阈值,若t》=x,则标记该抽象语法树为第一关键抽象语法树,否则即为平凡抽象语法树。
[0157]
若为关键抽象语法树,算法返回true,否则返回false,具体参见图4。
[0158]
步骤2.3:功能性节点算法。
[0159]
由于获得的第一关键抽象语法树的节点众多,但是并不是所有节点都能够指示源代码结构和语法信息,为了提高后续处理效率并在一定程度减少误报,需要对得到的关键抽象语法树进行进一步处理。函数调用,参数类型,返回值类型和控制结构等称之为功能性节点。只处理关键抽象语法树,主要保留该类功能性节点,对于其他类型节点使用占位符进行替换。
[0160]
步骤三:针对各关键抽象语法树进行词向量提取;
[0161]
对于预处理后得到的关键抽象语法树,使用深度优先遍历对单棵抽象语法树进行序列化处理。把序列化后文本形式的向量看作是有语义的句子,向量中元素和元素的排列序列反映了文本化句子的语义信息同时也反映了抽象语法树的结构信息。
[0162]
同时需要注意到,部分函数可能存在函数名不同,但是函数返回值、参数类型、局部变量名相同的情况。需要说明的是,上述情况不能简单的作为重复抽象语法树而删除,这部分抽象语法树经过序列化映射为向量后元素的顺序不同,这同样指示出元素相同但是顺
序不同会具有不同的结构和上下文信息。为了更好的利用节点之间的信息以及后续的机器学习处理,需要将得到的序列化信息映射为向量空间中的向量。之后使用词向量提取技术将节点映射到向量中,抽象语法树中的每个节点就被映射成为向量中的一个元素。所述使用glove模型对抽象语法树序列化特征文本进行词向量提取的过程如图5所示。首先加载glove提供的语料库;根据语料库构建一个共现矩阵,矩阵中的每一个元素代表单词和上下文单词在特定大小的上下文窗口内共同出现的次数,同时glove认为距离越远的两个单词所占总计数(total count)的权重越小;之后构建词向量和共现矩阵之间的近似关系,最终得到要求解的词向量,目标函数的表达式为:
[0163][0164]
其中vi,vj是单词i,j的词向量,bi,bj为偏置项,v是词汇表的大小,x为共现矩阵,xi,j表示单词i,j共同出现在一个窗口中的次数;最后采用梯度下降算法,对矩阵中的所有非零元素进行随机采样,学习曲率设为0.05,在vector size小于300的情况下迭代了50次,其他大小的vectors上迭代了100次,直至收敛;最终将学习到的两个向量之和作为最终的向量。
[0165]
步骤四:利用获得的程序词向量训练bi-lstm模型,并根据训练结果调整bi-lstm模型进而得到分类效果优秀的分类器;
[0166]
将程序词向量作为机器学习的输入,送入bi-lstm模型中进行训练。两个双向运行的lstm单元组成了bi-lstm。其双向性可以结合过去和未来的上下文信息,以此帮助捕捉向前和向后两个方向的长期语义依赖关系,这可以有效地捕捉到漏洞的代码模式。提高了后续检测阶段识别漏洞的能力。所用bi-lstm包括一个嵌入层、两个双向的lstm单元、一个全连接层以及softmax函数。嵌入层作为第一层,主要完成了输入数据的降维;两个双向的lstm单元构成了第二层,将降维后的数据分别以正向和逆向顺序作为输入,将两个输出向量进行拼接后形成输入数据的特征表达;全连接层和softmax函数一起作为最后一层:全连接层将学习到的分布式特征表示映射到样本标记空间来得到线性预测值,softmax函数将全连接层得到的线性预测值转化为概率,进行归一化处理。归一化的结果有两种:有漏洞和无漏洞,二者的向量之和为1。
[0167]
输入数据被分为训练集和验证集,以此来建立和评估模型,并指导模型的调整过程,使其性能最大化。一旦模型训练完成并且性能达到要求后就保存该模型以供后续电力物联网设备固件漏洞检测使用。
[0168]
步骤五:利用分类器进行5g电力物联网边缘设备固件漏洞分类。
[0169]
漏洞检测阶段首先需要获取边缘设备的固件。获取固件可以通过硬件调试接口登入系统并读取内存或者利用读写器从flash芯片内直接提取,从而得到固件内容;也可以从设备厂商提供的互联网地址获取固件信息。得到固件后判断是否被压缩,可以使用binwalk工具。解压缩之后从固件中提取所有的文件和源程序,并从源程序中提取出程序词向量,将所述漏洞程序词向量输入至预设的分类器,由所述分类器完成漏洞分类,具体参见图6。
[0170]
实施例3
[0171]
基于与实施例1相同的构思,本发明实施例中提供了一种5g电力物联网边缘设备
漏洞检测系统,包括处理器及存储介质;
[0172]
所述存储介质用于存储指令;
[0173]
所述处理器用于根据所述指令进行操作以执行根据实施例1中任一项所述方法的步骤。
[0174]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0175]
本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0176]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0177]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0178]
以上结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。
[0179]
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1