基于ND IS-HOOK与SPI的个人防火墙设计

2010-12-26 07:45姚建盛刘艳玲
河北科技大学学报 2010年1期
关键词:封包应用层驱动程序

姚建盛,刘艳玲

(1.吉林师范大学计算机学院,吉林四平 136000;2.哈尔滨工程大学计算机学院,黑龙江哈尔滨150001;3.长春理工大学计算机学院,吉林长春 130022)

基于ND IS-HOOK与SPI的个人防火墙设计

姚建盛1,2,刘艳玲3

(1.吉林师范大学计算机学院,吉林四平 136000;2.哈尔滨工程大学计算机学院,黑龙江哈尔滨150001;3.长春理工大学计算机学院,吉林长春 130022)

当前个人网络安全产品中,个人防火墙是一个非常重要的网络安全产品。利用ND ISHOOK与SPI相结合在Window s下设计了一个基于ND IS-HOOK与SPI的个人防火墙。其中,在应用层利用SPI进行封包来过滤各种应用程序,而在核心层利用ND IS-HOOK来过滤各种非Socket通信的数据包,实现底层的数据包的捕获,从而能更好地过滤数据。

防火墙;ND IS;SPI;HOOK

随着网络技术的飞速发展,全球信息化已成为人类发展的大趋势。人们在享受互联网带来的方便与快捷的同时,也要面对互联网开放带来的新挑战。由于计算机网络的开放性、交互性等特征,致使网络易受黑客、恶意软件和其他不法行为的攻击。为了防止内部网络不被入侵,网络安全技术逐渐成为研究的热点。在众多的安全技术中发展最快、应用最广的就是防火墙技术[1~3]。个人防火墙是位于计算机和网络间的软件,通过拦截监视所有流入、流出的数据的合法性来限制他人进入内部网络、过滤不安全的服务和非法用户、防止入侵者接近你的防御设施、限定人们访问特殊站点、监视局域网等,尽可能地屏蔽网络内部结构、信息和运行情况,以实现对网络安全的保护[4]。笔者利用ND IS-HOO K与SPI相结合在Window s下设计了一个基于ND IS-HOOK与SPI的个人防火墙,其中,在应用层利用SPI进行封包来过滤各种应用程序,而在核心层利用ND IS-HOOK来过滤各种非Socket通信的数据包,实现底层的数据包的捕获,从而能更好地过滤数据。其工作步骤:截获当前动作→判断动作类型→根据类型采取相应策略判断合法性→采取相应措施[5]。

1 基本原理介绍

1.1 TCP/IP协议架构及其在 W indows中的实现

Window s操作系统的总体架构分为2个层次:上面的为应用层,下面的为核心层。其结构如图1所示。

SPI负责应用层的过滤,ND IS负责底层的数据过滤,如图2所示。

图1 W indow s操作系统的总体架构Fig.1 Collectivity frame of Window s operation system

1.2 ND IS

ND IS(network driver interface specification)为 W indow s下网络驱动程序的开发带来许多方便[6],编写符合ND IS规范的驱动程序时,只要调用 ND IS函数,而不用考虑操作系统的内核以及与其他驱动程序的接口问题。Window s使用 ND IS函数库实现ND IS接口,所有的网络通信最终必须通过 ND IS完成。ND IS负责上、下层驱动程序间服务原语和驱动程序入口之间的转换,分派消息通知,保证符合ND IS的驱动程序无需知道其他驱动程序的入口就可以与之通信。ND IS横跨传输层、网络层和数据链路层,ND IS的结构如图3所示。

利用ND IS中间驱动程序可以在网卡驱动程序和传输驱动程序之间插入一层自定义驱动程序从而可以截获网络封包,并重新进行封包、加密、网络地址转换、过滤、认证等操作。由于ND IS中间驱动程序位于网卡和传输驱动程序之间,所以,它可截获较为底层的封包,从而可以完成更为低级的操作。

1.3 SPI

Winsock 2是为上层应用程序提供的一种标准网络接口,允许开发者编写自己的服务提供者接口程序(SPI程序)。SPI工作在API之下D river之上,属于应用层的范畴,可以截获所有的基于Socket的网络通信,以动态链接库(DLL)的形式存在,为上层API调用提供接口函数[7]。

自己编写的SPI程序安装到系统之后,所有的W insock请求都会先发送到自己的这个程序并由它完成网络调用。通过 HOOK程序可以直接调用系统函数完成网络传输。SPI结构如图4所示。

图2 TCP/IP协议架构及其在Window s中的实现Fig.2 Frame of TCP/IP p rotocol and the imp lement of it in Window s

