,ңќ摘要:ھz½)Tit4om›ß®가Їfiݖ¾zم,가½®가zم¾ªԤf,Ґª) NQt³¶¾fiЇbpԤ) Tit4om› ²000/×g ß¾Ї¾fiაԤb关键词:NQt³¶¾;Їݖ;fiЇN¤twork data pa×k¤ts int¤rפption t¤×hnology and impl¤m¤nt bas¤d on NDISint¤rm¤diat¤lay¤rPtt ¢it,lAO Bit(tt›titrt¤ ot T¤·htotogy at4 lomgrt¤ı ³·i¤t·¤,Gri ›hor Ttiv¤ı›ity,Gri yatg ³³00²³,P.R.lhita)Abstract:Thi› gag¤ıataty›i› th¤ may ot th¤mit4om› gtattoım rt4¤ıvaıi o r› ga·L¤t titt¤ı4to·Litg..A4ogtiot itt¤ı·¤gtitg m¤tho4 ot th¤t¤tmoıL 4ata ga·Lag¤4a›¤4 ot th¤NQt³itt¤ım¤4iat¤ t¤v¤t. Th¤t thi›ga g¤ı4i›·r››¤› th¤Q¤›igt at4 imgt¤m¤ttatiiot ot a gtattoım t¤tm oıL 4ata ga·Lag¤ot itt¤ı·¤gtiot at4 gıo·¤››itg. ot Tit4om› ²000/×g rt4¤ı.Key words:NQt³itt¤ım¤4iat¤4ıiv¤ı;ga·L¤t titt¤ıitg;t¤tmoıL4ata ga·L¤t›1 随着计算机网络技术的快速发展和 Internet/Intranet 技术日益深入的应用,以及许多新的网络服务的出现,计算机网络与人类的生产、生活、科学技术与文化事业密不可分,使得人们的工作和生活发生了巨大的变化;与此同时也给人们带来了一个十分严峻的问题——网络安全。
一旦网络安全问题发生,通常会引起严重的后果。
为了增强网络的安全性,人们通常在Internet 与局域网之间引入防火墙。
由于 Windows 2000/ X P 是目前广泛应用的操作系统,使得在 Windows 2000/ X P 下保障网络安全通信成为一个迫切需要解决的问题。
基于W indows 平台下的网络安全产品基本上是基于W indows 操作系统下网络封包的拦截技术的实现。
在网络封包拦截的基础上,可以实现数据包的过滤与处理。
数据包过滤[1] 是指在网络层对数据包实施有选择的通过 , 依据系统事先设定好的过滤逻辑, 检查数据流中的每个数据包 , 根据数据包源地址、目的地址 , 所使用的端口号,协议状态等对数据进行过滤。
本文采取在 NDIS 中间层拦截和过滤数据包,因为在此层,无论是网卡接收并上传的数据封包,还是上层要下送至网卡发送的数据封包,无一例外地要经过这里。
所以,它能够截获所有的网络数据包。
在此基础上 , 可以根据帧头和报头分析协议类型,进而可以拒绝截获到任意类型的网络数据包。
²Windows#‰ٿ¢½$拦截W i n d o w s 下的网络封包可以在多个层面进行,在不同层面所拦截的网络封包结构各不相同。
总的来说可以在两个层面进行:用户态(u s e r-m o d e)和内核态(kernel -mode)。
2.1 用户态下(user -mode) 的网络数据包拦截在用户态下,通常有以下几种方法拦截数据:(1)Winsock Layered Service Provider(LSP);(2)Windows 2000 包过滤接口(3) 替换系统自带的 Winsock 动态连接库2.1.1 Winsock Layered Service Provider( 也称之windows socket 2 SPI)Windows Socket 2 是一个接口,它可以用于发现和使用任意数量的底层传输协议所提供的通信能力。
Winsock 2 不仅提供了一个供应用程序访问网络服务的Windows Socket 应用程序编程接口(A P I),还包含了由传输服务提供者和名字解析服务提供者实现的Winsock 服务提供者接口 (SPI) 和ws2_32.dll。
Winsock 2 SPI(service provider interface) 服务提供者接口建立在 Windows 开放系统架构(windows open system architecture,WOSA) 之上,是Winsock 系统组件提供的面向系统底层的编程接口。
利用这项技术可以截获所有的基于Socket 的网络通信。
其优点包括:(1) 工作在应用层,以D L L 的形式存在,编程、调试方便;(2) 兼容性好,适合各种 Windows 平ªþ:¾¿¾þ(²00³tB0KK4³‘)¾$.$封包尚未按照低层协议进行切片,所以比较完整,很容易做内容过滤。
缺点包括:(1) 无法过滤通过 T D I 层的数据报,不用 Socket 的网络通信无法拦截;(2) 如果同时安装几个使用 SPI 技术的软件,对安装顺序要求严格。
2.1.2 Windows 2000 包过滤接口Windows 2000 包过滤接口提供了一种机制,这种机制允许用户态程序或者服务指定一系列的过滤原则,这些过滤原则会被低层的TCP/IP 用来实现过滤包。
这种过滤工作主要是对 I P 原地址、目标地址、端口号(或者端口号范围)进行pass 或者 drop 操作。
此种方式是通过对iphelpapi.dll 函数的调用来实现的。
其优点包括:(1) 由于是对系统函数的调用,兼容性好;(2) 编写方便,系统资源占用极少。
缺点包括:(1) 功能实现受限于系统;(2) 无法过滤 ICMP 报文。
2.1.3 替换系统自带的Winsock 动态连接库此种方法就是编写一个动态连接库替换系统自身的Winsock.dll 或者Winsoc k32.dll,当应用程序需调用动态库时,将首先调用替换后的动态库,这样,就实现了对数据包的过滤。
随着W indows 系统结构的变化,有些方面得到了加强,例如系统文件保护,使得这种技术变得不太可行[2]。
其缺点包括:(1) 要替换w i n s o c k32.d l l 里的每一个函数,工作量大;(2) 由于动态库是公用的,容易引起兼容性问题;(3)Winsock DLL 里面经常有一些未公开的内部使用的函数,替换困难;(4) 随着W i n d o w s 系统结构的变化,此种技术的可行性日益降低。
2.2 内核态(kernel -mode) 下网络数据包拦截技术内核态下的数据包拦截都是基于N D I S 技术。
N D I S 是网络接口规范,横跨传输层、网络层和数据链路层,所有的网络通信最终必须通过NDIS 完成。
Windows 使用NDIS 函数库实现 NDIS 接口。
内核态下能够拦截到比较底层的数据包,但是实现方法比较复杂,需要编写特定的驱动程序,同时对程序的性能,稳定性等要求比较高[3]。
主要有以下几种方法:(1)TDI 过滤驱动程序 (TDI filter driver);(2)NDIS 中间层驱动程序 (NDIS intermediate driver);(3)Windows 2000 Filter-Hook Driver;(4)NDIS Hook Driver2.2.1 TDI 过滤驱动程序 (TDI filter driver)TDI Filter Driver 属于 Upper Drive r,位于t c p i p.s y s 之上,是一个直接在核心 T C P I P 驱动上面的一层过滤驱动。
协议驱动提供了一套系统预定义的标准接口来和应用程序之间进行交互。
在W i n d o w s 2000 /N T 下 I P、T C P、U D P 是在一个驱动程序里实现的 , 叫做t c p.s y s。
这个驱动程序创建了几个设备:2.2.2 NDIS 中间层驱动程序 (NDIS intermediate driver)N D I S 中间层驱动介于协议层驱动和小端口驱动之间,I M D 对上面的协议层表现为一个虚拟的微端口网卡结构,而对于下面的网卡则表现为一个协议层的结构。
无论是网卡接收并上传的数据封包,还是上层要下送至网卡发送的数据封包,无一例外地要经过 NDIS 中间层。
所以,它能够截获所有的网络数据包 ( 如果是以太网那就是以太帧 )。
其优点包括:驱动级别上做过滤,无须组包,速度快,效率较高;可以截获所有的数据包,功能强大。
其缺点包括:编程接口复杂;开发周期长,调测工作量大,测试困难;操作系统版本关系密切,与硬件联系大,可移植性低;IMD DRIVER 安装极为复杂,难于自动化安装。
2.2.3Windows 2000 Filter-Hook Driver从 Windows 2000 开始,I p F ilterDriver 是系统自带的一个驱动,该驱动程序主要是利用i p f iltdrv.sys 所提供的功能来拦截网络数据包。