第五章 防火墙测评方法
第二节 Windows平台上的网络数据包截获技术
5.2.3 几种方案的比较
个人防火墙的工作是监控网络进出的数据流,对用户认为危险或者有害的数据流向进行禁止或者监控,其核心功能是网络数据包的监控与分析过滤。
从底层看,NDIS的中间驱动由于在网卡驱动程序和传输驱动程序之间插入了一层,因此可以过滤较为低层的封包,完成更低级(最底层的是在网卡驱动程序层过滤,但前面阐述过,在网卡驱动程序层做网络数据包过滤没有实现价值)的操作,不会有网络数据包从这里通过,因此,其最大的优点是安全系数高。
需要指出的是,NDIS层次上的网络操作不采用标准的I/O模式(IRP),因此,不能确定某个网络操作是由哪个进程引起的。个人用户看不到网络数据源于哪个进程,就不容易让用户自定义过滤包规则,这是个很大的缺陷。当然,越靠近底层的驱动程序编写可移植性和健壮性越难保证,编码复杂也是其一个缺点。
对于TDI过滤驱动程序,由于采用标准的Windows I/O请求(IRP),因此没有NDIS中间层的驱动就不能得到进程信息,但由于它工作在传输驱动程序Tcpip.sys之上,因此由Tcpip.sys接收后直接处理的数据包是不会传递到上层TDI过滤驱动程序的,如ICMP的应答包。Ping和Tracert就是利用ICMP来探测网络的可达性和跟踪路由的。
NDIS中间驱动和TDI过滤驱动都是32位Windows平台上提供的方法。整个NDIS规范和TDI的概念是在Windows NT平台上提出和得到发展的,以后的Windows 2000、Windows XP都支持,但以前的Windows 98和Windows Me都不支持。
用户态下的SPI方法使用DLL监控以Winsock调用进行网络通信的网络数据包。它工作在TDI客户之上和所有的用户进程之下,因此,对于用户进程交给它的网络请求和意图非常清楚——在经过底层的分段(IP分段)之前,对用户进程的行为、目的可以有更直观的了解,非常适合做内容过滤。并且其过滤的所有Winsock调用被所有Windows平台支持。另外编程相对简单,平台适应性好。其最大的缺点是有的网络程序使用TDI接口提供的一些函数例程直接发起通信的发送和接收,用户态的数据包过滤技术对此类程序无能为力。另外,与TDI方法一样,对那些由Tcpip.sys接收后直接处理的数据包,如利用ICMP的应答包进行探测网络可达性的Ping和Tracert,由于它位于TDI的更上层,因此用户态的数据包过滤技术对此旁路无能为力。几种技术比较如表5-1所示。
表5-1 网络数据包截获技术比较
能够在前台监视进程界面得到进程访问网络的详细信息,对个人防火墙系统至关重要,这些进程信息有助于判定是否是有害的网络通信,从而加以干预。为获得访问网络进程的详细信息,必须在TDI以上层进行包过滤分析,而在NDIS中间层开发驱动进行包过滤则无法得到进程信息。
个人防火墙系统应能详细记录各种进程的访问网络信息,而应用层过滤能最早得到应用层进程的发送数据包信息,得到最完整的接收方发送的数据包信息,从而实现记录最丰富网络访问信息的个人防火墙系统。