2 程序设计及实现

2.1 功能简介

本防火墙基于32位内核的 Window s N T/2000/XP,主要功能包括:1)检查接收数据包的合法性;2)禁止PING;3)过滤指定的IP;4)过滤指定的端口。

2.2 驱动模块方案

利用ND IS与SPI的优缺点,取长补短,设计了基于ND IS-HOOK与SPI的个人防火墙,ND IS-HOOK的原理是直接替换ND IS函数库中的函数地址,从而向ND IS的请求就会先经过自定义函数处理,处理完后再转发给系统函数[8]。图5为ND IS-HOOK安装前后的结构。

图5 ND IS-HOOK前后结构图Fig.5 Frame of ND IS-HOOK fore-and-aft

利用ND IS-HOO K与 SPI相结合,取长补短,在应用层利用SPI来进行封包过滤各种应用程序,而在核心层利用ND IS-HOO K来过滤各种非Socket通信的数据包。

2.3 总体结构

防火墙的设计是基于ND IS-HOOK与SPI双层模式的,防火墙由3个大模块组成:主界面模块 YJSFIREWALL.EXE、应用层包过滤模块 APPFIL T.DLL、核心层包过滤模块 KERFIL T.SYS。图6为本防火墙的总体结构示意图。

本防火墙所选用的开发环境为 W indow s 2000 personal操作系统,开发工具选用的是M icrosoft Visual C++6.0企业版和 Window s 2000 DD K,选择的编程语言是C++。主程序工作流程如图7所示。

2.4 实现SPI-HOOK

为了截获网络中的各种动作最根本的方法就是要进行 HOO K,把相关的API函数与自己的函数相关联,让程序调用API时先调用自己的函数。

应用层过滤模块主要是负责SPI-HOO K,它是面向通过Socket访问网络的应用程序,其编写需要DLL(dynamic linkable library,动态链接库)开发基础[9]。

任何通过Socket访问网络的应用程序都需要首先调用SPI函数 WSPStartup来初始化 Socket,其函数原型如下。

最后一个参数返回了30个SPI服务函数的指针。

操作系统根据注册表加载SPI模块,只要修改SPI配置表在注册表中的分支[H KEY_LOCAL_MACH INESYSTEMCURREN TCON TROLSETSERV ICESW INSOCK2PARAM ETERSPROTOCOL_CA TALOG9CA TALOG_EN TRIES]下面有一个 PackedCatalog Item的键,其结构如下:

其中sSpiPathName为服务提供者完整路径。

修改之后就可以让系统加载自己的SPI模块,然后自己的SPI再加载系统,将连接请求转发到系统,完成 SPI的 HOOK。DLL的装载流程图如图8所示。

2.5 实现 ND IS-HOOK

进行ND IS-HOOK需要进行驱动开发,其API提供者是SYS,SYS文件是标准的 PE格式,W indwos在加载SYS时,将整个文件映射到内存的一个虚拟地址空间。人们要做的是在内存中找到该地址,然后定位到导出表的地址,把导出函数的地址替换成自己函数的地址,这样就实现了ND IS-HOOK。SYS文件在内存中的地址利用API函数Zw QuerySystem Information来获得。其定义如下。

其参数sic标识想查询的系统信息的类型(System InformationClass),System InformationClass是个枚举类型,11即为常量SystemModule Information,代表要查询模块信息的标识。如果返回值为STA TUS_SUCCESS则代表成功。

利用代码11就可以得到系统加载的模块信息,正是需要的SYS的地址信息,模块的信息结构SYSTEM_MODULE_INFORMA TION如下。

}SYSTEM_MODULE_INFORM A TION,*PSYSTEM_MODULE_INFORM A TION;

其中Name字段代表模块名称(Ndis.Sys),BaseAddress是模块的基地址。

图8 DLL装载流程图Fig.8 Flow chart of DLL load

利用 Hook Fun函数完成 NdisSend,NdisRegister,NdisOpenA dap ter的 HOOK,Window s 2000系统中是通过协议驱动与网卡绑定后ND IS为其分配的Send Hander来发送数据的,所以必须由 HOOK SendHandler才能真正地截获发送的数据包。要利用上面HOOK的NdisRegisterPro再去HOOK ProtocolReceive和 ProtocolOpenAderComplete,最后再利用 NdisOpenAdapter和 ProtocolOpenAderComplete HOOK Protocol-SendHandler。其流程如图9所示。

2.6 相应功能实现

1)判断数据包的合法性

合法性判断主要是通过数据包的文件头来判断该包应该所占的大小是否和实际的相符,TCP/IP的数据包格式如图10所示,只要根据前3个 Header就可以得到长度相关信息,在截获API的时候也截获了数据包,可以得到实际数据包的大小,从而判断其合法性。

2)禁止 PING

扫描主机进行探测时,往往用 PING,即发送 ICM P包,禁止PING命令就是抛弃ICM P包,但是不能简单地全部抛弃,应该读取规则文件加以判断。

3)屏蔽制定IP和端口

在截获API的时候,得到Socket相关信息,其中包括IP地址和端口号,读取规则文件加以判断即可。

图9 HOOK ND ISAPI流程图Fig.9 Flow chart of HOOK ND IS API

3 结 语

针对目前日益严重的网络安全问题,在分析了个人防火墙的主要功能模块后,提出并设计了Window s 2000/N T下利用ND IS-HOOK技术与SPI技术的个人防火墙。SPI工作在API之下Driver之上,适合于应用层;ND IS中间驱动程序位于网卡和传输驱动程序之间,它可截获较为底层的封包。在实际的实现过程中,ND IS-HOOK用于核心层而SPI用于应用层,这样就可以相互利用两者的长处,互补两者的短处,比单一应用一种技术的个人防火墙更高效、更合理,并且对用户透明。

图10 TCP/IP数据包格式Fig.10 Fo rmat of TCP/IP data package

[1] 杨路明,肖 潇.网络安全与防火墙技术[J].电脑与信息技术(Computer and Information Technology),2004(3):49-52.

[2] 王永滨,袁智忠,张 吉.Linux防火墙的Web设置系统[J].河北科技大学学报(Journal of Hebei University of Science and Technology),2001,22(4):46-49.

[3] 郭 磊,武优西,武金木.排列码加密解密方法在防火墙中的应用[J].河北工业科技(Hebei Journal of Industrial Science and Technology),2003,20(1):28-31.

[4] 张玉凤,翟光群.个人防火墙技术研究及应用[J].河南科学(Henan Science),2006,24(4):915-918.

[5] 朱 莉.Window s环境下个人防火墙网络封包截获技术研究[J].辽宁师专学报(Journalof Liaoning Teachers College),2007,9(1):41-43.

[6] 范莉萍.基于NDIS技术的个人防火墙设计与实现[J].计算机应用与软件(Computer Applications and Software),2008(8):259-260.

[7] 刘鹏远.SPI截获Window s个人防火墙系统实现技术要点分析[J].湖南工程学院学报(Journal of Hunan Institute of Engineering),2008,18(2):56-59.

[8] 莫向阳.基于Filter-Hook Drive设计个人防火墙[J].广东技术师范学院学报(Journal of Guangdong Polytechnic Normal University),2007(10):18-20.

[9] 刘晓明.基于SPI的个人防火墙的设计与实现[J].科技情报开发与经济(Sci-Tech Information Development&Economy),2008,18(24):146-148.

Design of individual firewall based on NDIS-HOOK and SPI

YAO Jian-sheng1,2,L IU Yan-ling3
(1.Department of Computer Science,Jilin No rmal University,Siping Jilin 136000,China;2.Departmentof Computer Science,Harbin Engineering University,Harbin Heilongjiang 150001,China;3.Department of Computer Science,Changchun University of Science and Technology,Changchun Jilin 130022,China)

Individual firewall is a very impo rtant p roductof netwo rk security.The researchmakes useof ND IS-HOOK and SPI to design an individual firewall under Window s.In app lication layer,it emp loys SPI to envelop the packages to filtrate all kinds of app lication,and in co re layer,it employs NDIS-HOOK to filtrate the data packages of non-socket co rresponding,and capture data packages,so as to imp rove the filtration of the data.

firewall;ND IS;SPI;HOOK

TP393.08

A

1008-1542(2010)01-0035-05

2009-06-08;责任编辑:陈书欣

姚建盛(1980-),男,吉林农安人,硕士研究生,主要从事计算机网络与通信、可信计算、移动计算方面的研究。

猜你喜欢
封包应用层驱动程序
中药封包在急诊老年急性胃肠炎患者中的临床应用
护肤 巧用保鲜膜
无冲突规则校园网络安全系统的设计
计算机硬件设备驱动程序分析
基于分级保护的OA系统应用层访问控制研究
新一代双向互动电力线通信技术的应用层协议研究
物联网技术在信息机房制冷系统中的应用
基于MPC8280的CPU单元与内部总线驱动程序设计
Current advances in neurotrauma research: diagnosis, neuroprotection, and neurorepair
NS2条件网络性能分析实践