CN116193001B - 一种用于实现NDIS6-Hooking的方法 - Google Patents
一种用于实现NDIS6-Hooking的方法 Download PDFInfo
- Publication number
- CN116193001B CN116193001B CN202310124458.7A CN202310124458A CN116193001B CN 116193001 B CN116193001 B CN 116193001B CN 202310124458 A CN202310124458 A CN 202310124458A CN 116193001 B CN116193001 B CN 116193001B
- Authority
- CN
- China
- Prior art keywords
- routine
- ndis6
- protocol
- hook
- miniport
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 238000004590 computer program Methods 0.000 claims description 11
- 238000005516 engineering process Methods 0.000 abstract description 10
- 238000001914 filtration Methods 0.000 abstract description 6
- 230000007246 mechanism Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000009434 installation Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 238000011161 development Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/24—Negotiation of communication capabilities
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0227—Filtering policies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/321—Interlayer communication protocols or service data unit [SDU] definitions; Interfaces between layers
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开一种用于实现NDIS6‑Hooking的方法,涉及网络安全领域。所述方法获得所需要的接口例程指针、打开NDIS6的Callback回调对象并注册一个Callback回调例程、周期性地扫描安装钩子以防止系统重置接口导致钩子被抹去,实现一种实用化的NDIS6挂钩技术实现框架,可避免触碰内核PatchGuard机制,同时合理嵌入NDIS的协议‑过滤器‑微型端口驱动层级架构,不过分依赖NDIS模块的硬编码,能够高效完成数据包过滤或修改功能。
Description
技术领域
本发明属于网络安全技术领域,尤其涉及一种用于实现NDIS6-Hooking的方法。
背景技术
NDIS(Network Driver Interface Specification)是微软和3COM于1989年联手开发的Windows上一种网络设备驱动程序接口规范,用于规定通信协议程序(如TCP/IP)和网络设备驱动程序之间应如何相互通信。
早在Windows XP/Server 2003的时代,即NDIS版本5.X时期,Windows系统中针对网络流量的安全检测和防护产品,如主机防火墙等,多数基于此实现。那时微软推荐的方法是NDIS中间层驱动(NDIS Intermediate Drivers,简称IM驱动)。但中间层驱动有着显而易见的缺点,主要包括:(1)安装困难,且易于被缺载而失效;(2)需要针对所有适配器进行注册安装,即插即用网络适配器容易被忽略;(3)需遵循NDIS接口规范框架的要求,实现复杂。
因为NDIS 5.X存在这些问题,一般Windows基于主机流量的安全防护产品多采用NDIS钩子技术实现。设置钩子是一种通过修改系统关键代码或关键函数指针的技术,它将程序执行代码流指向特定代码,待特定代码执行完成后再恢复原来代码或函数的执行。Windows XP之前系统内核并不限制对设置钩子技术的使用,而NDIS钩子又具有方便动态安装、拦截全面、适应性强、易于实现的优点,于是便迅速大行其道,广泛应用在需要安插安全检测代码的软件产品中。
Windows 7之后,情况发生了大的改变:IM驱动不再推荐使用(Windows 10后不再支持);内核钩子被全面禁止。随着NDIS6.0的提出,微软提出了NDIS LightWeight FilterDriver(简称NDIS Filter Driver)以及WFP(Windows Filtering Platform)的概念,一时之间基于主机流量的安全产品纷纷转入这两种技术。WFP实质上也是基于NDIS过滤器技术实现的,只不过进行了统一框架的设计。WFP和NDIS过滤器专注于网络数据包的过滤,具有简洁易用、开发代价小的优势,但其依然存在以下问题:(1)NDIS过滤器必须通过inf文件进行显性安装,易被恶意代码或人为卸载失效;(2)WFP出现时间短,内部实现复杂,存在接口设计版本差异大、不稳定的问题;(3)WFP在Windows 7上未设计拦截原始以态网帧的接口,无法拦截如WinPCap或npcap等发出的数据包。
发明内容
为了解决上述技术问题,本发明在逆向分析NDIS6.X的基础上,提出一种用于实现NDIS6-Hooking的方案。
本发明第一方面公开了一种用于实现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以注销所述协议对象。
根据第一方面的方法,当所述WMI_NODE结构体中的所述EventGuid字段为{0x5413531C,0xB1F3,0x11D0,{0x8D,0xD7,0,0xC0,0x4F,0xC3,0x35,0x8C}}时,表征所述操作系统创建并激活新的微型端口驱动,已产生所述网络适配器绑定事件。
根据第一方面的方法,在调用所述例程NdisRegisterProtocolDriver成功注册所述协议对象后,通过遍历所述协议块结构确定所述需要的接口例程指针,并根据所述接口例程指针确定所述待重新配置的钩子的点位,所述接口例程指针包括Send、SendComplete、Receive以及Return。
根据第一方面的方法,所述待重新配置的钩子的点位包括上沿钩子和下沿钩子:
所述上沿钩子包括:
发送例程MiniportBlock.Next.SendNetBufferLists;
接收归还例程MiniportBlock.Next.ReturnNetBufferLists;
接收例程OpenBlock.ReceiveNetBufferLists;
发送归还例程OpenBlock.ProtSendNetBufferListsComplete;
所述下沿钩子包括:
发送例程MiniportBlock.LowerFilter.NextSendNetBufferLists;
接收归还例程MiniportBlock.LowerFilter.NextReturnNetBufferLists;
接收例程MiniportBlock.Next.IndicateReceiveNetBufferLists;
发送归还例程MiniportBlock.Next.SendNetBufferListsComplete。
根据第一方面的方法,当所述NDIS6的特殊编码导致所述上沿钩子与所述下沿钩子重合时,采用所述上沿钩子代替所述下沿钩子。
根据第一方面的方法,在所述下沿钩子的配置模式下,所述接口例程指针Send的钩子点位位于所述底层过滤器处,与所述接口例程指针Send对应的所述接口例程指针SendComplete的钩子点位位于所述微型端口驱动处。
本发明第二方面公开了一种用于实现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以注销所述协议对象。
根据第二方面的系统,当WMI_NODE结构体中的所述EventGuid字段为{0x5413531C,0xB1F3,0x11D0,{0x8D,0xD7,0,0xC0,0x4F,0xC3,0x35,0x8C}}时,表征所述操作系统创建并激活新的微型端口驱动,已产生所述网络适配器绑定事件。
根据第二方面的系统,在调用所述例程NdisRegisterProtocolDriver成功注册所述协议对象后,通过遍历所述协议块结构确定所述需要的接口例程指针,并根据所述接口例程指针确定所述待重新配置的钩子的点位,所述接口例程指针包括Send、SendComplete、Receive以及Return。
根据第二方面的系统,所述待重新配置的钩子的点位包括上沿钩子和下沿钩子:
所述上沿钩子包括:
发送例程MiniportBlock.Next.SendNetBufferLists;
接收归还例程MiniportBlock.Next.ReturnNetBufferLists;
接收例程OpenBlock.ReceiveNetBufferLists;
发送归还例程OpenBlock.ProtSendNetBufferListsComplete;
所述下沿钩子包括:
发送例程MiniportBlock.LowerFilter.NextSendNetBufferLists;
接收归还例程MiniportBlock.LowerFilter.NextReturnNetBufferLists;
接收例程MiniportBlock.Next.IndicateReceiveNetBufferLists;
发送归还例程MiniportBlock.Next.SendNetBufferListsComplete。
根据第二方面的系统,当所述NDIS6的特殊编码导致所述上沿钩子与所述下沿钩子重合时,采用所述上沿钩子代替所述下沿钩子。
根据第二方面的系统,在所述下沿钩子的配置模式下,所述接口例程指针Send的钩子点位位于所述底层过滤器处,与所述接口例程指针Send对应的所述接口例程指针SendComplete的钩子点位位于所述微型端口驱动处。
本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本公开第一方面中任一项所述的一种用于实现NDIS6-Hooking的方法中的步骤。
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本公开第一方面中任一项所述的一种用于实现NDIS6-Hooking的方法中的步骤。
综上,本发明提出的技术方案可避免触碰内核Patch Guard机制,同时合理嵌入NDIS的“协议/过滤器/微型端口驱动”层级架构,又不过分依赖NDIS模块的硬编码,能够高效完成数据包过滤或修改功能。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例的NDIS6驱动堆栈示意图;
图2为根据本发明实施例的NDIS6关键数据结构及关系示意图;
图3为根据本发明实施例的NDIS6数据包发送接收流程示意图;
图4为根据本发明实施例的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
由于在Windows系统中进行网络流量的安全检测和防护,微软推荐使用的NDISIntermediate Drivers、NDIS Filter Driver以及WFP(Windows Filtering Platform)相比较NDIS挂钩技术存在很多缺点,而NDIS 6.X技术架构较之NDIS 5.X发生了革命性的变化,导致NDIS 5.X的较为成熟的Hooking技术不能沿用,且目前NDIS6挂钩技术还远未达到安全稳定的实用要求。
本发明第一方面公开了一种用于实现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以注销所述协议对象。
根据第一方面的方法,当所述WMI_NODE结构体中的所述EventGuid字段为{0x5413531C,0xB1F3,0x11D0,{0x8D,0xD7,0,0xC0,0x4F,0xC3,0x35,0x8C}}时,表征所述操作系统创建并激活新的微型端口驱动,已产生所述网络适配器绑定事件。
根据第一方面的方法,在调用所述例程NdisRegisterProtocolDriver成功注册所述协议对象后,通过遍历所述协议块结构确定所述需要的接口例程指针,并根据所述接口例程指针确定所述待重新配置的钩子的点位,所述接口例程指针包括Send、SendComplete、Receive以及Return。
根据第一方面的方法,所述待重新配置的钩子的点位包括上沿钩子和下沿钩子:
所述上沿钩子包括:
发送例程MiniportBlock.Next.SendNetBufferLists;
接收归还例程MiniportBlock.Next.ReturnNetBufferLists;
接收例程OpenBlock.ReceiveNetBufferLists;
发送归还例程OpenBlock.ProtSendNetBufferListsComplete;
所述下沿钩子包括:
发送例程MiniportBlock.LowerFilter.NextSendNetBufferLists;
接收归还例程MiniportBlock.LowerFilter.NextReturnNetBufferLists;
接收例程MiniportBlock.Next.IndicateReceiveNetBufferLists;
发送归还例程MiniportBlock.Next.SendNetBufferListsComplete。
根据第一方面的方法,当所述NDIS6的特殊编码导致所述上沿钩子与所述下沿钩子重合时,采用所述上沿钩子代替所述下沿钩子。
根据第一方面的方法,在所述下沿钩子的配置模式下,所述接口例程指针Send的钩子点位位于所述底层过滤器处,与所述接口例程指针Send对应的所述接口例程指针SendComplete的钩子点位位于所述微型端口驱动处。
具体实施例
图1为根据本发明实施例的NDIS6驱动堆栈示意图;如图1所示,NDIS传输框架介于协议驱动和网络设备之间,通过逆向分析可知NDIS6关键数据结构及关系,如图2所示,图2为根据本发明实施例的NDIS6关键数据结构及关系示意图;并结合图3,图3为根据本发明实施例的NDIS6数据包发送接收流程示意图,对具体实施例做出如下说明。
为实现设置钩子,设计如下结构体:
HOOK_CONTEXT结构体唯一描述了一个钩子,它既是一段数据,也是一段代码指令,因此这块内存要分配成可执行内存并同时位于非换页池中。建立下沿钩子的过程代码如下:
PVOID pNext_SendCompleteHandler=&MiniportBlock.Next.SendNetBufferListsComplete;
HOOK_CONTEXT mb1=AllocHookContext();
mb1->Enabled=TRUE;
mb1->ThisFunction=(QWORD)mb1;
mb1->OldFunctionPointer=(QWORD)pNext_SendCompleteHandler;
mb1->HookFunction=(QWORD)&SendCompleteHandler;
mb1->MiniportBlock=(QWORD)ndis_miniport_block;
mb1->OldFunction=(QWORD)*pNext_SendCompleteHandler;
*(PVOID*)pNext_SendCompleteHandler=mb1;//在这里进行钩子
与之对应的x64架构下Send钩子的代码模板如下所示:
在x86架构下代码会不相同,但完全可实现一样的功能。这段代码会在接口例程第一个参数(通常是一个不透明的Context)前增加一个HOOK_CONTEXT指针参数。以SendHandler为例,其原型为:
VOID SendHandler(NDIS_HANDLE Context,
PNET_BUFFER_LIST NetBufferLists,NDIS_PORT_NUMBER PortNumber,ULONGSendFlags)
经过设置钩子后,准备的钩子函数原型及代码变成了:
设置钩子函数代码逻辑比较简单,对于允许的数据包,使用原始的参数调用原始接口例程就可以。对于拒绝的数据,如果是下沿钩子,可使用MiniportBlock指针作参数调用NdisMSendNetBufferListsComplete;如果是上沿钩子,亦可使用FilterBlock(指向HighestFilter)作参数调用NdisFSendNetBufferListsComplete。以上是Send Hooking的整个流程,其它的SendComplete、Receive、Return,Hooking过程与此类似。
使用ExCreateCallback、ExRegisterCallback打开NDIS6注册的一个名为“\\CallBack\\NdisBindUnbind”的Callback对象并注册一个Callback例程。该例程具有下面的原型:
VOID NdisBindUnbindCallBack(PVOID CallbackContext,IN PVOID Argument1,PVOID Argument2)
其中第2个参数是一个指向WMI_NODE结构的指针。这个结构是未文档化的,其前段部分定义如下:
其中EventGuid如果等于下面的GUID,则表明系统发生了网络适配器的绑定事件,即系统创建并激活了新的Miniport:
GUID_GUID_NDIS_NOTIFY_BIND=
{0x5413531C,0xB1F3,0x11D0,{0x8D,0xD7,0,0xC0,0x4F,0xC3,0x35,0x8C}};
当新的Miniport激活时,NDIS会顺便重置所有“协议、过滤器、微型端口驱动”之间的接口例程指针,这点是通过两个内部函数ndisSetupMiniportProtocolHandlers、ndisSetupLwfMiniportHandlers实现的。重置接口例程会抹去我们的钩子,从这点上来看,我们有必要在NdisBindUnbind事件发生时去周期性地扫描安装钩子。安装钩子从NdisRegisterProtocolDriver调用返回的协议句柄开始。遵循本文第3部分揭示的数据结构联结规律,整个设置钩子过程就可圆满进行。之后我们可以调用NdisDeregisterProtocol注销这个协议对象,这个辅助的协议对象从未正常运转过,因此它也被称为“伪协议”。
本发明第二方面公开了一种用于实现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以注销所述协议对象。
根据第二方面的系统,当WMI_NODE结构体中的所述EventGuid字段为{0x5413531C,0xB1F3,0x11D0,{0x8D,0xD7,0,0xC0,0x4F,0xC3,0x35,0x8C}}时,表征所述操作系统创建并激活新的微型端口驱动,已产生所述网络适配器绑定事件。
根据第二方面的系统,在调用所述例程NdisRegisterProtocolDriver成功注册所述协议对象后,通过遍历所述协议块结构确定所述需要的接口例程指针,并根据所述接口例程指针确定所述待重新配置的钩子的点位,所述接口例程指针包括Send、SendComplete、Receive以及Return。
根据第二方面的系统,所述待重新配置的钩子的点位包括上沿钩子和下沿钩子:
所述上沿钩子包括:
发送例程MiniportBlock.Next.SendNetBufferLists;
接收归还例程MiniportBlock.Next.ReturnNetBufferLists;
接收例程OpenBlock.ReceiveNetBufferLists;
发送归还例程OpenBlock.ProtSendNetBufferListsComplete;
所述下沿钩子包括:
发送例程MiniportBlock.LowerFilter.NextSendNetBufferLists;
接收归还例程MiniportBlock.LowerFilter.NextReturnNetBufferLists;
接收例程MiniportBlock.Next.IndicateReceiveNetBufferLists;
发送归还例程MiniportBlock.Next.SendNetBufferListsComplete。
根据第二方面的系统,当所述NDIS6的特殊编码导致所述上沿钩子与所述下沿钩子重合时,采用所述上沿钩子代替所述下沿钩子。
根据第二方面的系统,在所述下沿钩子的配置模式下,所述接口例程指针Send的钩子点位位于所述底层过滤器处,与所述接口例程指针Send对应的所述接口例程指针SendComplete的钩子点位位于所述微型端口驱动处。
本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本公开第一方面中任一项所述的一种用于实现NDIS6-Hooking的方法中的步骤。
图2为根据本发明实施例的一种电子设备的结构图,如图2所示,电子设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、近场通信(NFC)或其他技术实现。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图2中示出的结构,仅仅是与本公开的技术方案相关的部分的结构图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本公开第一方面中任一项所述的一种用于实现NDIS6-Hooking的方法中的步骤。
综上,本发明提出的技术方案可避免触碰内核Patch Guard机制,同时合理嵌入NDIS的“协议/过滤器/微型端口驱动”层级架构,又不过分依赖NDIS模块的硬编码,能够高效完成数据包过滤或修改功能。
请注意,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (9)
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 ts;
接收归还例程MiniportBlock.LowerFilter.NextReturnNetBuff erLists;
接收例程MiniportBlock.Next.IndicateReceiveNetBufferLis ts;
发送归还例程MiniportBlock.Next.SendNetBufferListsComple te。
5.根据权利要求4所述的一种用于实现NDIS6-Hooking的方法,其特征在于,当所述NDIS6的特殊编码导致所述上沿钩子与所述下沿钩子重合时,采用所述上沿钩子代替所述下沿钩子。
6.根据权利要求4所述的一种用于实现NDIS6-Hooking的方法,其特征在于,在所述下沿钩子的配置模式下,所述接口例程指针Send的钩子点位位于所述底层过滤器处,与所述接口例程指针Send对应的所述接口例程指针SendComplete的钩子点位位于所述微型端口驱动处。
7.一种用于实现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以注销所述协议对象。
8.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现权利要求1-6任一项所述的一种用于实现NDIS6-Hooking的方法中的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1-6任一项所述的一种用于实现NDIS6-Hooking的方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310124458.7A CN116193001B (zh) | 2023-02-16 | 2023-02-16 | 一种用于实现NDIS6-Hooking的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310124458.7A CN116193001B (zh) | 2023-02-16 | 2023-02-16 | 一种用于实现NDIS6-Hooking的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116193001A CN116193001A (zh) | 2023-05-30 |
CN116193001B true CN116193001B (zh) | 2023-11-03 |
Family
ID=86443949
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310124458.7A Active CN116193001B (zh) | 2023-02-16 | 2023-02-16 | 一种用于实现NDIS6-Hooking的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116193001B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101777102A (zh) * | 2010-01-29 | 2010-07-14 | 蓝盾信息安全技术股份有限公司 | 一种对内核的安全审计方法和系统 |
CN102195972A (zh) * | 2011-03-24 | 2011-09-21 | 北京思创银联科技股份有限公司 | 利用wfp拦截网络数据的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10860393B2 (en) * | 2017-04-22 | 2020-12-08 | Nicira, Inc. | Tracking driver load and unload on windows OS |
CN112492193B (zh) * | 2019-09-12 | 2022-02-18 | 华为技术有限公司 | 一种回调流的处理方法及设备 |
-
2023
- 2023-02-16 CN CN202310124458.7A patent/CN116193001B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101777102A (zh) * | 2010-01-29 | 2010-07-14 | 蓝盾信息安全技术股份有限公司 | 一种对内核的安全审计方法和系统 |
CN102195972A (zh) * | 2011-03-24 | 2011-09-21 | 北京思创银联科技股份有限公司 | 利用wfp拦截网络数据的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116193001A (zh) | 2023-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11824962B2 (en) | Methods and apparatus for sharing and arbitration of host stack information with user space communication stacks | |
US11863406B2 (en) | Networked programmable logic service provider | |
US10374869B2 (en) | Containerized architecture to manage internet-connected devices | |
JP5475064B2 (ja) | サーバ装置、アプリケーション実行システム、アプリケーション実行方法、およびプログラム | |
US20120144489A1 (en) | Antimalware Protection of Virtual Machines | |
CN108304247A (zh) | 访问摄像头的方法和装置、服务器、可读存储介质 | |
WO2020024413A1 (zh) | 一种云计算平台部署的控制方法、服务器及存储介质 | |
KR20110038053A (ko) | 커스터마이즈된 컴퓨터 응용 프로그램 패키지 | |
DE112010000431T5 (de) | Netzwerkverbindungsverwaltungseinrichtung | |
CN112003877A (zh) | 一种网络隔离方法、装置、电子设备及存储介质 | |
CN101420312A (zh) | 车载装置的调试方法及调试系统 | |
CN110168509B (zh) | 集成应用问题检测和改正控制 | |
US11849003B2 (en) | Persisting an HTTP connection between application components | |
CN116193001B (zh) | 一种用于实现NDIS6-Hooking的方法 | |
WO2018236688A1 (en) | SECURITY ORCHESTRATION AND NETWORK IMMUNE SYSTEM DEPLOYMENT FRAMEWORK | |
US20200327006A1 (en) | Selective service-specific controls in a virtualized container environment | |
WO2024032209A1 (zh) | 区块链交易验证方法、装置、存储介质及电子设备 | |
Pérez et al. | Enabling data-centric distribution technology for partitioned embedded systems | |
CN105204851A (zh) | 一种基于软件通信体系结构的组件主动注册方法 | |
CN108628620A (zh) | Pos应用开发的实现方法、装置、计算机设备和存储介质 | |
US8301727B1 (en) | System, method, and computer program product for receiving security content utilizing a serial over LAN connection | |
CN116820686B (zh) | 物理机的部署方法、虚拟机和容器统一监控的方法及装置 | |
CN116560756B (zh) | 服务编排方法、电子设备、计算机可读存储介质 | |
JP2000322393A (ja) | 運用管理システム | |
CN118474027A (zh) | 通信方法、电子装置、车辆和存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |