一种用于实现NDIS6-Hooking的方法技术

技术编号:37711681 阅读:10 留言:0更新日期:2023-06-02 00:04
本发明专利技术公开一种用于实现NDIS6

【技术实现步骤摘要】
一种用于实现NDIS6

Hooking的方法


[0001]本专利技术属于网络安全
,尤其涉及一种用于实现NDIS6

Hooking的方法。

技术介绍

[0002]NDIS(Network Driver Interface Specification)是微软和3COM于1989年联手开发的Windows上一种网络设备驱动程序接口规范,用于规定通信协议程序(如TCP/IP)和网络设备驱动程序之间应如何相互通信。
[0003]早在Windows XP/Server 2003的时代,即NDIS版本5.X时期,Windows系统中针对网络流量的安全检测和防护产品,如主机防火墙等,多数基于此实现。那时微软推荐的方法是NDIS中间层驱动(NDIS Intermediate Drivers,简称IM驱动)。但中间层驱动有着显而易见的缺点,主要包括:(1)安装困难,且易于被缺载而失效;(2)需要针对所有适配器进行注册安装,即插即用网络适配器容易被忽略;(3)需遵循NDIS接口规范框架的要求,实现复杂。
[0004]因为NDIS 5.X存在这些问题,一般Windows基于主机流量的安全防护产品多采用NDIS钩子技术实现。设置钩子是一种通过修改系统关键代码或关键函数指针的技术,它将程序执行代码流指向特定代码,待特定代码执行完成后再恢复原来代码或函数的执行。Windows XP之前系统内核并不限制对设置钩子技术的使用,而NDIS钩子又具有方便动态安装、拦截全面、适应性强、易于实现的优点,于是便迅速大行其道,广泛应用在需要安插安全检测代码的软件产品中。
[0005]Windows 7之后,情况发生了大的改变:IM驱动不再推荐使用(Windows 10后不再支持);内核钩子被全面禁止。随着NDIS6.0的提出,微软提出了NDIS LightWeight Filter Driver(简称NDIS Filter Driver)以及WFP(Windows Filtering Platform)的概念,一时之间基于主机流量的安全产品纷纷转入这两种技术。WFP实质上也是基于NDIS过滤器技术实现的,只不过进行了统一框架的设计。WFP和NDIS过滤器专注于网络数据包的过滤,具有简洁易用、开发代价小的优势,但其依然存在以下问题:(1)NDIS过滤器必须通过inf文件进行显性安装,易被恶意代码或人为卸载失效;(2)WFP出现时间短,内部实现复杂,存在接口设计版本差异大、不稳定的问题;(3)WFP在Windows 7上未设计拦截原始以态网帧的接口,无法拦截如WinPCap或npcap等发出的数据包。

技术实现思路

[0006]为了解决上述技术问题,本专利技术在逆向分析NDIS6.X的基础上,提出一种用于实现NDIS6

Hooking的方案。
[0007]本专利技术第一方面公开了一种用于实现NDIS6

Hooking的方法。NDIS6为网络驱动程序接口规范6.0版本,所述方法包括:对所述NDIS6进行逆向分析,以获取所述NDIS6经注册的名为“\\CallBack\\NdisBindUnbind”的Callback回调对象,并使用例程ExCreateCallback打开所述Callback回调对象,从而利用例程ExRegisterCallback注册Callback回调例程;当所述Callback回调例程被操作系统调用时,通过调用参数获取WMI_
NODE结构体,基于所述WMI_NODE结构体中的EventGuid字段判断所述操作系统中是否产生网络适配器绑定事件;当判定已产生所述网络适配器绑定事件时,所述NDIS6重置位于协议和顶层过滤器之间、各个中间层过滤器之间、底层过滤器和微型端口驱动之间的接口例程指针,并抹去预先配置的钩子;其中,当检测到所述NDIS6抹去所述预先配置的钩子后,自动触发重新配置被抹去的钩子的操作,所述操作具体包括:调用例程NdisRegisterProtocolDriver以注册协议对象,所述NDIS6为所述协议对象建立名为NDIS_PROTOCOL_BLOCK的协议块结构,遍历所述协议块结构以确定待重新配置的钩子的点位,在确定的所述点位上重新配置所述抹去的钩子,重新配置结束后,调用例程NdisDeregisterProtocol以注销所述协议对象。
[0008]根据第一方面的方法,当所述WMI_NODE结构体中的所述EventGuid字段为{0x5413531C,0xB1F3,0x11D0,{0x8D,0xD7,0,0xC0,0x4F,0xC3,0x35,0x8C}}时,表征所述操作系统创建并激活新的微型端口驱动,已产生所述网络适配器绑定事件。
[0009]根据第一方面的方法,在调用所述例程NdisRegisterProtocolDriver成功注册所述协议对象后,通过遍历所述协议块结构确定所述需要的接口例程指针,并根据所述接口例程指针确定所述待重新配置的钩子的点位,所述接口例程指针包括Send、SendComplete、Receive以及Return。
[0010]根据第一方面的方法,所述待重新配置的钩子的点位包括上沿钩子和下沿钩子:
[0011]所述上沿钩子包括:
[0012]发送例程MiniportBlock.Next.SendNetBufferLists;
[0013]接收归还例程MiniportBlock.Next.ReturnNetBufferLists;
[0014]接收例程OpenBlock.ReceiveNetBufferLists;
[0015]发送归还例程OpenBlock.ProtSendNetBufferListsComplete;
[0016]所述下沿钩子包括:
[0017]发送例程MiniportBlock.LowerFilter.NextSendNetBufferLists;
[0018]接收归还例程MiniportBlock.LowerFilter.NextReturnNetBufferLists;
[0019]接收例程MiniportBlock.Next.IndicateReceiveNetBufferLists;
[0020]发送归还例程MiniportBlock.Next.SendNetBufferListsComplete。
[0021]根据第一方面的方法,当所述NDIS6的特殊编码导致所述上沿钩子与所述下沿钩子重合时,采用所述上沿钩子代替所述下沿钩子。
[0022]根据第一方面的方法,在所述下沿钩子的配置模式下,所述接口例程指针Send的钩子点位位于所述底层过滤器处,与所述接口例程指针Send对应的所述接口例程指针SendComplete的钩子点位位于所述微型端口驱动处。
[0023]本专利技术第二方面公开了一种用于实现NDIS6

