基于二进制映射和深度学习的漏洞检测方法与流程

专利2022-06-30  71


本发明涉及软件安全检测领域,特别是一种基于二进制映射和深度学习的漏洞检测方法。
背景技术
:二十一世纪以来,随着信息化、智能化技术的飞速发展,计算机软件的种类和数量呈现爆发式增长,各类软件正参与我们生活的方方面面,与此同时,大众对于应用软件的依赖程度也越来越高。对于软件提供商,如果他们不能完全保证用户隐私安全、信息安全、支付安全等问题,将会对社会造成巨大的负面影响。目前,虽然各大科技公司对网络安全的关注程度越来越高,但类似的事件仍然时有发生,软件安全漏洞问题不容忽视。根据cncert发布的《2018年我国互联网网络安全态势综述》,2014年以来,国家信息安全漏洞共享平台收录的安全漏洞数量年平均增长率为15.0%,其中,2018年收录安全漏洞数量同比减少了11.0%。近两年来,虽然软件安全漏洞的数量同以前相比有了减少,但是,“零日”漏洞的数量呈持续上升趋势。在2018年收录的安全漏洞中,“零日”漏洞的数量占比高达37.9%,这些被收录的安全漏洞主要涵盖google、microsoft、ibm、oracle、cisco、foxit、apple、adobe等厂商的产品。软件的缺陷很难在软件开发过程中完全避免,但是,它们一旦被发现并被利用,将会造成十分严重的后果。例如:2017年5月爆发的wannacry勒索病毒席卷了全球150多个国家的至少30万名用户,造成80多亿美元的经济损失。因此,对软件提供商而言,在软件缺陷被发现之前,对其进行漏洞挖掘,是一项非常有必要且意义深远的工作。传统的漏洞挖掘技术的发展已经趋向成熟,其主要分为静态漏洞挖掘和动态漏洞挖掘。静态漏洞挖掘是指在不运行目标文件的前提下对其进行漏洞分析,主要分析的内容包括语法语义、数据流、控制流等,再结合专家规则,推导程序中可能存在的漏洞。例如gueb和bitblaze中的静态分析组件vine。动态漏洞挖掘是在程序运行过程中,动态对其产生的数据流和控制流进行分析,查找潜在的命令执行、内存误用等安全隐患,例如ollydbg、dta等。近几年,随着人工智能技术的迅速发展,安全专家已经开始使用机器学习的技术来缓解漏洞挖掘领域的一些瓶颈问题。许多大规模的漏洞检测工具相继出现,如vdiscover、vccfinder、gyoithon等,这也证明了机器学习在漏洞挖掘领域的可行性。普遍来看,机器学习在漏洞挖掘领域的应用还面临着以下挑战:(1)样本数据难以收集。(2)漏洞挖掘未完全实现自动化。(3)漏洞检测效率和准确率还需要提升。除了从代码的角度进行漏洞挖掘,在实际应用中,还存在样本数据难以收集的问题,因为很多软件公司并不会把源代码公布出来,从另一个角度考虑,直接在公共网络获取软件厂商编译后的二进制文件作为样本数据则比直接获取源代码会容易很多。除此之外,基于专家规则的漏洞分析方法在检测已经存在的漏洞方面能表现出不错的效果,但是,无法很好的检测出0day漏洞,使用机器学习的方法,从传统漏洞中提取特征,并应用到潜在漏洞检测,是一种可行的办法,并在很多安全专家的实验中得到验证。技术实现要素:本发明所要解决的技术问题是,针对现有技术不足,提供一种基于二进制映射和深度学习的漏洞检测方法,提高漏洞检测的效率和准确率。为解决上述技术问题,本发明所采用的技术方案是:一种基于二进制映射和深度学习的漏洞检测方法,包括以下步骤:1)将包含漏洞的二进制样本文件转化为灰度图像;1)按自然数序列对样本包含的漏洞类型进行编号,并根据每个灰度图像对应源文件包含的漏洞,以(key,value)的形式生成灰度图像对应的编号,再结合步骤1)生成的灰度图像文件,构建hdf5文件;2)将hdf5数据文件作为训练数据,对卷积神经网络进行迭代训练;3)调节训练参数,进行多次训练,直至达到预设训练效果,得到训练好的模型;4)将待检测二进制文件转化为灰度图像,使用训练好的模型对其进行漏洞检测。步骤1)的实现过程包括:1)将一个包含漏洞的二进制文件按位读取为一维数组,读取过程中,取该二进制文件的每8位数据作为该数组一个元素的值,该元素的取值范围为0-255;2)新建一个二维数组,并使该二维数组每行的宽度固定为256,使用所述一维数组中的数值依次填充该二维数组,从而将一维数组转化成一个具有固定宽度的二维数组;3)利用python中的cv2库将步骤2)得到的固定宽度的二维数组存储为灰度图像。步骤2)的具体时间过程包括:1)对收集到的包含漏洞的样本文件进行处理,生成两个标签文件,即训练标签文件和测试标签文件,每个标签文件包含有多条数据,均以(key,value)的形式存在,训练标签文件的key为某个包含漏洞文件转化成灰度图像后的图像路径,value为该文件所属的漏洞类型编号;测试标签文件的key为漏洞类型编号,对应训练标签文件中的漏洞各类型编号,value为该类型编号所对应的文字解释;其中,测试标签文件中的漏洞类型编号由小到大按顺序依次生成,且先生成测试标签文件,再生成训练标签文件,确保两个标签文件中的漏洞编号相对应;2)将训练标签文件与灰度图像样本文件结合,构建并生成hdf5文件。步骤3)中,所述卷积神经网络为alexnet网络,该网络模型在图像分类等方面有卓越的性能。所述alexnet网络的激活函数为prelu激活函数,prelu是带参数的relu函数,相比relu,该函数不会将小于0的值完全舍弃,从而保留样本中的更多特征。本发明使用一种将二进制文件转化为灰度图像的方法对其进行漏洞挖掘。在对灰度图像进行特征提取的过程中,使用卷积神经网络模型,该模型为本发明中的漏洞检测过程提供更精确有效的特征提取方案。所述卷积神经网络包括:第一卷积层,用于对输入数据进行卷积操作,并使用prelu激活函数对输出结果进行处理;第一池化层,用于对第一卷积层的输出结果进行池化操作;第二卷积层,用于对局部归一化操作后的第一池化层的输出结果进行卷积操作,并使用prelu激活函数对该卷积操作后的结果进行处理;第二池化层,用于对第二卷积层输出的结果进行池化操作;第三卷积层,用于对局部响应归一化处理后的第二池化层的输出结果进行卷积操作,并用prelu激活函数对该卷积操作后的结果进行处理;第四卷积层,用于对第三卷积层的输出结果进行卷积操作,并用prelu激活函数对该卷积操作后的结果进行处理;第五卷积层,用于对第四卷积层的输出结果进行卷积操作,并用prelu激活函数对该卷积操作后的结果进行处理;第三池化层,用于对第五卷积层的输出结果进行池化操作;第一全连接层,用于对经局部响应归一化处理后的第三池化层的输出结果进行卷积操作,并使用tanh激活函数对该卷积操作后的结果进行处理;第二全连接层,用于对经dropout操作后的第一全连接层的输出进行卷积操作,并使用tanh激活函数对该卷积操作后的结果进行处理;第三全连接层,用于对经dropout操作后的第二全连接层的输出进行卷积操作,并使用softmax激活函数对该卷积操作后的结果进行处理,得到每种漏洞类型的概率。局部响应归一化处理在alexnet网络中被首次提出。该函数能够对局部神经元活动创建竞争机制,使得响应较大的值更大,反馈较小的神经元被抑制,从而增强模型的泛化能力。局部响应归一化处理后后得到的输出表示为:其中,a表示经过卷积操作后,再经过激活函数relu后的输出,b表示经过局部响应归一化处理后的输出结果;表示经过卷积操作后,当前神经网络层第i个通道下的高度为x宽度为y的像素点处的值,表示经过局部响应归一化操作后,第i个通道下的高度为x宽度为y的像素点处的值;n是通道的总数;k,n,α,β均为超参数。本发明中,k=2,n=5,a=1*e-4,β=0.75,经过大量实验得到的数据显示,使用这些参数的时候,模型能够达到最优性能。步骤5)中,使用训练好的模型对其进行漏洞检测后,输出所有结果中概率大于80%的预测结果及对应概率,所述预测结果即漏洞编号。通过这种方式,可以对该二进制文件可能包含的多种漏洞进行挖掘,并输出相应提示;只输出检测结果中概率大于80%的结果是为了保证准确率。与现有技术相比,本发明所具有的有益效果为:本发明将包含漏洞的二进制文件映射为灰度图像,然后,利用卷积神经网络在图像分类等领域的优势,提取灰度图像纹理特征,并对其进行迭代训练,最终构建一个面向程序二进制文件的、多平台的漏洞检测模型。本发明的方法通过将二进制文件转化为灰度图像,并使用在图像处理领域已经很成熟的alexnet卷积神经网络模型进行训练,最终得到模型能够不仅能够直接针对二进制文件进行漏洞挖掘,同时还能针对某二进制文件中可能存在的多种漏洞进行检测,从而扩展漏洞挖掘技术的应用范围,提高检测效率和检测准确率。附图说明图1显示了使用b2m算法将二进制文件转换后的灰度图像;图2显示了alexnet卷积神经网络的详细结构。具体实施方式本发明设计的基于二进制映射和机器学习的漏洞检测方法主要分为以下四个步骤:第一步:利用b2m算法,将包含漏洞的二进制样本文件转化为灰度图像;第二步:将包含漏洞的样本文件和漏洞编号,以key、value的形式生成标签数据,并结合灰度图像文件生成hdf5文件;第三步:将hdf5数据文件作为训练数据,对卷积神经网络进行迭代训练;第四步:多次训练,调节参数,使训练达到最佳效果,并且符合实际需要。训练完成后,将待检测二进制文件转化为灰度图像,使用训练好的模型数据对其进行漏洞检测。首先,使用b2m算法,将包含漏洞的二进制样本文件转化为灰度图像,其主要实施过程如下:(1)将一个包含漏洞的二进制文件按位读取为一维数组,读取过程中,取该二进制文件的每8位数据作为该数组一个元素的值,该元素的取值范围为0-255;(2)新建一个二维数组,并使该数组每行的宽度固定为256,使用(1)中一维数组中的数值依次填充该二维数组,从而将一维数组转化成一个具有固定宽度的二维数组,经过转换后的二维数组中,每个元素的取值范围都是0-255,这刚好对应灰度图像中的一个像素;(3)利用python中的cv2库将该二维数组存储为灰度图像,实现从二进制文件映射到灰度图像的操作。b2m算法的表示如下:输入:包含漏洞的二进制文件输出:灰度图像functionb2m(包含漏洞的二进制文件路径,灰度图像的保存路径)1:读取包含漏洞的二进制文件,每8个bit位视为一个数组中的元素,转换为十进制,并保存在数组中;2:计算总数组长度,记为total;3:固定用于生成灰度图像的二维数组的宽度,记为width,width=256;4:计算剩余的数据长度,记为remainder。remainder=total%width,%表示取模;5:计算实际用于生成灰度图像的二维数组数据长度,记作image。image=total–remainder;6:计算该二维数组的高度,记为height,height=image/width;7:取数组中前image长度的元素,保存在新的数组中;8:对新的数组进行变形操作,将该一维数组转变为宽为width,高为height的二维数组。9:将变形后的二维数组以图像的数据格式保存为灰度图像文件。其次,生成标签文件,并结合灰度图像生成hdf5文件,其具体步骤如下:(1)将收集到的数据进行处理,生成两个标签文件,即训练标签文件和测试标签文件,每个标签文件包含有多条数据,均以(key,value)的形式存在,训练标签文件的key为某个包含漏洞文件转化成灰度图像后的图像路径,value为该文件所属的漏洞类型编号,测试标签文件的key为漏洞类型编号,对应训练标签文件中的漏洞各类型编号,value为该类型编号所对应的文字解释。其中,测试标签文件中的漏洞类型编号由小到大按顺序依次生成,并且需要先生成测试标签文件,再生成训练标签文件,确保两文件中的漏洞编号相对应。(2)标签文件生成后,将训练标签文件与灰度图像样本文件一起作为输入,生成hdf5文件。hdf是一种可以用来存储不同类型文件并能实现多终端无损传输的文件格式,由美国国家高级计算应用中心提出,支持大多数操作系统,在大数据处理、机器学习等领域使用十分广泛。这是一个跨平台的文件格式,它允许应用程序直接解析其文件结构和存储的内容。在存储过程中,利用合适的数据结构,可以实现将图像、数字等多种数据存储在一个hdf文件内。除此之外,hdf文件还允许用户将某些相关联的数据组合在一起,存放在hdf的一个数据层中,再单独对每个hdf层添加标签、描述。hdf由文件头、一个或多个文件描述块、多个数据元素组成。文件头由4位ascii码控制字符组成“^n^c^s^a”,用来标志是否为hdf文件,描述符块存储着描述符的序号,一个描述符和相应数据元素组成hdf的数据对象,他们是hdf的基本结构。然后,将已经生成的hdf5文件作为训练数据,对卷积神经网络的参数进行训练。本发明选用的卷积神经网络为alexnet。alexnet网络模型共有8层,前5层为卷积层,在每个卷积层中,分别使用了relu激活函数进行非线性处理和lrn函数进行局部响应归一化处理,随后,使用最大池化层对卷积层的输出数据进行降采样处理。后3层为全连接层,负责对提取的特征进行归一化处理,并在最后一个全连接层使用softmax函数进行分类输出,具体组成如图2所示。alexnet网络模型的输入图像为宽高均为224的rgb图像,该图像经过预处理后转换成大小为227*227*3的图像,作为第一个卷积层的输入。在第一个卷积层中,使用96个大小为11*11*3的过滤器对输入图像进行特征提取,设置步长为4,即每次卷积操作后会将过滤器向右移动4个像素进行下一次卷积计算,特征提取完成后,输出数据的大小为55*55*96,然后使用relu激活函数对其进行非线性化处理,处理完成后,再经过一个最大池化层进行降采样处理,该最大池化层中使用3*3的过滤器,每次卷积操作后向后移动2个像素。降采样处理完成后,输出图像的宽高会减半,即变为27*27*96,然后对其进行归一化处理,将输出数据作为下一神经网络层的输入。表1显示了alexnet网络在训练过程中需要学习的参数个数、输出数据尺寸。表1alexnet网络在训练过程中需要学习的参数个数、输出数据尺寸神经网络层需学习的参数个数输出数据尺寸conv1 relu3494455*55*96conv2 relu61465627*27*256conv3 relu88512013*13*384conv4 relu132748813*13*384conv5 relu88499213*13*256fc1 relu377487361*1*4096fc2 relu167772161*1*4096fc3 relu40960001*1*1000设win为某神经网络某层的输入图像,wout为该层的输出图像,f表示对该层进行卷积操作将会用到的过滤器宽高,stride表示步长,padding表示填充边界的宽度,卷积神经网络每层的输出数据计算公式如下所示:第二个卷积层的处理过程和第一个卷积层类似,第三个卷积层和第四个卷积层去掉了最大池化层,第五个卷积层再次使用最大池化层进行降采样处理。第六层到第八层为全连接层,在第六层中,该层的输入数据大小为6*6*256,需要使用一个大小同样为6*6*256的过滤器对其进行卷积操作,输出大小为1*1*4096的数据,通过relu函数对其进行非线性化处理,生成4096个值,再使用dropout函数对其处理,目的是避免网络模型过度拟合。在卷积神经网络中,如果需要训练的参数过多而样本数据太少,可能会存在过度拟合的情况,具体表现为,在训练过程中准确率很高,损失很低,但是在检测过程中却准确率很低,损失很高。为了解决这个问题,2012年,hinton在其论文中提出了dropout的概念,即在每个训练批次中随机忽略一半特征检测器,降低不同特征检测器之间的相互关联,从而避免过度拟合情况发生。在alexnet网络模型中,共有需要学习的参数62369152个,其中,卷积层共需要学习的参数个数为3747200个,全连接层共需要学习的参数个数为58621952个,可以看出,卷积层需要学习的参数占总需要学习参数的6.00%,远小于全连接层需要学习的参数。在本发明中,对alexnet网络作了如下调整:(1)使用prelu激活函数代替relu。在alexnet模型中使用了relu激活函数,该函数成功解决了当时应用广泛的sigmoid函数在深度较深的网络中出现的梯度弥散问题。在很长一段时间内,relu函数被证明具有良好的表现效果。但是,随着深度学习的不断发展,relu函数已经成为一个比较古老的函数,本发明采用由relu改进而来的prelu激活函数进行非线性操作,并在实际训练中证明,prelu函数能比relu函数更好地促进网络模型收敛。(2)输入图像维数应为一维。本发明需要训练的图像数据是灰度图像,因此,需要调整原神经网络的输入图像的尺寸大小参数,原神经网络中输入图像为rgb图像,有3个通道,灰度图像只有1个通道,因此需要调整。(3)输出的分类数量根据实际情况进行调整,其中,该数值与生成的测试标签文件中的漏洞类型总数相对应。使用tflearn实现的alexnet网络:输入:无输出:alexnet卷积神经网络functionalexnet():1:读取训练数据集,设置图像的宽高为固定值,因为在本发明中,处理的数据是灰度图像,所以需要设置图像通道数为1;2:建立卷积层1:使用96个11*11*1的卷积核进行卷积操作,完成后,使用prelu激活函数对输出结果进行处理;3:建立池化层1:使用3*3的池化单元对输出结果进行池化操作,采用最大池化的方法,设置步长为2;4:进行局部响应归一化操作;5:建立卷积层2:使用256个5*5*1的卷积核进行卷积操作,完成后,使用prelu激活函数对输出结果进行处理;6:建立池化层2:使用3*3的池化单元对输出结果进行池化操作,采用最大池化的方法,设置步长为2;7:进行局部响应归一化操作;8:建立卷积层3:使用384个3*3*1的卷积核进行卷积操作,完成后,使用prelu激活函数对输出结果进行处理;9:建立卷积层4:使用384个3*3*1的卷积核进行卷积操作,完成后,使用prelu激活函数对输出结果进行处理;10:建立卷积层5:使用256个3*3*1的卷积核进行卷积操作,完成后,使用prelu激活函数对输出结果进行处理;11:建立池化层3:使用3*3的池化单元对输出结果进行池化操作,采用最大池化的方法,设置步长为2,该步骤完成后的输出数据大小为6×6×256;12:进行局部响应归一化操作;13:全连接层1:使用4096个大小为6×6×256的卷积核对输出数据进行卷积操作,完成后,使用tanh激活函数对结果进行处理,该层输入的数据大小为4096*1*1;14:进行dropout操作,通过随机断开某些神经元或不激活某些神经元的方法抑制过度拟合,设置概率为0.5;15:全连接层2:使用4096个大小为1×1×1的卷积核对输出数据再次进行卷积操作,完成后,使用tanh激活函数对结果进行处理;16:进行dropout操作,通过随机断开某些神经元或不激活某些神经元的方法抑制过度拟合,设置概率为0.5;17:全连接层3:使用class_num个大小为1*1*1的卷积核对输出数据进行卷积操作,完成后,使用softmax激活函数对结果进行处理,该步骤的输出结果为class_num个float值,表示每种漏洞类型的概率。其中,class_num是样本数据中漏洞类型的数量。卷积神经网络的训练过程如下:(1)将数据加载进alexnet模型,设置训练数据集的迭代次数、每次训练的数据条数以及在训练过程中使用到的训练数据和验证数据所占比例。(2)对数据集进行卷积操作,每次卷积完成后,使用prelu激活函数进行非线性操作,该操作的目的是为了促进网络收敛,同时,避免relu激活函数在x小于0的时候失去特征。每次池化操作后,会进行局部响应归一化操作,增强模型的泛化能力,该操作的公式表示如下:其中,a表示经过卷积操作后,再经过激活函数relu后的输出,b表示经过局部响应归一化处理后的输出结果;表示经过卷积操作后,当前神经网络层第i个通道下的高度为x宽度为y的像素点处的值,表示经过局部响应归一化操作后,第i个通道下的高度为x宽度为y的像素点处的值;n是通道的总数;参数k,n,a,β都是超参数,一般设置k=2,n=5,a=1*e-4,β=0.75。最后,使用训练好的模型对二进制文件进行漏洞挖掘,具体过程如下:(1)使用b2m算法将二进制文件转化为灰度图像;(2)将该灰度图像作为模型输入,根据输出结果做出预测,并输出所有结果中概率大于80%的预测结果(漏洞编号)及对应概率。同时,为了方便用户理解,根据漏洞编号和文字描述标签文件中的key、value键值对,直接输出这些漏洞编号对应的文字描述。通过本发明的方法,在含有4核intelcorei5-6200u处理器,8g内存的笔记本电脑进行试验,其gpu的型号为nvida920m。实验收集到的训练样本中包含59个不同的漏洞分类,共计5377条数据,在训练的过程中,使用总数据中的10%作为验证数据集,剩余90%作为训练数据集,并对这5377条数据进行100次迭代训练。在每轮训练过程中选取其中100条数据,并取其中10条数据作为该轮训练中的单次训练。本实验的总训练次数达到494300次,耗时约17h,最终,函数损失收敛到0.4左右,验证准确率收敛到95%左右。训练完成后,学习到的参数被保存为模型文件,并在漏洞检测的时候重新加载进卷积神经网络。针对该训练模型,使用参与训练的灰度图像文件对其进行正确率测试,其结果如表2所示。表2使用本发明进行试验的检测结果准确率统计漏洞类型doslocalremotewebapps测试正确率83.91%87.83%82.59%96.26%为了检测该网络模型在检测未知文件时的表现效果,从exploit-db下载了最新的不包含在训练数据集中的二进制文件,并转换成灰度图像,使用训练好的模型对其进行检测,对某windows平台下存在remote漏洞的二进制文件检测,预测结果中,概率最高的预测数据与实际情况吻合。通过对结果的分析,可以看出,将二进制文件映射为灰度图像,并利用卷积神经网络对其纹理进行特征提取、参数学习,最终实现对输入二进制文件进行漏洞检测是可行的,并且,在某些测试样例中,可以达到相当高的准确率。相对于现有的漏洞检测技术,本发明改进了传统基于专家规则的静态漏洞检测和动态漏洞检测方法在应对“零日”漏洞上面的不足,将带来以下几方面的优势:(1)提出一种基于二进制映射和深度学习的漏洞检测方法,该方法将二进制文件转化为灰度图像,并结合卷积神经网络在图像处理领域的优势,对灰度图像样本数据进行特征提取,能够克服传统基于专家规则的漏洞检测方法不能检测潜在漏洞的不足。(2)基于二进制文件进行特征提取,克服了针对源代码进行漏洞挖掘存在的样本数据不足、代码间关系难以描述等问题,具有更广泛的应用场景。当前第1页1 2 3 
技术特征:

