1.一种基于可执行程序的二进制漏洞检测方法,其特征在于,该方法包括:
(1)采集具有已知漏洞的二进制可执行程序,采用支持vex中间语言的angr框架的将二进制可执行程序执行流遍历并转译为vex文本;
(2)将所述vex文本切割成若干个文本片段,并提取所述文本片段的关键字,并将所有文本片段进行序列化;
(3)使用word2vec将序列化后的文本片段的关键字转化为具有上下文语义的文本向量;
(4)将所述文本向量转化为数字向量,并保存相关文件作为bi-lstm网络模型的输入,分别设置训练数据集和验证数据集对bi-lstm网络模型进行训练和验证,返回训练集与验证集上的误差率和相关记录字典;
(5)设置检验指标,利用预测数据集检验bi-lstm网络的泛化性。
2.根据权利要求1所述的基于可执行程序的二进制漏洞检测方法,其特征在于,所述步骤(1)中,所述已知漏洞包括危险函数导致的栈溢出漏洞、格式化字符串漏洞或释放后利用类堆溢出漏洞。
3.根据权利要求1所述的基于可执行程序的二进制漏洞检测方法,其特征在于,所述步骤(2)中,将所述vex文本切割成若干个文本片段,具体为:以ir块为单位切割所述vex文本,形成较小的可输入文本序列,所述ir块包括1到50条指令,这些指令描述了变量类型、状态值和跳转地址。
4.根据权利要求1所述的基于可执行程序的二进制漏洞检测方法,其特征在于,所述步骤(3)具体包括:
(31)将vex语法定义及大量文本片段作为word2vec要学习的语料库;
(32)通过无监督的学习建立词嵌入模型,经过词嵌入模型的转化,文本元素将变为具有语义的矢量表示,在vex中具有相似上下文的元素通常位于矢量空间的相邻位置;
(33)对word2vec的嵌入学习进行可视化,并使用主成分分析方法将嵌入投影到二维平面。
5.根据权利要求1所述的基于可执行程序的二进制漏洞检测方法,其特征在于,所述步骤(4)中,将所述文本向量转化为数字向量,包括将各个所述文本向量的关键字映射到整数上,并将对应的文本向量采用csv文件进行保存。
6.根据权利要求1所述的基于可执行程序的二进制漏洞检测方法,其特征在于,所述bi-lstm网络模型包括五层,分别为:第一层为嵌入层,第二层为前向的lstm,第三层为后向的lstm,第四层为全连接层,第五层为输出层,其中,第二层和第三层构成bi-lstm层,所述输出层最终输出漏洞类型概率。
7.根据权利要求1所述的基于可执行程序的二进制漏洞检测方法,其特征在于,所述步骤(4)中,对bi-lstm网络模型进行训练和验证的过程包括:
(41)初始化模型,进入模型编译阶段,设置训练数据集中的训练样本数、验证数据集中的验证样本数和迭代次数,并选择损失函数和优化器;
(42)根据设置的迭代次数对bi-lstm网络模型迭代训练,并观察检验指标的提升程度,若检验指标的大小趋于不再变化,则认为达到最优点停止训练,得到训练后的bi-lstm网络模型;
(43)采用设置的验证样本数对训练后的bi-lstm网络模型进行验证。
8.根据权利要求1-7任一项所述的基于可执行程序的二进制漏洞检测方法实现的检测系统,其特征在于,包括:
文本转换模块,用于采集具有已知漏洞的二进制可执行程序,采用支持vex中间语言的angr框架的将二进制可执行程序执行流遍历并转译为vex文本;
文本切割模块,用于将所述vex文本切割成若干个文本片段,并提取所述文本片段的关键字,并将所有文本片段进行序列化;
文本语义转化模块,用于使用word2vec将序列化后的文本片段的关键字转化为具有上下文语义的文本向量;
向量转化模块,用于将所述文本向量转化为数字向量,并保存相关文件作为bi-lstm网络模型的输入,
模型训练模块,用于分别设置训练数据集和验证数据集对bi-lstm网络模型进行训练和验证,返回训练集与验证集上的误差率和相关记录字典;
测试模块,用于设置检验指标,利用预测数据集检验bi-lstm网络的泛化性。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-7任一项所述的基于可执行程序的二进制漏洞检测方法。