具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,在网络渗透完整攻击链中,内网远程横向渗透阶段是攻击者将一台已被攻陷的机器做跳板,通过这个突破口尝试去攻击同一网络里其他机器,获取更多有价值的凭据,更高级的权限,以此扩大攻击面,进而达到控制整个内网网络,最终完成发起APT高级可持续威胁攻击的目的。通过Windows服务机制进行远程攻击是攻击者在内网横向渗透的一个常用攻击手段,它是一种利用操作系统自身机制能力,传统网络攻击检测手段无法有效精确覆盖检测此类攻击手段。为此,本申请提供了一种远程调用检测方法、装置、电子设备及存储介质,从而能够准确地检测是远程调用操作,进而根据该远程调用操作确定攻击,并对其进行处理。
接下来结合附图1对本申请的远程调用检测方法进行介绍。
图1是本发明提供的远程调用检测方法的流程示意图一;如图1所示,一种远程调用检测方法包括:
步骤S101,将Services.exe进程确定为目标进程。
在本步骤中,从系统正在运行的进程列表里,查找Services.exe进程,将其确定为目标进程,即需要在该目标进行下执行后续步骤。Services.exe是Windows操作系统的一部分,用于管理启动和停止服务。正常的Services.exe位于%systemroot%\System32文件夹中,可以通过“cmd”命令方式确定,也可以通过“控制面板”-“管理工具”-“服务”方式确定,本实施例对此不做限定。
步骤S102,在所述目标进程允许注入的情况下,在所述目标进程的远程过程调用的svcctl服务操作接口中注入用于检测远程调用操作的钩子函数。
在本步骤中,若是能够在Services.exe进程下注入钩子函数(即Hook函数),则在Services.exe进程的远程过程调用(Remote Procedure Call,简称RPC)的svcctl服务操作接口中注入Hook函数,用于检测远程调用操作。Hook函数的注入可以通过往Services.exe注入DLL模块实现。
步骤S103,通过所述钩子函数监测服务启动项操作行为,在监测到服务启动项操作行为的情况下,根据所述服务启动项操作行为的远程过程调用数据确定所述服务启动项操作行为是远程调用操作,并获取发起所述远程调用操作的终端的信息。
在本步骤中,利用钩子函数监测服务启动项操作行为,并通过调用Win32API获取服务启动项操作行为的远程过程调用数据,根据远程过程调用数据确定当前的服务启动项操作行为是远程调用操作还是本地操作,在确定为远程调用操作时进一步地获取发起远程调用操作的终端的信息,即获取发起远程调用操作机器的IP,在确定为本地操作时,则存储本地目标进程的PID。
本发明提供的远程调用检测方法通过在Services.exe进程下注入钩子函数来检测服务启动项操作行为,并基于获得的远程过程调用数据来确定是本地发起的服务启动项操作行为,还是远程发起的服务启动项操作行为,若是远程发起的服务启动项操作行为,则进一步获取发出远程调用操作的终端信息,从而能够精确检测到远程调用操作,提升系统安全性。
在本实施例中,所述在所述目标进程的远程过程调用的svcctl服务操作接口中注入用于检测远程调用操作的钩子函数,包括:
在以下至少一个svcctl服务操作接口中注入用于检测远程调用操作的钩子函数:RCreateServiceW,RChangeServiceConfigW和RDeleteService。
本发明提供的远程调用检测方法通过在至少一个svcctl服务操作接口中注入钩子函数,从而能够从多个svcctl服务操作接口中获得远程调用数据,进而能够基于多方面获取的数据确定远程调用操作,从而提高系统的信息安全性。
在本实施例中,在根据所述服务启动项操作行为的远程过程调用数据确定所述服务启动项操作行为是远程调用操作,并获取发起所述远程调用操作的终端的信息之后,方法还包括:
将所述服务启动项操作行为的远程过程调用数据与所述发起所述远程调用操作的终端的信息传输至预设的威胁行为识别引擎,以检测所述远程调用操作是否为远程攻击。
在本实施例中,预设的威胁行为识别引擎可以是本地引擎,也可以是云端引擎,亦或是网络流引擎,对此不做限定。
威胁行为识别引擎可以将远程过程调用数据与恶意软件数据库内的数据进行匹配,若是匹配成功,则最终确定该远程调用操作属于远程攻击,进而需要对该远程调用操作进行拦截;若没有匹配成功,则确定该远程调用操作为正常操作,通过步骤S103检测下一次的服务启动项操作行为,进一步确定下一次的远程调用操作以及对应的终端信息,并对其进行威胁行为识别。
本发明提供的远程调用检测方法通过利用威胁行为识别引擎对远程调用操作进一步地识别鉴定,最终确定其是否为远程攻击,在是的情况下,拦截本次远程调用操作,从而能够实时掌握攻击方信息,且通过捕获到远程机器的IP进一步溯源追踪,有效提高了安全防御能力。
在本实施例中,方法还包括:
在所述目标进程不允许注入的情况下,通过跟踪记录机制记录服务启动项操作行为的参数数据以及网络连接传输信息数据;
根据所述服务启动项操作行为的参数数据,确定所述服务启动项操作行为是远程调用操作;
根据所述网络连接传输信息数据,获取发起所述远程调用操作的终端的信息。
具体地,在前述对Services.exe进程注入钩子函数时可能会出现无法的注入情况,例如:1)注入过程被其他安全软件拦截,导致安装失败;2)Win10及以上版本的操作系统自身对Services.exe进程保护比较严格,操作系统很大可能会直接禁止注入,进而导致注入失败。在上述钩子函数注入失败的情况下,无法通过钩子函数来获取远程过程调用数据,进而无法确定远程调用操作。基于此,本实施例通过跟踪记录机制(Event Tracing forWindows,简称ETW)记录服务启动项操作行为的参数数据以及网络连接传输信息数据,进而确定服务启动项操作行为是否为远程调用操作以及对应的终端信息。其中,服务启动项操作行为的参数数据可以用来确定所述服务启动项操作行为是远程调用操作还是本地操作,网络连接传输信息数据可以用来确定发起所述远程调用操作的终端的信息(即终端IP)。
本发明提供的远程调用检测方法还可以在Services.exe进程下无法注入钩子函数的情况下,通过启动ETW机制来获取服务启动项操作行为的参数数据以及网络连接传输信息数据,进而确定服务启动项操作行为是否为远程调用操作,若是,获取该远程调用操作的终端信息,从而能够更加全面地检测服务启动项操作行为是否是远程调用操作提升系统安全性。
在本实施例中,所述通过跟踪记录机制记录服务启动项操作行为的参数数据以及网络连接传输信息数据,包括:通过跟踪记录机制启动服务控制管理器事件(即ServiceControl Manager Trace事件)和网络信息连接事件(即Microsoft-Windows-Kernel-Network事件);通过所述服务控制管理器事件监测服务启动项操作行为,并在监测到服务启动项操作行为的情况下,记录服务启动项操作行为的参数数据;通过所述网络信息连接事件监测并记录所述目标进程的网络连接传输信息数据。
具体地,ETW机制启动Service Control Manager Trace事件和Microsoft-Windows-Kernel-Network事件,通过Service Control Manager Trace事件监控服务启动项操作行为,根据监控到的行为参数区分服务启动项操作是本地操作还是远程调用操作,若服务启动项操作是本地操作,则跳过本次检测,等待下一次检测调用;若服务启动项操作是远程调用操作,则根据网络连接传输信息数据进一步确定发起本次远程调用操作的终端信息。
本发明提供的远程调用检测方法还可以通过ETW机制启动服务控制管理器事件与网络信息连接事件,分别用来记录服务启动项操作行为的参数数据与目标进程的网络连接传输信息数据,从而能够确定服务启动项操作行为是否为远程调用操作,以及发起远程调用操作的终端信息,全面准确地检测远程调用操作,提升系统的安全性。
在本实施例中,在所述通过所述网络信息连接事件监控所述目标进程的网络连接传输信息数据之后,方法还包括:
判断所述服务启动项操作行为的参数数据中的时间戳信息与网络连接传输信息数据中的时间戳信息之间的时间差是否在预设时间差范围内;
在所述时间差在预设时间差范围内的情况下,将所述服务启动项操作行为的参数数据与所述发起所述远程调用操作的终端的信息传输至预设的威胁行为识别引擎,以检测所述远程调用操作是否为远程攻击。
其中,若是服务启动项操作行为的参数数据中的时间戳信息与网络连接传输信息数据中的时间戳信息之间的时间差不在预设时间差范围内,则表明将服务启动项操作判断为远程调用操作不够准确,需要获取下一时刻的服务启动项操作行为的参数数据与网络连接传输信息数据进行进一步地判断;而若是时间戳在预设时间差范围内,则认定服务启动项操作就是远程调用操作,需要基于该远程调用操作对应的参数数据与终端信息进一步鉴定本次远程调用操作是否为威胁行为。
预设的威胁行为识别引擎与前述的威胁行为识别引擎相同,可以是本地引擎,也可以是云端引擎,亦或是网络流引擎,对此不做限定。其将服务启动项操作行为的参数数据与恶意软件数据库中数据进行匹配,若是匹配成功则判定该远程调用操作属于威胁行为,拦截本次远程调用操作,并根据终端信息对相应终端进行处理。若是没有匹配到相同的数据,则认为本次远程调用操作属于正常行为,对此不做处理,进而进行下一时刻的远程调用检测。
本发明提供的远程调用检测方法通过利用威胁行为识别引擎对远程调用操作进一步地识别鉴定,最终确定其是否为远程攻击,在是的情况下,拦截本次远程调用操作,能够实时掌握攻击方信息,且通过捕获到远程机器的IP进一步溯源追踪,有效提高了安全防御能力。
本实施例还提供一种远程调用检测方法,接下来结合图2进行说明。
图2是本发明提供的远程调用检测方法的流程示意图二。
如图2所示,一种远程调用检测方法包括:
步骤S201;查找Services.exe进程;
步骤S202;往Services.exe进程安装监控装置(即注入钩子函数);
步骤S203;若步骤S202安装成功则监控Services.exe进程的RPC的svcctl服务操作接口下的服务启动项操作行为;
步骤S204;识别判断服务启动项操作行为是否为远程调用操作;若判断为服务启动项操作行为是远程调用操作,则将服务启动项操作行为对应的数据以及发起远程调用操作的终端信息发送至威胁行为识别引擎;
步骤S205;若步骤S202安装失败则启动ETW监控;
步骤S206;监听Service Control Manager Trace事件以及Microsoft-Windows-Kernel-Network事件;
步骤S207;通过Service Control Manager Trace事件监测服务启动项操作行为,并在监测到服务启动项操作行为的情况下,记录服务启动项操作行为的参数数据;同时,通过Microsoft-Windows-Kernel-Network事件监测并记录所述目标进程的网络连接传输信息数据;
步骤S208;根据所述服务启动项操作行为的参数数据,确定所述服务启动项操作行为是远程调用操作,并根据所述网络连接传输信息数据,获取发起所述远程调用操作的终端的信息
步骤S209;判断服务启动项操作行为时间戳和Services.exe进程额网络连接信息时间戳是否在同一个时间范围内,若在同一时间范围内则进一步确认服务启动项操作行为是远程调用操作,将参数数据与终端的信息发送至威胁行为识别引擎;
步骤S210;利用预设的威胁行为识别引擎对远程调用操作进行鉴定;
步骤S211;根据步骤S210中的鉴定结果对远程调用操作进行相应处置。
本发明提供的远程调用检测方法通过往Services.exe进程注入钩子函数以及ETW机制启动Service Control Manager Trace事件以及Microsoft-Windows-Kernel-Network事件这两种方式来对服务启动项操作是否为远程调用操作进行检测,进一步对远程调用操作进行威胁行为识别,从而能够全面检测远程调用操作,提升系统安全性。
又一方面,本实施例还提供一种远程调用检测装置,下面对本发明提供的远程调用检测装置进行描述,下文描述的远程调用检测装置与上文描述的远程调用检测方法可相互对应参照。图3是本发明提供的远程调用检测装置的结构示意图。
如图3所示,该远程调用检测装置包括:
目标进程确定模块310,用于将Services.exe进程确定为目标进程。
函数注入模块320,用于在所述目标进程允许注入的情况下,在所述目标进程的远程过程调用的svcctl服务操作接口中注入用于检测远程调用操作的钩子函数。
远程调用操作确定模块330,用于通过所述钩子函数监测服务启动项操作行为,并在监测到服务启动项操作行为的情况下,根据所述服务启动项操作行为的远程过程调用数据确定所述服务启动项操作行为是远程调用操作,并获取发起所述远程调用操作的终端的信息。
具体地,目标进程确定模块310从系统正在运行的进程列表里,查找Services.exe进程,将其确定为目标进程。Services.exe是Windows操作系统的一部分,用于管理启动和停止服务。正常的Services.exe位于%systemroot%\System32文件夹中,可以通过“cmd”命令方式确定,也可以通过“控制面板”-“管理工具”-“服务”方式确定,本实施例对此不做限定。
函数注入模块320若是能够在Services.exe进程下注入钩子函数(即Hook函数),则在Services.exe进程的远程过程调用(Remote Procedure Call,简称RPC)的svcctl服务操作接口中注入Hook函数,用于检测远程调用操作。Hook函数的注入可以通过往Services.exe注入DLL模块实现。
远程调用操作确定模块330利用钩子函数监测服务启动项操作行为,并通过调用Win32API获取服务启动项操作行为的远程过程调用数据,根据远程过程调用数据确定当前的服务启动项操作行为是远程调用操作还是本地操作,在确定为远程调用操作时进一步地获取发起远程调用操作的终端的信息,即获取发起远程调用操作机器的IP,在确定为本地操作时,则存储本地目标进程的PID。
本发明提供的远程调用检测装置通过函数注入模块320在Services.exe进程下注入钩子函数来检测服务启动项操作行为,并通过远程调用操作确定模块330确定服务启动项操作行为本地发起,还是远程发起的,若是远程发起的服务启动项操作行为,则进一步获取发出远程调用操作的终端信息,从而能够精确检测到远程调用操作,提升系统安全性。
除此之外,远程调用检测装置还包括跟踪记录机制记录模块,用于在所述目标进程不允许注入的情况下,通过跟踪记录机制记录服务启动项操作行为的参数数据以及网络连接传输信息数据;根据所述服务启动项操作行为的参数数据,确定所述服务启动项操作行为是远程调用操作;根据所述网络连接传输信息数据,获取发起所述远程调用操作的终端的信息。
具体地,在前述对Services.exe进程注入钩子函数时可能会出现无法的注入情况,例如:1)注入过程被其他安全软件拦截,导致安装失败;2)Win10及以上版本的操作系统自身对Services.exe进程保护比较严格,较高程度上禁止被注入,进而导致注入失败。在上述钩子函数注入失败的情况下,无法通过钩子函数来获取远程过程调用数据,进而无法确定远程调用操作,基于此,本实施例通过跟踪记录机制(Event Tracing for Windows,简称ETW)记录服务启动项操作行为的参数数据以及网络连接传输信息数据,进而确定服务启动项操作行为是否为远程调用操作以及对应的终端信息。其中,服务启动项操作行为的参数数据可以用来确定所述服务启动项操作行为是远程调用操作还是本地操作,网络连接传输信息数据可以用来确定发起所述远程调用操作的终端的信息(即终端IP)。
本发明提供的远程调用检测装置还可以在Services.exe进程下无法注入钩子函数的情况下,通过跟踪记录机制记录模块启动ETW机制来获取服务启动项操作行为的参数数据以及网络连接传输信息数据,进而确定服务启动项操作行为是否为远程调用操作,若是时获取该远程调用操作的终端信息,从而能够精确检测到远程调用操作,提升系统安全性。
基于前述的远程调用检测装置所确定的远程调用操作,远程调用检测装置还包括威胁行为识别模块,用于基于远程过程调用数据与所述发起所述远程调用操作的终端的信息或者服务启动项操作行为的参数数据与所述发起所述远程调用操作的终端的信息,检测远程调用操作是否为远程攻击。
本发明提供的远程调用检测装置能够全面检测横向渗透攻击,从而能够基于远程调用数据以及终端信息进一步检测出是否为横向渗透攻击,能够实时掌握攻击方信息,且通过捕获到远程机器的IP进一步溯源追踪,有效提高了安全防御能力。
图4是本发明提供的一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行远程调用检测方法,该方法包括:将Services.exe进程确定为目标进程;在所述目标进程允许注入的情况下,在所述目标进程的远程过程调用的svcctl服务操作接口中注入用于检测远程调用操作的钩子函数;通过所述钩子函数监测服务启动项操作行为,并在监测到服务启动项操作行为的情况下,根据所述服务启动项操作行为的远程过程调用数据确定所述服务启动项操作行为是远程调用操作,并获取发起所述远程调用操作的终端的信息。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的远程调用检测方法,该方法包括:将Services.exe进程确定为目标进程;在所述目标进程允许注入的情况下,在所述目标进程的远程过程调用的svcctl服务操作接口中注入用于检测远程调用操作的钩子函数;通过所述钩子函数监测服务启动项操作行为,并在监测到服务启动项操作行为的情况下,根据所述服务启动项操作行为的远程过程调用数据确定所述服务启动项操作行为是远程调用操作,并获取发起所述远程调用操作的终端的信息。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的远程调用检测方法,该方法包括:将Services.exe进程确定为目标进程;在所述目标进程允许注入的情况下,在所述目标进程的远程过程调用的svcctl服务操作接口中注入用于检测远程调用操作的钩子函数;通过所述钩子函数监测服务启动项操作行为,并在监测到服务启动项操作行为的情况下,根据所述服务启动项操作行为的远程过程调用数据确定所述服务启动项操作行为是远程调用操作,并获取发起所述远程调用操作的终端的信息。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。