1.一种基于二进制映射和深度学习的漏洞检测方法,其特征在于,包括以下步骤:

1)将包含漏洞的二进制样本文件转化为灰度图像;

2)按自然数序列对样本包含的漏洞类型进行编号,并根据每个灰度图像对应的源文件包含的漏洞,以(key,value)的形式生成灰度图像对应的编号,再结合所述灰度图像文件,构建hdf5文件;

3)将hdf5数据文件作为训练数据,对卷积神经网络进行迭代训练;

4)调节训练参数,进行多次训练,直至达到预设训练效果,得到训练好的模型;

5)将待检测二进制文件转化为灰度图像,使用训练好的模型对其进行漏洞检测。

2.根据权利要求1所述的基于二进制映射和深度学习的漏洞检测方法,其特征在于,步骤1)的实现过程包括:

1)将一个包含漏洞的二进制文件按位读取为一维数组,读取过程中,取该二进制文件的每8位数据作为该数组一个元素的值,该元素的取值范围为0-255;

2)新建一个二维数组,并使该二维数组每行的宽度固定为256,使用所述一维数组中的数值依次填充该二维数组,从而将一维数组转化成一个具有固定宽度的二维数组;

3)利用python中的cv2库将步骤2)得到的固定宽度的二维数组存储为灰度图像。

