基于I MD 的Windows 网络数据包拦截技术及应用
吴 雷1
,顾其威
1,2
(11南京航空航天大学信息科学与技术学院,江苏南京210016;
21深圳大学管理学院,广东深圳518060)
  收稿日期:2003211216
  作者简介:吴 雷(1979-),男,江苏南通人,硕士研究生,
主要研究方向为网络安全。
摘 要:随着网络安全问题日益严重,网络安全产品也被人们重视起来。所有基于Windows 操作系统的桌面防火墙核心技术点在于Windows 操作系统下网络数据包拦截技术。主要介绍了Win 2
dows 操作系统下网络数据包拦截的技术,特别是基于I M D 的网络数据包拦截方法以及应用。
关键词:数据包;驱动;截获Ndis
中图分类号:TP309    文献标识码:A     文章编号:16712654X (2004)0120119203
引言
随着网络的普及,安全问题正威胁着每一个网络
用户。由于黑客攻击和信息泄露等安全问题并不像病毒那样直接了当的对系统进行破坏,而是故意隐藏自己的行动,所以往往不能引起人们的重视。随着网络安全问题日益严重,网络安全产品也被人们重视起来。防火墙作为最早出现的和使用量最大的安全产品,也受到用户和研发机构的青睐。从防火墙的应用角度来看基本上可以分为两种:网络级的防火墙和个人防火墙。Windows 操作系统作为使用最为广泛的PC 操作系统,因此在Windows 操作系统下开发的个人防火墙产品数不胜数,而所有基于Windows 操
作系统的个人防火墙核心技术点在于Windows 操作系统下网络数据包拦截技术。因为防火墙的核心技术主要是包过滤,其中入侵检测、控制规则过滤、实时监控及过滤这些功能都是基于封包过滤技术的,网络数据包截获技术就能够实现封包过滤。
1 Windows 网络体系结构
要了解网络数据包拦截技术,首先要对Windows 网络体系结构有一定了解,
并且对开发Windows 驱动程序有一定了解。如下图,显示了Windows2000下OSI7层协议与Windows 结构的概略映射:
网卡的作用一是将线路发送过来的高频电流转化成数据包传送给网卡驱动程序,二是将网卡驱动程序传送过来的数据包转化成高频电流发送到线路上
OSI 7层协议与windows 结构的概略映射图
去,这也是物理层所要做的工作。
网卡驱动程序是网卡派出的大使,负责和Win 2dows 进行沟通。NDIS 是微软和3C om 公司1989年制定的一套开发Windows 下网络驱动程序的标准,从网卡驱动程序到协议驱动程序都要利用NDIS 这个规范来进行操作。NDIS 为整个网络驱动提供接口,所以横跨数据链路层、网络层和传输层3层。
传输层是T DI ,它是传输驱动接口,不仅是一个简单的传输带,还要对信息进行检索、分类并重新组织。TCP 协议的封包处理就在这一层进行。
SPI 相当于会话层,它是服务提供者接口,上面的各层都处于核心层,其程序都是驱动程序表现为.vxd 或.sys 。SPI 属于应用层范畴,它的程序为动态链接库(D LL )形式,SPI 负责连接核心层驱动程序和高层应用程序,SPI 的上级为API 。
WinS ock API 相当于表示层,它为应用程序提供接口,Wins ock API 负责SPI 与应用程序之间的数据传递。
应用层就是应用程序,最常见的就是EXE 文件。它负责将数据传输结果显示给用户,并将用户下达的
第34卷 第1期2004年3月         航空计算技术Aeronautical C om puter T echnique           
Vol 134No 11
Mar 12004
命令传送到下一层。
2 拦截网络数据包的层级及方法从图中可以很清楚地看到网络驱动的分层结构,这就给我们提供了拦截网络数据包的基本思路。总的来说,要拦截Windows下的网络数据包可以在两个层面进行:用户态(user-m ode)和内核态(kernel-m ode)
2.1 用户态下的网络数据包拦截
1)Wins ock Layered Service Provider(LSP)
这种方法的好处是可以获得调用Wins ock的进程详细信息。这就可以用来实现QoS,数据流加密等目的。但是,如果应用程序直接通过T DI(Transport Driver In face)调用TCPIP来发送数据包,这种方法就无能为力了。对于一些木马和病毒来说要实现通过T DI直接调用TCPIP是一件很容易的事情。因此,大多数的个人防火墙都不使用这种方法。
2)Windows2000包过滤接口
Windows2000IPH LP API提供了安装包过滤器的功能。但是,包过滤的规则有很多限制,对于个人防火墙来说是远远不够的。
3)替换系统自带的WI NS OCK动态连接库
很显然,在用户态下进行数据包拦截最致命的缺点就是只能在Wins ock层次上进行,而对于网络协议栈中底层协议的数据包无法进行处理。对于一些木马和病毒来说很容易避开这个层次的防火墙。
2.2 核心态下利用驱动程序拦截网络数据包
大多数的个人防火墙都是利用网络驱动程序来实现的。从图中想到可以从以下几个方面来做文章:
1)T DI过滤驱动程序(T DI Filter Driver)
当应用程序要发送或接收网络数据包的时候,都是通过与协议驱动所提供的接口来进行的。协议驱动提供了一套系统预定义的标准接口来和应用程序之间进行交互。在Windows2000ΠNT下,ip,tcp,udp是在一个驱动程序里实现的,叫做tcp.sys,这个驱动程序创建了几个设备:DeviceRawI p,DeviceUdp,DeviceT cp, DeviceI p,DeviceM U LTIC AST。应用程序所有的网络数据操作都是通过这几个设备进行的。因此,我们只需要开发一个过滤驱动来截获这些交互的接口,就可以实现网络数据包的拦截。T DI层的网络数据拦截还可以得到操作网络数据包的进程详细信息,这也是个人防火墙的一个重要功能。
2)NDIS中间层驱动程序(NDIS Intermediate Driver)
NDIS中间层驱动介于协议层驱动和Miniport驱动之间,它能够截获所有的网络数据包(如果是以太网那就是以太帧)。
3)Win2k Filter-H ook Driver
Win2k Filter-H ook Driver是从Windows2000开始系统所提供的一种驱动程序,该驱动程序主要是利用ipfiltdrv.sys所提供的功能来拦截网络数据包。Filter-H ook Driver的结构非常简单,易于实现。但是正因为其结构过于简单,并且依赖于ipfiltdrv.sys,Micros fot并不推荐使用Filter-H ook Driver。
4)NDIS H ook Driver
tcpip协议中基于tcp协议的应用程序
NDIS H ook Driver是目前大多数个人防火墙所使用的方法。但是它对平台的依赖性比较大,需要在程序中判断不同的操作系统版本而使用不同的结构定义。
在这几种方法中,利用NDIS中间驱动可以在网卡驱动程序和传输驱动程序之间插入一层自己的处理,从而可以从截获网络封包并重新进行封包、加密、网络地址转换及过滤等操作。由于NDIS中间驱动程序位于网卡和传输驱动程序之间,所以它可以截获较为底层的封包,从而可以完成更为低级的操作,以及用来编写网络安全软件,安全系数也高。
3 利用NDIS中间层(IMD)技术截取网络包的具体实现
3.1 内核级网络驱动介绍
Micros oft Windows2000支持三种基本的内核级网络驱动,这三层driver顺序从下到上依次为
1)Miniport NIC drivers:微端口网卡驱动,位于最底层,直接操纵网卡并且对高层驱动提供接口。
2)Intermediate drivers:I M D中间层驱动,位于1和3之间。
3)Protocol drivers:高层协议驱动,俗称为T DI(传输驱动程序接口),高于前面两层,直接面向用户级,为用户提供网络服务,也就是绝大多数程序所用到的网络接口。
3.2 I MD驱动
I M D中间层插入网卡和协议层之间,对上面的协议层表现为一个虚拟的微端口网卡结构,而对下面的网卡则表现为一个协议层的结构。所以,无论是网卡接收并上传的数据报,还是上层要下送至网卡发送的数据报,无一例外地要经过中间层
3.3 网络数据包截获的实现
微软在提出这项技术之后,其DDK中附带了一个中间层驱动的例程,就是passthru。passthru实现了一个中间层的基本功能,对下表现为一个协议层的驱
2
1
・                航空计算技术           第34卷 第1期
动,对上表现为一个虚拟网卡,安装passthru驱动之后,你可以在硬件管理中的网卡中看到一个虚拟网
卡。不过,passthru只是插入到网卡和上层协议中间,却未做任何工作,也就是说,passthru只是让所有的数据报原原本本地流经自己而已。我们要想实现中间层包过滤的功能,需要对passthru进行修改。而在passthru中,接收数据报是用protocol.c文件中的PtRe2 ceive和PtReceivePacket这两个函数来实现的。
首先修改PtReceive,看一下protocol.c文件中函数的代码,代码中用NdisG etReceivedPacket函数得到一个PNDIS-PACKET的结构Packet,数据报内容就存放在这个结构中的链表内。我们定义一个PUCH AR结构的pPacketC ontent,然后用下面的代码获得整个数据报的内容:
int PacketSize;
PUCH AR pPacketC ontent;
PUCH AR pBu f;
UI NT Bu fLength;
M D L3pNext;
UI NT i;
ΠΠ把数据包内容从Packet拷贝到pPacketC ontent
NdisQueryPacket(Packet,NU LL,NU LL,NU LL, &PacketSize);
Status=NdisAllocateMem ory(&pPacketC ontent, 2000,0,HighestAcceptableMax);
if(Status!=NDIS-ST AT US-S UCCESS)return Sta2 tus;
NdisZ eroMem ory(pPacketC ontent,2000);
NdisQuery Bu fferSafe(Packet->Private.Head, &pBu f,&Bu fLength,32);
NdisM oveMem ory(pPacketC ontent,pBu f,Bu f2 Length);
i=Bu fLength;
pNext=Packet->Private.Head;
for(;;)
{
if(pNext==Packet->Private.T ail)
break;
pNext=pNext->Next;ΠΠ指针后移
if(pNext==NU LL)
break;
  NdisQuery Bu fferSafe(pNext,&pBu f,&Bu fLength,32);
NdisM oveMem ory(pPacketC ontent+i,pBu f,Bu f2 Length);
i+=Bu fLength;
}
ΠΠ数据拷贝完毕
现在,已经在PtReceive函数中得到了数据报的内容,存放在pPacketC ontent中。通常,在以太网中,得到的数据报大致是如下结构,以太帧头14个字节,放在pPacketC ontent[0]到pPacketC ontent[13]中,其中前六个字节是目的M AC地址,然后六个字节源M AC地址,然后两个字节是协议类型,通常的
协议类型有0x080x00 ->IP,0x080x06->ARP,0x080x35->RARP,所以,可以通过pPacketC ontent[12]和pPacketC ontent[13]来判断协议类型。如果是IP包,则pPacketC ontent中存放有IP头,根据IP头的格式,可以得到第23个字节pPacketC ontent[23]表示传输层协议:1->IC MP,2 ->IG MP,6->TCP,17->UDP,剩下的就是数据报内容了。
所有的数据报都要经过中间层,所以,可以在中间层加入我们想要过滤的数据报的特征,实现基于中间层驱动的内核级包过滤。如上述例子中在得到数据报内容后,我们通过pPacketC ontent中的内容可以做些规则,比如过滤IC MP包,我们只要比较pPacketC on2 tent[12]和pPacketC ontent[13]还有pPacketC ontent[23]这三个标志位就可以了,如果不是IC MP包,那么不做任何工作,如果匹配了,那就返回一个NDIS-ST AT US-NOT-ACCEPTE D,将包丢弃,释放pPacketC ontent,就可以过滤IC MP包了。
这样做的优势非常明显,首先,在驱动级别上做过滤,无须组包,速度快,效率自然就高;其次,所有的数据报无一例外,只要网卡上传的数据报均可以截获,避免了用户级无法得到所有数据报的缺点。当然,世界上没有完美的事情。I M D包过滤技术也存在其不可避免的缺点,与操作系统版本关系密切,通用性较差。
4 结束语
NDIS中间层驱动的应用很广泛,不仅仅是个人防火墙,还可以用来实现VPN,NAT,PPPOverEthernet以
及V Lan。中间层驱动的概念是在Window NT SP4之
(下转第125页)
1
2
1
 2004年3月     吴 雷等:基于I M D的Windows网络数据包拦截技术及应用
