一种漏洞利用的检测方法和系统
技术领域
本发明涉及信息安全和网络安全领域,尤其是涉及了一种漏洞利用的检测方法和系统。
背景技术
随着计算机与网络的普及,数字技术正在改变着、影响着人类的生活方式。高速发展中的互联网日夜不停地传输大量的文字、数字图形、声音、影像等数据流。检测、识别这些数据流中是否存在威胁的需求越来越广泛。
现有技术中,安全研究员获得漏洞利用样本,并根据该漏洞利用样本从数据流中提取相应的特征码,并通过比对特征库中的特征码以及数据流中提取的特征码,以检测数据流中是否存在具有安全威胁的漏洞利用。
但是,上述方式过于依赖于漏洞利用样本的特征,其无法检测到与已知漏洞利用样本不同的漏洞利用,而且由于漏洞利用样本众多,因此,根据漏洞利用样本从数据流中提取相应的特征码时还存在现实困难。
发明内容
本发明实施例提供一种漏洞利用的检测方法和系统,不仅可以避免依靠检测漏洞利用样本特征码的局限性,而且能够检测到与已知漏洞利用样本不同的漏洞利用和针对未知漏洞的利用,甚至是所有基于缓冲区溢出的攻击。
为了达到上述目的,本发明实施例提供一种漏洞利用的检测方法,所述方法包括以下步骤:
Loader管理模块获得数据流中待分析的数据块;
所述Loader管理模块从所述待分析的数据块的起始位置或者指定位置,尝试将所述待分析的数据块视为指令执行,并在尝试将所述待分析的数据块视为指令执行的过程中,监控漏洞利用程序中的指定类型函数调用;其中,所述指定类型函数在调用时,表示存在漏洞利用;
所述Loader管理模块在监控到所述指定类型函数被调用,且调用所述指定类型函数的地址位于所述待分析的数据块的起止范围之内时,判定所述数据流中包含漏洞利用。
所述方法还包括:
所述Loader管理模块在尝试将所述待分析的数据块视为指令执行之前,将所述待分析的数据块的起始位置以及块大小通知给Monitor管理模块;
所述Monitor管理模块利用所述待分析的数据块的起始位置以及所述块大小对所述Loader管理模块的指令执行过程进行监控;
如果所述Loader管理模块在指令执行过程中触发异常,或者,所述Loader管理模块在指令执行过程中的执行时间超过预设阈值,则:所述Monitor管理模块中断所述Loader管理模块的指令执行过程,调整所述Loader管理模块的重新执行的位置,并继续由所述Loader管理模块从所述待分析的数据块的调整后的位置开始,尝试将所述待分析的数据块视为指令执行。
所述方法还包括:
所述Loader管理模块在尝试将所述待分析的数据块视为指令执行之前,将所述Loader管理模块当前已加载模块的信息通知给Monitor管理模块;
所述Monitor管理模块利用所述Loader管理模块当前已加载模块的信息对所述Loader管理模块的指令执行过程进行监控;
所述Monitor管理模块在接收到所述Loader管理模在指令执行过程中触发的模块加载事件,且加载的模块不是所述Loader管理模块当前已加载模块时,则判定所述数据流中包含漏洞利用。
所述Loader管理模块获得数据流中待分析的数据块的过程,具体包括:
所述Loader管理模块获得已经剥离网络协议头的负载数据,搜索负载数据中的指定特征,在发现指定特征之后再将相应的数据块作为所述待分析的数据块;或者,
所述Loader管理模块获得已经剥离网络协议头的负载数据,利用Shellcode中限制存在的字节集合将所述负载数据分割为多个数据子块,且仅将数据子块长度大于Shellcode预设最小指令长度的数据子块作为所述待分析的数据块。
所述Loader管理模块具体为模拟存在缓冲区溢出漏洞的数据模拟执行程序;所述Monitor管理模块具体为对Loader管理模块的各种异常和事件进行处理的处理程序。
本发明实施例提供一种漏洞利用的检测系统,所述漏洞利用的检测系统包括Loader管理模块,且所述Loader管理模块具体包括:
获得单元,用于获得数据流中待分析的数据块;
第一处理单元,用于从所述待分析的数据块的起始位置或者指定位置,尝试将所述待分析的数据块视为指令执行,并在尝试将所述待分析的数据块视为指令执行的过程中,监控漏洞利用程序中的指定类型函数调用;其中,所述指定类型函数在调用时,表示存在漏洞利用;
第一确定单元,用于在监控到所述指定类型函数被调用,且调用所述指定类型函数的地址位于所述待分析的数据块的起止范围之内时,判定所述数据流中包含漏洞利用。
所述Loader管理模块还包括:发送单元,用于在尝试将所述待分析的数据块视为指令执行之前,将所述待分析的数据块的起始位置以及块大小通知给Monitor管理模块;
所述检测系统还包括Monitor管理模块,所述Monitor管理模块具体包括:
第一监控单元,用于利用所述待分析的数据块的起始位置以及所述块大小对所述Loader管理模块的指令执行过程进行监控;
第二处理单元,用于在监控到所述Loader管理模块在指令执行过程中触发异常,或者,所述Loader管理模块在指令执行过程中的执行时间超过预设阈值,则:中断所述Loader管理模块的指令执行过程,调整所述Loader管理模块的重新执行的位置,并继续由所述Loader管理模块从所述待分析的数据块的调整后的位置开始,尝试将所述待分析的数据块视为指令执行。
所述Loader管理模块还包括:发送单元,用于在尝试将所述待分析的数据块视为指令执行之前,将所述Loader管理模块当前已加载模块的信息通知给Monitor管理模块;
所述检测系统还包括Monitor管理模块,所述Monitor管理模块具体包括:
第二监控单元,用于利用所述Loader管理模块当前已加载模块的信息对所述Loader管理模块的指令执行过程进行监控;
第二确定单元,用于在接收到所述Loader管理模在指令执行过程中触发的模块加载事件,且加载的模块不是所述Loader管理模块当前已加载模块时,则判定所述数据流中包含漏洞利用。
所述获得单元,具体用于获得已经剥离网络协议头的负载数据,搜索负载数据中的指定特征,在发现指定特征之后再将相应的数据块作为所述待分析的数据块;或者,获得已经剥离网络协议头的负载数据,利用Shellcode中限制存在的字节集合将所述负载数据分割为多个数据子块,且仅将数据子块长度大于Shellcode预设最小指令长度的数据子块作为所述待分析的数据块。
所述Loader管理模块具体为模拟存在缓冲区溢出漏洞的数据模拟执行程序;所述Monitor管理模块具体为对Loader管理模块的各种异常和事件进行处理的处理程序。
与现有技术相比,本发明实施例至少具有以下优点:本发明实施例中,Loader(加载)管理模块从待分析的数据块的起始位置或指定位置,尝试将待分析的数据块视为指令执行,并在尝试将待分析的数据块视为指令执行的过程中,通过监控漏洞利用程序中的指定类型函数调用,从而在监控到指定类型函数被调用,且调用指定类型函数的地址位于待分析的数据块的起止范围之内时,判定数据流中包含漏洞利用。上述方式不仅可以避免依靠检测漏洞利用样本特征码的局限性,而且能够检测到与已知漏洞利用样本不同的漏洞利用和针对未知漏洞的利用,甚至是所有基于缓冲区溢出的攻击,以解决特征码扫描方法无法检测各种采用多态变形技术的利用代码和未知漏洞利用的问题。
附图说明
图1是本发明实施例提供的一种漏洞利用的检测方法流程示意图;
图2是本发明实施例提供的一种漏洞利用的检测系统结构示意图。
具体实施方式
针对现有技术中存在的问题,本发明实施例提供一种漏洞利用的检测方法,该方法应用于包括Loader管理模块和Monitor管理模块的检测系统中。其中,该Loader管理模块为数据执行程序loader,且该Loader管理模块具体为模拟存在缓冲区溢出漏洞的数据模拟执行程序,其通过加载待分析的数据块至内存,然后尝试将数据块转换为代码执行,且该Loader管理模块是处于被Monitor管理模块调试下的被调试程序。该Monitor管理模块为异常处理程序monitor,且该Monitor管理模块具体为对Loader管理模块的各种异常和事件进行处理的处理程序,且该Monitor管理模块具体可以是一个可以接受来自被调试程序Loader管理模块的各种异常和事件的调试器。
本发明实施例中,检测系统在收到数据流之后,需要剥离数据流中的网络协议头,获得应用层数据,该应用层数据为数据块。进一步的,在启动Loader管理模块(即数据执行程序loader)和Monitor管理模块(即异常处理程序monitor)的基础上,如图1所示,该漏洞利用的检测方法包括以下步骤:
步骤101,Loader管理模块获得数据流中待分析的数据块。
其中,在剥离数据流中的网络协议头以获得数据块之后,Loader管理模块可以将该数据块加载到内存中,并选择合适位置的数据块作为待分析的数据块,且Loader管理模块需要获知待分析的数据块的起始位置以及块大小。例如,Loader管理模块可以确定加载到内存中的所有数据块均为待分析的数据块;或确定加载到内存中的位于中间位置的数据块为待分析的数据块。
在本发明实施例的一种优选实施方式中,Loader管理模块获得数据流中待分析的数据块的过程,具体包括但不限于如下方式:Loader管理模块获得已经剥离网络协议头的负载数据,搜索该负载数据中的指定特征(如目的地址特征),在发现指定特征之后再将相应的数据块作为待分析的数据块;或者,Loader管理模块获得已经剥离网络协议头的负载数据,利用Shellcode中限制存在的字节集合(如0x00、0x0D、0xDA等字节)将该负载数据分割为多个数据子块,且仅将数据子块长度大于Shellcode预设最小指令长度的数据子块作为待分析的数据块。其中,在计算机安全领域中,shellcode是指一段可以被存在缓冲区溢出漏洞的程序执行的机器指令码。
步骤102,Loader管理模块从待分析的数据块的起始位置或者指定位置,尝试将待分析的数据块视为指令执行,并在尝试将待分析的数据块视为指令执行的过程中,监控漏洞利用程序中的指定类型函数调用。其中,指定类型函数调用是指漏洞利用程序中常用或可能使用的函数调用。
在一种具体的实现方式中,该指定类型函数包括但不限于以下函数之一或者任意组合:LoadLibrary函数、GetProcAddress函数、URLDownloadToFile函数、CreateProcess函数、CreateRemoteThread函数、WinExec函数、CreateFile函数、Recv函数、Recvfrom函数、ShellExecute函数等。
本发明实施例中,Loader管理模块在获得待分析的数据块之后,还需要启动并挂钩用于监控漏洞利用程序的指定类型函数,且该指定类型函数在调用时,表示存在漏洞利用。Loader管理模块监控漏洞利用程序中的指定类型函数调用之后,Loader管理模块需要将EIP(Extra Instruction Pointer,指令指针寄存器,该EIP为32位寄存器,并用于存储正在被执行的指令地址)指向待分析的数据块的起始位置或者指定位置,以从待分析的数据块的起始位置或者指定位置,尝试将待分析的数据块视为指令执行,即将相关数据视为指令而执行;因此,Loader管理模块在尝试将待分析的数据块视为指令执行的过程中,可以监控到漏洞利用程序中的指定类型函数调用。
步骤103,Loader管理模块在监控到指定类型函数被调用(即漏洞利用程序常用的函数被调用),且调用指定类型函数的地址位于待分析的数据块的起止范围之内时,判定数据流中包含漏洞利用。其中,Loader管理模块可以通过调用栈回溯发现函数,确定调用指定类型函数的地址是否位于待分析的数据块的起止范围之内;例如,当调用栈回溯发现函数返回的地址位于待分析的数据块的起止范围之内时,则说明调用指定类型函数的地址位于待分析的数据块的起止范围之内,并判定数据流中包含漏洞利用。
本发明实施例中,Loader管理模块在尝试将待分析的数据块视为指令执行之前,还需要将待分析的数据块的起始位置以及块大小通知给Monitor管理模块。之后由Monitor管理模块利用待分析的数据块的起始位置以及块大小对Loader管理模块的指令执行过程进行监控。进一步的,如果Loader管理模块在指令执行过程中触发异常(即Monitor管理模块捕获到Loader管理模块由于执行数据指令触发异常),或者,Loader管理模块在指令执行过程中的执行时间超过预设阈值(即Monitor管理模块捕获到Loader管理模块由于执行包括但不限于循环指令而导致执行时间超过事先设定阈值),则:Monitor管理模块中断Loader管理模块的指令执行过程,调整Loader管理模块的重新执行的位置(即通过将EIP指向待分析的数据块中需要重新执行的位置),并继续由Loader管理模块从待分析的数据块的调整后的位置开始,尝试将待分析的数据块视为指令执行,以此类推,直至将待分析的数据块末端视为指令执行完成。
本发明实施例中,Loader管理模块在将尝试待分析的数据块视为指令执行之前,还需要将本Loader管理模块当前已加载模块的信息(如本进程已加载模块列表ListA)通知给Monitor管理模块。之后由Monitor管理模块利用Loader管理模块当前已加载模块的信息对Loader管理模块的指令执行过程进行监控。进一步的,Monitor管理模块在接收到Loader管理模在指令执行过程中触发的模块加载事件(如:Monitor管理模块接收到来自Loader管理模块的LOAD_DLL_DEBUG_EVENT事件),且该加载的模块不是Loader管理模块当前已加载模块时,则判定数据流中包含漏洞利用。
本发明实施例中,当Loader管理模块从待分析的数据块的起始位置或者指定位置开始,尝试将待分析的数据块视为指令执行,直至将待分析的数据块末端视为指令执行完成,在上述指令执行过程中,如果未发生“Loader管理模块监控到指定类型函数被调用,且调用指定类型函数的地址位于待分析的数据块的起止范围之内”,且未发生“Monitor管理模块在接收到Loader管理模在指令执行过程中触发的模块加载事件,且加载的模块不是Loader管理模块当前已加载模块”,则判定该数据流中不包含漏洞利用。
综上所述,本发明实施例中,在精心构建的可控、可检测的缓冲区溢出漏洞所需环境中,Loader管理模块从待分析的数据块的起始位置或指定位置,尝试将待分析的数据块视为指令执行,并在尝试将待分析的数据块视为指令执行的过程中,通过监控漏洞利用程序中的指定类型函数调用,从而在监控到指定类型函数被调用,且调用指定类型函数的地址位于待分析的数据块的起止范围之内时,判定数据流中包含漏洞利用,从而通过捕获在漏洞利用中常用函数调用和监控数据执行程序已加载模块的变化,解决特征码扫描方法无法检测各种采用多态变形技术(多态变形技术是指漏洞利用指令为了躲避扫描程序的检测,对自身的执行代码进行变换,尽量隐藏扫描程序依据的特征码,从而规避扫描程序的检测)的利用代码和未知漏洞利用的问题。具体的,上述方式不仅可以避免依靠检测漏洞利用样本特征码的局限性,而且能够检测到与已知漏洞利用样本不同的漏洞利用和针对未知漏洞的利用,甚至是所有基于缓冲区溢出的攻击。上述方式可以解决特征码扫描方法无法检测各种采用多态变形技术的利用代码和未知漏洞利用的问题。上述方式可以用于镜像流量离线审计。
基于与上述方法同样的发明构思,本发明实施例中还提供了一种漏洞利用的检测系统,如图2所示,所述漏洞利用的检测系统具体包括Loader管理模块11和Monitor管理模块12;其中:所述Loader管理模块11具体包括:获得单元111,用于获得数据流中待分析的数据块;第一处理单元112,用于从所述待分析的数据块的起始位置或者指定位置,尝试将所述待分析的数据块视为指令执行,并在尝试将所述待分析的数据块视为指令执行的过程中,监控漏洞利用程序中的指定类型函数调用;其中,所述指定类型函数在调用时,表示存在漏洞利用;第一确定单元113,用于在监控到所述指定类型函数被调用,且调用所述指定类型函数的地址位于所述待分析的数据块的起止范围之内时,判定所述数据流中包含漏洞利用。
本发明实施例中,所述Loader管理模块11还包括:发送单元114,用于在尝试将所述待分析的数据块视为指令执行之前,将所述待分析的数据块的起始位置以及块大小通知给Monitor管理模块12;所述Monitor管理模块12具体包括:第一监控单元121,用于利用所述待分析的数据块的起始位置以及所述块大小对所述Loader管理模11的指令执行过程进行监控;第二处理单元122,用于在监控到所述Loader管理模块11在指令执行过程中触发异常,或者,所述Loader管理模块11在指令执行过程中的执行时间超过预设阈值,则:中断所述Loader管理模块11的指令执行过程,调整所述Loader管理模块11的重新执行的位置,并继续由所述Loader管理模块11从所述待分析的数据块的调整后的位置开始,尝试将所述待分析的数据块视为指令执行。
本发明实施例中,所述Loader管理模块11还包括:发送单元114,用于在尝试将所述待分析的数据块视为指令执行之前,将所述Loader管理模块11当前已加载模块的信息通知给Monitor管理模块12;所述Monitor管理模块12具体包括:第二监控单元123,用于利用所述Loader管理模块11当前已加载模块的信息对所述Loader管理模11的指令执行过程进行监控;第二确定单元124,用于在接收到所述Loader管理模11在指令执行过程中触发的模块加载事件,且加载的模块不是所述Loader管理模块11当前已加载模块时,则判定所述数据流中包含漏洞利用。
本发明实施例中,所述获得单元111,具体用于获得已经剥离网络协议头的负载数据,搜索负载数据中的指定特征,在发现指定特征之后再将相应的数据块作为所述待分析的数据块;或者,获得已经剥离网络协议头的负载数据,利用Shellcode中限制存在的字节集合将所述负载数据分割为多个数据子块,且仅将数据子块长度大于Shellcode预设最小指令长度的数据子块作为所述待分析的数据块。
本发明实施例中,所述Loader管理模块11具体为模拟存在缓冲区溢出漏洞的数据模拟执行程序;所述Monitor管理模块12具体为对Loader管理模块11的各种异常和事件进行处理的处理程序。
其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。