漏洞检测方法、装置及设备
技术领域
本说明书涉及安全检测技术领域,尤其涉及漏洞检测方法、装置及设备。
背景技术
计算机安全隐患(Vulnerability),俗称安全漏洞(Security hole),可以是指计算机***安全方面的缺陷,使得***或其应用数据的保密性、完整性、可用性、访问控制和监测机制等面临威胁。许多安全漏洞是程序存在缺陷导致的,而相关技术中常采用特征码匹配的方式检测程序的漏洞,冗余且准确率低。
发明内容
为克服相关技术中存在的问题,本说明书提供了漏洞检测方法、装置及设备。
根据本说明书实施例的第一方面,提供一种漏洞检测方法,所述方法包括:
对待测程序的可执行二进制文件进行反编译,获得待测反汇编信息;
基于所述待测反汇编信息构建待测程序的函数特征;
将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,以识别待测程序中的函数,并将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,以根据匹配结果确定待测程序所需补丁的补丁标识;所述补丁特征数据库基于利用历史漏洞的相关文件构建的样本函数特征和样本反汇编信息而得,补丁特征数据库包括漏洞类型、补丁标识、样本函数特征、样本反汇编信息的关系;
根据所确定的补丁标识以及补丁标识与漏洞类型的映射关系,确定所述待测程序中漏洞的漏洞类型。
在一个实施例中,所述函数特征至少包括:函数名,所述函数特征还包括:控制流图和调用流图中的一种或多种特征,控制流图用于表示程序执行过程中会遍历到的路径,调用流程图用于表示程序中各函数的调用关系。
在一个实施例中,所述将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,包括:
将待测程序的函数名与补丁特征数据库中样本函数名进行匹配,以识别待测程序中的函数;
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作;
若待测程序中的函数未全部被识别,利用回溯算法将待测程序的控制流图与补丁特征数据库中的样本控制流图进行匹配,以识别待测程序中的函数;
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作;
若待测程序中的函数未完全被识别配,利用图同构算法将待测程序的调用流图与补丁特征数据库中的样本调用流图进行比较,以识别待测程序中的函数;
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作。
在一个实施例中,所述补丁特征数据库中样本函数特征和样本反汇编信息的构建步骤,包括:
若历史漏洞的相关文件为补丁文件,基于所述补丁文件构建样本函数特征和样本反汇编信息;
若历史漏洞的相关文件为补丁文件和部分源代码,利用补丁文件整个文件构建样本函数特征和样本反汇编信息;
若历史漏洞的相关文件为补丁文件和全部源代码,将所述补丁文件和全部源代码编译为二进制文件,并利用中间编译信息构建样本函数特征和样本反汇编信息;
若历史漏洞的相关文件为修补前二进制代码、修补后二进制代码或修补前后二进制代码,则基于该二进制代码构建样本函数特征和样本反汇编信息。
在一个实施例中,所述可执行二进制文件包括修复后的kernel程序二进制文件、或native程序二进制文件。
在一个实施例中,所述对待测程序的可执行二进制文件进行反编译之前,还包括:
根据可执行二进制文件的版本信息判定不存在待测程序的源代码。
根据本说明书实施例的第二方面,提供一种漏洞检测装置,所述装置包括:
反编译模块,用于:对待测程序的可执行二进制文件进行反编译,获得待测反汇编信息;
特征构建模块,用于:基于所述待测反汇编信息构建待测程序的函数特征;
特征匹配模块,用于:将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,以识别待测程序中的函数,并将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,以根据匹配结果确定待测程序所需补丁的补丁标识;所述补丁特征数据库基于利用历史漏洞的相关文件构建的样本函数特征和样本反汇编信息而得,补丁特征数据库包括漏洞类型、补丁标识、样本函数特征、样本反汇编信息的关系;
漏洞判断模块,用于:根据所确定的补丁标识以及补丁标识与漏洞类型的映射关系,确定所述待测程序中漏洞的漏洞类型。
在一个实施例中,所述函数特征至少包括:函数名,所述函数特征还包括:控制流图和调用流图中的一种或多种特征,控制流图用于表示程序执行过程中会遍历到的路径,调用流程图用于表示程序中各函数的调用关系。
在一个实施例中,所述特征匹配模块,具体用于:将待测程序的函数名与补丁特征数据库中样本函数名进行匹配,以识别待测程序中的函数;
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作;
若待测程序中的函数未全部被识别,利用回溯算法将待测程序的控制流图与补丁特征数据库中的样本控制流图进行匹配,以识别待测程序中的函数;
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作;
若待测程序中的函数未完全被识别配,利用图同构算法将待测程序的调用流图与补丁特征数据库中的样本调用流图进行比较,以识别待测程序中的函数;
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作。
在一个实施例中,所述装置还包括补丁特征数据库构建模块,用于:
若历史漏洞的相关文件为补丁文件,基于所述补丁文件构建样本函数特征和样本反汇编信息;
若历史漏洞的相关文件为补丁文件和部分源代码,利用补丁文件整个文件构建样本函数特征和样本反汇编信息;
若历史漏洞的相关文件为补丁文件和全部源代码,将所述补丁文件和全部源代码编译为二进制文件,并利用中间编译信息构建样本函数特征和样本反汇编信息;
若历史漏洞的相关文件为修补前二进制代码、修补后二进制代码或修补前后二进制代码,则基于该二进制代码构建样本函数特征和样本反汇编信息。
在一个实施例中,所述可执行二进制文件包括修复后的kernel程序二进制文件、或native程序二进制文件。
在一个实施例中,所述反编译模块,还用于:在对待测程序的可执行二进制文件进行反编译之前,根据可执行二进制文件的版本信息判定不存在待测程序的源代码。
根据本说明书实施例的第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如下方法:
对待测程序的可执行二进制文件进行反编译,获得待测反汇编信息;
基于所述待测反汇编信息构建待测程序的函数特征;
将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,以识别待测程序中的函数,并将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,以根据匹配结果确定待测程序所需补丁的补丁标识;所述补丁特征数据库基于利用历史漏洞的相关文件构建的样本函数特征和样本反汇编信息而得,补丁特征数据库包括漏洞类型、补丁标识、样本函数特征、样本反汇编信息的关系;
根据所确定的补丁标识以及补丁标识与漏洞类型的映射关系,确定所述待测程序中漏洞的漏洞类型。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书实施例利用历史漏洞的相关文件,特别是补丁文件,生成包括函数特征和反汇编信息的补丁特征数据库,并利用待测程序的可执行二进制文件构建待测程序的特征数据库,先将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,以识别尽可能多的函数,再将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,以根据匹配结果确定待测程序是否存在对应的补丁,并在存在对应补丁时,根据补丁推测待测程序的漏洞类型。从而既提高了漏洞检测效率,又提高了漏洞检测准确率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种漏洞检测方法的流程图。
图2是本说明书根据一示例性实施例示出的一种特征匹配示意图。
图3是本说明书根据一示例性实施例示出的一种特征构建示意图。
图4是本说明书根据一示例性实施例示出的另一种漏洞检测方法流程图。
图5是本说明书根据一示例性实施例示出的一种漏洞检测装置所在计算机设备的一种硬件结构图。
图6是本说明书根据一示例性实施例示出的一种漏洞检测装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
安全漏洞可以是指受限制的计算机、组件、应用程序或其他联机资源的无意中留下的不受保护的入口点。
漏洞可以是硬件软件或使用策略上的缺陷,会使计算机遭受病毒和黑客攻击。
未修补安全漏洞可以是指某些组织或厂商已经公布了漏洞细节或部分漏洞细节,但开发者未修补的漏洞。
security patch(安全补丁)是指漏洞修补前的源代码和修补后的源代码,通过diff(不同)产生的补丁,同样包括git,svn等格式的patch文件(补丁文件)。
本说明书实施例利用历史漏洞的相关文件,特别是补丁文件,生成包括函数特征和反汇编信息(也可以称为待测反汇编信息)的补丁特征数据库,并利用待测程序的可执行二进制文件构建待测程序的特征数据库,先将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,以识别尽可能多的函数,再将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,以根据匹配结果确定待测程序是否存在对应的补丁,并在存在对应补丁时,根据补丁推测待测程序的漏洞类型。从而既提高了漏洞检测效率,又提高了漏洞检测准确率。
以下结合附图对本说明书实施例进行示例说明。
如图1所示,是本说明书根据一示例性实施例示出的一种漏洞检测方法的流程图,所述方法包括:
在步骤102中,对待测程序的可执行二进制文件进行反编译,获得待测反汇编信息;
在步骤104中,基于所述待测反汇编信息构建待测程序的函数特征;
在步骤106中,将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,以识别待测程序中的函数,并将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,以根据匹配结果确定待测程序所需补丁的补丁标识;所述补丁特征数据库基于利用历史漏洞的相关文件构建的样本函数特征和样本反汇编信息而得,补丁特征数据库包括漏洞类型、补丁标识、样本函数特征、样本反汇编信息的关系;
在步骤108中,根据所确定的补丁标识以及补丁标识与漏洞类型的映射关系,确定所述待测程序中漏洞的漏洞类型。
其中,待测程序可以是***中的kernel程序(内核程序)、native程序(***程序),还可以是第三方应用或第三方库等。例如,可以是Android程序、ios程序,linux程序,windows程序等。
反编译,也可以称为反汇编(Disassembly):把目标代码转为汇编代码的过程,也可以是把机器语言转换为汇编语言代码、低级转高级语言。对待测程序的可执行二进制文件进行反编译,可以获得待测反汇编信息。利用待测反汇编信息可以构建待测程序的特征数据库。特征数据库可以包括函数特征和待测反汇编信息。补丁特征数据库可以是利用历史漏洞的相关文件构建的样本函数特征和样本反汇编信息而得。将特征数据库与补丁特征数据库进行匹配,目的是为了实现补丁匹配。函数特征匹配可以理解为粗粒度补丁匹配,反汇编信息匹配可以理解为补丁细节匹配,从而实现既提高匹配效率,又提高匹配准确性。通过匹配操作,可以获得待测程序所对应的补丁,进而基于补丁推测待测程序的漏洞类型。
函数特征可以是用于描述待测程序中函数的特征。为了提高检测效率,在一个实施例中,函数特征至少包括函数名,相应的,补丁特征数据库至少包括样本函数名。由于待测程序中往往不止一个函数,因此,待测程序的函数特征可能包括多个函数名。函数名可以以函数表的形式进行存储。
将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,目的是为了识别尽可能多的函数。因此,可以将待测程序的函数名与补丁特征数据库中样本函数名进行匹配,以识别待测程序中的函数;若待测程序中的函数全部被识别,则将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配(即执行反汇编信息匹配操作)。
然而,实际应用中,可能因为无法提取全部函数名或其他因素导致无法通过函数名匹配的方式识别出待测程序中的所有函数,因此,在一个实施例中,所述函数特征还包括:控制流图和调用流图中的一种或多种特征。控制流图又可以称为控制流程图,用于表示程序执行过程中会遍历到的路径。例如,可以获取反汇编信息中的调用函数和跳转指令的关系,根据获取到的关系生成待测程序的控制流程图。调用流程图可以用于表示程序中各函数的调用关系。相应的,补丁特征数据库中的样本函数特征还可以包括:样本控制流图和样本调用流图中的一种或多种特征。
在一个例子中,可以将待测程序的控制流图与补丁特征数据库中的样本控制流图进行匹配,以识别待测程序中的函数。在另一个例子中,将待测程序的调用流图与补丁特征数据库中的样本调用流图进行比较,以识别待测程序中的函数。
可见,不管是从控制流图的角度,还是从调用流图的角度,都可以提高待测程序中函数的识别率。
以下以其中一种组合进行示例说明。如图2所示,是本说明书根据一示例性实施例示出的一种特征匹配示意图。在该示意图中,待测程序的特征数据库22包括函数表221、控制流图222、调用图223以及反汇编信息224。补丁特征数据库24包括样本函数表241、样本控制流图242、样本调用图243以及样本反汇编信息244。将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,可以包括:
将待测程序的函数名与补丁特征数据库中样本函数名进行匹配,以识别待测程序中的函数。例如,可以采用符号匹配(symbol match)算法或匈牙利算法(HungarianAlgorithm)进行函数名匹配。
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作。
若待测程序中的函数未全部被识别,将待测程序的控制流图与补丁特征数据库中的样本控制流图进行匹配,以识别待测程序中的函数。例如,可以采用回溯算法(Backtrackalgorithm)或函数匹配(Function match)算法进行控制流图的匹配。
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作。
若待测程序中的函数未完全被识别配,将待测程序的调用流图与补丁特征数据库中的样本调用流图进行比较,以识别待测程序中的函数。例如,可以利用图同构算法(graphisomorphism)进行调用流图比较。
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作。若待测程序中的函数未完全被识别配,循环上述步骤,直到无变化位置,以实现识别尽可能多的函数。
针对将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,可以采用乱序语言比较和替换比较。在一个实施例中,可以将待测反汇编信息按结构化进行信息存储,例如:
可以理解的是,待测反汇编信息采用的存储结构与样本反汇编信息采用的存储结构相同,以实现格式归一,去除冗杂信息的同时,便于快速匹配。关于将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,还可以从反汇编信息中提取按指令级特征或文本级特征,按指令级特征或文本级特征的方式进行匹配。例如,可以是Arm指令、X86指令等。文本特征这一块,可以是将整个程序翻译成文本,通过文本进行匹配。
该实施例通过函数级别的特征和文本二进制级别的特征和指令级别的特征相融合,并实现了一套自定义的引擎,实现了精准的特征匹配。
关于补丁特征数据库,可以是根据历史补丁的补丁文件提取特征构建而得。补丁特征数据库可以包括漏洞类型、补丁标识、样本函数特征、样本反汇编信息的关系。其中,样本函数特征和样本反汇编信息都可以作为特征。在一个实施例中,可以将历史漏洞分为4个级别,例如,只有补丁文件的情况;只有补丁文件(安全补丁)和部分代码的情况;有补丁文件(安全补丁)和全部代码的情况;没有补丁文件(安全补丁),只有修补前二进制代码、修补后二进制代码或修补前后二进制代码的情况。针对不同情况,都可以提取特征,以构建补丁特征数据库。例如,如图3所示,是本说明书根据一示例性实施例示出的一种特征构建示意图。所述补丁特征数据库中样本函数特征和样本反汇编信息的构建步骤,可以包括:
在步骤302中,若历史漏洞的相关文件为补丁文件,基于所述补丁文件构建样本函数特征和样本反汇编信息。
只有补丁文件的情况,可以直接分析patch文件特征,所含patch的文件数量和修补的函数名称,尽可能的提取特征。
在步骤304中,若历史漏洞的相关文件为补丁文件和部分源代码,利用整个文件的补丁文件构建样本函数特征和样本反汇编信息。
有安全补丁和部分代码,但无法完全编译,因此可以预编译补丁所在文件,从不完整的编译信息中提取特征。
在步骤306中,若历史漏洞的相关文件为补丁文件和全部源代码,将所述补丁文件和全部源代码编译为二进制文件,并利用中间编译信息构建样本函数特征和样本反汇编信息。
针对有安全补丁和全部代码的情况,可以直接编译生成二进制文件,使用完整的中间编译信息,提取特征。
在步骤308中,若历史漏洞的相关文件为修补前二进制代码、修补后二进制代码或修补前后二进制代码,则基于该二进制代码构建样本函数特征和样本反汇编信息。
由上述实施例可见,通过对历史漏洞的四种情况都进行特征提取,可以获得较全面的补丁特征数据库,进而识别更多的漏洞。
在一个实施例中,步骤102至108可以是在查找不到待测程序源代码的前提下才执行,因此,所述对待测程序的可执行二进制文件进行反编译之前,还包括:根据可执行二进制文件的版本信息判定不存在待测程序的源代码。而针对可查询到待测程序源代码的情况,可以直接使用安全补丁(security patch)文件根据源代码匹配未修补漏洞。
在另一个实施例中,可执行二进制文件可以是修复后的kernel程序二进制文件,可以是native程序二进制文件。
可见,通过将kernel程序二进制文件进行修复,可以获得kernel程序的完整信息,以便kernel程序的二进制文件能被正常反编译。
以上实施方式中的各种技术特征可以任意进行组合,只要特征之间的组合不存在冲突或矛盾,但是限于篇幅,未进行一一描述,因此上述实施方式中的各种技术特征的任意进行组合也属于本说明书公开的范围。
以下以其中一种组合进行示例说明。如图4所示,是本说明书根据一示例性实施例示出的另一种漏洞检测方法流程图。在该实施例中,根据android二进制文件的版本信息,判断是否能查询到待测程序的源代码(步骤402),如果有,直接使用源代码级别检测方法检测待测程序中未修补漏洞。其中,源代码级别检测,可以是直接使用security patch文件根据源代码匹配未修补漏洞。若没有源代码,可以判断代码格式。如果待测程序为Androidkernel二进制程序,交由410重建模块进行修复代码(步骤406),修复完成后进入步骤412构建特征库。如果待测程序为Android native二进制程序,则进入步骤412构建特征库。在步骤412中,分析二进制文件,构建整个二进制文件的特征数据库,也可以称为待测程序的特征数据库。特征数据库可以包含:函数表、控制流图、调用流图以及反汇编信息。待测程序的特征数据库与补丁特征数据库进行动态最大匹配,判断待测程序是否存在漏洞,以及存在的漏洞类型。
本说明书实施例自定义了一套精准的二进制代码文件特征查询匹配***。更简便的融入和嵌入到各种操作***和嵌入式引擎中,手持设备等中,满足高精度要求。另外,可以利用本方案进行***组件特征快速匹配。
与前述漏洞检测方法的实施例相对应,本说明书还提供了漏洞检测装置及其所应用的电子设备的实施例。
本说明书漏洞检测装置的实施例可以应用在计算机设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在计算机设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图5所示,为本说明书漏洞检测装置所在计算机设备的一种硬件结构图,除了图5所示的处理器510、网络接口520、内存530、以及非易失性存储器540之外,实施例中漏洞检测装置531所在的计算机设备通常根据该设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图6所示,是本说明书根据一示例性实施例示出的一种漏洞检测装置的框图,所述装置包括:
反编译模块62,用于:对待测程序的可执行二进制文件进行反编译,获得待测反汇编信息;
特征构建模块64,用于:基于所述待测反汇编信息构建待测程序的函数特征;
特征匹配模块66,用于:将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,以识别待测程序中的函数,并将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,以根据匹配结果确定待测程序所需补丁的补丁标识;所述补丁特征数据库基于利用历史漏洞的相关文件构建的样本函数特征和样本反汇编信息而得,补丁特征数据库包括漏洞类型、补丁标识、样本函数特征、样本反汇编信息的关系;
漏洞判断模块68,用于:根据所确定的补丁标识以及补丁标识与漏洞类型的映射关系,确定所述待测程序中漏洞的漏洞类型。
在一个实施例,所述函数特征至少包括:函数名,所述函数特征还包括:控制流图和调用流图中的一种或多种特征,控制流图用于表示程序执行过程中会遍历到的路径,调用流程图用于表示程序中各函数的调用关系。
在一个实施例,所述特征匹配模块66,具体用于:将待测程序的函数名与补丁特征数据库中样本函数名进行匹配,以识别待测程序中的函数;
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作;
若待测程序中的函数未全部被识别,利用回溯算法将待测程序的控制流图与补丁特征数据库中的样本控制流图进行匹配,以识别待测程序中的函数;
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作;
若待测程序中的函数未完全被识别配,利用图同构算法将待测程序的调用流图与补丁特征数据库中的样本调用流图进行比较,以识别待测程序中的函数;
若待测程序中的函数全部被识别,则执行反汇编信息匹配操作。
在一个实施例,所述装置还包括补丁特征数据库构建模块(图6未示出),用于:若历史漏洞的相关文件为补丁文件,基于所述补丁文件构建样本函数特征和样本反汇编信息;
若历史漏洞的相关文件为补丁文件和部分源代码,利用补丁文件整个文件构建样本函数特征和样本反汇编信息;
若历史漏洞的相关文件为补丁文件和全部源代码,将所述补丁文件和全部源代码编译为二进制文件,并利用中间编译信息构建样本函数特征和样本反汇编信息;
若历史漏洞的相关文件为修补前二进制代码、修补后二进制代码或修补前后二进制代码,则基于该二进制代码构建样本函数特征和样本反汇编信息。
在一个实施例,所述可执行二进制文件包括修复后的kernel程序二进制文件、或native程序二进制文件。
在一个实施例,所述反编译模块,还用于:在对待测程序的可执行二进制文件进行反编译之前,根据可执行二进制文件的版本信息判定不存在待测程序的源代码。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
相应的,本说明书实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如下方法:
对待测程序的可执行二进制文件进行反编译,获得待测反汇编信息;
基于所述待测反汇编信息构建待测程序的函数特征;
将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,以识别待测程序中的函数,并将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,以根据匹配结果确定待测程序所需补丁的补丁标识;所述补丁特征数据库基于利用历史漏洞的相关文件构建的样本函数特征和样本反汇编信息而得,补丁特征数据库包括漏洞类型、补丁、样本函数特征、样本反汇编信息的关系;
根据所确定的补丁标识以及补丁标识与漏洞类型的映射关系,确定所述待测程序中漏洞的漏洞类型。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
一种计算机存储介质,所述存储介质中存储有程序指令,所述程序指令包括:
对待测程序的可执行二进制文件进行反编译,获得待测反汇编信息;
基于所述待测反汇编信息构建待测程序的函数特征;
将待测程序的函数特征与补丁特征数据库中的样本函数特征进行匹配,以识别待测程序中的函数,并将待测反汇编信息与补丁特征数据库中匹配上的样本函数所对应的样本反汇编信息进行匹配,以根据匹配结果确定待测程序所需补丁的补丁标识;所述补丁特征数据库基于利用历史漏洞的相关文件构建的样本函数特征和样本反汇编信息而得,补丁特征数据库包括漏洞类型、补丁、样本函数特征、样本反汇编信息的关系;
根据所确定的补丁标识以及补丁标识与漏洞类型的映射关系,确定所述待测程序中漏洞的漏洞类型。
本说明书实施例可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。