费尔个人防火墙核心技术简介

编号:2002060501

正文:
费尔个人防火墙采用两种封包过滤技术:

1. 应用层封包过滤,采用 Winsock 2 SPI。
2. 核心层封包过滤,采用 NDIS-HOOK。

Winsock 2 SPI 的技术特点:

Winsock 2 SPI 工作在 API 之下 Driver 之上,属于应用层的范畴。利用这项技术可以截获所有的基于 Socket 的网络通信。比如:IE、OUTLOOK 等常见的应用程序都是使用 Socket 进行通信。它的技术特点主要有:

优点:

1. 工作在应用层,以 DLL 的形式存在,编程、调试方便。
2. 跨 Windows 平台,可以直接在 Windows 98/ME/NT/2000/XP上通用,Windows 95 只需安装上 Winsock 2 for 95,也可以正常运行。
3. 效率高,由于工作在应用层,CPU 占用率低。
4. 封包还没有按照低层协议进行切片,所以比较完整,很容易做内容过滤。
5. 做防色情之类的软件,不用根据具体的浏览器进行分别编程,既简单又安全。

缺点:

1. 不用 Socket 的网络通信无法拦截,比如:使用NetBios的网上邻居,和使用ICMP协议的Ping。
2. 微软对SPI设计的问题,导致如果安装顺序出错很容易造成网络瘫痪。这意味着如果同时安装几个使用SPI技术的软件,而且有使用非标准安装方式的软件,很容易有的被绕过或者不能正常网络通信。所以建议编写SPI程序一定要用标准的安装方式。

SPI 在 操作系统种的结构如下图:我们需要处理的是传输服务提供者。

层次结构图:费尔个人防火墙的XFILTER.DLL处的就是基础服务提供者的位置。

NDIS-HOOK 的技术特点:

NDIS 是网络接口规范,Windows 使用 NDIS 函数库实现 NDIS 接口。所有的网络通信最终必须通过 NDIS 完成。NDIS 横跨 传输层、网络层和数据链路层,NDIS 的结构如下图:

微软提供了以下几种标准接口编程方式:

1. TDI 传输层过滤驱动程序(TDI Filter,比如常见的 Tcp Filter Driver)
2. 协议驱动程序 (Protocol Driver)
3. 中间驱动程序 (IM Driver)
4. 小端口驱动程序 (Miniport Driver)

其中 TDI Filter Driver 和 IM Driver 通常用做封包过滤。也是防火墙和VPN软件常用的技术。但是它们都有一些缺陷:

TDI Filter Driver 属于 Upper Driver,位于 TcpIp.sys 之上,这就意味着由 TcpIp.sys 接收并直接处理的数据包就不会传送到上面,从而无法过滤某些接收的数据包,典型的就是ICMP,ICMP的应答包直接由TcpIp.sys生成并回应,上面的过滤驱动程序全然不知。

IM Driver 功能比较强大,但编程接口复杂。最麻烦的是安装,自动化安装太困难。

NDIS-HOOK 克服了上面的缺陷。NDIS-HOOK 的工作原理是直接替换 NDIS 的函数库中的函数地址,这样只要向 NDIS 的请求就会先经过我们自己函数的处理,这样就非常简单,处理完转发给系统函数就完成了。NDIS-HOOK技术有以下特点:

1. 编程方便、接口简单、思路明确、性能稳定。
2. 更灵活,可以仅仅截获自己需求的,不需要冗余的代码。
3. 功能强大,可以截获所有 NDIS 和 TDI 函数完成的功能。当然比标准方式功能强大许多。还可以用这项技术延伸到 HOOK 所有系统函数。
4. 安全性高,这样截获封包较为底层,不容易被穿透。
5. 安装简单。

NDIS-HOOK 安装前的结构示意图:

NDIS-HOOK 安装后的结构示意图:

主页 联系我们

版权所有 © 费尔安全实验室 保留所有权利