CN118051907A - 漏洞检测方法、装置、电子设备及存储介质 - Google Patents
漏洞检测方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN118051907A CN118051907A CN202211407960.0A CN202211407960A CN118051907A CN 118051907 A CN118051907 A CN 118051907A CN 202211407960 A CN202211407960 A CN 202211407960A CN 118051907 A CN118051907 A CN 118051907A
- Authority
- CN
- China
- Prior art keywords
- address
- instruction
- target
- transfer
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及计算机技术领域,尤其涉及一种漏洞检测方法、装置、电子设备及存储介质,所述方法包括:对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路;从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息;将所述至少一个目标转移指令对应的地址转移信息,与预设地址进行地址信息匹配,得到地址信息匹配结果;所述预设地址基于所述至少一个目标转移指令确定;基于所述地址信息匹配结果对所述待检测文件进行漏洞分析,确定所述待检测文件的漏洞检测结果。本申请能够降低漏洞检测的误报率以及漏报率,提高漏洞检测的准确性。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种漏洞检测方法、装置、电子设备及存储介质。
背景技术
现有的漏洞检测方法一般是通过异常来实现,即在漏洞检测过程中,增加各种陷阱,使得漏洞在检测过程中产生异常,从而捕获漏洞攻击;或者是基于行为的漏洞检测方法,即通过分析运行进程中是否存在敏感行为来确定是否存在漏洞。现有的漏洞检测方法存在漏洞误报以及漏报的情况,从而导致漏洞检测的准确性不高。
发明内容
本申请所要解决的技术问题在于,提供一种漏洞检测方法、装置、电子设备及存储介质,能够降低漏洞检测的误报率以及漏报率,提高漏洞检测的准确性。
为了解决上述技术问题,一方面,本申请提供了一种漏洞检测方法,包括:
对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路;所述地址转移链路包括多个转移指令,以及所述多个转移指令分别对应的地址转移信息;
从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息;
将所述至少一个目标转移指令对应的地址转移信息,与预设地址进行地址信息匹配,得到地址信息匹配结果;所述预设地址基于所述至少一个目标转移指令确定;
基于所述地址信息匹配结果对所述待检测文件进行漏洞分析,确定所述待检测文件的漏洞检测结果。
另一方面,本申请提供了一种漏洞检测装置,包括:
地址转移链路生成模块,用于对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路;所述地址转移链路包括多个转移指令,以及所述多个转移指令分别对应的地址转移信息;
信息提取模块,用于从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息;
信息匹配模块,用于将所述至少一个目标转移指令对应的地址转移信息,与预设地址进行地址信息匹配,得到地址信息匹配结果;所述预设地址基于所述至少一个目标转移指令确定;
检测结果确定模块,用于基于所述地址信息匹配结果对所述待检测文件进行漏洞分析,确定所述待检测文件的漏洞检测结果。
另一方面,本申请提供了一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由所述处理器加载并执行以实现如上述的漏洞检测方法。
另一方面,本申请提供了一种计算机存储介质,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行如上述的漏洞检测方法。
实施本申请实施例,具有如下有益效果:
本申请通过对待检测文件进行调用链检测,以得到待检测文件对应的地址转移链路,从而基于地址转移链路中各指令的地址转移信息进行分析,实现了基于底层信息进行漏洞分析检测,提高了漏洞检测能力,降低了漏洞误报率以及漏报率,提高漏洞检测的准确性。进一步地,可基于漏洞检测类型从地址转移链路中提取漏洞检测所需的指令,对提取的指令进行分析,得到在相应漏洞检测类型下的漏洞检测结果,从而实现了有针对性地进行漏洞检测,提高了漏洞检测的灵活性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
图1是本申请实施例提供的实施环境示意图;
图2是本申请实施例提供的一种漏洞检测方法流程图;
图3是本申请实施例提供的一种漏洞检测结果确定方法流程图;
图4是本申请实施例提供的一种信息匹配结果确定方法流程图;
图5是本申请实施例提供的预设堆栈示意图;
图6是本申请实施例提供的一种地址转移链路构建方法流程图;
图7是本申请实施例提供的另一种信息匹配结果确定方法流程图;
图8是本申请实施例提供的漏洞检测系统示意图;
图9是本申请实施例提供的一种漏洞检测装置示意图;
图10是本申请实施例提供的一种用于漏洞检测方法的电子设备的框图;
图11是本申请实施例提供的另一种用于漏洞检测方法的电子设备的框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参阅图1,其示出了本申请实施例提供的实施环境示意图,该实施环境可包括:用户终端110以及漏洞检测端120,用户终端110和漏洞检测端120可通过网络进行数据通信。
具体地,用户终端110可将待检测文件发送给漏洞检测端120;漏洞检测端120可对接收到的待检测文件进行漏洞检测,生成相应的漏洞检测结果,将漏洞检测结果返回给用户终端110。
进一步地,漏洞检测端120也可自动获取待检测文件,然后对待检测文件进行漏洞检测,生成相应的漏洞检测结果。
用户终端110可以基于浏览器/服务器模式(Browser/Server,B/S)或客户端/服务器模式(Client/Server,C/S)与漏洞检测端120进行通信。用户终端110可以包括:智能手机、平板电脑、笔记本电脑、数字助理、智能可穿戴设备、车载终端等类型的实体设备,也可以包括运行于实体设备中的软体,例如应用程序等。本申请实施例中的用户终端110上运行的操作系统可以包括但不限于安卓系统、IOS系统、linux、windows等。
漏洞检测端120与用户终端110可以通过有线或者无线建立通信连接,漏洞检测端120可以包括一个独立运行的服务器,或者分布式服务器,或者由多个服务器组成的服务器集群,其中服务器可以是云端服务器。
为了解决现有技术中漏洞检测准确性不高的问题,本申请实施例提供了一种漏洞检测方法,其执行主体可以为上述的漏洞检测端,请参阅图2,该方法可包括:
S210.对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路;所述地址转移链路包括多个转移指令,以及所述多个转移指令分别对应的地址转移信息。
本实施例中的待检测文件可以是用户终端出于漏洞检测需要所提交的文件,也可以是待检测终端自动获取的文件;待检测文件具体可以为内核文件、应用程序文件等。多个转移指令中可包括多种类型的转移指令,每种类型的转移指令的数量至少为一个。
地址转移链路能够表征待检测文件中各转移指令的流转方向;在对待检测文件进行调用链检测时,可收集每个转移指令以及与每个转移指令对应的地址转移信息,然后基于各个转移指令对应的地址转移信息进行地址串联,从而得到待检测文件对应的地址转移链路。具体地,地址转移信息包括起始地址以及目标地址,对于转移指令1,其起始地址为a,目标地址为b,对于转移指令2,其起始地址为b,目标地址为c,即地址b为转移指令1的目标地址,且为转移指令2的起始地址,从而对转移指令1以及转移指令2的进行地址串联,可得到地址转移链路:a→转移指令1→b→转移指令2→c。
具体可通过预设的数据收集程序对每个转移指令以及每个转移指令对应的地址转移信息进行数据收集,也可通过数据采集工具对每个转移指令以及每个转移指令对应的地址转移信息进行数据收集。对待检测文件中的转移指令以及转移指令对应的地址转移信息进行数据收集,从而实现了对待检测文件中底层信息的数据收集,底层信息更能够表征待检测文件的特征,便于后续基于收集的底层信息进行漏洞检测。
S220.从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息。
在对待检测文件进行漏洞检测时,可能需要进行多种不同漏洞检测类型的漏洞检测操作,由于每种漏洞检测类型的漏洞均具备不同的特性,相应所依据的分析数据也可能是不同的,具体可以是每种漏洞检测类型所需提取的目标转移指令的类型可能不同;例如对于漏洞检测类型1,所需提取以及分析的转移指令包括转移指令1,对于漏洞检测类型2,所需提取以及分析的转移指令包括转移指令2。
S230.将所述至少一个目标转移指令对应的地址转移信息,与预设地址进行地址信息匹配,得到地址信息匹配结果;所述预设地址基于所述至少一个目标转移指令确定。
本实施例中的各转移指令的转移均可基于地址来实现,从而通过提取的目标转移指令所对应的地址转移信息与预设地址进行信息匹配,可得到相应的信息匹配结果;提取的目标转移指令所对应的地址转移信息为待检测文件中目标转移指令所对应的实际转移地址,将实际转移地址与预设地址进行匹配。
在目标转移指令的数量为一个的情况下,可直接将目标转移指令的地址转移信息与目标转移指令对应的预设地址进行匹配,得到信息匹配结果。
在目标转移指令的数量为多个的情况下,可基于多个目标转移指令的执行顺序依次进行目标转移指令以及地址转移信息的提取,并基于多个目标转移指令的执行顺序,依次将每个目标转移指令的地址转移信息与相应的预设地址进行匹配,得到信息匹配结果。
目标转移指令对应的预设地址具体可基于目标转移指令的类型来确定,每种类型的目标转移指令均具有预设的执行规则;具体地,对于目标转移指令的类型为返回指令,其对应的预设地址为返回指令对应的调用指令的下一条指令的地址;对于目标转移指令的类型为跳转指令,其对应的预设地址为跳转指令跳转的目标函数的起始地址。
S240.基于所述地址信息匹配结果对所述待检测文件进行漏洞分析,确定所述待检测文件的漏洞检测结果。
在信息匹配结果表征实际转移地址与预设地址匹配一致的情况下,说明目标转移指令对应的地址转移信息符合预期,即待检测文件中不存在漏洞;在信息匹配结果表征实际转移地址与预设地址匹配不一致的情况下,说明目标转移指令对应的地址转移信息不符合预期,即待检测文件中存在漏洞。
本申请通过对待检测文件进行调用链检测,以得到待检测文件对应的地址转移链路,从而基于地址转移链路中各指令的地址转移信息进行分析,实现了基于底层信息进行漏洞分析检测,提高了漏洞检测能力,降低了漏洞误报率以及漏报率,提高漏洞检测的准确性。进一步地,可基于漏洞检测类型从地址转移链路中提取漏洞检测所需的指令,对提取的指令进行分析,得到在相应漏洞检测类型下的漏洞检测结果,从而实现了有针对性地进行漏洞检测,提高了漏洞检测的灵活性。
本实施例中的漏洞检测类型可包括堆栈漏洞检测类型,相应可提取与堆栈操作相关的转移指令,并且基于与堆栈操作相关的转移指令进行分析,确定待检测文件中是否存在与堆栈操作相关的漏洞;本实施例提供了一种转移指令提取方法,该方法可包括:
在所述目标漏洞检测类型为堆栈漏洞检测的情况下,从所述地址转移链路中提取调用指令、所述调用指令对应的地址转移信息、返回指令以及所述返回指令对应的地址转移信息。
所述调用指令与所述返回指令相配合,所述返回指令基于执行所述调用指令之后,目标堆栈中的地址数据进行返回。
与堆栈操作相关的转移指令包括调用指令和返回指令,调用指令与返回指令一般是成对出现的,即一个调用指令对应一个返回指令;一般情况下,在执行调用指令时,可将调用指令的下一条指令的地址压入堆栈,从而在执行与调用指令对应的返回指令时,可对压入堆栈的地址进行出栈操作,使得返回指令能够返回至出栈的地址处,即返回指令的返回地址为从堆栈中出栈的地址。这里从堆栈中出栈的地址可能为正确的地址,即调用指令的下一条指令的地址,也可能为篡改后的地址,即在将调用指令的下一条指令的地址压入堆栈后,会存在恶意数据篡改行为,将原本压入堆栈的正确地址篡改为错误地址,使得返回指令返回到错误地址处。返回指令的执行是基于堆栈中的地址的实现的,其并不会判断堆栈中的地址是否正确。
具体地,地址转移信息可包括起始地址和目标地址,在进行转移指令提取时,可基于转移指令以及转移指令对应的地址转移信息生成相应地指令操作项,每个指令操作项中包括转移指令、转移指令对应的起始地址以及转移指令对应的目标地址,例如,对一个指令操作项可表示为:
转移指令1,from:a,to:b;
其中a为转移指令1的起始地址,b为转移指令1的目标地址。
在转移指令的数量为多个时,可基于转移指令的执行顺序,依次生成相应的指令操作项序列。
在堆栈漏洞检测时,相应提取的调用指令可以包括call指令,返回指令可包括ret指令,相应得到的指令操作项序列可表示为:
call,from:a,to:b
call,from:b,to:c
ret,from:c,to:b'
ret,from:b,to:a'
其中,第一个call指令的起始地址为a,目标地址为b;第二个call指令的起始地址为b,目标地址为c;第一个ret指令的起始地址为c,目标地址为b';第二个ret指令的起始地址为b,目标地址为a';a'可能为第一个call指令的下一条指令的起始地址,也可能不是第一个call指令的下一条指令的起始地址;b'可能为第二个call指令的下一条指令的起始地址,也可能不是第二个call指令的下一条指令的起始地址;其中,第一个call指令与第二个ret指令对应,第二个call指令与第一个ret指令对应。
从而,在进行堆栈漏洞检测时,可提取与堆栈操作相关的转移指令,便于后续基于提取的与堆栈操作相关的转移指令进行堆栈漏洞检测,进而提高堆栈漏洞检测的便利性以及可靠性。
根据上述内容可知,地址转移信息可包括起始地址和目标地址,在堆栈漏洞检测时,相应提取的转移指令包括调用指令以及返回指令,与调用指令以及返回指令对应的预设地址即可基于调用指令的地址进行确定;相应可基于预设地址与实际返回地址进行匹配,得到信息匹配结果;具体请参阅图3,其示出了一种漏洞检测结果确定方法,该方法可包括:
S210.对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路;所述地址转移链路包括多个转移指令,以及所述多个转移指令分别对应的地址转移信息。
本实施例中的待检测文件可以是用户终端出于漏洞检测需要所提交的文件,也可以是待检测终端自动获取的文件;待检测文件具体可以为内核文件、应用程序文件等。多个转移指令中可包括多种类型的转移指令,每种类型的转移指令的数量至少为一个。
地址转移链路能够表征待检测文件中各转移指令的流转方向;在对待检测文件进行调用链检测时,可收集每个转移指令以及与每个转移指令对应的地址转移信息,然后基于各个转移指令对应的地址转移信息进行地址串联,从而得到待检测文件对应的地址转移链路。具体地,地址转移信息包括起始地址以及目标地址,对于转移指令1,其起始地址为a,目标地址为b,对于转移指令2,其起始地址为b,目标地址为c,即地址b为转移指令1的目标地址,且为转移指令2的起始地址,从而对转移指令1以及转移指令2的进行地址串联,可得到地址转移链路:a→转移指令1→b→转移指令2→c。
具体可通过预设的数据收集程序对每个转移指令以及每个转移指令对应的地址转移信息进行数据收集,也可通过数据采集工具对每个转移指令以及每个转移指令对应的地址转移信息进行数据收集。对待检测文件中的转移指令以及转移指令对应的地址转移信息进行数据收集,从而实现了对待检测文件中底层信息的数据收集,底层信息更能够表征待检测文件的特征,便于后续基于收集的底层信息进行漏洞检测。
S220.从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息。
在对待检测文件进行漏洞检测时,可能需要进行多种不同漏洞检测类型的漏洞检测操作,由于每种漏洞检测类型的漏洞均具备不同的特性,相应所依据的分析数据也可能是不同的,具体可以是每种漏洞检测类型所需提取的目标转移指令的类型可能不同;例如对于漏洞检测类型1,所需提取以及分析的转移指令包括转移指令1,对于漏洞检测类型2,所需提取以及分析的转移指令包括转移指令2。
S310.将所述返回指令的目标地址,与所述预设地址进行地址信息对比,得到所述地址信息匹配结果;所述预设地址基于所述调用指令的起始地址以及所述调用指令的指令长度。
S320.在所述地址信息匹配结果表征所述返回指令的目标地址,与所述预设地址不一致的情况下,确定所述待检测文件存在堆栈漏洞。
根据上述内容可知,返回指令对应的预设地址应当为调用指令的下一条指令的地址,对于调用指令的下一条指令的地址可基于调用指令的起始地址以及调用指令的长度进行确定,即预设地址=调用指令的起始地址+调用指令的长度。
在执行调用指令时,会将预设地址压入目标堆栈中;相应在执行返回指令时,可从目标堆栈中的地址进行出栈操作,出栈的地址数据即为返回指令的目标地址。在信息匹配结果表征返回指令的目标地址与预设地址不一致的情况下,说明之前压入目标堆栈的预设地址被篡改了,返回指令读取到了错误的地址,从而返回的目标地址与预设地址不一致,故可确定待检测文件中存在堆栈漏洞;在信息匹配结果表征返回指令的目标地址与预设地址一致的情况下,说明之前压入目标堆栈的预设地址没有发生变化,返回指令读取到了正确的预设地址,故可确定待检测文件中不存在堆栈漏洞。
从而通过将返回指令应当返回的预设地址与返回指令对应的目标地址进行匹配,返回指令对应的目标地址能够反映堆栈中数据变化情况,默认情况下,压入堆栈中的数据不应当被篡改,若信息匹配结果表征预设地址与目标地址不一致,则发生了数据篡改行为,从而可确定存在堆栈漏洞,即实现了有针对性地对堆栈漏洞进行检测,提高堆栈漏洞的检出率以及检测准确性。
进一步地,所述调用指令包括多个目标调用指令,所述返回指令包括多个目标返回指令,所述多个目标调用指令与所述多个目标返回指令一一对应;从而在确定了各目标调用指令对应的预设地址之后,可按照相应目标调用指令的执行顺序,将各预设地址压入预设堆栈中,以实现与目标堆栈中数据入栈顺序的对应;具体请参阅图4,其示出了一种信息匹配结果确定方法,该方法可包括:
S410.基于所述多个目标调用指令的执行顺序,将所述多个目标调用指令对应的预设地址依次压入预设堆栈。
目标调用指令对应的预设地址即为目标调用指令的下一条指令的起始地址,可根据多个目标调用指令的执行顺序,将相应的预设地址压入预设堆栈中;需要说明的是,这里的预设地址可以是在已经获取到了各目标调用指令的实际地址转移信息之后计算得到的,是用于与实际地址转移信息进行比对的;根据上述内容,在实际执行各目标调用指令时所对应的地址是自动压入到目标堆栈中,压入目标堆栈时的地址是正确的,即目标调用指令的下一条指令的起始地址,也即预设地址,但是后续过程中,可能会存在对目标堆栈中的预设地址进行篡改的行为,从而导致目标堆栈中数据可能不是原始压入堆栈的数据。基于多个目标调用指令的执行顺序对预设地址进行压栈操作,保证了各目标调用指令对应的预设地址压入预设堆栈的顺序,与各目标调用指令执行过程中对应的地址压入目标堆栈的顺序一致。
S420.基于所述多个目标返回指令的执行顺序,确定当前目标返回指令。
多个目标返回指令的执行顺序与多个目标调用指令的执行顺序是对应的,具体地,执行顺序在前的目标调用指令,其对应的目标返回指令的执行顺序在后。例如,地址转移链路为a→call→b→call→c→ret→b'→ret→a',其中该地址转移链路中的第一个ret指令与第二个call指令对应,第二个ret指令与第一个call指令对应,从而多个目标返回指令的执行顺序与这多个目标返回指令在地址转移链路中的前后顺序一致,首先执行地址转移链路中的第一个目标返回指令,然后执行地址转移链路中的第二个目标返回指令,以此类推。
S430.对所述预设堆栈的当前栈顶数据进行出栈操作;所述当前栈顶数据为当前目标返回指令对应的预设地址。
预设地址可从预设堆栈中出栈,从而在基于多个目标返回指令的执行顺序,确定当前目标返回指令时,可从预设堆栈中对栈顶数据进行出栈操作;具体可基于多个目标返回指令的执行顺序对多个目标返回指令进行遍历,以确定当前目标返回指令;因为每遍历一个目标返回指令,就会对预设堆栈中的栈顶数据进行出栈操作,从而预设堆栈中的当前栈顶数据是与当前返回指令对应的预设地址,在遍历到当前目标返回指令时,可直接对预设堆栈中的当前栈顶数据进行出栈操作,并与当前返回指令的目标地址进行对比,得到对比结果。
S440.将所述当前目标返回指令的目标地址与所述当前栈顶数据进行对比,得到所述当前目标返回指令对应的对比结果。
对于当前目标返回指令,需要确定其实际返回的目标地址与其应当返回的预设地址是否一致,从而可将当前目标返回指令的目标地址与当前栈顶数据进行对比,以得到相应的对比结果;需要说明的是,每次将当前目标返回指令的目标地址与当前栈顶数据进行对比时,需要对预设堆栈中的当前栈顶数据进行出栈操作,从而预设堆栈中的当前栈顶数据总是与当前目标返回指令对应的预设地址。
S450.基于所述当前目标返回指令对应的对比结果确定所述地址信息匹配结果。
进一步地,在转移指令的数量为多个时,可基于转移指令的执行顺序,依次生成相应的指令操作项序列。具体地,在调用指令包括多个目标调用指令以及返回指令包括多个目标返回指令时,会生成相应的指令操作项序列,每个指令在指令操作项序列中的位置顺序与每个指令的执行顺序一致。可基于多个目标返回指令在指令操作项序列的位置顺序对各目标返回指令进行遍历。
若地址转移链路为:a→call→b→call→c→ret→b+1→ret→a+1,相应的指令操作项序列为:
call,from:a,to:b
call,from:b,to:c
ret,from:c,to:b+1
ret,from:b,to:a+1
其中,第一个call指令的起始地址为a,目标地址为b;第二个call指令的起始地址为b,目标地址为c;第一个ret指令的起始地址为c,目标地址为b+1;第二个ret指令的起始地址为b,目标地址为a+1;其中a+1表示第一个call指令的下一条指令的起始地址,b+1表示第二个call指令的下一条指令的起始地址。
基于各项指令的执行顺序,对指令操作项序列中的各项指令信息进行遍历,首先分析第一项指令信息call,from:a,to:b,其下一条指令的起始地址可以确定为a+1,并将a+1压入预设堆栈;分析第二项指令信息call,from:b,to:c,其下一条指令的起始地址可以确定为b+1,并将b+1压入预设堆栈,从而得到的预设堆栈示意图请参阅图5,从栈底到栈顶的数据依次为a+1和b+1;继续分析第三项指令信息ret,from:c,to:b+1,对预设堆栈的当前栈顶数据进行出栈操作,即b+1,第三项指令信息中的ret指令的目标地址为b+1,与预设堆栈中出栈的栈顶数据一致,从而确定比对结果一致;继续对第四项指令信息ret,from:b,to:a+1进行分析,对预设堆栈的当前栈顶数据进行出栈操作,即a+1,第四项指令信息中的ret指令的目标地址为a+1,与预设堆栈中出栈的栈顶数据一致,从而确定比对结果一致,从而完成对指令操作项序列中的各项指令信息的分析,并且指令操作项序列中的各ret指令的目标地址与预设地址一致,从而确定信息匹配结果为待检测文件中各ret指令的目标地址与预设地址一致。
若指令操作项序列为:
call,from:a,to:b
call,from:b,to:c
ret,from:c,to:d
ret,from:b,to:a+1
其中,第一个call指令的起始地址为a,目标地址为b;第二个call指令的起始地址为b,目标地址为c;第一个ret指令的起始地址为c,目标地址为d;第二个ret指令的起始地址为b,目标地址为a+1;其中a+1表示第一个call指令的下一条指令的起始地址,d为任意地址,且d≠b+1,b+1表示第二个call指令的下一条指令的起始地址。
基于各项指令的执行顺序,对指令操作项序列中的各项指令信息进行遍历,首先分析第一项指令信息call,from:a,to:b,其下一条指令的起始地址可以确定为a+1,并将a+1压入预设堆栈;分析第二项指令信息call,from:b,to:c,其下一条指令的起始地址可以确定为b+1,并将b+1压入预设堆栈,从而得到的预设堆栈示意图请参阅图5,从栈底到栈顶的数据依次为a+1和b+1;继续分析第三项指令信息ret,from:c,to:d,对预设堆栈的当前栈顶数据进行出栈操作,即b+1,第三项指令信息中的ret指令的目标地址为d,d≠b+1,与预设堆栈中出栈的栈顶数据不一致,从而确定比对结果不一致,进而无需再对第四项指令信息进行分析,从而确定信息匹配结果为待检测文件中存在ret指令的目标地址与预设地址不一致。
从而在将返回指令的目标地址与预设地址进行对比之前,可基于返回指令对应的调用指令确定相应的预设地址,并基于调用指令的执行顺序一次将相应的预设地址压入堆栈中,从而在将返回指令的目标地址与预设地址进行对比时,相应预设堆栈的栈顶数据即为当前返回指令所对应的预设地址,即为要对比的预设地址,从而能够提高预设地址确定的准确性,以及提高地址对比的效率。
进一步地,地址转移信息包括目标地址,相应地本实施例还提供了一种地址转移链路构建方法,请参阅图6,该方法可包括:
S610.运行所述待检测文件。
为了避免待检测文件中可能存在漏洞而对漏洞检测端产生影响,从而可在漏洞检测端创建虚拟环境,在虚拟环境中运行待检测文件;进一步地,可在漏洞检测端检测到待检测文件加载完成之后,可自动启动对待检测文件的运行操作。
S620.在运行所述待检测文件的过程中执行所述调用指令的情况下,基于所述调用指令以及所述调用指令的目标地址,生成第一记录信息。
对待检测文件进行调用链检测时,具体可通过在运行待检测文件的过程中,对待检测文件中的各项指令的地址转移信息进行捕捉;第一记录信息中可包括在运行待检测文件过程中捕捉的调用指令以及调用指令的目标地址,相应可基于调用指令以及调用指令的目标地址计算出调用指令的起始地址。
S630.在运行所述待检测文件的过程中执行所述返回指令的情况下,基于所述目标堆栈确定所述返回指令的目标地址。
根据本实施例上述内容可知,对于具有对应关系的调用指令以及返回指令,调用指令的执行顺序一般在返回指令的执行顺序之前,从而在执行调用指令时已将相应的地址压入到目标堆栈中了,在执行返回指令的情况下,可对目标堆栈中的目标地址进行出栈操作,此时目标堆栈中的目标地址可能为实际压入目标堆栈中的地址数据,也可能是被篡改了的地址数据。
S640.基于所述返回指令,以及所述返回指令的目标地址,生成第二记录信息。
第二记录信息中可包括在运行待检测文件过程中捕捉的返回指令以及返回指令的目标地址,相应可基于返回指令以及返回指令的目标地址计算出返回指令的起始地址。
S650.基于所述第一记录信息以及所述第二记录信息进行链路构建,生成所述地址转移链路。
可基于第一记录信息中的调用指令以及调用指令的目标地址计算出调用指令的起始地址,基于第二记录信息中的返回指令以及返回指令的目标地址计算出返回指令的起始地址,从而在确定了各指令的起始地址以及目标地址后,可基于地址进行地址的串联,从而实现了地址转移链路的构建。
本实施例中通过在运行待检测文件的过程中,对各指令的地址转移信息进行检测,从而实现了对待检测文件的底层信息的自动提取,提高信息提取的效率;进一步基于提取的底层的地址转移信息进行链路构建,即通过地址转移链路实现对待检测文件的底层信息的表征,便于对待检测文件的链路信息以及文件特征进行分析,提高对待检测文件的分析深度,以及分析准确性。
本实施例中的漏洞检测类型还可包括控制流漏洞检测,控制流即可为程序中地址的转移方向;具体地,在进行控制流漏洞检测时,可从地址转移链路中提取出跳转指令,以及跳转指令对应的地址转移信息;跳转指令以及跳转指令对应的地址转移信息能够表征控制流的转移方向,从而通过对跳转指令以及跳转指令的地址转移信息进行分析,即可确定出待检测文件中是否存在控制流漏洞,从而能够提高控制流漏洞检测的便利性以及准确性。
具体地,跳转指令可包括上述的call指令,进一步还可包括jmp指令,跳转指令均对应需要跳转的目标地址,从而在执行跳转指令时,可跳转到相应的目标地址处。在正常执行过程中,跳转指令所跳转的目标地址一般为目标函数的起始地址,可以理解为要调用目标函数时,应当跳转到目标函数的起始地址,并从目标函数的起始地址依次执行目标函数包含的各条指令;相应地,请参阅图7,其示出了另一种信息匹配结果确定方法,该方法可包括:
S210.对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路;所述地址转移链路包括多个转移指令,以及所述多个转移指令分别对应的地址转移信息。
本实施例中的待检测文件可以是用户终端出于漏洞检测需要所提交的文件,也可以是待检测终端自动获取的文件;待检测文件具体可以为内核文件、应用程序文件等。多个转移指令中可包括多种类型的转移指令,每种类型的转移指令的数量至少为一个。
地址转移链路能够表征待检测文件中各转移指令的流转方向;在对待检测文件进行调用链检测时,可收集每个转移指令以及与每个转移指令对应的地址转移信息,然后基于各个转移指令对应的地址转移信息进行地址串联,从而得到待检测文件对应的地址转移链路。具体地,地址转移信息包括起始地址以及目标地址,对于转移指令1,其起始地址为a,目标地址为b,对于转移指令2,其起始地址为b,目标地址为c,即地址b为转移指令1的目标地址,且为转移指令2的起始地址,从而对转移指令1以及转移指令2的进行地址串联,可得到地址转移链路:a→转移指令1→b→转移指令2→c。
具体可通过预设的数据收集程序对每个转移指令以及每个转移指令对应的地址转移信息进行数据收集,也可通过数据采集工具对每个转移指令以及每个转移指令对应的地址转移信息进行数据收集。对待检测文件中的转移指令以及转移指令对应的地址转移信息进行数据收集,从而实现了对待检测文件中底层信息的数据收集,底层信息更能够表征待检测文件的特征,便于后续基于收集的底层信息进行漏洞检测。
S220.从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息。
在对待检测文件进行漏洞检测时,可能需要进行多种不同漏洞检测类型的漏洞检测操作,由于每种漏洞检测类型的漏洞均具备不同的特性,相应所依据的分析数据也可能是不同的,具体可以是每种漏洞检测类型所需提取的目标转移指令的类型可能不同;例如对于漏洞检测类型1,所需提取以及分析的转移指令包括转移指令1,对于漏洞检测类型2,所需提取以及分析的转移指令包括转移指令2。
S710.将所述跳转指令对应的目标地址与所述预设地址进行地址信息对比,得到所述地址信息匹配结果;所述预设地址基于目标函数的起始地址确定,所述目标函数为所述跳转指令对应的目标地址所在的函数。
在进行控制流漏洞检测时,相应的预设地址为跳转的目标函数的起始地址,具体地,可确定跳转函数对应的目标地址所属的目标函数,然后将目标函数的起始地址确定为预设地址,然后将跳转指令对应的目标地址与预设地址进行对比,得到信息匹配结果。
S720.在所述地址信息匹配结果表征所述跳转指令对应的目标地址与所述预设地址不一致的情况下,确定所述待检测文件存在控制流漏洞。
在信息匹配结果表征跳转指令对应的目标地址与预设地址不一致的情况下,说明跳转指令并没有跳转到目标函数的起始地址,而是跳转到目标函数的其他部分,这是不符合跳转指令的跳转规则的,从而可确定待检测文件存在控制流漏洞。
具体地,若地址转移链路为a→jmp→b→jmp→c→ret→b+1→ret→a+1,相应的指令操作项序列为:
(call/jmp),from:a,to:b+0x0
(call/jmp),from:b,to:c+0x0
其中a为第一条跳转指令的起始地址,b+0x0为第一条跳转指令的目标地址;b为第二条跳转指令的起始地址,c+0x0为第二条跳转指令的目标地址;依次对指令操作项序列中的各项指令信息进行遍历,对于指令信息(call/jmp),from:a,to:b+0x0,其跳转的目标地址b+0x0为函数起始地址,从而该跳转指令的目标地址与预设地址对比一致;对于指令信息(call/jmp),from:b,to:c+0x0,其跳转的目标地址c+0x0为函数起始地址,从而该跳转指令的目标地址与预设地址对比一致。相应地可确定待检测文件中不存在控制流漏洞。
若地址转移链路为a→jmp→x→jmp→c+0x10→ret→b+1→ret→a+1,相应的指令操作项序列为:
(call/jmp),from:a,to:x+0x0
(call/jmp),from:b,to:c+0x10
其中a为第一条跳转指令的起始地址,x+0x0为第一条跳转指令的目标地址;b为第二条跳转指令的起始地址,c+0x10为第二条跳转指令的目标地址;依次对指令操作项序列中的各项指令信息进行遍历,对于指令信息(call/jmp),from:a,to:x+0x0,其跳转的目标地址x+0x0为函数起始地址,从而该跳转指令的目标地址与预设地址对比一致;对于指令信息(call/jmp),from:b,to:c+0x10,其跳转的目标地址c+0x10相对于函数起始地址c+0x0发生了地址,c+0x10不是目标函数的起始地址,从而该跳转指令的目标地址与预设地址对比不一致,由此可确定待检测文件中存在控制流漏洞。
基于跳转指令的正常跳转规则,对跳转指令实际跳转的目标地址进行分析,以确定目标地址是否符合跳转预期,由于跳转指令的跳转方向即为控制流方向,从而基于跳转指令的目标地址进行分析,能够确定出待检测文件中是否存在跳转的目标地址不符合预设地址的情况,进一步确定待检测文件中是否存在控制流漏洞,从而提高控制流漏洞检测的便利性以及准确性。
同样地,在运行待检测文件的过程中,可对待检测文件中的跳转指令以及跳转指令的目标地址进行捕捉,得到相应的第三记录信息;进一步可基于上述的第一记录信息、第二记录信息以及第三记录信息确定各指令的起始地址以及目标地址,通过地址串联,得到地址转移链路。
下面以一具体示例说明本申请的实施流程,请参阅图8,其示出了漏洞检测系统示意图,漏洞检测系统可部署在上述的漏洞检测端,漏洞检测系统包括:调度服务单元以及动态检测引擎,对于漏洞检测系统的运行可在沙箱中实现,具体可基于Intel PT(processortrace)技术实现,其实现逻辑可包括:
1.接收待检测文件,生成漏洞检测任务
调度服务单元检测到待检测文件被提交时,可确定待检测文件的路径,并基于待检测文件的路径生成漏洞检测任务,将漏洞检测任务发送给动态检测引擎。
2.运行待检测文件
动态检测引擎在接收到漏洞检测任务时,基于漏洞检测任务中的路径加载待检测文件,并运行待检测文件。为了避免待检测文件中可能存在漏洞而对漏洞检测端产生影响,从而可在漏洞检测端创建虚拟环境,在虚拟环境中运行待检测文件,该虚拟环境可以为沙箱等隔离环境。
3.收集指令以及地址转移信息
动态检测引擎在运行待检测文件的过程中,对待检测文件中的各项指令以及各项指令的地址转移信息进行捕捉,收集待检测文件中各指令以及各指令对应的地址转移信息。
在运行所述待检测文件的过程中执行所述调用指令的情况下,基于所述调用指令以及所述调用指令的目标地址,生成第一记录信息;在运行所述待检测文件的过程中执行所述返回指令的情况下,基于所述返回指令,以及所述返回指令的目标地址,生成第二记录信息;在运行所述待检测文件的过程中执行跳转指令的情况下,基于跳转指令以及跳转指令的目标地址,生成第三记录信息。
4.生成地址转移链路
动态检测引擎基于收集的各指令以及各指令对应的地址转移信息,生成地址转移链路。具体基于上述的第一记录信息、第二记录信息以及第三记录信息确定各指令的起始地址以及目标地址,通过地址串联,得到地址转移链路。
5.漏洞检测
动态检测引擎基于地址转移链路进行堆栈漏洞检测以及控制流漏洞检测,得到漏洞检测结果。
对于具体的堆栈漏洞检测方法以及控制流漏洞检测方法可参阅本实施例上述内容,在此不再赘述。
6.返回漏洞检测结果
动态检测引擎将漏洞检测结果返回给调度服务单元。
通过调度服务单元与动态检测引擎相配合,能够使得对待检测文件的不同处理流程相互独立,即调度与执行相独立,适用于一个或者多个待检测文件的漏洞检测场景,提高漏洞检测的效率以及准确性。
本实施例提供的基于Intel PT的漏洞检测方法,是基于指令的地址转移信息来进行分析,更底层,更精准的捕获漏洞劫持程序控制流的时机,使漏洞检测能力更加精准,极大的降低了误报率和漏报率,并且极大的减少了被绕过的可能性,具备Intel PT特性的计算机均可使用该漏洞检测方法,从而能够兼容市面上绝大部分计算机,可以兼容内核态以及用户态。
请参阅图9,本实施例还提供了一种漏洞检测装置,可包括:
地址转移链路生成模块910,用于对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路;所述地址转移链路包括多个转移指令,以及所述多个转移指令分别对应的地址转移信息;
信息提取模块920,用于从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息;
信息匹配模块930,用于将所述至少一个目标转移指令对应的地址转移信息,与预设地址进行地址信息匹配,得到地址信息匹配结果;所述预设地址基于所述至少一个目标转移指令确定;
检测结果确定模块940,用于基于所述地址信息匹配结果对所述待检测文件进行漏洞分析,确定所述待检测文件的漏洞检测结果。
进一步地,信息提取模块920包括:
第一提取模块,用于在所述目标漏洞检测类型为堆栈漏洞检测的情况下,从所述地址转移链路中提取调用指令、所述调用指令对应的地址转移信息、返回指令以及所述返回指令对应的地址转移信息;
所述调用指令与所述返回指令相配合,所述返回指令基于执行所述调用指令之后,目标堆栈中的地址数据进行返回。
进一步地,所述地址转移信息包括起始地址和目标地址;
信息匹配模块930包括:
第一对比模块,用于将所述返回指令的目标地址,与所述预设地址进行地址信息对比,得到所述地址信息匹配结果;所述预设地址基于所述调用指令的起始地址以及所述调用指令的指令长度;
检测结果确定模块940包括:
第一确定模块,用于在所述地址信息匹配结果表征所述返回指令的目标地址,与所述预设地址不一致的情况下,确定所述待检测文件存在堆栈漏洞。
进一步地,所述调用指令包括多个目标调用指令,所述返回指令包括多个目标返回指令,所述多个目标调用指令与所述多个目标返回指令一一对应;
所述装置还包括:
第一压栈模块,用于基于所述多个目标调用指令的执行顺序,将所述多个目标调用指令对应的预设地址依次压入预设堆栈;
所述第一对比模块包括:
第二确定模块,用于基于所述多个目标返回指令的执行顺序,确定当前目标返回指令;
第一出栈模块,用于对所述预设堆栈的当前栈顶数据进行出栈操作;所述当前栈顶数据为当前目标返回指令对应的预设地址;
第二对比模块,用于将所述当前目标返回指令的目标地址与所述当前栈顶数据进行对比,得到所述当前目标返回指令对应的对比结果;
第三确定模块,用于基于所述当前目标返回指令对应的对比结果确定所述地址信息匹配结果。
进一步地,所述地址转移信息包括目标地址;
地址转移链路生成模块910包括:
文件运行模块,用于运行所述待检测文件;
第一生成模块,用于在运行所述待检测文件的过程中执行所述调用指令的情况下,基于所述调用指令以及所述调用指令的目标地址,生成第一记录信息;
第四确定模块,用于在运行所述待检测文件的过程中执行所述返回指令的情况下,基于所述目标堆栈确定所述返回指令的目标地址;
第二生成模块,用于基于所述返回指令,以及所述返回指令的目标地址,生成第二记录信息;
链路构建模块,用于基于所述第一记录信息以及所述第二记录信息进行链路构建,生成所述地址转移链路。
进一步地,信息提取模块920包括:
第二提取模块,用于在所述目标漏洞检测类型为控制流漏洞检测的情况下,从所述地址转移链路中提取跳转指令,以及所述跳转指令对应的地址转移信息;
所述跳转指令,以及所述跳转指令对应的地址转移信息能够表征控制流的转移方向。
进一步地,所述地址转移信息包括目标地址;所述信息匹配模块930包括:
第三比对模块,用于将所述跳转指令对应的目标地址与所述预设地址进行地址信息对比,得到所述地址信息匹配结果;所述预设地址基于目标函数的起始地址确定,所述目标函数为所述跳转指令对应的目标地址所在的函数;
检测结果确定模块940包括:
第五确定模块,用于在所述地址信息匹配结果表征所述跳转指令对应的目标地址与所述预设地址不一致的情况下,确定所述待检测文件存在控制流漏洞。
上述实施例中提供的装置可执行本申请任意实施例所提供方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的方法。
本实施例还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行如本实施例上述任一方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一方法。
图10是根据一示例性实施例示出的一种用于漏洞检测方法的电子设备的框图,该电子设备可以是终端,其内部结构图可以如图10所示。该电子设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种漏洞检测方法。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
图11是根据一示例性实施例示出的一种用于漏洞检测方法的电子设备的框图,该电子设备可以是服务器,其内部结构图可以如图11所示。该电子设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种漏洞检测方法。
本领域技术人员可以理解,图10和图11中示出的结构,仅仅是与本公开方案相关的部分结构的框图,并不构成对本公开方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤和顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或中断产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
本实施例中所示出的结构,仅仅是与本申请方案相关的部分结构,并不构成对本申请方案所应用于其上的设备的限定,具体的设备可以包括比示出的更多或更少的部件,或者组合某些部件,或者具有不同的部件的布置。应当理解到,本实施例中所揭露的方法、装置等,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分仅仅为一种逻辑功能的划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元模块的间接耦合或通信连接。
基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员还可以进一步意识到,结合本说明书所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但这种实现不应认为超出本申请的范围。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种漏洞检测方法,其特征在于,包括:
对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路;所述地址转移链路包括多个转移指令,以及所述多个转移指令分别对应的地址转移信息;
从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息;
将所述至少一个目标转移指令对应的地址转移信息,与预设地址进行地址信息匹配,得到地址信息匹配结果;所述预设地址基于所述至少一个目标转移指令确定;
基于所述地址信息匹配结果对所述待检测文件进行漏洞分析,确定所述待检测文件的漏洞检测结果。
2.根据权利要求1所述的方法,其特征在于,所述从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息,包括:
在所述目标漏洞检测类型为堆栈漏洞检测的情况下,从所述地址转移链路中提取调用指令、所述调用指令对应的地址转移信息、返回指令以及所述返回指令对应的地址转移信息;
所述调用指令与所述返回指令相配合,所述返回指令基于执行所述调用指令之后,目标堆栈中的地址数据进行返回。
3.根据权利要求2所述的方法,其特征在于,所述地址转移信息包括起始地址和目标地址;
所述将所述至少一个目标转移指令对应的地址转移信息,与预设地址进行地址信息匹配,得到地址信息匹配结果,包括:
将所述返回指令的目标地址,与所述预设地址进行地址信息对比,得到所述地址信息匹配结果;所述预设地址基于所述调用指令的起始地址以及所述调用指令的指令长度;
所述基于所述地址信息匹配结果对所述待检测文件进行漏洞分析,确定所述待检测文件的漏洞检测结果,包括:
在所述地址信息匹配结果表征所述返回指令的目标地址,与所述预设地址不一致的情况下,确定所述待检测文件存在堆栈漏洞。
4.根据权利要求3所述的方法,其特征在于,所述调用指令包括多个目标调用指令,所述返回指令包括多个目标返回指令,所述多个目标调用指令与所述多个目标返回指令一一对应;
所述将所述返回指令的目标地址,与所述预设地址进行地址信息对比,得到所述地址信息匹配结果之前,所述方法还包括:
基于所述多个目标调用指令的执行顺序,将所述多个目标调用指令对应的预设地址依次压入预设堆栈;
所述将所述返回指令的目标地址,与所述预设地址进行对比,得到所述地址信息匹配结果,包括:
基于所述多个目标返回指令的执行顺序,确定当前目标返回指令;
对所述预设堆栈的当前栈顶数据进行出栈操作;所述当前栈顶数据为当前目标返回指令对应的预设地址;
将所述当前目标返回指令的目标地址与所述当前栈顶数据进行对比,得到所述当前目标返回指令对应的对比结果;
基于所述当前目标返回指令对应的对比结果确定所述地址信息匹配结果。
5.根据权利要求2所述的方法,其特征在于,所述地址转移信息包括目标地址;
所述对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路包括:
运行所述待检测文件;
在运行所述待检测文件的过程中执行所述调用指令的情况下,基于所述调用指令以及所述调用指令的目标地址,生成第一记录信息;
在运行所述待检测文件的过程中执行所述返回指令的情况下,基于所述目标堆栈确定所述返回指令的目标地址;
基于所述返回指令,以及所述返回指令的目标地址,生成第二记录信息;
基于所述第一记录信息以及所述第二记录信息进行链路构建,生成所述地址转移链路。
6.根据权利要求1所述的方法,其特征在于,所述从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息,包括:
在所述目标漏洞检测类型为控制流漏洞检测的情况下,从所述地址转移链路中提取跳转指令,以及所述跳转指令对应的地址转移信息;
所述跳转指令,以及所述跳转指令对应的地址转移信息能够表征控制流的转移方向。
7.根据权利要求6所述的方法,其特征在于,所述地址转移信息包括目标地址;
所述将所述至少一个目标转移指令对应的地址转移信息,与预设地址进行地址信息匹配,得到地址信息匹配结果,包括:
将所述跳转指令对应的目标地址与所述预设地址进行地址信息对比,得到所述地址信息匹配结果;所述预设地址基于目标函数的起始地址确定,所述目标函数为所述跳转指令对应的目标地址所在的函数;
所述基于所述地址信息匹配结果对所述待检测文件进行漏洞分析,确定所述待检测文件的漏洞检测结果,包括:
在所述地址信息匹配结果表征所述跳转指令对应的目标地址与所述预设地址不一致的情况下,确定所述待检测文件存在控制流漏洞。
8.一种漏洞检测装置,其特征在于,包括:
地址转移链路生成模块,用于对待检测文件进行调用链检测,得到所述待检测文件对应的地址转移链路;所述地址转移链路包括多个转移指令,以及所述多个转移指令分别对应的地址转移信息;
信息提取模块,用于从所述地址转移链路中提取与目标漏洞检测类型相匹配的至少一个目标转移指令,以及所述至少一个目标转移指令对应的地址转移信息;
信息匹配模块,用于将所述至少一个目标转移指令对应的地址转移信息,与预设地址进行地址信息匹配,得到地址信息匹配结果;所述预设地址基于所述至少一个目标转移指令确定;
检测结果确定模块,用于基于所述地址信息匹配结果对所述待检测文件进行漏洞分析,确定所述待检测文件的漏洞检测结果。
9.一种电子设备,其特征在于,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由所述处理器加载并执行以实现如权利要求1至7任一项所述的漏洞检测方法。
10.一种计算机存储介质,其特征在于,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行如权利要求1至7任一项所述的漏洞检测方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202211407960.0A CN118051907A (zh) | 2022-11-10 | 2022-11-10 | 漏洞检测方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202211407960.0A CN118051907A (zh) | 2022-11-10 | 2022-11-10 | 漏洞检测方法、装置、电子设备及存储介质 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN118051907A true CN118051907A (zh) | 2024-05-17 |
Family
ID=91048956
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202211407960.0A Pending CN118051907A (zh) | 2022-11-10 | 2022-11-10 | 漏洞检测方法、装置、电子设备及存储介质 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN118051907A (zh) |
-
2022
- 2022-11-10 CN CN202211407960.0A patent/CN118051907A/zh active Pending
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US10395033B2 (en) | System, apparatus and method for performing on-demand binary analysis for detecting code reuse attacks | |
| US20220318382A1 (en) | Analysis device, analysis method and computer-readable recording medium | |
| CN113342431B (zh) | 函数调用栈回溯、程序异常处理方法、装置、设备及介质 | |
| CN109995751B (zh) | 上网设备标记方法、装置及存储介质、计算机设备 | |
| CN105095759A (zh) | 文件的检测方法及装置 | |
| CN105868626B (zh) | 基于控制流粗粒度完整性的监控软件业务行为的方法 | |
| CN111538665A (zh) | 程序的测试方法和装置、存储介质、电子装置 | |
| CN108459952B (zh) | 程序异常的处理方法及系统 | |
| CN108090352B (zh) | 检测系统及检测方法 | |
| CN113110965B (zh) | 异常信息的监控方法及装置、计算机存储介质、终端 | |
| KR20090005933A (ko) | 악성 프로그램을 검사하기 위하여 컴퓨터 프로그램의행동을 모델링하는 방법 및 장치 | |
| CN111198797A (zh) | 操作监控方法及装置、操作分析方法及装置 | |
| CN106709335B (zh) | 漏洞检测方法和装置 | |
| CN118051907A (zh) | 漏洞检测方法、装置、电子设备及存储介质 | |
| CN108959879A (zh) | 应用程序的数据获取方法、装置、电子设备及服务器 | |
| CN120030539A (zh) | 一种基于行为基因识别的攻击路径预测方法和系统 | |
| CN119357966A (zh) | PowerShell恶意脚本的检测方法、装置、电子设备和存储介质 | |
| EP4583019A1 (en) | Information processing device, information processing method, and program | |
| CN108874462B (zh) | 一种浏览器行为获取方法、装置、存储介质及电子设备 | |
| CN114329446B (zh) | 操作系统威胁检测方法、装置、电子设备及存储介质 | |
| JP4913353B2 (ja) | ソフトウェア動作モデル化装置及びソフトウェア動作監視装置 | |
| EP3739484B1 (en) | Method and system for detection of post compilation modification of binary images | |
| CN108875361A (zh) | 一种监控程序的方法、装置、电子设备及存储介质 | |
| CN113076540A (zh) | 一种攻击检测的方法、装置、电子设备及存储介质 | |
| CN114461350A (zh) | 容器的可用性测试方法及装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination |