2024年5月25日发(作者:)
龙源期刊网
基于Windows内核态个人防火墙的设计与
实现
作者:何映 覃以威 李丹
来源:《现代电子技术》2012年第06期
摘要:为了提高防火墙对非法数据包的拦截能力,增强Windows主机上网的安全性,设
计并实现了一个基于Windows内核态的个人防火墙。它由应用程序和驱动程序2部分组成,
其中应用程序负责对数据包进行实时监控以及安全规则实现,并向用户报告防火墙的运行状态
或安全事件;基于NDIS中间层驱动程序对数据包进行拦截,采用设备输入和输出控制
(IOCTL)方法实现内核态进程与用户态进程间的通信。测试结果表明,该防火墙能在
Windows平台下稳定运行,能够有效拦截非法数据包。
关键词:防火墙; NDIS; 中间层驱动; Passthru; 进程间通信
中图分类号:
Design and implementation of personal firewall based on Windows kernel mode
HE
文献标识码:A文章编号:
(College of Physical Science and Technoloy, Guangxi Normal University, Guilin 541004, China)
Abstract: In order to improve the firewall′s ability to intercept illegal packets and enhace the
security of the host running a Windows OS, a personal firewall was designed and implemented based
on Windows kenel mode. It consists of two main parts: application programs which runs in user mode,
and driver programs which runs in kernel mode. The received packets are monitored
the security rules are implemented with the former, and the packets are intercepted with the latter
efined IOCTL. The test results show that this
firewall can run stably on Windows platform and can effectively intercept all the illegal packets.
Keywords:
收稿日期:引言
防火墙在网络安全防护中具有重要作用,从应用的角度来看,防火墙可以分为企业级防火
墙和个人防火墙[1]。前者主要是部署在内、外部网络的边界,对内、外部网络实施隔离,
从而保护内部网络的安全:而后者则通过纯软件的方式来实现,安装在个人电脑中,通过对网
龙源期刊网
络数据包拦截、规则的设置和匹配及对网络行为的处理(允许或禁止)来达到保护网络安全的目
的。
目前,Windows操作系统已广泛应用在个人电脑中,基于 Windwos的个人防火墙技术已
经相对成熟,市场上各类产品也很多,国外较署名的产品有:,
McAfree,Norton Personal Firewall,ZoneAlarm Pro和Outpost Firewall PRO等,国内产品中常
见的有天网、金山和瑞星等。这些个人防火墙的核心区别在于Windows环境下网络数据包拦
截方法,通常数据包的拦截可以在windows用户态和核心态进行,在用户态采用Winsock2 spi
拦截http,ftp,telnet和pop3等应用层协议网络数据包,这种方法效率较高,容易进行数据包
内容过滤,但它只能在Winsock层次上拦截网络数据包,拦截能力较弱;与用户态相比,在内
核态的数据包拦截能力更强,主要的方法有[2]:基于TDI传输驱动程序(Transport Drivers
Interface)、基于NDIS钩子驱动(NDIS Hook Driver)和基于NDIS中间层驱动[3]等。由
于TDI只实现了IP,TCP,UDP等协议,对底层协议的数据包也无能为力;NDIS钩子通过向
注册一个假协议,然后利用接收数据的派遣函数的地址进行挂接后实现数据包拦截,
但这种技术对平台的依赖性比较大,需要针对不同的系统平台采用不同的结构。而NDIS中间
层驱动位于协议驱动层和小端口驱动之间,它能够截获所有的网络数据包。虽然该方法在技术
实现上较为复杂,目前的个人防火墙产品仍然较少采用。但是,由于其功能强大,过滤效率
高,它依然是未来个人防火墙发展趋势。
本文深入研究基于NDIS中间层驱动的数据包拦截方法以及Windows内核态驱动程序与用
户态应用程序间的通信机制,设计并实现了一种基于Windows内核态的个人防火墙系统,它
由应用程序和驱动程序2部分构成,其中,驱动程序负责对非法数据包进行拦截过滤;应用程
序负责对数据包进行实时监控,并向用户报告检测结果。
1Windows个人防火墙系统结构
1.1系统结构
该防火墙由运行于用户态的应用程序和运行于核心态的驱动过滤2部分构成,两者之间采
用共享内存的方式进行通信,具有ARP欺骗攻击检测与防御、检测与防御DNS欺骗和检测网
页木马等功能。其系统结构如图1所示,用户态的应用程序通过监控并分析进出网卡接口的数
据包,以决定是否将该数据包的发送者列入黑名单并向用户报告。此外,应用程序还是防火墙
的GUI部分,负责向用户实时报告结果,提供过滤规则参数设置界面。
图1 Windows个人防火墙系统结构1.2功能描述
本防火墙实现以下基本功能:
(1) 能对ARP攻击、DNS欺骗和常见的网页木马进行检测和抵御,发现非授权的请求
后应能立即拒绝,随时保护上网主机的安全。
龙源期刊网
(2) 提供一系列安全规则设置,允许或禁止特定主机的相关服务,用户可根据实际情况
修改安全规则或建立黑名单。驱动程序根据安全规则及黑名单进行数据包过滤。
(3) 将所有被拦截的访问记录的详细信息写入日志,供用户查询或追踪攻击源。
2Windows个人防火墙的关键技术实现
2.1驱动程序设计
NDIS中间层过滤驱动(Ndis Intermediate Driver)位于网卡驱动和协议驱动之间[4],其
2个接口:Miniport接口和Protocol接口,所有网络数据包均流经NDIS中间层。Passthru[5]
是Microsoft公司在Windows DDK[6]中提供的一个NIDS中间层驱动的开发框架,本防火
墙的驱动部分就是在该框架的基础上实现的,其主要的作用是根据已定的规则和黑名单对非法
数据进行过滤。
2.1.1数据包的获取
非法数据包的过滤是在驱动程序中实现的。在Passthru中负责接收数据的派遣例程有2
个,分别是PtReceive和PtReceivePacket。在PtReceive和PtReceivePacket两个例程中调用获
取数据包例程PtGetPacketContent,PtGetPacketContent例程如下:
2.2应用程序设计
应用程序是防火墙的GUI部分,负责向用户报告结果和提示操作的界面。应用程序对数
据包监控分析及过滤规则的设置,用户通过防火墙安全规则的设定,向数据包拦截模块传递规
则。实时显示数据包的过滤和黑名单的拦截情况。
应用程序部分的核心类共包含:ArpPtUIDlg,Capture,Detect,CheckDefendDNStoof和
CheckHetspy等5个类,如图2所示。其中:
(1) ArpPtUIDlg:防火墙系统总调度显示类,负责其他所有类的创建和相互调度;
(2) Capture:捕获数据包类,负责捕获数据包;
(3) Detect:检测防御ARP攻击[7]类,该类接受Capture类捕获的ARP数据包,并
对数据包进行检测分析;
(4) CheckDefendDNStoof:检测防御DNS欺骗类,该类接受Capture类捕获的DNS数
据包,并对数据包进行检测分析;
龙源期刊网
(5) CheckHetspy:检测网页木马类,该类接受Capture类捕获的HTTP数据包,并对数
据包进行检测分析。
图2应用程序主要类图2.3驱动程序和应用程序的通信
个人防火墙不仅要实现对网络数据包的拦截,还要分析数据包后,根据设定的规则对数据
包进行处理,并将保存日志。因此,驱动程序和应用程序就要进行通信以达到信息的交互。驱
动程序和应用程序之间通过共享内存的方式实现通信,两者间的内存共享有2种实现方法
[]是通过共享内存对象方法来实现,另一种是通过设备输入和输出控制(IOCTL)方法
来实现。本文的防火墙采用驱动定义的IOCTL方法。IOCTL值是个32位的无符号整数。
DDK(Driver Development Kits)提供一个CTL_CODE,其定义如下:
CTL_CODE(DeviceType,Function,Method,Access)
其中DeviceType指定设备对象的类型,这个类型应和创建设备时的类型相匹配。一般是
形如FILE_DEVICE_XXX的宏;Function指的是驱动程序定义的IOCTL码,而0X000~
0X7FF为微软保留,0X800~0XFFF由程序员自己定义;Method是指操作模式,由
METHOD_BUFFERED、METHOD_IN_DIRECT,METHOD_OUT_DIRECT和
METHOD_NEITHER其中之一组成;Access为访问权限[10]。如IOCTL的定义如下:
#define IOCTL_PTUSERIO_PASS_EVENT
_PTUSERIO_CTL_CODE (0x1005,METHOD_BUFFERED,FILE_READ_ACCESS |
FILE_WRITE_ACCESS)
上述IOCTL定义是将事件信号传递给驱动,使用缓冲区方式操作,可读写。
定义IOCTL之后,应用程序通过调用Win32API DeviceIoControl例程与驱动程序相互通
信。DeviceIoControl的声明如下:
驱动中的派遣例程按照以下步骤完成用户的请求:
(1) 从IRP结构中获取IoControlCode,判断用户当前发出的是哪一个请求;
(2) 从IRP结构中获取用户传递过来的参数(可选);
(3) 按用户的要求完成相关操作;
(4) 调用IoCompleteRequest向I/O管理器指示已完成用户的请求。
3系统测试
龙源期刊网
首先在Windows XP环境下安装该防火墙,为了完成测试工作,自行编写了Attacker
(ARP攻击程序)和dnsCheat(DNS攻击程序)并在网页中嵌入木马程序。该防火墙启动界
面如图3所示。
图3防火墙运行状态因篇幅有限,下面仅以ARP攻击为例说明测试过程,用于测试的主
机IP地址为192.168.9.45,MAC地址为
192.168.9.254,MAC地址为
6所示。
图4冒充网关攻击响应从图中可以看出,该防火墙在Windows平台下运行稳定,能够对
各种ARP攻击、DNS攻击和常见木马病毒等攻击行为进行检测和处理,将可疑的主机地址加
入黑名单并将结果报告给用户,能有效保护Windows主机的上网安全。
图5散布虚假ARP广播报文攻击响应图6非法扫描攻击响应4结语
防火墙是解决用户上网安全问题的一种重要技术手段。本文基于Windows内核态讨论并
给出了个人防火墙关键技术的设计及实现过程,在局域网(以太网)中通过自行编写的攻击程
序进行了ARP攻击、DNS攻击和网页木马病毒等进行了测试, 结果表明,该防火墙运行稳
定,能够有效拦截非法数据包,达到了预期的设计目标。下一步研究工作还需要在此基础上集
成更多的防御网络攻击的功能,提高中间层驱动过滤程序的工作效率,进一步降低防火墙对网
络接口数据传输性能的影响。
参考文献
[1]NOONAN W, DUBRAWSKY I.防火墙基础[M].陈麒帆,译.北京:人民邮电出版
社,2007.
[2]程克勤,邓林,王继波,等.基于应用层的Windows个人防火墙的设计与实现[J].合
肥工业大学学报:自然科学版,
;网关IP地址为
。启动Attacker程序,依次进行以下攻击
行为冒充网关;攻击者散布虚假ARP广播报文;非法扫描主机;防火墙的响应分别如图4~图
[3]谭文,杨潇,邵坚磊,等.Windows内核安全编程[M].北京:电子工业出版社,
2009.
[4]
NDIS intermediate driver [J
search and design of packet filtering based on


发布评论