3.根据权利要求1所述的基于二进制映射和深度学习的漏洞检测方法,其特征在于,步骤2)的具体时间过程包括:

1)对收集到的包含漏洞的样本文件进行处理,生成两个标签文件,即训练标签文件和测试标签文件,每个标签文件包含有多条数据,均以(key,value)的形式存在,训练标签文件的key为某个包含漏洞文件转化成灰度图像后的图像路径,value为该文件所属的漏洞类型编号;测试标签文件的key为漏洞类型编号,对应训练标签文件中的漏洞各类型编号,value为该类型编号所对应的文字解释;其中,测试标签文件中的漏洞类型编号由小到大按顺序依次生成,且先生成测试标签文件,再生成训练标签文件,确保两个标签文件中的漏洞编号相对应;

2)将灰度图像样本文件按照训练标签文件中的对应关系,采用堆叠的方式,构建并生成hdf5文件。

4.根据权利要求1所述的基于二进制映射和深度学习的漏洞检测方法,其特征在于,步骤3)中,所述卷积神经网络为alexnet网络。

5.根据权利要求4所述的基于二进制映射和深度学习的漏洞检测方法,其特征在于,所述alexnet网络的激活函数为prelu激活函数。

6.根据权利要求4所述的基于二进制映射和深度学习的漏洞检测方法,其特征在于,所述卷积神经网络包括:

第一卷积层,用于对输入数据进行卷积操作,并使用prelu激活函数对输出结果进行处理;

第一池化层,用于对第一卷积层的输出结果进行池化操作;

第二卷积层,用于对局部归一化操作后的第一池化层的输出结果进行卷积操作,并使用prelu激活函数对该卷积操作后的结果进行处理;

第二池化层,用于对第二卷积层输出的结果进行池化操作;

第三卷积层,用于对局部响应归一化处理后的第二池化层的输出结果进行卷积操作,并用prelu激活函数对该卷积操作后的结果进行处理;

第四卷积层,用于对第三卷积层的输出结果进行卷积操作,并用prelu激活函数对该卷积操作后的结果进行处理;

第五卷积层,用于对第四卷积层的输出结果进行卷积操作,并用prelu激活函数对该卷积操作后的结果进行处理;

第三池化层,用于对第五卷积层的输出结果进行池化操作;

第一全连接层,用于对经局部响应归一化处理后的第三池化层的输出结果进行卷积操作,并使用tanh激活函数对该卷积操作后的结果进行处理;

第二全连接层,用于对经dropout操作后的第一全连接层的输出进行卷积操作,并使用tanh激活函数对该卷积操作后的结果进行处理;

第三全连接层,用于对经dropout操作后的第二全连接层的输出进行卷积操作,并使用softmax激活函数对该卷积操作后的结果进行处理,得到每种漏洞类型的概率。

7.根据权利要求6所述的基于二进制映射和深度学习的漏洞检测方法,其特征在于,局部响应归一化处理后得到的输出表示为:

其中,a表示经过卷积操作后,再经过激活函数relu后的输出,b表示经过局部响应归一化处理后的输出结果;表示经过卷积操作后,当前神经网络层第i个通道下的高度为x宽度为y的像素点处的值,表示经过局部响应归一化操作后,第i个通道下的高度为x宽度为y的像素点处的值;n是通道的总数;k,n,α,β均为超参数。

8.根据权利要求7所述的基于二进制映射和深度学习的漏洞检测方法,其特征在于,k=2,n=5,a=1*e-4,β=0.75。

9.根据权利要求1所述的基于二进制映射和深度学习的漏洞检测方法,其特征在于,步骤5)中,使用训练好的模型对其进行漏洞检测后,输出所有结果中概率大于80%的预测结果及对应概率;所述预测结果即漏洞编号。

技术总结
本发明公开了一种基于二进制映射和深度学习的漏洞检测方法,主要采用“画像”原理,将包含漏洞的二进制文件映射为灰度图像,然后,利用卷积神经网络在图像分类等领域的优势,提取灰度图像纹理特征,并对其进行迭代训练,最终构建一个面向程序二进制文件的、多平台的漏洞检测模型。本发明的方法可以提高检测效率和准确率。

技术研发人员:胡玉鹏;唐斌;唐志泉;李丹;唐薇
受保护的技术使用者:湖南大学
技术研发日:2020.01.08
技术公布日:2020.06.05

转载请注明原文地址: https://bbs.8miu.com/read-56102.html

最新回复(0)