具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明基于WinRM服务的防护方法实施例流程图。如图1所示,本发明实施例的基于WinRM服务的防护方法包括:
S101,响应于检测到WinRM服务的进程,在进程中安装监控模块,监控模块用于监测进程是否加载目标模块。
进程可以由内网的远程电脑启动。
Windows Remote Management服务,简称WinRM服务,是Windows对WS-Management的实现,WinRM允许远程用户使用工具和脚本对Windows服务器进行管理并获取数据。
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
作为示例,可以通过系统提供API函数QueryServiceStatusEx,传入WinRM的服务名称(即WinRM),QueryServiceStatusEx函数返回的数据里可找到WinRM服务的进程ID,若存在WinRM服务的进程ID,即检测到WinRM服务的进程。
作为示例,通过往WinRM服务进程中注入监控模块的方式安装监控模块,即在内存中修改WinRM服务进程里的API函数完成预设Hook函数操作,后续通过在Hook函数监控WinRM的通讯数据。
监控模块可以是用于监控进程的工具或者脚本,当WinRM服务的进程存在时,被安装在WinRM服务的进程中。
目标模块,运行在WinRM服务进程中,WinRM服务进程中运行有至少一个模块,可以根据具体需要选取合适的目标模块。
内网也就是局域网,内网的计算机以NAT(网络地址转换)协议,通过一个公共的网关访问Internet。内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
由于现有网络攻击防护技术对抗里,对于攻击者通过利用内网已被攻陷的机器作为跳板,针对即将被攻击的机器进行发起利用WinRM进行远程攻击行为,在被攻击机器里缺乏有效的精确识别监控防护机制,使得作为防御方处于监控失效的情况,因此,在当内网中被攻击机器里的WinRM服务被启动时,在进程中安装监控模块监控和识别进程中加载的模块和流量数据等。
S102,若已加载目标模块,则通过监控模块,在目标模块上设置Hook函数,Hook函数用于获取通过目标模块的数据,数据包括目标模块的执行参数和IP地址。
Hook函数,即钩子函数,在系统没有调用某个函数之前,钩子函数可以优先捕获该函数调用,获取得到函数控制权,对该函数进行额外加工处理。
互联网协议地址(Internet Protocol Address,又译为网际协议地址),缩写为IP地址(IP Address)。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
作为示例,执行参数可以是调用Win32 API,即Microsoft 32位平台的应用程序编程接口(Application Programming Interface)。所有在Win32平台上运行的应用程序都可以调用这些函数。
S103,判断数据的格式是否为目标格式,若是,则将数据解析,得到解析后的执行参数和解析后的IP地址,将解析后的执行参数通过预设规则匹配,根据匹配结果对进程的操作执行拦截,并根据解析后的IP地址对与IP地址对应的远程电脑进行安全响应。
在一些实施例中,如果数据的格式不是为目标格式,可以将不是目标数据解析后分析判断,也可以直接忽略。预设规则可以是关于预设的函数名称或者调用动作。安全响应可以是告知内网的其他电脑,或者通知控制中心关闭远程电脑等。
解析,即格式转换。
作为示例,匹配结果会返回两种状态,1.阻止,2.放行,如果是阻止,那拦截本次的WinRM服务进程的执行行为,如果是放行,则让WinRM自身的处理流程继续往下执行。
本发明实施例提供的基于WinRM服务的防护方法,通过响应于检测到WinRM服务的进程,在进程中安装监控模块,监控模块用于监测进程是否加载目标模块;若已加载目标模块,则通过监控模块,在目标模块上设置Hook函数,Hook函数用于获取通过目标模块的数据,数据包括目标模块的执行参数和IP地址;判断数据的格式是否为目标格式,若是,则将数据解析,得到解析后的执行参数和解析后的IP地址,将解析后的执行参数通过预设规则匹配,根据匹配结果对进程的操作执行拦截,并根据解析后的IP地址对与IP地址对应的远程电脑进行安全响应。可以看出,在WinRM服务的进程安装监控模块,监控WinRM服务进程的网络通讯数据,精确识别来自内网远程发起的WinRM服务的操作攻击,并且获取发起攻击的远程机器的IP,进行安全检测响应,让防御方面对内网远程横向渗透攻击时可实时掌握攻击方信息,且可以通过捕获到远程机器的IP进一步溯源追踪,有效的提高了安全防御能力。
图2为本发明基于WinRM服务的防护方法另一些实施例流程图。如图2所示,本发明实施例的基于WinRM服务的防护方法包括:
S201,响应于检测到WinRM服务的进程,在进程中安装监控模块,监控模块用于监测进程是否加载目标模块。
在一些实施例中,步骤201的具体实现及其所带来的技术效果,可以参考图1对应的实施例中的步骤101,在此不再赘述。
S202,若已加载目标模块,则通过监控模块,对目标模块中的至少一个目标函数分别设置对应的Hook函数,Hook函数用于获取通过对应的目标函数的数据,通过对应至少一个目标函数的至少一个Hook函数获取的数据包括对应进程的执行参数和IP地址。
即,WinRM服务进程中运行的目标模块中包含了至少一个目标函数,对至少一个目标函数中的每个目标函数设置一个Hook函数,每个Hook函数用来获取对应的目标函数的数据。也可以对目标模块中的所有函数的数据设置Hook函数。
在一些可选的实现方式中,至少一个目标函数包括httpapi.dll.HttpReceiveHttpRequest函数、httpapi.dll.HttpReceiveRequestEntityBody函数和sspicli.dll.DecryptMessage函数。
作为示例,httpapi.dll.HttpReceiveHttpRequest函数,用于从指定的请求队列中同步或异步地检索下一个可用的http请求,即获取远程电脑的IP和ID。
作为示例,httpapi.dll.HttpReceiveRequestEntityBody函数,用于接收指定http请求的附加实体数据,即记录加密后的http数据包地址和远程电脑的ID。
作为示例,sspicli.dll.DecryptMessage函数,用于获取解密后的http数据包地址和远程电脑的ID。
S203,判断数据的格式是否为目标格式,若是,则将数据解析,得到解析后的执行参数和解析后的IP地址,将解析后的执行参数抛到威胁行为引擎中进行预设规则匹配,根据匹配结果对进程的操作执行拦截,并根据解析后的IP地址对与IP地址对应的远程电脑进行安全响应。
作为示例,威胁行为引擎可以是一个基于云端的行为识别能力,通过安全运营专家的积累经验形成的一套对行为数据(即执行参数)进行匹配检测的规则,根据检测匹配结果来决定该行为是否为攻击行为,而进一步防护拦截阻止的处置。
在一些可选的实现方式中,判断数据的格式是否为目标格式,包括:根据对应至少一个目标函数的至少一个Hook函数,获取通过至少一个的目标函数的数据,将通过至少一个的目标函数的数据整合后,判断整合后的数据的格式是否为目标格式。
作为示例,以上述至少一个目标函数为例,通过httpapi.dll.HttpReceiveHttpRequest函数、httpapi.dll.HttpReceiveRequestEntityBody函数和sspicli.dll.DecryptMessage函数,分别得到远程电脑的IP和ID、远程电脑的IP和ID,以及解密后的http数据包地址和远程电脑的ID。通过远程电脑的ID将远程电脑的IP和解密后的http数据包地址整合在一起。根据解密后的http数据包地址得到解密后的数据,然后判断解密后的数据的格式。
本发明实施例提供的基于WinRM服务的防护方法,通过在WinRM服务的进程安装监控模块,监控WinRM服务进程中至少一个目标函数的网络通讯数据,通过至少一个目标函数的网络通讯数据能更精确的识别来自内网远程发起的WinRM服务的操作攻击,并且获取发起攻击的远程机器的IP,进行安全检测响应,让防御方面对内网远程横向渗透攻击时可实时掌握攻击方信息,且可以通过捕获到远程机器的IP进一步溯源追踪,有效的提高了安全防御能力。
图3为本发明基于WinRM服务的防护方法再一些实施例流程图。如图3所示,本发明实施例的基于WinRM服务的防护方法包括:
S301,响应于检测到WinRM服务的进程,在进程中安装监控模块,监控模块用于监测进程是否加载WsmSvc.dll模块。
WsmSvc.dll是一个Windows的动态链接库,是WinRM服务工作的唯一核心模块。动态链接库是Dynamic Link Library的缩写。程序和浏览器需要这类动态链接库,因为它们包含程序代码,数据等。
在一些实施例中,步骤301的具体实现及其所带来的技术效果,可以参考图1对应的实施例中的步骤101,在此不再赘述。
S302,若已加载WsmSvc.dll模块,则通过监控模块,在WsmSvc.dll模块上设置Hook函数,Hook函数用于获取通过WsmSvc.dll模块的数据,数据包括目标模块的执行参数和IP地址。
在一些实施例中,步骤302的具体实现及其所带来的技术效果,可以参考图1对应的实施例中的步骤102,在此不再赘述。
S303,判断数据的格式是否为目标格式,若是,则将数据解析,得到解析后的执行参数和解析后的IP地址,将解析后的执行参数通过预设规则匹配,根据匹配结果对进程的操作执行拦截,并根据解析后的IP地址对与IP地址对应的远程电脑进行安全响应。
在一些可选的实现方式中,目标格式包括XML格式。
目标格式也可是其他格式,本发明对此不作限制。
需要判断的数据是WinRM服务的XML格式的明文数据,然后从这个数据里提取执行命令需要进一步去解析里面的数据,若解析的数据仍为加密数据,则继续解密,直到获得不被加密的执行参数和IP地址。
XML格式的明文数据可以参考以下:
/*远程电脑IP*/
<a:To>http://192.168.44.144:5985/wsman?PSVersion=2.0</a:To>
……
/*需要二次解密的数据*/
<rsp:Arguments>AAAAAAAAAAwAAAAAAAAAAAMAAAbFAgAAAAYQAgBdHAv7qqLoQL4JXGVrX/z23zYE/f9vik2yrpJ8iMq7de+7vzxPYmogUmVmSWQ9IjAiPjxNUz48T2JqIE49IlBvd2VyU2hlbGwiIFJlZklkPSIxIj48TVM+PE9iaiBOPSJDb…</rsp:Arguments>
将上述数据解密后,得到执行参数。
本发明实施例提供的基于WinRM服务的防护方法,通过在WinRM服务的进程安装监控模块,监控WinRM服务进程中WsmSvc.dll模块的网络通讯数据,通过WsmSvc.dll模块的网络通讯数据,更全面的识别来自内网远程发起的WinRM服务的操作攻击,并且获取发起攻击的远程机器的IP,进行安全检测响应,让防御方面对内网远程横向渗透攻击时可实时掌握攻击方信息,且可以通过捕获到远程机器的IP进一步溯源追踪,有效的提高了安全防御能力。
图4为本发明基于WinRM服务的防护方法的应用场景的示意图。如图4所示,基于WinRM服务的防护的步骤包括:
1、查找识别WinRM的服务进程,并向WinRM服务进程安装监控模块;
2、WinRM服务进程里的监控模块会检测当前进程是否已加载WsmSvc.dll模块;
因为WinRM是通讯协议是基于Web服务管理标准(WS-Management标准,WS-Management规范是国际上著名的标准化组织DMTF提出一个利用Web Services技术进行系统管理的标准。
该规范的制订参考了许多业已成熟的Web Services方面的标准,同时WS-Management规范也做了相应地改进),该协议是基于简单对象访问协议(SOAP)的、防火墙友好的标准协议。要监控该协议的通讯数据,监控模块会对WsmSvc.dll模块的IAT(PE输入表)函数预设Hook函数,分别是httpapi.dll.HttpReceiveHttpRequest;
httpapi.dll.HttpReceiveRequestEntityBody,sspicli.dll.DecryptMessage函数
IAT(PE输入表)函数,一般程序在调用自身函数的时候,自身函数地址RAV是固定的;但是当程序在调用dll里的函数的时候,由于dll的地址会发生重定位,导致dll里的函数地址每次都会发生变化。
为了每次都能准确的调用dll函数的地址,就特意构建了一张表(PE输入表),用于存储每次程序运行,dll发生重定位之后,dll的函数的地址。而这样之后,那程序在调用dll函数的时候,就可以用“类似指针”指向这张表格,取其值为函数新的地址。即可准确调用dll的函数;
3、当WinRM服务进程发生WinRM协议网络通讯收包的行为产生时,触发httpapi.dll.HttpReceiveHttpRequest预设Hook函数,会记录HTTP请求数据(远程电脑IP),触发httpapi.dll.HttpReceiveRequestEntityBody预设Hook函数时,会记录HTTP请求ID和数据地址,触发sspicli.dll.DecryptMessage预设Hook函数时,会记录解密后的HTTP数据内容(一般情况下,这三个函数会被同时触发);
4、WinRM是依靠SOAP协议通讯(SOAP协议,即简单对象访问协议,是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息),SOAP是基于XML格式,当判断解密后HTTP数据内容是XML格式内容,并且进行对其该数据进行解析,获取WinRM远程执行脚本或命令参数数据和远程电脑IP,传递到威胁行为引擎进行安全鉴定,最终根据鉴定结果做判定拦截处理。
图5为本发明基于WinRM服务的防护装置实施例结构示意图。如图3所示,该基于WinRM服务的防护装置,包括:
第一处理模块501,用于响应于检测到WinRM服务的进程,在进程中安装监控模块,监控模块用于监测进程是否加载目标模块;
第二处理模块502,用于若已加载目标模块,则通过监控模块,在目标模块上设置Hook函数,Hook函数用于获取通过目标模块的数据,数据包括目标模块的执行参数和IP地址;
第三处理模块503,用于判断数据的格式是否为目标格式,若是,则将数据解析,得到解析后的执行参数和解析后的IP地址,将解析后的执行参数通过预设规则匹配,根据匹配结果对进程的操作执行拦截,并根据解析后的IP地址对与IP地址对应的远程电脑进行安全响应。
可选地,目标模块包括WsmSvc.dll模块。
可选地,目标模块中包括至少一个目标函数;以及
第二处理模块502还用于:
若已加载目标模块,则通过监控模块,对目标模块中的至少一个目标函数分别设置对应的Hook函数,Hook函数用于获取通过对应的目标函数的数据,通过对应至少一个目标函数的至少一个Hook函数获取的数据包括对应进程的执行参数和IP地址。
可选地,至少一个目标函数包括httpapi.dll.HttpReceiveHttpRequest函数、httpapi.dll.HttpReceiveRequestEntityBody函数和sspicli.dll.DecryptMessage函数。
可选地,第三处理模块503还用于:
根据对应至少一个目标函数的至少一个Hook函数,获取通过至少一个的目标函数的数据,将通过至少一个的目标函数的数据整合后,判断整合后的数据的格式是否为目标格式。
可选地,目标格式包括XML格式。
可选地,第三处理模块503还用于:
将解析后的执行参数抛到威胁行为引擎中进行预设规则匹配,根据匹配结果对进程的操作执行拦截。
举个例子如下:
图6示例了一种电子设备的实体结构示意图,如图6示,该电子设备可以包括:处理器(processor)601、通信接口(Communications Interface)602、存储器(memory)603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信。处理器601可以调用存储器603中的逻辑指令,以执行如下方法:响应于检测到WinRM服务的进程,在进程中安装监控模块,监控模块用于监测进程是否加载目标模块;若已加载目标模块,则通过监控模块,在目标模块上设置Hook函数,Hook函数用于获取通过目标模块的数据,数据包括目标模块的执行参数和IP地址;判断数据的格式是否为目标格式,若是,则将数据解析,得到解析后的执行参数和解析后的IP地址,将解析后的执行参数通过预设规则匹配,根据匹配结果对进程的操作执行拦截,并根据解析后的IP地址对与IP地址对应的远程电脑进行安全响应。
此外,上述的存储器603中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各实施例提供的基于WinRM服务的防护方法,例如包括:响应于检测到WinRM服务的进程,在进程中安装监控模块,监控模块用于监测进程是否加载目标模块;若已加载目标模块,则通过监控模块,在目标模块上设置Hook函数,Hook函数用于获取通过目标模块的数据,数据包括目标模块的执行参数和IP地址;判断数据的格式是否为目标格式,若是,则将数据解析,得到解析后的执行参数和解析后的IP地址,将解析后的执行参数通过预设规则匹配,根据匹配结果对进程的操作执行拦截,并根据解析后的IP地址对与IP地址对应的远程电脑进行安全响应。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的基于WinRM服务的防护方法,例如包括:响应于检测到WinRM服务的进程,在进程中安装监控模块,监控模块用于监测进程是否加载目标模块;若已加载目标模块,则通过监控模块,在目标模块上设置Hook函数,Hook函数用于获取通过目标模块的数据,数据包括目标模块的执行参数和IP地址;判断数据的格式是否为目标格式,若是,则将数据解析,得到解析后的执行参数和解析后的IP地址,将解析后的执行参数通过预设规则匹配,根据匹配结果对进程的操作执行拦截,并根据解析后的IP地址对与IP地址对应的远程电脑进行安全响应。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。