- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WindowsTDI通信监控一种hook方法
WindowsTDI通信监控一种hook方法
摘要:根据windows的网络分层结构分析了TDI层的特点及Tcpip sys的功能;根据过滤型驱动的不足讨论了hook方法的实现方式,以及需要处理的功能请求;探讨了TDI层和NDIS层的结合。
关键词TDI;TCP/IP过滤驱动;hook;dispatch
1 前言
近年来随着网络技术的发展和日趋复杂,网络环境安全问题日益突出;各种木马与后门软件严重地威胁着个人终端的安全。针对这种情况,计算机与网络安全厂商基于各种操作系统推出了各种网络安全产品,给网络用户提供了一定的安全保障。本文基于Windows系统tdi通信层的网络数据包拦截技术来讨论一种通信监控方法。
2 网络分层结构及传统过滤法
TDI(Transport Driver interface)是传输驱动程序接口的缩写,存在于基于NT内核的Windows系统中,是内核模式的设备驱动程序。通常处理网络API具体实现的内核部分。TDI层位于Windows网络通信分层中的API层和NDIS层中间(如图1所示),主要提供网络层协议和传输层协议的实现,其功能是将API发送过来的I/O请求根据Windows的传输驱动程序接口标准格式化为IRP,然后再下发到NDIS层。
当应用程序要发送或接收网络数据包的时候,都是通过协议驱动所提供的接口来进行的。TDI提供了一套系统预定义的标准接口来和应用程序之间进行交互。由于在Windows XP下,TCP/IP驱动程序(\Windows\System32\Drivers\Tcpip.sys)创建了几个设备:\De-vice\Udp、\Device\Tcp、\Device\Rawlp、\Devlce\Ip、\Device\Ipmuiti-cast来实现TCP、UDP、1P、ARP、ICMP和IGMP通信,并且用户可以得到这些代表特定协议的设备文件对象,因此传统的方法是在这些设备之前挂接过滤型设备来监控与过滤网络数据包,比如天网防火墙。
虽然过滤型驱动结构简单稳定,但是存在很大的缺陷。TDI过滤型驱动位于Tcpip.sys之上,这就意味着无法过滤Tcpip.sys接收并直接处理的数据包,典型的就是ICMP,ICMP的应答包直接由Tcpipsys生成并回应。其次,由于过滤型驱动是创建设备挂接到TCP/IP驱动程序创建的设备前,如果驱动层的木马或流氓软件通过设备直接找对应原设备驱动发送请求,就可以避开挂接在其上的过滤驱动。如果将目标DeviceObject的AttachedDevice设置为NULL甚至可以直接摘除过滤型驱动。针对以上的缺陷,我们提出hook方案。
3 Hook方法分析
TCP/IP驱动程序Tcpip.sys中的dispatch函数主要负责接收用户层应用程序的网络I/O与自身请求并对其进行分发处理,因此Tcpip.sys接收并直接处理的数据包也需要经由dispatch来进行处理。依据这种结构我们构建了一个自己的hook函数new_dispatch,获取Tcpip.sys中指向该dispatch函数入口的函数指针,并将该指针所指向的地址重定向到我们自己的处理hook函数new_dispatch,最后再将出口定向到Tcpip.sys中的dispatch的入口(如图2所示)。这样,便完成了hookTcpip.sys中的dispatch函数的功能,所有经过TCP/IP的驱动程序的数据包和网络请求都要经过我们的处理函数,在对其进行处理之后,我们可以选择将原IRP原封不动地再发送至Tcpip.sys中的dispatch函数,或者直接返回错误标志来结束该通信请求。
新构建的hook函数主要处理从应用层发送过来的IRP。从DDK的相关文档中我们可以知道。在TDI层的
Tcpip.sys中我们需要处理的IRP主功能号主要有以下两类:
(1)IRP_MJ_CREATE
这个IRP请求主要是当应用层发起网络请求时,本地系统为该通信请求建立本地传输层地址和端口,并建立一个连接终端,该连接终端代表了一个连接意图的产生,在后期的处理中,需要利用这个连接终端来获取进一步的信息。
应对监控需求,我们在这里可以获取的参数应该包括发起请求的应用进程信息(ID和路径)、本地传输层地址和端口。
(2)IRP_MJ_DEVICE_CONTROL(设备控制请求)、IRP_MJ_IN-TERNAL_DEVICE CONTROL(内部设备控制请求)
在TDI中,这两套DEVICE CONTROL接口的功能相同。这两个主功能号下我们需要处理的次功能号主要有以下几种:
TDI_A
文档评论(0)