漏洞检测方法、装置、设备及存储介质与流程

文档序号:33477342发布日期:2023-03-15 10:47阅读:25来源:国知局
1.本发明涉及互联网
技术领域
:,尤其涉及一种漏洞检测方法、装置、设备及存储介质。
背景技术
::2.目前,信息安全问题时刻都有新的变化,新的攻击方法层出不穷,黑客攻击的方向越来越侧重于利用软件本身的安全漏洞,例如反序列化漏洞、代码执行漏洞、命令执行等。现如今一般通过人工检测来发现软件中存在的漏洞,但由于这些漏洞隐藏在程序代码之间,人工检测存在局限性,不能及时发现软件中最有可能受到攻击的漏洞,导致安全隐患。3.上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。技术实现要素:4.本发明的主要目的在于提供了一种漏洞检测方法、装置、设备及存储介质,旨在解决现有技术通过人工检测漏洞的方法无法及时发现软件中最有可能受到攻击的漏洞的技术问题。5.为实现上述目的,本发明提供了一种漏洞检测方法,所述漏洞检测方法包括以下步骤:对获取到的待检测java数据进行预处理,获得处理后的java数据;根据所述处理后的java数据的数据类型采用对应的数据表征策略对所述处理后的java数据进行向量映射,获得目标特征向量;通过包含注意力机制的目标bilstm模型对所述目标特征向量进行漏洞检测,获得检测结果。6.可选地,所述根据所述处理后的java数据的数据类型采用对应的数据表征策略对所述处理后的java数据进行向量映射,获得目标特征向量的步骤,包括:基于数据类型对所述处理后的java数据进行分类;将所述处理后的java数据中不可编译为汇编指令的源代码数据作为第一java数据;采用源代码数据表征策略对所述第一java数据进行向量映射,获得目标特征向量。7.可选地,所述采用源代码数据表征策略对所述第一java数据进行向量映射,获得目标特征向量的步骤,包括:将所述第一java数据进行解析为初始抽象语法树,并对所述初始抽象语法树中各树节点上的语法结构信息进行编码;将编码后的语法结构信息作为所述第一java数据的初始特征;基于预设开源工具获得所述第一java数据之间的控制依赖关系和数据依赖关系;将所述控制依赖关系和所述数据依赖关系融入至所述初始特征中,获得目标抽象语法树;对所述目标抽象语法树进行向量映射,获得目标特征向量。8.可选地,所述基于预设开源工具获得所述第一java数据之间的控制依赖关系和数据依赖关系的步骤,包括:通过预设开源工具对所述第一java数据进行转换,获得程序依赖图;基于所述程序依赖图获得控制流图和控制依赖图;根据所述控制依赖图获得第一java数据之间的控制依赖关系;对所述控制流图进行数据流分析,获得第一java数据之间的数据依赖关系。9.可选地,所述基于数据类型对所述处理后的java数据进行分类的步骤之后,还包括:将所述处理后的java数据中不可编译为汇编指令的源代码数据之外的数据作为第二java数据;采用汇编指令数据表征策略对所述第二java数据进行向量映射,获得目标特征向量。10.可选地,所述采用汇编指令数据表征策略对所述第二java数据进行向量映射,获得目标特征向量的步骤,包括:对所述第二java数据进行编译,获得java汇编指令;提取所述java汇编指令中的各单词信息,并确定各单词信息对应的词向量,并基于所述各单词信息以及所述词向量构建查找表;获取所述查找表中与java汇编指令操作码和java汇编指令操作数对应的目标单词信息;将所述目标单词信息对应的词向量填充至预设向量矩阵,获得目标特征向量。11.可选地,所述对获取到的待检测java数据进行预处理,获得处理后的java数据的步骤之前,还包括:对获取到的java数据进行预处理,获得待训练java数据;基于所述待训练java数据构建漏洞模型训练样本;根据所述待训练java数据的数据类型采用对应的数据表征策略对所述漏洞模型训练样本进行向量映射,获得待训练特征向量;通过所述待训练目标特征向量对包含注意力机制的初始bilstm模型进行迭代训练,获得包含注意力机制的目标bilstm模型。12.此外,为实现上述目的,本发明还提出一种漏洞检测装置,所述装置包括:数据预处理模块,用于对获取到的待检测java数据进行预处理,获得处理后的java数据;数据表征模块,用于根据所述处理后的java数据的数据类型采用对应的数据表征策略对所述处理后的java数据进行向量映射,获得目标特征向量;漏洞检测模块,用于通过包含注意力机制的目标bilstm模型对所述目标特征向量进行漏洞检测,获得检测结果。13.此外,为实现上述目的,本发明还提出一种漏洞检测设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的漏洞检测程序,所述漏洞检测程序配置为实现如上文所述的漏洞检测方法的步骤。14.此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有漏洞检测程序,所述漏洞检测程序被处理器执行时实现如上文所述的漏洞检测方法的步骤。15.本发明通过对获取到的待检测java数据进行预处理,获得处理后的java数据,然后根据处理后的java数据的数据类型采用对应的数据表征策略对处理后的java数据进行向量映射,获得目标特征向量,最后通过包含注意力机制的目标bilstm模型对目标特征向量进行漏洞检测,获得检测结果。由于本发明是根据与java数据的数据类型对应的数据表征策略获取目标特征向量,再由包含注意力机制的目标bilstm模型对目标特征向量进行漏洞检测,相较于现有技术通过人工检测漏洞的方法,本发明上述方法可以克服人工检测的局限性,及时发现软件中最有可能受到攻击的漏洞,有效避免了安全隐患。附图说明16.图1是本发明实施例方案涉及的硬件运行环境的漏洞检测设备的结构示意图;图2为本发明漏洞检测方法第一实施例的流程示意图;图3为本发明漏洞检测方法第二实施例的流程示意图;图4为本发明漏洞检测方法第二实施例初始抽象语法树示意图;图5为本发明漏洞检测方法第二实施例中涉及的程序依赖图;图6为本发明漏洞检测方法第三实施例的流程示意图;图7为本发明漏洞检测方法第三实施例向量填充过程示意图;图8为本发明漏洞检测方法第四实施例的流程示意图;图9为本发明漏洞检查方法第四实施例中包含注意力机制的初始bilstm模型结构示意图;图10为本发明漏洞检测装置第一实施例的结构框图。17.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式18.应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。19.参照图1,图1为本发明实施例方案涉及的硬件运行环境的漏洞检测设备结构示意图。20.如图1所示,该漏洞检测设备可以包括:处理器1001,例如中央处理器(centralprocessingunit,cpu),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(wireless-fidelity,wi-fi)接口)。存储器1005可以是高速的随机存取存储器(randomaccessmemory,ram),也可以是稳定的非易失性存储器(non-volatilememory,nvm),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。21.本领域技术人员可以理解,图1中示出的结构并不构成对漏洞检测设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。22.如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及漏洞检测程序。23.在图1所示的漏洞检测设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明漏洞检测设备中的处理器1001、存储器1005可以设置在漏洞检测设备中,所述漏洞检测设备通过处理器1001调用存储器1005中存储的漏洞检测程序,并执行本发明实施例提供的漏洞检测方法。24.本发明实施例提供了一种漏洞检测方法,参照图2,图2为本发明漏洞检测方法第一实施例的流程示意图。25.本实施例中,所述漏洞检测方法包括以下步骤:步骤s10:对获取到的待检测java数据进行预处理,获得处理后的java数据。26.需要说明的是,本实施例方法的执行主体可以是具有数据处理、网络通信以及程序运行功能的计算服务设备,例如手机、平板电脑、个人电脑等,还可以是实现相同或相似功能的其他电子设备。以下以上述漏洞检测设备对本实施例和下述各实施例进行说明。27.可理解的是,待检测java数据可为疑似存有安全漏洞的数据,并且该待检测java数据可由java源代码和java汇编指令所组成。28.在具体实现中,漏洞检测设备可接收用户输入的疑似存有安全漏洞的待检测java数据,然后对该待检测java数据进行清洗、集成以及规约等一系列预处理操作,以缓解待检测java数据的可能存在的数据重复或数据不平衡的问题。29.应理解的是,处理后的java数据可为经过上述预处理后的数据,故而,该处理后的java数据数据重复率低,并且较为平衡,便于后续获得精确度较高的检测结果。30.步骤s20:根据所述处理后的java数据的数据类型采用对应的数据表征策略对所述处理后的java数据进行向量映射,获得目标特征向量。31.需要说明的是,处理后的java数据仍由java源代码和java汇编指令所组成,也即,处理后的java数据的数据类型可为java源代码类型和java汇编指令类型。32.可理解的是,数据表征策略用于将处理后的java数据解析为便于后续模型检测的目标特征向量,针对不同的数据类型可采用不同的数据表征策略,如针对java源代码数据的源代码数据表征策略以及针对java汇编指令的汇编指令数据表征策略。33.需要说明的是,目标特征向量可为反映java数据特征的向量,由上述数据表征策略对处理后的java数据进行向量映射获得,其中,向量映射可为将java数据的特征表征为向量的形式。34.在具体实现中,漏洞检测设备可对处理后的java数据进行分类,分为已知源代码的java源代码数据和难以获得源代码的java汇编指令数据,采用java源代码数据表征策略对java源代码数据进行向量映射,采用java汇编指令数据表征策略对java汇编指令数据进行向量映射,最终获得反映java数据特征的目标特征向量。35.步骤s30:通过包含注意力机制的目标bilstm模型对所述目标特征向量进行漏洞检测,获得检测结果。36.需要说明的是,目标bilstm模型为用于检测漏洞的神经网络模型,该bilstm模型中包含注意力机制,如attention-bilstm模型,其网络模型结构由输入层、双向lstm层、注意力层、softmax层和输出层构成。37.可理解的是,该目标bilstm模型可预先通过大量由java源代码和java汇编指令组成java数据训练,并通过多次参数调优后获得的性能较优的模型。38.在具体实现中,漏洞检测设备可将上述目标特征向量输入至上述包含注意力机制的目标bilstm模型进行漏洞检测,目标bilstm模型对上述目标特征向量检测后返回检测结果,技术人员可依据该检测结果判断待检测java数据中何处存在漏洞。39.应理解的是,漏洞检测设备根据获得的检测结果对上述目标bilstm模型进行评估,也即判断目标bilstm模型检测的漏洞是否为真实漏洞,若目标bilstm模型输出的检测结果的准确率符合预期,则可认定该bilstm模型效果较好。40.需要说明的是,漏洞检测设备可对目标bilstm模型判断为漏洞的数据训练标签,以进一步提高目标bilstm模型检测的全面性和精度。41.本实施例通过对获取到的待检测java数据进行预处理,获得处理后的java数据,然后根据处理后的java数据的数据类型采用对应的数据表征策略对处理后的java数据进行向量映射,获得目标特征向量,最后通过包含注意力机制的目标bilstm模型对目标特征向量进行漏洞检测,获得检测结果。由于本实施例是根据与java数据的数据类型对应的数据表征策略获取目标特征向量,再由包含注意力机制的目标bilstm模型对目标特征向量进行漏洞检测,可以克服人工检测的局限性,及时发现软件中最有可能受到攻击的漏洞,有效避免了安全隐患。42.参考图3,图3为本发明漏洞检测方法第二实施例的流程示意图。43.基于上述第一实施例,在本实施例中,所述步骤s20包括:步骤s201:基于数据类型对所述处理后的java数据进行分类。44.需要说明的是,可由java源代码和java汇编指令对处理后的java数据进行分类,但处理后的java数据中的源代码数据存在部分源代码可编译为汇编指令,也即该部分数据虽然为源代码数据,但仍可按汇编指令进行分类,因此为了使数据分类更为全面,提高检测结果的精度,提出本发明的第二实施例。45.在具体实现中,漏洞检测设备可按源代码是否可编译为汇编指令对处理后的java数据进行分类。46.步骤s202:将所述处理后的java数据中不可编译为汇编指令的源代码数据作为第一java数据。47.在具体实现中,处理后的java数据中可按上述数据类型进行分类,也即将处理后的java数据分为不可编译为汇编指令的源代码数据,也即第一java数据和除上述第一java数据之外的数据。48.步骤s203:采用源代码数据表征策略对所述第一java数据进行向量映射,获得目标特征向量。49.需要说明的是,由于第一java数据不可编译为汇编指令,因此可以较好的通过源代码数据表征策略进行向量映射,获得精度较高的目标特征向量。50.进一步地,为了更为精确的提取第一java数据的特征,本实施例中,所述步骤s203包括:步骤s2031:将所述第一java数据进行解析为初始抽象语法树,并对所述初始抽象语法树中各树节点上的语法结构信息进行编码。51.需要说明的是,软件漏洞通常反映在源代码的语法结构中,结构模式与许多漏洞相关,这些模式可以通过分析程序的抽象语法树来揭示。52.可理解的是,初始抽象语法树可为反映第一java数据中源代码语法结构信息的树,树节点上存储语法结构信息。53.需要说明的是,语法结构信息可为与第一java数据中源代码语法结构相关的信息。54.在具体实现中,漏洞检测设备可通过基于python的javalang库对第一java数据进行解析,上述javalang库提供了针对java8的词法分析器和解析器,可以在不提供整个编译单元的情况下解析一些较小的代码片段或整个第一java数据,获得初始抽象语法树,之后,漏洞检测设备深度遍历该初始抽象语法树,提取初始抽象语法树的树节点上存储的语法结构信息,对该语法结构信息进行编码。55.为了便于理解,可参考图4进行说明,但并不对本发明进行限定。图4为本发明漏洞检测方法第二实施例初始抽象语法树示意图,图中,第一java数据中的源代码被分解为代码块、语句、声明、表达式等语法结构信息,也即方框中的“classdeclaration”以及“methoddeclaration”等内容,上述内容构成了初始抽象语法树的树节点。56.应理解的是,漏洞检测设备在通过上述基于python的javalang库将第一java数据解析为初始抽象语法树的过程中,还会检测第一java数据中源代码的语法是否存在错误,若存在错误则弃之不用。57.步骤s2032:将编码后的语法结构信息作为所述第一java数据的初始特征。58.需要说明的是,初始特征可为与数节点上其他特征之间没有程序依赖关系的特征。59.步骤s2033:基于预设开源工具获得所述第一java数据之间的控制依赖关系和数据依赖关系。60.需要说明的是,预设开源工具可以是解析出源代码之间的程序依赖关系的工具,该程序依赖关系即为可知依赖关系和数据依赖关系。61.可理解的是,控制依赖关系可为第一java数据的源代码对应程序的基本控制流关系,相应地,数据依赖关系可为第一java数据的源代码对应程序的相关数据流关系。62.进一步地,为了提高程序依赖关系获取的速度,进一步提高漏洞检测的效率,所述步骤s2033包括:步骤s20331:通过预设开源工具对所述第一java数据进行转换,获得程序依赖图。63.需要说明的是,程序依赖图是一种中间程序表示法,包含程序中每步操作的数据依赖和控制依赖。64.在具体实现中,漏洞检测设备可将第一java数据输入至上述预设开源工具中,该预设开源工具开源是sourcedg,预设开源工具可将第一java数据解析为程序依赖图,并输出该程序依赖图。65.为了便于理解,可参考图5进行说明,但并不对本发明进行限定。图5为本发明漏洞检测方法第二实施例中涉及的程序依赖图,图中,节点表示代码片段对应的语句信息,即图中的“0-classquicksort”、“1-entrymain”以及“2-formal-inargs”等语句信息,其中,箭头表示语句之间的依赖关系,其中实线箭头为语句之间的控制依赖,虚线箭头为语句之间数据依赖。66.步骤s20332:基于所述程序依赖图获得控制流图和控制依赖图。67.需要说明的是,控制流图可为反映一个过程或程序的抽象表现的图,可代表一个程序执行过程中会遍历到的所有路径,反映一个过程的实时执行过程。68.在具体实现中,漏洞检测设备可根据预设规则对程序依赖图进行处理,构造程序的控制流图,然后从控制流图中推导出控制依赖图。69.应理解的是,预设规则可为预先基于相关转换规则生成图的形式语义构建的规则。70.步骤s20333:根据所述控制依赖图获得第一java数据之间的控制依赖关系。71.在具体实现中,漏洞检测设备可对控制依赖图进行分析,获得各语句之间的控制依赖关系,即第一java数据之间的控制依赖关系。72.步骤s20334:对所述控制流图进行数据流分析,获得第一java数据之间的数据依赖关系。73.在具体实现中,漏洞检测设备可对控制流图中语句之间的数据关系进行分析,即数据流分析,可获得语句之间的数据依赖关系,即第一java数据之间的数据依赖关系。74.应理解的是,通过预设开源工具可非常便捷的获取第一java数据之间的程序依赖图,然后从程序依赖图中获取程序的控制依赖关系和数据依赖关系,有效提高了程序依赖关系获取的效率。75.步骤s2034:将所述控制依赖关系和所述数据依赖关系融入至所述初始特征中,获得目标抽象语法树。76.在具体实现中,漏洞检测设备可以上述初始抽象语法树为骨干,将上述控制依赖关系和数据依赖关系融入至树节点中,构成初始特征之间的程序依赖关系,获得最终的目标程序语法树,该目标抽象语法树可最大程序保留漏洞多方面的特征信息。77.步骤s2035:对所述目标抽象语法树进行向量映射,获得目标特征向量。78.在具体实现中,漏洞检测设备可将上述目标程序语法树映射到向量空间,即表示为向量的形式,获得后续进行漏洞检测的目标特征向量。79.参考图6,图6为本发明漏洞检测方法第三实施例的流程示意图。80.基于上述各实施例,在本实施例中,所述步骤s201之后,所述方法还包括:步骤s202':将所述处理后的java数据中不可编译为汇编指令的源代码数据之外的数据作为第二java数据。81.需要说明的是,为了后续能对可编译为汇编指令的源代码数据或汇编指令数据进行漏洞检测,完善漏洞检测的数据类型,提高漏洞检测全面性,故而提出本实施例。82.在具体实现中,若处理后的java数据中的源代码数据可编译为汇编指令,则可对上述可编译为汇编指令的源代码数据采用与汇编指令数据相同的处理方式,从而可以更有针对性的针对数据类型提取特征,使得提取的特征更为明显,效果更好。83.应理解的是,第二java数据可为处理后的java数据中不可编译为汇编指令的源代码数据之间的数据,也即可编译为汇编指令的java源代码数据和java汇编指令数据。84.步骤s203':采用汇编指令数据表征策略对所述第二java数据进行向量映射,获得目标特征向量。85.需要说明的是,汇编指令数据表征策略可用于难以获得源代码情况下的漏洞检测,也即适用于汇编指令数据的漏洞检测,相应地,最终获得的目标特征向量可为反映汇编指令特征的向量。86.可理解的是,汇编语言是一种以处理器指令系统为基础的低级程序设计语言,该汇编指令可采用助记符表达指令操作码,采用标识符合表示指令操作数。87.需要说明的是,java汇编指令由指令、操作数栈以及局部变量区构成,体现计算机处理数据的过程,包括数据的来源、操作结果的去向以及所执行的操作。88.在具体实现中,漏洞检测设备可在获取到java汇编指令后使用instruction2vec从汇编指令中提取库函数、操作码、寄存器等信息,并构建一个查找表,然后基于查找表将java汇编指令转换成目标特征向量。89.进一步地,为了更为精准的提取汇编指令的特征,所述步骤s203'包括:步骤s2031':对所述第二java数据进行编译,获得java汇编指令。90.在具体实现中,漏洞检测设备可对第二java数据进行编译,将可编译为汇编指令的源代码编译为汇编指令,并且不会对第二java数据中原来存在的汇编指令数据产生影响,因此,最终获得的数据均为java汇编指令。91.步骤s2032':提取所述java汇编指令中的各单词信息,并确定各单词信息对应的词向量,并基于所述各单词信息以及所述词向量构建查找表。92.需要说明的是,单词信息可为java汇编指令中的库函数、操作码、寄存器以及十六进制值,可由word2vec进行提取,由于上述单词的使用数量较少,故而word2vec可以通过减少words中使用的向量大小,来提高后续漏洞检测或模型学习的效率。93.可理解的是,词向量可为单词被映射到实树的向量,可由漏洞检测设备通过word2vec根据java汇编指令的上下文关系生成。94.在具体实现中,漏洞检测设备可通过word2ec提取java汇编指令中的库函数、操作码、寄存器以及十六进制值,并将提取到的内容作为单词信息,确定该单词信息对应的词向量,最后构建单词以及与单词对应的词向量的查找表。95.步骤s2033':获取所述查找表中与java汇编指令操作码和java汇编指令操作数对应的目标单词信息。96.需要说明的是,汇编代码大多具有固定语法,也即,该汇编代码可由一个操作码和两个操作数(有四个值)进行表示,通过一位操作码和八位(4×2)操作数,可创建一个总共九位数的固定维度。97.在具体实现中,漏洞检测设备可引用上述查找表中与java汇编指令操作码和java汇编指令操作数对应的目标单词信息,也即将java汇编指令转化为同一固定维度下。98.步骤s2034':将所述目标单词信息对应的词向量填充至预设向量矩阵,获得目标特征向量。99.在具体实现中,漏洞检测设备在获得各单词对应的词向量后,可构造一个由一个操作码和两个操作数构成的预设向量矩阵,然后在获得上述目标单词信息后,将目标单词信息对应的词向量填充至预设向量矩阵中,从而获得目标特征向量,由于是通过在操作码和操作数的维度下进行向量填充,因此所获得的目标特征向量精度较高。100.应理解的是,若java汇编指令的操作数的值小于4位,则用0填充。101.为了便于理解,可参考图7进行说明,但并不对本发明进行限定。图7为本发明漏洞检测方法第三实施例向量填充过程示意图,图中,assemblycode为汇编代码,也即图中的“push”、“ebp”以及“add”等均为汇编代码中的个指令语句,lookuptable为查找表,查找表中text列(如“text”、“push”以及“ebp”等)表示汇编指令中的个单词信息,vector列表示单词信息对应的词向量,在确定各单词的词向量后填入此处,word2vec即为上述通过word2ec对java汇编指令进行提取并构建查找表的过程,dimensionofinstructions为预设向量矩阵,opcode为一位操作码,operan1和operan2表示两位操作数,embedding为向量填充过程,其中n为java汇编指令操作码的数量。102.参考图8,图8为本发明漏洞检测方法第四实施例的流程示意图。103.基于上述各实施例,提出本发明漏洞检测方法的第四实施例。104.在本实施例中,所述步骤s10之前,还包括:步骤s01:对获取到的java数据进行预处理,获得待训练java数据。105.需要说明的是,为了获得性能较优的漏洞挖掘模型,以深层次挖掘漏洞潜在的特征,提高漏洞检测的准确度,故而提出本实施例。106.在具体实现中,漏洞检测设备可爬取大量java源代码数据和java汇编指令数据,然后对获取到的海量java数据进行预处理,缓解数据重复和数据不平衡的问题,预处理后获得后续模型训练的待训练java数据。107.步骤s02:基于所述待训练java数据构建漏洞模型训练样本。108.在具体实现中,漏洞检测设备可将待训练java数据构建为训练集样本和测试集样本。109.需要说明的是,训练集样本用于后续模型的训练,测试集样本用于测试模型的准确率。110.步骤s03:根据所述待训练java数据的数据类型采用对应的数据表征策略对所述漏洞模型训练样本进行向量映射,获得待训练特征向量。111.在具体实现中,漏洞检测设备可按与上述漏洞检测同样的方式采用对应的数据表征策略进行向量映射,此处不再赘述。112.步骤s04:通过所述待训练目标特征向量对包含注意力机制的初始bilstm模型进行迭代训练,获得包含注意力机制的目标bilstm模型。113.需要说明的是,在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能为力,如,若想要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的,而lstm可以处理长期依赖关系,捕获与许多连接或间歇元素之间的关系。114.可理解的是,lstm可以通过检查最近信息的关性来预测一个单词,但是,对于前面的单词(如xi-3、xi-1)它们只能捕获第i个单词xi的依赖关系。对于许多nlp任务,检查前面的信息通常不足以执行准确的预测,而后面的单词可以是有用的。因此,为了获得单词xi周围单词的依赖关系,前向的lstm与后向的lstm结合成bilstm,双向的网络可以同时捕获正向信息和反向信息,使得对文本信息的利用更全面,效果更好。115.需要说明的是,注意力机制(attention)可为对人的注意力进行模拟的机制,当人从外界接收信息时,对各种信息的取舍并不是均衡的,而是根据需求来调整相应权重,以合理地进行资源分配。同理,attention模型让隐层节点的状态值不是只能均匀关注某个时刻的状态输入,而是增加了一个“注意力范围”,以指示接下来的状态重要点关注输入序列中的哪些部分,然后根据关注的区域来产生下一个输出。例如,在rnn模型中,attention最常用的计算公式为:其中,tx为输入序列的长度,hj为序列中第j个token所对应的隐层节点的状态,aij为hj的注意力权值,ci为hj的加权求和。116.进一步地,若有一个输入序列为“ilovechina”,则tx=3,h1=f(“i”),h2=f(“love”),h3=f(“china”),a1、a2、a3分别对应h1、h2、h3在第i层的权值。117.为了便于理解,参考图9进行说明,但并不对本发明进行限定。图9为本发明漏洞检查方法第四实施例中包含注意力机制的初始bilstm模型结构示意图,图中的inputlayer为输入层,用于将待输入的数据,即x1~xt输入至embeddinglayer,图中的embeddinglayer为嵌入层,该嵌入层用于将输入层的数据(图中的e1~et)映射成固定长度的向量(图中的向量h1~向量ht),lstmlayer为双向lstm层,利用双向lstm对嵌入层的向量h1~向量ht进行向量计算,获得更高级别的句子的向量(图中的h1~ht),图中的attentionlayer为注意力层,用于对双向lstm层中的向量(h1~ht)进行加权,加权完成后输入至outputlayer,图中的outputlayer即为输出层,图中的y即为最终加权完成后输出的结果,该结果可作为特征向量。118.在具体实现中,漏洞检测设备可将所述待训练目标特征向量输入至上述包含注意力机制的初始bilstm模型进行迭代训练,获得包含注意力机制的目标bilstm模型,然后可通过上述测试集样本对训练好的包含注意力机制的目标bilstm模型进行验证,以评估模型检测效果。119.应理解的是,本实施例通过包含注意力机制的初始bilstm模型进行模型信息,可以处理待检测java数据中的依赖关系,捕获与许多连续或间歇元素之间的关系,可以深层次挖掘漏洞潜在的特征,有效提高漏洞检测的准确度。120.此外,本发明实施例还提出一种存储介质,所述存储介质上存储有漏洞检测程序,所述漏洞检测程序被处理器执行时实现如上文所述的漏洞检测方法的步骤。121.参照图10,图10为本发明漏洞检测装置第一实施例的结构框图。122.如图10所示,本发明实施例提出的漏洞检测装置包括:数据预处理模块501,用于对获取到的待检测java数据进行预处理,获得处理后的java数据。123.数据表征模块502,用于根据所述处理后的java数据的数据类型采用对应的数据表征策略对所述处理后的java数据进行向量映射,获得目标特征向量。124.漏洞检测模块503,用于通过包含注意力机制的目标bilstm模型对所述目标特征向量进行漏洞检测,获得检测结果。125.本实施例通过对获取到的待检测java数据进行预处理,获得处理后的java数据,然后根据处理后的java数据的数据类型采用对应的数据表征策略对处理后的java数据进行向量映射,获得目标特征向量,最后通过包含注意力机制的目标bilstm模型对目标特征向量进行漏洞检测,获得检测结果。由于本实施例是根据与java数据的数据类型对应的数据表征策略获取目标特征向量,再由包含注意力机制的目标bilstm模型对目标特征向量进行漏洞检测,可以克服人工检测的局限性,及时发现软件中最有可能受到攻击的漏洞,有效避免了安全隐患。126.本发明漏洞检测装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。127.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。128.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。129.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。130.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的
技术领域
:,均同理包括在本发明的专利保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1