软件工程硕士论文

您当前的位置:学术堂 > 毕业论文 > 在职硕士论文 > 工程硕士论文 > 软件工程硕士论文 >

WINDOWS网络数据过滤方法

来源:学术堂 作者:陈老师
发布于:2017-02-27 共4788字
  本篇论文快速导航:

展开更多

  3.2 WINDOWS 网络数据过滤方法
  
  拦截 Windows 下的网络数据包需要在两个层面进行操作:用户态(USER-MODE)模式和内核态(KERNEL-MODE)模式。在用户态模式下,实现数据包过滤简单方便但功能和起到的作用较小;在内核态模式下,实现数据包过滤功能强大但是实现较为复杂[20].
  
  3.2.1 用户模式下数据过滤方法
  
  在用户模式下,数据过滤方法有替换 Winsock2 DLL、Winsock2 SPI(Service Providerinterface)服务提供者和 Windows 包过滤接口。
  
  (1)重载 Winsock2 动态链接库
  
  重载 Winsock2 DLL 的主要方法是重载 WS2_32.DLL 中的有关网络收发函数,添加网络封包接收/发送前后的自定义功能,实现数据包的拦截和监听。从图 3.1 观察,Winsock2 应用程序套接字通过 Winsock2 动态链接库进入内核,重载 Winsock2 DLL 的有关的函数就可以实现拦截数据包的目的。重载 Winsock2 DLL 是 Winsock 功能的扩展重要方式。但是,这种网络数据包过滤技术过滤数据包不彻底,而且系统 Winsock2 动态链接库包含的私有函数没有文档资料,导致开发应用程序健壮性有负面影响。
  
  (2)Winsock2 分层传输服务提供者(SPI)
  
  Winsock2 SPI(Service Provider Interface,服务提供接口)分为传输提供者和名字空间提供者。在应用程序访问网络的过程中,都要通过 WS2_32.DLL 和传输服务提供者的严格数据交换。具体的交换过程如下:WS2_32.DLL 依据套接字参数信息选择服务提供者,并有该服务提供者管理应用程序的实现过程。在 SPI 协议链的顶端增加分层协议服务提供者,SPI 协议链将分层服务提供者和基础服务提供者组织起来,数据包就可以被拦截下来,SPI 是数据包在应用层最好拦截点。SPI 中的分层协议及协议链结构组成如图 3.8 所示。Winsock2 传输服务提供者可以分为如下两种:
  
  (a)基础服务提供者,执行网络传输协议的具体细节,在网络上收发数据核心网络协议功能,有传输数据、流量监控、差错控制等。
  
  (b)分层服务提供者,负责执行高级的自定义通信功能,依靠基础服务提供进行数据交换。
  
  Ws2_32.dll 和一个基础服务提供者之间为一个或多个分层服务提供者执行不同的通信功能。Winsock2 SPI 工作在应用层上,CPU 占用率较低,执行效率高,编程和调试较为方便容易,并且封包未做切片处理,对内容过滤实现起来更加容易。但是,应用程序通过 TDI 过滤驱动不经过 SPI 调用 TCP/IP 传送数据包,这样对于一个病毒和攻击将无法检测到,过滤的数据包是不安全的。防火墙过滤程序仅仅采用这种过滤技术是不能保证主机安全的。并且,最好的编写 SPI 的计算机应用程序一定要用标准的安装方式来进行[29],否则,如果同时安装了几个使用 SPI 的先进技术的计算机软件,有使用非标准安装方式的计算机软件,会造成有的被绕过或者不能正常网络通信。
  
  (3)Windows 包过滤接口
  
  Windows 包过滤接口允许用户模式下的应用程序或者服务指定一组“过滤描述子”,TCP/IP 组件使用它们过滤数据包。但是,包过滤的规则的设置和执行会面临有很多限制,对于个人防火墙来说是远远不够的。
  
  用户模式下的数据过滤是在 Winsock 层实现的,但是对于通过 SOCKET 通信协议传送的数据包却无法拦截和过滤,这样众多垃圾邮件、恶意软件、木马等都可以避开防火墙的检测和过滤来攻击主机系统。总之,仅仅使用用户模式下的过滤方法设计功能强大的防火墙系统是不现实,需要与内核模式下过滤方法相结合使用。
  
  3.2.2 内核模式下数据过滤方法
  
  在内核模式下,数据过滤方法有 TDI(TransPort Data Interface)过滤驱动程序、NDIS 中间层驱动程序(NDIS Intermediate Driver,IM)以及 NDIS 挂钩过滤驱动程序[17].
  
  (1)TDI 过滤驱动程序
  
  TDI 过滤驱动程序主要针对网络层和传输层实现数据包的过滤,虽然 TDI 过滤驱动模式在微软新发布的系统使用的较少,逐渐被一些新开发的驱动模式 WFP 所取代,但是为了应用程序的兼容性仍然一部分开发程序使用这种过滤驱动模式,另外,TDI 过滤驱动还具有监控网络流量,对整个系统网络流量进行分析和管理的功能,尤其在防火墙系统的驱动过滤程序仍使用该过滤技术,如 360 安全卫士流量防火墙。
  
  首先,将 DriverEntry 里替换掉所有的派遣函数为自己的函数,接着将创建的设备挂载到\Device\Tcp 和\Device\Udp 等 TDI 标准设备的设备栈上,这样就完成了一个 TDI Filter 的初始化。所有 TCP/UDP 协议的通讯程序进入到内核需要调用 afd.sys 驱动,afd.sys 驱动管理套接字都是 TDI 客户端,例如通过 SOCKET 建立 TCP 连接时,afd.sys 会打开 TDI 的 TCP 设备,至少创建地址和连接两个对象,地址对象用来绑定本地地址,连接对象跟踪远程连接,负责远程连接对象数据的接收或者发送。Afd.sys 将创建的两个对象关联起来,连接对象使用地址对象与远程跟踪的数据通讯。TCP 协议中,客户端机器工作情况如上面描述,服务端工作情况与客户端基本一致,只是稍稍有些差别。应用程序调用函数 socket,函数 bind、函数 listen后,afd.sys 驱动需要先创建地址对象,在创建完地址对象之后才创建连接对象,连接对象与地址对象关联起来后,客户端发出连接请求,TDI_EVENT_CONNECT 事件会做出响应,连接成功之后就可以与客户端发送或接收数据。对于 UDP 通讯,是无连接的通信,创建一个地址对象,使用地址对象进行通信。
  
  (2)NDIS 中间层驱动程序
  
  网络驱动程序接口规范(Network Driver Interface Specification,NDIS)为网络驱动开发的标准接口,通过传输协议与网卡驱动之间通信,位于系统底层,网络数据拦截的有利位置可以拦截所有通过的数据包。NDIS 支持的驱动程序包括以下几类(如图 3.9 和 3.10 所示):
  
  (a)微端口驱动程序(Miniport drivers),通过 NDIS 接口管理网络接口卡,开放微接口供高级驱动程序调用。
  
  (b)中间驱动程序(Intermediate driver,IM Driver),位于中间位置,拦截所有数据通信。
  
  (c)协议驱动程序(Protocol drivers),位于最高层位置,协议接口与微端口接口的对接。
  
  NDIS 中间层驱动是微软 Windows 操作系统网络驱动程序接口标准引入的新类型的驱动程序,位于 TDI 和 NDIS 网络接口驱动程序的中间位置。NDIS 向上微端口接口,向下协议接口,位于微端口与协议端口之间,中间驱动从上边界向上提供 Miniport 函数集,无连接通信。
  
  该驱动程序自下边界向下支持 Protocal 函数集,支持无连接和有连接两种通信。微端口接收到数据包发送给协议接口,NDIS 中间驱动程序首先会调用回调函数处理这些数据,处理完毕之后发送给协议端口,这样就完成对数据包的拦截处理。
  
  NDIS 中间层驱动的用途主要包括:局域网仿真(LAN Emulation)、包过滤(PacketFiltering)、NAT 地址转换(Network Address Translation)、LBFO 负载平衡和失效替换(AdapterLoad Balancing And Fail-Over)等。NDIS 中间层驱动程序开发应用广泛、功能强大,但是,编程接口非常复杂,增加了编程实现的难度,而且自动化安装困难,采用这种驱动程序增加了系统设计的复杂性和难度。
  
  (3)NDIS 挂钩过滤驱动程序
  
  TDI Filter Driver 和 IM Driver 使用封包过滤技术,TDI 过滤驱动位于传输协议驱动之上,属于上层驱动程序,对某些接收到的数据包无法过滤,如 ICMP 的应答包直接由传输层协议驱动回复,并没有传送到 TDI 过滤驱动程序,这样导致对于一些攻击就无法过滤掉。NDIS中间层驱动程序功能强大,使用面广,但接口复杂。这两种类型的驱动过滤技术都存在部分问题,不能达到良好的过滤效果。经过对 NDIS[30]的实现机制研究,NDIS HOOK 技术不但克服了上面提到的种种缺陷,并且还有性能稳定、安全性高、灵活使用、无冗余代码等优点。
  
  NDIS 挂钩过滤的原理是修改 NDIS 函数地址,拦截发送来的网络数据包[31],过滤掉对主机安全有危害的数据包之后转发给系统函数,NDIS 拦截的是底层的未经处理的数据包,不容易被渗透修改,更加可靠和安全。NDIS 挂钩过滤驱动程序安装前后的结构示意图分别如图 3.11和图 3.12 所示。
  
  3.2.3 网络数据过滤方法的选择
  
  在前面两小节的讨论中明确了 Windows 操作系统的总体架构由两个层面组成:用户态和内核态,并且在这两个层面上实现网络数据包的过滤方法有多种,实现数据包拦截的技术却略有不同。
  
  利用 Winsock2 SPI 数据过滤技术工作效率会比较高,同时 CPU 占用率比较小,可以截获完整的数据封包,没有被切片处理。因此,用户态模式下采用 Winsock2 SPI 过滤技术来实现。
  
  内核态网络数据包的拦截是通过驱动程序来实现的,而且内核模式下的数据过滤方法较多,如 TDI 过滤驱动程序、NDIS 中间层驱动程序、以及 NDIS 挂钩过滤驱动程序。经过对这几种数据比较和分析,由于 NDIS-Hook Driver 方式具有如下优点:安装简单,能截获所有的IP 数据封包,同时也可以获得数据包的以太帧;安全性较高,木马和病毒等不易穿透。总之,进过分析对比研究,选择的网络数据方法是:用户模式下的 Winsock SPI 分层服务提供者和内核模式下的 NDIS HOOK 钩子过滤驱动相结合使用的数据拦截过滤技术。
  
  3.3 防火墙工作模式及流程分析
  
  3.3.1 防火墙工作模式分析个人防火墙的工作模式可以分为总工作模式和子工作模式,两级工作模式,会执行不同的过滤操作[21].
  
  (1)总工作模式
  
  设定个人防火墙的总体过滤模式有以下三种:
  
  (a)NS_PASS_ALL:全部放行
  
  在全部放行工作模式下,个人防火墙的设置形同虚设,就像并不存在这个防火墙系统是一样的,起不到任何拦截数据封包保护主机的作用,最好不要这样设置,除非某些特殊情况下不能打开防火墙。
  
  (b)NS_DENY_ALL:全部拒绝
  
  在全部拒绝的工作模式下,个人主机与外部网络是不能进行任何通信的,所有的数据包都会被丢弃掉。一般防火墙的默认设置是全部拒绝的模式。
  
  (c)NS_QUERY_ALL:过滤
  
  在过滤工作模式下,防火墙才能达到保护主机的目的,根据规则放行/拒绝数据包,过滤掉不安全的数据包,放行安全的。
  
  (2)子工作模式
  
  针对应用程序、ICMP 等设置不同的子工作模式。
  
  (a)对于应用程序,有以下五种子工作模式可以设置1)全部放行,放行所有 WNISOCK2、TCP、UDP 通信;2)禁止连入,不允许外部网络访问本机;3)禁止连出,不允许本机应用程序访问任何外部网络;4)双向禁止;5)使用规则,设置相应规则过滤数据包,丢弃有危险的数据包,放行对本机安全的数据包,这是防火墙主要功能部分。
  
  (b)ICMP 过滤子模式1)全部放行,允许所有 ICMP 报文通过;2)禁止外部网络连接本机,即外部主机不可以主动 ping 本机,禁止向本机发送任何消息,这是默认子工作模式;3)禁止本机连接外部网络,也就是禁止本机通过 Ping 命令与外部网络连接;4)双向禁止,禁止 Ping 对方的地址或域名。
  
  3.3.2 防火墙工作流程分析
  
  个人防火墙PSFW主要划分为两大模块:(1) PSFW.DLL模块是位于应用层的动态链接库,拦截所有采用 Winsock2 进行网络通讯的数据包,根据控管中心设置的多种过滤规则进行过滤,与此同时也会把产生的日志信息发送给上层模块。(2) PSFW.EXE 模块是可执行程序部分,是一个普通应用程序,为用户提供多种接口。本模块为数据中心,用户在这个模块设置的不同过滤规则,而本模块设置过滤规则的实现则是由 PSFW.DLL 模块执行。如在该模块设置添加某项控管规则,会发送消息函数给 PSFW.DLL 模块,执行具体函数来添加规则到规则集中,在过滤数据包时查看是否设置的规则与此数据包有关,根据控管规则决定是放行还是拒绝该数据包,并将数据通信的详细日志信息记录到日志文件,方便用户进行访问信息查询。防火墙的总体模块工作流程图如图 3.13 所示。
  
  3.4 本章小结

  
  本章主要介绍 Windows 网络组件结构和处理数据包的 TCP/IP 协议结构,网络组件结构分为用户模式和内核模式两个方面进行介绍,网络组件在不同模式下采取不同的数据过滤方法,并针对主要的数据过滤方法进行详细阐述。经过仔细的分析和比较,本文设计的个人防火墙采用用户模式 Winsock2 SPI 和内核模式 NDIS HOOK 过滤方法相结合的形式进行设计。并对防火墙的工作模式和工作流程进行研究分析。
返回本篇论文导航
相关内容推荐
相关标签:
返回:软件工程硕士论文