趋势。参考文献:
[1] Ray Hunt.Internet ΠIntranet firewall security -policy ,architecture
and transaction services [J ].C omputer C ommunication ,1998,21,1107~1123.
[2] 余青霞译.R obert L.Z iegler.linux 防火墙[M]1北京:人民
邮电出版社.
[3] 王岩梅,顾训稷.单机版防火墙系统中数据包过滤技术
的研究[J ].计算机工程2001,27(11).
[4] Andrew S.T anenbaum.熊桂喜,王小虎译.计算机网络
[M].北京:清华大学出版社,1998,3,408~411.
[5] 古天龙,蔡国永.网络协议形式化分析与设计[M].北京:
电子工业出版社,2003.
A Study of Fire w alls Systems
B ased on State I nspection
LIU G eng 2lou ,JIANG Jian 2guo ,DING Chang 2fu
(School o f Computer ,Xidian Univ ,er sity 1Xi ′an 710071,China )
Abstract :This paper introduces the m odel of state inspection firewall system.The filter mechanism of state in formation is combined with its reserved mechanism by adding state inspection m odule to the package filter mechanism.By designing state detection m odule with State Transition Analysis T echnique ,the transmitting efficiency of system to IP package is im proved.It is als o a relative com plete supplement to the security leak existed in the package filter m odel.
K ey w ords :firewall ,sate Inspection ,package filter ,state transition analysis .
(上接第121页)
后才有的,因此对于Windows9x 来说无法直接利用中间层驱动的功能。Windows DDK 提供了两个著名的中间层驱动例程:Passthru 以及Mux 。开发人员可以在Passthru 的基础上进行开发,Mux 则实现了V Lan 功能。目前个人防火墙的产品还很少用到这种技术,主要的原因在于中间层驱动的安装过于复杂,尤其是在Win 2dows NT 下。Windows 2000下可以通过程序实现自动
安装,但是如果驱动没有经过数字签名的话,系统会提
示用户是否继续安装。中间层驱动功能强大,应该是今后个人防火墙技术的趋势所在,特别是一些附加
功能的实现。
参考文献:
[1] 朱雁辉1Windows 防火墙与网络封包截获技术[M]1北京:
电子工业出版社,20021
[2] 褚丽华,李秀艳,张金平1网卡及驱动程序的剖析[J ]1鞍
山钢铁学院院报1
[3] 孙乐昌1基于winDis32技术实现网络通讯监测[J ]1解放
军电子工程学院1
[4] 王新生,高玉金,原福永1利用NDIS 中间驱动技术实现局
域网的并行容错[J ]1燕山大学学报1
[5] 郭招娣1基于防火墙技术的网络安全[J ]1计算机时代,
2002,(10)1
Window s N etw ork P acket C apture T echnology on IMD
WU Lei 1
,GU Q i 2w ei
1,2
(11Nanjing Univer sity o f Aeronautics and Astronautics ,Nanjing 210016,China ;
21Shenzhen Univer sity ,Shenzhen 518060,China )
Abstract :The netw ork security products attract people with the serious netw ork security conditions.The kernel technolo 2gy of all windows pers onal firewall is based on the windows netw ork packet capture technology.This paper discuss this techn 2ology ,especially the capture technology on I M D.
K ey w ords :packet ;driver ;capture Ndis
521・2004年3月          刘更楼等:基于状态检测的防火墙系统研究

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。