Hooking的装置;NDI本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于实现NDIS6

Hooking的方法,NDIS6为网络驱动程序接口规范6.0版本,其特征在于,所述方法包括:对所述NDIS6进行逆向分析,以获取所述NDIS6经注册的名为“\\CallBack\\NdisBindUnbind”的Callback回调对象,并使用例程ExCreateCallback打开所述Callback回调对象,从而利用例程ExRegisterCallback注册Callback回调例程;当所述Callback回调例程被操作系统调用时,通过调用参数获取WMI_NODE结构体,基于所述WMI_NODE结构体中的EventGuid字段判断所述操作系统中是否产生网络适配器绑定事件;当判定已产生所述网络适配器绑定事件时,所述NDIS6重置位于协议和顶层过滤器之间、各个中间层过滤器之间、底层过滤器和微型端口驱动之间的接口例程指针,并抹去预先配置的钩子;其中,当检测到所述NDIS6抹去所述预先配置的钩子后,自动触发重新配置被抹去的钩子的操作,所述操作具体包括:调用例程NdisRegisterProtocolDriver以注册协议对象,所述NDIS6为所述协议对象建立名为NDIS_PROTOCOL_BLOCK的协议块结构,遍历所述协议块结构以确定待重新配置的钩子的点位,在确定的所述点位上重新配置所述抹去的钩子,重新配置结束后,调用例程NdisDeregisterProtocol以注销所述协议对象。2.根据权利要求1所述的一种用于实现NDIS6

Hooking的方法,其特征在于,当所述WMI_NODE结构体中的所述EventGuid字段为{0x5413531C,0xB1F3,0x11D0,{0x8D,0xD7,0,0xC0,0x4F,0xC3,0x35,0x8C}}时,表征所述操作系统创建并激活新的微型端口驱动,已产生所述网络适配器绑定事件。3.根据权利要求2所述的一种用于实现NDIS6

Hooking的方法,其特征在于,在调用所述例程NdisRegisterProtocolDriver成功注册所述协议对象后,通过遍历所述协议块结构确定所述需要的接口例程指针,并根据所述接口例程指针确定所述待重新配置的钩子的点位,所述接口例程指针包括Send、SendComplete、Receive以及Return。4.根据权利要求3所述的一种用于实现NDIS6

Hooking的方法,其特征在于,所述待重新配置的钩子的点位包括上沿钩子和下沿钩子:所述上沿钩子包括:发送例程MiniportBlock.Next.SendNetBufferLists;接收归还例程MiniportBlock.Next.ReturnNetBufferLists;接收例程OpenBlock.ReceiveNetBufferLists;发送归还例程OpenBlock.ProtSendNetBufferListsComplete;所述下沿钩子包括:发送例程MiniportBlock.LowerFilter.NextSendNetBufferLis...

【专利技术属性】
技术研发人员:穆源张俊王龙江饶金龙陈国春黄天纵吴庆张伟胡琪宋晓斌朱涛常天佑
申请(专利权)人:中国人民解放军六一六六零部队
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1