CN117034278A - 漏洞检测方法、装置、存储介质及电子设备 - Google Patents
漏洞检测方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN117034278A CN117034278A CN202310841305.4A CN202310841305A CN117034278A CN 117034278 A CN117034278 A CN 117034278A CN 202310841305 A CN202310841305 A CN 202310841305A CN 117034278 A CN117034278 A CN 117034278A
- Authority
- CN
- China
- Prior art keywords
- program
- target
- file
- vulnerability detection
- function
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 153
- 238000000034 method Methods 0.000 claims abstract description 74
- 238000012545 processing Methods 0.000 claims abstract description 20
- 230000006870 function Effects 0.000 claims description 153
- 238000004458 analytical method Methods 0.000 claims description 10
- 230000004044 response Effects 0.000 claims description 4
- 238000005516 engineering process Methods 0.000 abstract description 21
- 230000008569 process Effects 0.000 description 33
- 244000035744 Hura crepitans Species 0.000 description 22
- 238000004590 computer program Methods 0.000 description 15
- 230000007246 mechanism Effects 0.000 description 14
- 230000003068 static effect Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000012544 monitoring process Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 230000006399 behavior Effects 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种漏洞检测方法、装置、存储介质及电子设备。其中,该方法包括:确定目标程序,以及目标程序中的目标函数,其中,目标程序中存在预定程序漏洞,目标函数为预定程序漏洞的触发点;对目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,扩容后的程序文件中包括有预设字节大小的新建文件空间;将第一代码写入至新建文件空间,得到改造后的程序文件,其中,第一代码用于在目标函数执行结束时,调用漏洞检测函数。本发明解决了相关技术中无法识别出不进行接口调用的漏洞,导致的漏洞识别准确性低,程序运行风险大的技术问题。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种漏洞检测方法、装置、存储介质及电子设备。
背景技术
沙箱监控进程的前提是获取目标进程的进程标识(PID),而组件对象模型(Component Object Model,简称COM)机制启动进程依赖一个COM对象注册机制,通过组件对象模型COM机制启动的进程并没有返回进程标识,所以沙箱的进程监控模块无法监控在样本检测过程中通过COM机制启动的进程。因此现有的沙箱检测技术,都不能对通过COM机制启动的进程进行监控。
在现有软件安全检测技术中,应用接口拦截(API hook)技术是一种常用的检测技术。API hook是一种API调用拦截技术。当目标进程调用一个特定的应用程序接口API时,使用API hook技术可以拦截、暂停这次调用、取当前栈数据、检查栈数据、判断是否存在漏洞利用。API hook技术做漏洞利用检测的前提是目标漏洞在漏洞利用过程中调用了关键API,但无法识别出不进行接口调用的漏洞。
综上可知,相关技术中无法识别出不进行接口调用的漏洞,漏洞识别准确性较低,程序运行风险较大。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种漏洞检测方法、装置、存储介质及电子设备,以至少解决相关技术中无法识别出不进行接口调用的漏洞,导致的漏洞识别准确性低,程序运行风险大的技术问题。
根据本发明实施例的一个方面,提供了一种漏洞检测方法,包括:确定目标程序,以及上述目标程序中的目标函数,其中,上述目标程序中存在预定程序漏洞,上述目标函数为上述预定程序漏洞的触发点;对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,上述扩容后的程序文件中包括有预设字节大小的新建文件空间;将第一代码写入至上述新建文件空间,得到改造后的程序文件,其中,上述第一代码用于在上述目标函数执行结束时,调用漏洞检测函数。
可选的,在上述将第一代码写入至上述新建文件空间,得到上述改造后的程序文件之前,上述方法还包括:确定目标函数执行结束时的目标代码;响应于对上述目标代码的替换操作,将上述目标代码替换为第一指令,得到改造后的目标程序,其中,上述第一指令用于链接至改造后的程序文件中的上述新建文件空间,以使得上述改造后的目标程序执行上述第一代码。
可选的,在上述将第一代码写入至上述新建文件空间,得到改造后的程序文件之后,上述方法还包括:将样本检测环境中的上述目标程序替换为上述改造后的目标程序,并将动态链接库传入上述样本检测环境,其中,上述动态链接库中包括上述漏洞检测函数;在确定上述样本检测环境中的上述改造后的目标程序启动的情况下,在上述改造后的目标程序中运行样本数据,并在上述改造后的目标程序运行至上述第一指令的情况下,通过执行上述改造后的程序文件中存储的上述第一代码调用上述漏洞检测函数,对上述改造后的目标程序进行漏洞检测,得到漏洞检测结果。
可选的,上述对上述改造后的目标程序进行漏洞检测,得到漏洞检测结果,包括:获取预定字节的栈数据;基于上述预定字节的栈数据,确定上述目标函数的当前返回地址;判断上述当前返回地址是否为目标返回地址,得到判断结果;根据上述判断结果确定上述漏洞检测结果。
可选的,上述根据上述判断结果确定上述漏洞检测结果,包括:若上述判断结果指示上述当前返回地址为上述目标返回地址,则确定漏洞检测结果为:不存在漏洞利用;若上述判断结果指示上述当前返回地址不为上述目标返回地址,则确定漏洞检测结果为:存在漏洞利用,并将上述预定字节的栈数据保存至目标数据文件。
可选的,在上述判断上述当前返回地址是否为目标返回地址,得到判断结果之前,上述方法还包括:确定上述改造后的目标程序中上述目标函数的调用位置;基于上述目标函数的调用位置,确定上述目标函数的上述目标返回地址。
可选的,在上述对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件之前,上述方法还包括:确定目标操作系统对上述程序文件的解析逻辑;基于上述解析逻辑,对所属新建文件空间进行属性参数修改,以使得上述新建文件空间能够被识别和/或加载。
根据本发明实施例的另一方面,还提供了一种漏洞检测装置,包括:第一确定模块,用于确定目标程序,以及上述目标程序中的目标函数,其中,上述目标程序中存在预定程序漏洞,上述目标函数为上述预定程序漏洞的触发点;第一扩容模块,用于对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,上述扩容后的程序文件中包括有预设字节大小的新建文件空间;第一写入模块,用于将第一代码写入至上述新建文件空间,得到改造后的程序文件,其中,上述第一代码用于在上述目标函数执行结束时,调用漏洞检测函数。
根据本发明实施例的另一方面,还提供了一种非易失性存储介质,上述非易失性存储介质存储有多条指令,上述指令适于由处理器加载并执行任意一项上述的漏洞检测方法。
根据本发明实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,上述存储器用于存储一个或多个程序,其中,当上述一个或多个程序被上述一个或多个处理器执行时,使得上述一个或多个处理器实现任意一项上述的漏洞检测方法。
在本发明实施例中,通过确定目标程序,以及上述目标程序中的目标函数,其中,上述目标程序中存在预定程序漏洞,上述目标函数为上述预定程序漏洞的触发点;对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,上述扩容后的程序文件中包括有预设字节大小的新建文件空间;将第一代码写入至上述新建文件空间,得到改造后的程序文件,其中,上述第一代码用于在上述目标函数执行结束时,调用漏洞检测函数的方式,达到了程序执行到特定位置后能够成功调用漏洞检测函数进行漏洞检测的目的,从而实现了对不进行接口调用的漏洞进行准确识别,降低程序运行风险的技术效果,进而解决了相关技术中无法识别出不进行接口调用的漏洞,导致的漏洞识别准确性低,程序运行风险大的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的漏洞触发流程的示意图;
图2是根据本发明实施例的一种漏洞检测方法的示意图;
图3是根据本发明实施例的一种可选的程序改造示意图;
图4是根据本发明实施例的一种可选的漏洞检测模块构建流程图;
图5是根据本发明实施例的一种可选的沙盒检测流程图;
图6是根据本发明实施例的一种漏洞检测装置的示意图;
图7是根据本发明实施例的一种电子设备的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,为方便理解本发明实施例,下面将对本发明中所涉及的部分术语或名词进行解释说明:
漏洞利用,一般是指在网络攻防中攻击者利用程序中的一些漏洞,在未获得授权许可的情况下,使程序运行攻击者的恶意代码,从而获取受害者计算机系统运行任意命令权限的过程。
栈溢出,指计算机程序中经典的程序漏洞之一。计算机程序在接收、处理数据时,未计算或者未正确计算局部变量的大小,导致当接收到的数据大小大于局部变量的大小时,将发生栈溢出。溢出部分的数据会覆盖其他局部变量的数据,影响计算机程序的正常运行,甚至程序崩溃。
实施例1
组件对象模型(Component Object Model,COM)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。简单的来说,在编写新程序的时候使用这套技术,可以调用已经编译过的计算机程序。微软的Office Word中的公式编辑模块就是通过COM技术调用第三方软件EQNEDT32.exe实现的。EQNEDT32.exe中存在一个利用稳定,破坏性极强的栈溢出漏洞,漏洞编号为CVE-2017-11882。例如图1是根据现有技术的一种可选的漏洞触发流程的示意图,CVE-2017-11882的漏洞触发流程如图1所示,一个doc文件包含了漏洞利用的恶意数据,当这个恶意doc文件被winword.exe打开时,winword.exe通过COM机制启动EQNEDT32.exe,EQNEDT32.exe会处理恶意doc中的恶意数据,从而触发漏洞利用,执行任意命令。沙箱监控进程的前提是获取目标进程的进程标识(PID),而COM机制启动进程依赖一个COM对象注册机制,通过组件对象模型COM机制启动的进程并没有返回进程标识,所以沙箱的进程监控模块无法监控在样本检测过程中通过COM机制启动的进程。在现有的沙箱检测技术,都没有对通过COM机制启动的进程进行监控。
在现有软件安全检测技术中,API hook技术是一种常用的检测技术。API hook是一种API调用拦截技术。当目标进程调用一个特定的应用程序接口API时,使用API hook技术可以拦截、暂停这次调用、取当前栈数据、检查栈数据。判断是否存在漏洞利用。但是用API hook技术做漏洞利用检测的前提是目标漏洞在漏洞利用过程中调用了关键API,比如VirtualProtect()。存在一部分漏洞,例如CVE-20177-11882,在漏洞利用过程中可以直接控制EQNEDT32.exe的执行流,执行恶意代码,而不需要调用任何API。API hook无法识别出不进行接口调用的漏洞。
在现有的沙箱检测技术中,不能对通过COM机制启动的进程进行监控;在现有软件安全检测技术中,API hook无法识别出不进行接口调用的漏洞,上述方法均无法识别出不进行接口调用的漏洞,漏洞识别准确性较低,程序运行风险较大。
基于上述问题,本发明实施例提供了一种漏洞检测的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图2是根据本发明实施例的漏洞检测方法的流程图,如图2所示,该方法包括如下步骤:
步骤S102,确定目标程序,以及上述目标程序中的目标函数,其中,上述目标程序中存在预定程序漏洞,上述目标函数为上述预定程序漏洞的触发点。
可选地,确定存在预定程序漏洞的目标程序,以及是预定程序漏洞触发点的目标函数。以目标程序EQNEDT32.exe为例,EQNEDT32.exe中存在预定程序漏洞CVE-2017-11882,通过目标函数sub_41160F()可以触发执行目标漏洞CVE-2017-11882。通过对确定的目标程序的程序文件中创建文件空间写入相应的代码,使得程序执行到特定位置后能够调用漏洞检测函数,准确识别不进行接口调用的漏洞。
步骤S104,对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,上述扩容后的程序文件中包括有预设字节大小的新建文件空间。
可选地,上述目标程序为计算机程序,上述目标函数为计算机程序对应的计算机程序文件。计算机程序指在内存中运行的软件应用,而计算机程序文件则是保存该软件应用所需代码和数据信息的文件,通常以可执行文件或源代码格式存在。对目标程序的程序文件利用静态插桩技术进行扩容处理,得到扩容后的程序文件。其中,静态插桩指通过二进制重写技术在指定位置插入监控代码,即在汇编语言的级别上进行插桩。通过对目标程序的程序文件进行扩容处理,解决了静态插桩插入监控代码需要新的文件空间的问题。
在一种可选的实施例中,在上述对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件之前,上述方法还包括:确定目标操作系统对上述程序文件的解析逻辑;基于上述解析逻辑,对所属新建文件空间进行属性参数修改,以使得上述新建文件空间能够被识别和/或加载。
可选地,静态插桩技术不仅需要对目标程序的程序文件进行扩容,还需要根据可执行文件格式定义给新增加的文件空间赋予属性,使操作系统能够识别新增加的文件空间。因此基于目标操作系统对程序文件的解析逻辑,对上述新建文件空间进行属性参数修改,使得改造后的目标程序的新建文件空间能够被有效识别和/或加载。
步骤S106,将第一代码写入至上述新建文件空间,得到改造后的程序文件,其中,上述第一代码用于在上述目标函数执行结束时,调用漏洞检测函数。
可选地,利用静态插桩技术将第一代码直接写入目标程序的程序文件中,其中第一代码用于引导目标程序执行漏洞检测函数,并且在执行漏洞检测函数之后,不影响目标程序的后续运行,从而达到不依赖API hook来进行漏洞代码检测的目的。
在一种可选的实施例中,在上述将第一代码写入至上述新建文件空间,得到上述改造后的程序文件之前,上述方法还包括:确定目标函数执行结束时的目标代码;响应于对上述目标代码的替换操作,将上述目标代码替换为第一指令,得到改造后的目标程序,其中,上述第一指令用于链接至改造后的程序文件中的上述新建文件空间,以使得上述改造后的目标程序执行上述第一代码。
可选地,首先使用反编译工具,定位目标函数执行结束时的目标代码并将其改造,将目标代码替换为第一指令,得到改造后的目标程序,改造的目的在于在目标函数执行结束前执行漏洞检测函数。其中,第一指令可以但不限于为jmp指令,通过jmp覆盖内存中的目标函数结束指令完成跳转。
可选地,以检测CVE-2017-11882为例,确定目标程序为EQNEDT32.exe,目标函数为sub_41160F(),静态插桩改造的流程如下:首先使用反编译工具,定位目标函数执行结束时的代码并将其改造,将目标函数结束部分(loc_411870处)的代码修改成“jmp”指令,引导目标程序执行第一代码,可以理解为给目标函数进行汇编指令级的扩写。第一代码的位置为“loc_48E000”即新创建文件空间。
例如,目标程序改造前,目标函数结束部分的代码如下:
loc_411870:
pop edi
pop edi
pop edi
leave
retn
sub_41160F endp
采用“jmp”指令替换目标函数结束部分的代码,得到改造后的目标程序结尾部分的代码如下:
loc_411870:
jmp loc_48E000
sub_41160F endp;sp-analy
可选地,第一代码部分代码如下所示,通过应用接口加载动态链接库(APILoadLibrary)和获取动态链接库中的输出库函数地址(GetProcAddress),加载漏洞检测模块即执行漏洞检测函数。
ext1:0048E005 push offset aMonitorX86Dll;lpLibFileName
ext1:0048E00A call ds:LoadLibraryA
ext1:0048E010 push offset aCave201711882De;
“cve_2017_11882_detect”
ext1:0048E016 call ds:GetProcAddress
在一种可选的实施例中,在上述将第一代码写入至上述新建文件空间,得到改造后的程序文件之后,上述方法还包括:将样本检测环境中的上述目标程序替换为上述改造后的目标程序,并将动态链接库传入上述样本检测环境,其中,上述动态链接库中包括上述漏洞检测函数;在确定上述样本检测环境中的上述改造后的目标程序启动的情况下,在上述改造后的目标程序中运行样本数据,并在上述改造后的目标程序运行至上述第一指令的情况下,通过执行上述改造后的程序文件中存储的上述第一代码调用上述漏洞检测函数,对上述改造后的目标程序进行漏洞检测,得到漏洞检测结果。
可选地,样本检测利用沙箱检测,其中沙箱(Sandbox)是一个虚拟系统程序,允许在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。在网络安全中,沙箱是指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。
可选地,将样本检测环境中的目标程序替换为改造后的目标程序,并将漏洞检测函数传入样本检测环境,先启动目标程序,后运行样本数据,并在目标程序运行至第一指令的情况下,通过第一代码调用漏洞检测函数,进行漏洞检测,得到漏洞检测结果。在样本检测环境中先启动目标程序,可以解决传统技术中无法监控通过COM机制启动的进程的问题。
在一种可选的实施例中,上述对上述改造后的目标程序进行漏洞检测,得到漏洞检测结果,包括:获取预定字节的栈数据;基于上述预定字节的栈数据,确定上述目标函数的当前返回地址;判断上述当前返回地址是否为目标返回地址,得到判断结果;根据上述判断结果确定上述漏洞检测结果。
可选地,栈是一种先进后出的数据结构。在计算机程序,一般是指由C/C++语言编译的程序,使用栈这种数据结构保存,管理计算程序函数中所需要的局部变量,以及计算机程序函数的返回地址。基于预定字节的栈数据,确定目标函数的返回地址,其中使用反编译工具查找哪些地方调用了目标函数,最后通过漏洞检测函数判断返回的地址是否为目标返回地址,根据判断结果确定漏洞检测结果。
在一种可选的实施例中,上述根据上述判断结果确定上述漏洞检测结果,包括:若上述判断结果指示上述当前返回地址为上述目标返回地址,则确定漏洞检测结果为:不存在漏洞利用;若上述判断结果指示上述当前返回地址不为上述目标返回地址,则确定漏洞检测结果为:存在漏洞利用,并将上述预定字节的栈数据保存至目标数据文件,其中目标数据文件是一个新创建的文件。
可选地,若判断结果指示当前返回地址为目标返回地址的情况下,则确定不存在漏洞利用;若判断结果指示当前返回地址不为上述目标返回地址的情况下,则确定存在漏洞利用,并将预定字节的栈数据保存至目标数据文件。通过判断当前返回地址是否为目标返回地址,可以准确确定是否存在漏洞利用。
在一种可选的实施例中,在上述判断上述当前返回地址是否为目标返回地址,得到判断结果之前,上述方法还包括:确定上述改造后的目标程序中上述目标函数的调用位置;基于上述目标函数的调用位置,确定上述目标函数的上述目标返回地址。
可选地,目标函数执行结束之后,确定N个字节的栈数据中确定出目标函数的当前返回地址,其中N是一个变量,判断当前返回地址是否为目标返回地址,若是则确定不存在漏洞利用;若不是则确定存在漏洞利用。基于目标函数的调用位置,能够准确检查当前的函数返回地址是否目标函数返回地址之一。
可选地,例如使用反编译工具,可以查到一共有以下10个地方调用了目标函数sub_41160F(),具体如下:
根据以上数据可以计算出这10个目标函数的目标返回地址。例如:
.text:00411349 call sub_41160F
.text:0041134E add esp,0Ch
其中,若0x411349处调用了目标函数。“call”指令会把“call”指令的下一条指令的地址,即0x41134E保存栈上去,从栈数据中确定目标函数当前的函数返回地址,检查当前的函数返回地址是否为上述10个目标函数返回地址之一,若是则确定不存在漏洞利用;若不是则确定存在漏洞利用。
通过上述步骤S102至步骤S106,可以达到程序执行到特定位置后能够成功调用漏洞检测函数进行漏洞检测的目的,从而实现了对不进行接口调用的漏洞进行准确识别,降低程序运行风险的技术效果,进而解决了相关技术中无法识别出不进行接口调用的漏洞,导致的漏洞识别准确性低,程序运行风险大的技术问题。
基于上述实施例和可选实施例,本发明提出一种可选漏洞检测方法,该方法包括程序改造、漏洞检测模块构建、沙盒检测三个阶段,其中,
对于程序改造阶段,图3是根据本发明实施例的一种可选的程序改造流程图,如图3所示,该方法包括:
步骤S31,确定目标程序,以及目标程序中的目标函数,其中,目标程序中存在预定程序漏洞,目标函数为预定程序漏洞的触发点;
步骤S32,增加目标程序的程序文件大小M字节,M是一个变量,给第一代码的部署创造文件空间;
步骤S33,根据目标操作系统对程序文件的解析逻辑,对新建文件空间进行属性参数修改,以使得新建文件空间能够被识别和/或加载;
步骤S34,确定目标函数执行结束时的目标代码;响应于对目标代码的替换操作,将目标代码替换为第一指令(jmp指令);
步骤S35,将第一代码写入至新建文件空间,得到改造后的程序文件。
对于漏洞检测模块构建阶段,图4是根据本发明实施例的一种可选的漏洞检测模块构建流程图,如图4所示,该方法包括:
步骤S41,确定改造后的目标程序中目标函数的调用位置,基于目标函数的调用位置,确定目标函数的目标返回地址;
步骤S42,获取预定字节的栈数据,基于预定字节的栈数据,确定目标函数的当前返回地址;
步骤S43,判断当前返回地址是否为目标返回地址;
步骤S44,若是目标返回地址,则确定漏洞检测结果为:不存在漏洞利用;
步骤S45,若不是目标返回地址,则确定漏洞检测结果为:存在漏洞利用,并将预定字节的栈数据保存至目标数据文件,并展示漏洞利用数据。
对于沙盒检测阶段,图5是根据本发明实施例的一种可选的沙盒检测流程图,如图5所示,该方法包括:
步骤S51,启动样本环境检测,将样本检测环境中的目标程序替换为基于步骤S31至步骤S35得到的改造后的目标程序;
步骤S52,将基于上述步骤S41至步骤S45得到的包括有漏洞检测函数的动态链接库(即漏洞检测模块)传入样本检测环境;
步骤S53,首先在样本检测环境中启动改造后的目标程序,然后在改造后的目标程序中运行样本数据,并在改造后的目标程序运行至第一指令的情况下,通过执行改造后的程序文件中存储的第一代码调用漏洞检测模块,执行漏洞检测操作,并判断是否生成目标数据文件;
步骤S54,若生成目标数据文件,即表明存在漏洞利用,并展示漏洞利用数据;
步骤S55,若未生成目标数据文件,则表明不存在漏洞利用,漏洞检测结束。
本发明实施例至少可以实现如下技术效果:给沙箱技术中增加一个新的漏洞利用检测思路,使得该漏洞检测方法能够识别出不进行接口调用的漏洞,漏洞识别准确性高,程序运行风险低。
实施例2
在本实施例中还提供了一种漏洞检测装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”“装置”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
根据本发明实施例,还提供了一种用于实施上述漏洞检测方法的装置实施例,图6是根据本发明实施例的一种漏洞检测装置的结构示意图,如图6所示,上述漏洞检测装置,包括:第一确定模块402、第一扩容模块404、第一写入模块406,其中:
上述第一确定模块402,用于确定目标程序,以及上述目标程序中的目标函数,其中,上述目标程序中存在预定程序漏洞,上述目标函数为上述预定程序漏洞的触发点;
上述第一扩容模块404,连接于上述第一确定模块402,用于对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,上述扩容后的程序文件中包括有预设字节大小的新建文件空间;
上述第一写入模块406,连接于上述第一扩容模块404,用于将第一代码写入至上述新建文件空间,得到改造后的程序文件,其中,上述第一代码用于在上述目标函数执行结束时,调用漏洞检测函数。
在本发明实施例中,通过设置上述第一确定模块402,用于确定目标程序,以及上述目标程序中的目标函数,其中,上述目标程序中存在预定程序漏洞,上述目标函数为上述预定程序漏洞的触发点;第一扩容模块404,用于对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,上述扩容后的程序文件中包括有预设字节大小的新建文件空间;第一写入模块406,用于将第一代码写入至上述新建文件空间,得到改造后的程序文件,其中,上述第一代码用于在上述目标函数执行结束时,调用漏洞检测函数。
在一种可选的实施例中,上述第一写入模块还包括:第一确定子模块,用于确定目标函数执行结束时的目标代码;第一替换子模块,用于响应于对上述目标代码的替换操作,将上述目标代码替换为第一指令,得到改造后的目标程序,其中,上述第一指令用于链接至改造后的程序文件中的上述新建文件空间,以使得上述改造后的目标程序执行上述第一代码。
可选地,首先使用反编译工具,定位目标函数执行结束时的目标代码并将其改造,将目标代码替换为第一指令,得到改造后的目标程序,改造的目的在于在目标函数执行结束前执行漏洞检测函数。其中,第一指令可以但不限于为jmp指令,通过jmp覆盖内存中的目标函数结束指令完成跳转。
可选地,以检测CVE-2017-11882为例,确定目标程序为EQNEDT32.exe,目标函数为sub_41160F(),静态插桩改造的流程如下:首先使用反编译工具,定位目标函数执行结束时的代码并将其改造,将目标函数结束部分(loc_411870处)的代码修改成“jmp”指令,引导目标程序执行第一代码,可以理解为给目标函数进行汇编指令级的扩写。第一代码的位置为“loc_48E000”即新创建文件空间。
例如,目标程序改造前,目标函数结束部分的代码如下:
loc_411870:
pop edi
pop edi
pop edi
leave
retn
sub_41160F endp
采用“jmp”指令替换目标函数结束部分的代码,得到改造后的目标程序结尾部分的代码如下:
loc_411870:
jmp loc_48E000
sub_41160F endp;sp-analy
可选地,第一代码部分代码如下所示,通过应用接口加载动态链接库(APILoadLibrary)和获取动态链接库中的输出库函数地址(GetProcAddress),加载漏洞检测模块即执行漏洞检测函数。
ext1:0048E005 push offset aMonitorX86Dll;lpLibFileName
ext1:0048E00A call ds:LoadLibraryA
ext1:0048E010 push offset aCave201711882De;
“cve_2017_11882_detect”
ext1:0048E016 call ds:GetProcAddress
在一种可选的实施例中,上述第一写入模块还包括:第二替换子模块,用于将样本检测环境中的上述目标程序替换为上述改造后的目标程序,并将动态链接库传入上述样本检测环境,其中,上述动态链接库中包括有上述漏洞检测函数;第二确定子模块,用于在确定上述样本检测环境中的上述改造后的目标程序启动的情况下,在上述改造后的目标程序中运行样本数据,并在上述改造后的目标程序运行至上述第一指令的情况下,通过执行上述改造后的程序文件中存储的上述第一代码调用上述漏洞检测函数,对上述改造后的目标程序进行漏洞检测,得到漏洞检测结果。
可选地,样本检测利用沙箱检测,其中沙箱(Sandbox)是一个虚拟系统程序,允许在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。在网络安全中,沙箱是指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。
可选地,将样本检测环境中的目标程序替换为改造后的目标程序,并将包括有上述漏洞检测函数的动态链接库传入样本检测环境,先启动目标程序,后运行样本数据,并在目标程序运行至第一指令的情况下,通过第一代码调用漏洞检测函数,进行漏洞检测,得到漏洞检测结果。在样本检测环境中先启动目标程序,可以解决传统技术中无法监控通过COM机制启动的进程的问题。
在一种可选的实施例中,上述第二确定子模块还包括:第一获取子模块,用于获取预定字节的栈数据;第三确定子模块,用于基于上述预定字节的栈数据,确定上述目标函数的当前返回地址;第一判断子模块,用于判断上述当前返回地址是否为目标返回地址,得到判断结果;第四确定子模块,用于根据上述判断结果确定上述漏洞检测结果。
可选地,栈是一种先进后出的数据结构。在计算机程序,一般是指由C/C++语言编译的程序,使用栈这种数据结构保存,管理计算程序函数中所需要的局部变量,以及计算机程序函数的返回地址。基于预定字节的栈数据,确定目标函数的返回地址,其中使用反编译工具查找哪些地方调用了目标函数,最后通过漏洞检测函数判断返回的地址是否为目标返回地址,根据判断结果确定漏洞检测结果。
在一种可选的实施例中,上述第四确定子模块还包括:第五确定子模块,用于若上述判断结果指示上述当前返回地址为上述目标返回地址,则确定漏洞检测结果为:不存在漏洞利用;第六确定子模块,用于若上述判断结果指示上述当前返回地址不为上述目标返回地址,则确定漏洞检测结果为:存在漏洞利用,并将上述预定字节的栈数据保存至目标数据文件。
可选地,若判断结果指示当前返回地址为目标返回地址的情况下,则确定不存在漏洞利用;若判断结果指示当前返回地址不为上述目标返回地址的情况下,则确定存在漏洞利用,并将预定字节的栈数据保存至目标数据文件。通过判断当前返回地址是否为目标返回地址,可以准确确定是否存在漏洞利用。
在一种可选的实施例中,上述第一判断子模块还包括:第七确定子模块,用于确定上述改造后的目标程序中上述目标函数的调用位置;第八确定子模块,用于基于上述目标函数的调用位置,确定上述目标函数的上述目标返回地址。
可选地,目标函数执行结束之后,从N个字节的栈数据中确定出目标函数的当前返回地址,其中N是一个变量,判断当前返回地址是否为目标返回地址,若是则确定不存在漏洞利用;若不是则确定存在漏洞利用。基于目标函数的调用位置,能够准确检查当前的函数返回地址是否目标函数返回地址之一。
可选地,例如使用反编译工具,可以查到一共有以下10个地方调用了目标函数sub_41160F(),具体如下:
根据以上数据可以计算出这10个目标函数的目标返回地址。例如:
.text:00411349 call sub_41160F
.text:0041134E add esp,0Ch
其中,若0x411349处调用了目标函数。“call”指令会把“call”指令的下一条指令的地址,即0x41134E保存栈上去,从栈数据中确定目标函数当前的函数返回地址,检查当前的函数返回地址是否为上述10个目标函数返回地址之一,若是则确定不存在漏洞利用;若不是则确定存在漏洞利用。
在一种可选的实施例中,上述第一扩容模块还包括:第九确定子模块,用于确定目标操作系统对上述程序文件的解析逻辑;第一修改子模块,用于基于上述解析逻辑,对所属新建文件空间进行属性参数修改,以使得上述新建文件空间能够被识别和/或加载。
可选地,静态插桩技术不仅需要对目标程序的程序文件进行扩容,还需要根据可执行文件格式定义给新增加的文件空间赋予属性,使操作系统能够识别新增加的文件空间。因此基于目标操作系统对程序文件的解析逻辑,对上述新建文件空间进行属性参数修改,使得改造后的目标程序的新建文件空间能够被有效识别和/或加载。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,例如,对于后者,可以通过以下方式实现:上述各个模块可以位于同一处理器中;或者,上述各个模块以任意组合的方式位于不同的处理器中。
此处需要说明的是,上述第一确定模块402、第一扩容模块404、第一写入模块406对应于实施例中的步骤S102至步骤S106,上述模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在计算机终端中。
需要说明的是,本实施例的可选或优选实施方式可以参见实施例中的相关描述,此处不再赘述。
上述的漏洞检测装置还可以包括处理器和存储器,上述第一确定模块402、第一扩容模块404、第一写入模块406等均作为程序模块存储在存储器中,由处理器执行存储在存储器中的上述程序模块来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序模块,上述内核可以设置一个或以上。存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
实施例3
根据本申请实施例,还提供了一种非易失性存储介质的实施例。可选的,在本实施例中,上述非易失性存储介质包括存储的程序,其中,在上述程序运行时控制上述非易失性存储介质所在设备执行上述任意一种漏洞检测方法。
可选的,在本实施例中,上述非易失性存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中,上述非易失性存储介质包括存储的程序。
可选的,在程序运行时控制非易失性存储介质所在设备执行以下功能:确定目标程序,以及上述目标程序中的目标函数,其中,上述目标程序中存在预定程序漏洞,上述目标函数为上述预定程序漏洞的触发点;对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,上述扩容后的程序文件中包括有预设字节大小的新建文件空间;将第一代码写入至上述新建文件空间,得到改造后的程序文件,其中,上述第一代码用于在上述目标函数执行结束时,调用漏洞检测函数。
实施例4
根据本申请实施例,还提供了一种处理器的实施例。可选的,在本实施例中,上述处理器用于运行程序,其中,上述程序运行时执行上述任意一种漏洞检测方法。
根据本申请实施例,还提供了一种计算机程序产品的实施例,当在数据处理设备上执行时,适于执行初始化有上述任意一种的漏洞检测方法步骤的程序。
可选的,上述计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:确定目标程序,以及上述目标程序中的目标函数,其中,上述目标程序中存在预定程序漏洞,上述目标函数为上述预定程序漏洞的触发点;对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,上述扩容后的程序文件中包括有预设字节大小的新建文件空间;将第一代码写入至上述新建文件空间,得到改造后的程序文件,其中,上述第一代码用于在上述目标函数执行结束时,调用漏洞检测函数。
实施例5
如图7所示,本发明实施例提供了一种电子设备,该电子设备10包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:确定目标程序,以及上述目标程序中的目标函数,其中,上述目标程序中存在预定程序漏洞,上述目标函数为上述预定程序漏洞的触发点;对上述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,上述扩容后的程序文件中包括有预设字节大小的新建文件空间;将第一代码写入至上述新建文件空间,得到改造后的程序文件,其中,上述第一代码用于在上述目标函数执行结束时,调用漏洞检测函数。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如上述模块的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,模块或模块的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
上述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取非易失性存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个非易失性存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的非易失性存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种漏洞检测方法,其特征在于,包括:
确定目标程序,以及所述目标程序中的目标函数,其中,所述目标程序中存在预定程序漏洞,所述目标函数为所述预定程序漏洞的触发点;
对所述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,所述扩容后的程序文件中包括有预设字节大小的新建文件空间;
将第一代码写入至所述新建文件空间,得到改造后的程序文件,其中,所述第一代码用于在所述目标函数执行结束时,调用漏洞检测函数。
2.根据权利要求1所述的方法,其特征在于,在所述将第一代码写入至所述新建文件空间,得到所述改造后的程序文件之前,所述方法还包括:
确定目标函数执行结束时的目标代码;
响应于对所述目标代码的替换操作,将所述目标代码替换为第一指令,得到改造后的目标程序,其中,所述第一指令用于链接至改造后的程序文件中的所述新建文件空间,以使得所述改造后的目标程序执行所述第一代码。
3.根据权利要求2所述的方法,其特征在于,在所述将第一代码写入至所述新建文件空间,得到改造后的程序文件之后,所述方法还包括:
将样本检测环境中的所述目标程序替换为所述改造后的目标程序,并将动态链接库传入所述样本检测环境,其中,所述动态链接库中包括所述漏洞检测函数;
在确定所述样本检测环境中的所述改造后的目标程序启动的情况下,在所述改造后的目标程序中运行样本数据,并在所述改造后的目标程序运行至所述第一指令的情况下,通过执行所述改造后的程序文件中存储的所述第一代码调用所述漏洞检测函数,对所述改造后的目标程序进行漏洞检测,得到漏洞检测结果。
4.根据权利要求3所述的方法,其特征在于,所述对所述改造后的目标程序进行漏洞检测,得到漏洞检测结果,包括:
获取预定字节的栈数据;
基于所述预定字节的栈数据,确定所述目标函数的当前返回地址;
判断所述当前返回地址是否为目标返回地址,得到判断结果;
根据所述判断结果确定所述漏洞检测结果。
5.根据权利要求4所述的方法,其特征在于,所述根据所述判断结果确定所述漏洞检测结果,包括:
若所述判断结果指示所述当前返回地址为所述目标返回地址,则确定漏洞检测结果为:不存在漏洞利用;
若所述判断结果指示所述当前返回地址不为所述目标返回地址,则确定漏洞检测结果为:存在漏洞利用,并将所述预定字节的栈数据保存至目标数据文件。
6.根据权利要求4所述的方法,其特征在于,在所述判断所述当前返回地址是否为目标返回地址,得到判断结果之前,所述方法还包括:
确定所述改造后的目标程序中所述目标函数的调用位置;
基于所述目标函数的调用位置,确定所述目标函数的所述目标返回地址。
7.根据权利要求1至6中任意一项所述的方法,其特征在于,在所述对所述目标程序的程序文件进行扩容处理,得到扩容后的程序文件之前,所述方法还包括:
确定目标操作系统对所述程序文件的解析逻辑;
基于所述解析逻辑,对所属新建文件空间进行属性参数修改,以使得所述新建文件空间能够被识别和/或加载。
8.一种漏洞检测装置,其特征在于,包括:
第一确定模块,用于确定目标程序,以及所述目标程序中的目标函数,其中,所述目标程序中存在预定程序漏洞,所述目标函数为所述预定程序漏洞的触发点;
第一扩容模块,用于对所述目标程序的程序文件进行扩容处理,得到扩容后的程序文件,其中,所述扩容后的程序文件中包括有预设字节大小的新建文件空间;
第一写入模块,用于将第一代码写入至所述新建文件空间,得到改造后的程序文件,其中,所述第一代码用于在所述目标函数执行结束时,调用漏洞检测函数。
9.一种非易失性存储介质,其特征在于,所述非易失性存储介质存储有多条指令,所述指令适于由处理器加载并执行权利要求1至7中任意一项所述的漏洞检测方法。
10.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至7中任意一项所述的漏洞检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310841305.4A CN117034278A (zh) | 2023-07-10 | 2023-07-10 | 漏洞检测方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310841305.4A CN117034278A (zh) | 2023-07-10 | 2023-07-10 | 漏洞检测方法、装置、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117034278A true CN117034278A (zh) | 2023-11-10 |
Family
ID=88601236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310841305.4A Pending CN117034278A (zh) | 2023-07-10 | 2023-07-10 | 漏洞检测方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117034278A (zh) |
-
2023
- 2023-07-10 CN CN202310841305.4A patent/CN117034278A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11507671B1 (en) | Detection and healing of vulnerabilities in computer code | |
US11507669B1 (en) | Characterizing, detecting and healing vulnerabilities in computer code | |
CN110225029B (zh) | 注入攻击检测方法、装置、服务器及存储介质 | |
US20130247198A1 (en) | Emulator updating system and method | |
JP4572259B1 (ja) | 情報機器、プログラム及び不正なプログラムコードの実行防止方法 | |
US9507933B2 (en) | Program execution apparatus and program analysis apparatus | |
CN109271789B (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
CN109255235B (zh) | 基于用户态沙箱的移动应用第三方库隔离方法 | |
CN114065204A (zh) | 一种无文件木马查杀方法及装置 | |
CN108322458B (zh) | Web应用入侵检测方法、系统、计算机设备和存储介质 | |
CN110717181B (zh) | 基于新型程序依赖图的非控制数据攻击检测方法及装置 | |
CN115659333A (zh) | 一种基于二进制插桩的沙箱、内存隔离方法及存储介质 | |
CN110414218B (zh) | 内核检测方法、装置、电子设备及存储介质 | |
US11868465B2 (en) | Binary image stack cookie protection | |
CN113391874A (zh) | 一种虚拟机检测对抗方法、装置、电子设备及存储介质 | |
CN111625296B (zh) | 一种通过构建代码副本保护程序的方法 | |
US11256786B2 (en) | Method to secure a software code | |
CN109426546B (zh) | 应用启动方法及装置、计算机存储介质及设备 | |
CN117034278A (zh) | 漏洞检测方法、装置、存储介质及电子设备 | |
JP4643201B2 (ja) | バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム | |
CN114880667A (zh) | 一种脚本检测方法及装置 | |
Noman et al. | Design and implementation of a security analysis tool that detects and eliminates code caves in windows applications | |
Durães et al. | A methodology for the automated identification of buffer overflow vulnerabilities in executable software without source-code | |
CN107239703B (zh) | 一种动态链接库缺失的可执行程序的动态分析方法 | |
Atzeni et al. | HAIT: Heap Analyzer with Input Tracing. |
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 |