




已阅读5页,还剩64页未读, 继续免费阅读
(计算机应用技术专业论文)具有入侵检测功能的windows个人防火墙研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 随着互联网的飞速发展,人们的生活变得越来越方便:但是另一方面网络的不安全 性也时时困扰着人们,病毒、木马、黑客等几乎无孔不入,它们在互联网上肆意扩张, 侵入人们的电脑、窃取人们的机密信息甚至破坏系统致使系统瘫痪。防火墙和入侵检测 系统作为网络安全的主要产品在保护计算机不受侵入发挥了重要作用,但是它们各自存 在着不少缺点。本文将入侵检测功能加入到防火墙系统中,使它们能够互补所短,互取 所长,发挥更好的作用,为个人用户提供更加优质可靠的防护服务。 防火墙和入侵检测系统是目前网络防护的两个主要工具。本文针对目前防火墙和入 侵检测系统中各自存在的不足,在分析了目前防火墙和入侵检测系统各自的特点及其实 现技术的基础上,重点研究了w i n d o w s 网络体系结构、状态检测的防火墙系统和基于特 征值匹配的网络防火墙系统的技术,提出了将入侵检测技术溶入到w i n d o w s 个人防火墙 之中的设计方案,并根据该方案在w i n d o w s 平台下设计了一个实验系统。该实验系统采 用口过滤钩子技术截获数据包,并将特征值匹配的网络入侵检测技术溶入到个人防火墙 之中。在这个基础上,为了加快数据包过滤的速度,系统中使用三条链表的方式分别处 理不同协议的数据包,使t c p 协议、u d p 协议、i c m p 协议的数据包可以分别进入不同 的链表进行处理。另外使用状态检测的方式进行数据包过滤,并将状态链表、防火墙规 则链表、入侵检测选项链表使用二维网状的形式组合在一起,从而能加快数据包处理的 速度。 最后通过实验证明,系统具有良好的稳定性及实用价值。 关键字:防火墙,入侵检测,状态检测 v a bs t r a c t a l o n gw i mm eq u i c kd e v e l o p m e i l to fh l t 锄e t ,p e o p l e sl i v e sb e c o m em o r ea n di n ( i r e c o n v e n i e l l c y b u to n l eo m e rh a i l d ,l en e 觚o r k si i l s e 训t yi sa l w a y s 仃0 u b l i n gp e o p l e m s , 仃o y ,h a c k e r 锄da l lm et l l i n g sl i k et 1 1 a tc a i lg e ti n 趾ds p r e a di na 1 1 ) ,p l a c eo fn e n l e tw i l l 削l y t h e yi n 衄i d ep e o p l e sc o m p u t 锄df i l c hp e o p l e ss e c r e ti n f o m 撕。玛a n dd e s n o ym es y s t e m t 0b r e a kd o w n a s 廿l em a i np r o d u c t so fn e t 、) l r o r ks e c 耐t y ,f i r e w a l la i l di d sp l a y e da i l i m p o r t 锄tr o l e i np r o t e c t i n gc o m p u t c rf b mi n 仇j d i n g b u tb o mo ft l l e mh a 、,es 0 m e d i s a d v 锄t a g e s t l l i st l l e s i sp u tt 1 1 en e 觚o r k 锄r u s i o nd e t e c t i o nt e c h n 0 1 0 9 ) ,i n t o l ef i r c w a l l s y s t e m a sar e 墨u l tt h e yc 锄w e a l ( e a c ho t h e r sd i s a d v a l l t a g e s a i l ds 仃o n ge a c ho m e r s a d 岫g e s ,a i l dp r o v i d et h e u s e r sa 丘肌e ra i l db e t t e rp r o t e c ts e i c e f i r e w a l l 趴di d sa r e 似om a i np r o d u c t so fn e 觚o r ks e c 嘶t ) ,n o w a d a y s 1 1 1 i st l l e s i s f o c u s e so nm ew e a l ( n e s se x i s t c di nb o mf i r e w a l la i l di d s o n 廿1 eb a s eo fa i l a l ) ,z i n gm e c h a r a c t 甜s t i c sa n dt e c h n o l o 百e so fm e m ,t h i st l l e s i sr e s e a r 曲e sw i n d o w sn e t 、) l r o r ks y s t 锄 s t m 咖r e ,s t a t ei n s p e c t i o n 缸e w a l la n dn e 铆o r ki n t n l s i o nd e t e c t i o nt e c h o l o g y ,a n dp r o v i d e sa s c h e i i l ew h i c hp u t sm en 鲍) l r o r ki n t m s i o nd e t e c t i o nt e c h l 0 1 0 9 yi n t ot h ef i r e w a l ls y s t e m a c c o r d i n gt o 也es d l 锄e ,a ne x p e r i m c n t a ls y s t e mw a sd e v e l o p e d t h i se x p 研m e n t a ls y s t e m u s e s 口f i l 仃a t i o nh o o kt e c h n o l o g ya st 1 1 ew a yt oc 印t u r ed a _ t ap a c k a g e s ,a n dp u tm en e 觚o r k i n t r 啷i o nd e t 硎o nt e c h o l o g ) ,i n t om cf i r e w a l ls y s t 锄a n dr e a l i z e di ti n 晰n d o w s ) ( ps y s t 锄 o nt l l eb a s eo fi t ,“sm e s i su s e s 廿_ l r e em l ec h a i l l st 0d e a lw 沛d a t ap a c k a g eo fd i t p r o t o c o l ss 印a r a t e l y s od a t ap a c k a g e so ft c pp r o t o c 0 1 s ,u d pp r o t o c 0 1 ,i c m pp r o t o c 0 1c a i lb e d e a lw i mi nm e i rs p e c i a lw a y o t h e r w i s e ,t l l i sm e s i su s e ss t a t ei n s p e c t i o nm o d et of i l 觚t et 1 1 e d a _ t ap a c _ k a g e s a n dt oi n c r e a s em es p e 。do fd a t af i l 仃a t i o 玛仳st l l e s i s 丘t st h es t a t ec h a 地 丘r e w a l lm l ec h a i n ,a n di m m s i o nd e t e c t i o no p t i o nc h a i l lt o g e t l l e ra sm ew a yo fp l a i l a rn e t l i k e c _ h a i n t e s t i f i e db ye x p 酬胁e n t ,m es y s t e mp r o v e dt oh a v eg o o ds t l b i l i z a t i o na i l da p p l i c a t i o n v a l u e k e y w o r d :f i i e w a l l ,i n t r u s i o nd e t e c t i o n ,s t a t ei n s p e c t i o n v i 学位论文独创性声明: 本人所呈交的学位论文是我个人在导师指导下进行的研究工作及取得 的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不 包含其他人已经发表或撰写过的研究成果。与我一同工作的同事对本研究所 做的任何贡献均已在论文中作了明确的说明并表示了谢意。如不实,本人负 全部责任。 论文作者( 签名) :虞 学位论文使用授权说明 王嘶7 年歹月1 日 河海大学、中国科学技术信息研究所、国家图书馆、中国学术期刊( 光 盘版) 电子杂志社有权保留本人所送交学位论文的复印件或电子文档,可以 采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质论文 的内容相一致。除在保密期内的保密论文外,允许论文被查阅和借阅。论文 全部或部分内容的公布( 包括刊登) 授权河海大学研究生院办理。 论文作者c 签名,:二廛互l 卸、,v 年多月1 日 1 1 研究背景 第一章绪论 随着i t 时代的到来,成千上万的计算机加入到了i n t e n l e t 这个大家庭中,从国家、 企业到个人,i n t e m e t 已经深入到生活的各个方面。在h n e n l e t 改变着人们的生活,给人们 带来了方便快捷,使人与人之间的距离变得越来越近的同时,它也给人类带来了新的安 全威胁。由于设计i n t e m e t 时并没有考虑到i n t e n l e t 的规模会如此之大,致使n e n l e t 留 下了许多缺陷和漏洞,本身在设计上就是不安全的【l 】。黑客通过研究i n t e m e t 的缺陷和操 作系统的一些漏洞,找到绕过常规安全体系进入系统的方法,从而窃取重要信息、破坏 系统,使用户承受了巨大的损失。网络安全的主要威胁包括非授权访问、信息泄露和丢 失、破坏数据完整性、破坏通信规程和协议、拒绝合法服务请求、设置陷阱和重传攻击 等。各种黑客对网络的有意无意的攻击导致系统被破坏以致瘫痪、绝密信息被窃取、重 要数据被纂改,这些都直接威胁着社会安全。人们普遍对网络安全问题认识不足,安全 防范意识淡薄,也给黑客和病毒留下了可乘之机,许多网络应用系统还处在不设防状态, 存在极大的安全风险和隐患。可以说,现阶段我国面临的网络安全问题十分严峻。 针对黑客的攻击,网络安全系统采用了多种技术,建立起各种防护机制。其中最常 用也是最有效的是入侵检测系统和防火墙系统。但是目前比较成熟的产品都是为企业用 户设计的,由于个人用户的资源有限,这些产品对它们并不适合。虽然目前也有许多个 人防火墙系统,但是它们大多数只进行简单的包过滤处理,只能通过预先设定的规则来 进行访问控制,对于实时的攻击或异常的行为不能做出实时反应,不能主动跟踪入侵者。 另外,防火墙规则的制定,更多的是一种粗粒度的检查,对一些协议细节无法做到完全解 析,不能预防来自应用层的攻击,也不能预防病毒攻击【2 】。入侵检测技术作为防火墙技 术的有益补充,能够帮助网络系统快速发现网络攻击的发生,扩展了系统管理员的安全 管理能力( 包括安全审计、监视、进攻识别和响应) ,提高了信息安全基础结构的完整性。 现今的网络安全产品往往将防火墙与入侵检测系统孤立起来单独使用,而通过结合i d s 与防火墙的功能,不但能检测入侵的发生,而且能通过一定的响应方式,实时地中止入 侵行为的发生和发展,实时地保护信息系统不受实质性攻击。 1 2 国内外研究现状 防火墙( f i r e w a l l ) 技术是建立在现代通信网络技术和信息安全技术基础上的应用性安 全技术【3 】。防火墙技术主要经历了四个发展历史。第一代防火墙:包过滤防火墙。第二 代防火墙:代理服务器防火墙。第三代防火墙:状态检测防火墙。第四代防火墙:深度 检测防火墙。现在防火墙正朝着多功能、高智能、分布式、联合其他网络安全产品的方 向发展着。特别是近几年来,防火墙产品得到了突飞猛进的发展。防火墙产品的应用, 已经延伸到银行、保险、证券、邮电、军队、海关、税务等行业以及政府等部门。因此, 防火墙产品已成为国内安全产品竞争的焦点。目前,国外比较著名的个人防火墙有 a t g u a r d ,o u t p o s tf i r e w a l l ,z o n e a l 锄,t 协yp e r s o n a lf i r e w a l l ,n o n o np e r s o n a lf i r e w a l l 以 及s y g a t e p e r s o n a lf i r e w a l l 等,国内用的比较多的有天网防火墙、金山网镖等产品。 入侵检测是提高网络安全性的新方法,其主要目的是检测系统或网络是否遭到攻击, 是否有来自内部或外部的攻击者,如果有则应采取一定的反应措施。基于主机的入侵检 测技术已经比较成熟,开发出的入侵检测系统也比较多,h l t m s i o n d e t e c t i o n 公司的k a l l e s e c 嘶t ym o n i t o r t r u s t e di n f o m a t i o ns y s t 锄公司的s t a l k 等都是目前比较优秀的产品。 基于网络的入侵检测系统,通过连接在网络上的站点对报文进行捕获,并分析其是否具 有己知的攻击模式或是否会引起网络系统异常,以此来判断是否为入侵者。日前,基于 网络的入侵检测系统的产品较多,多为基于网络关键结点( 如防火墙、路由器等) 进行检测, 如a x e n t 公司的n e t p r o w l e r ,i s s 公司的r e a l s e c u r e 和c i s c 0 公司的n e 诹a n g e r 。基于 主机的入侵检测系统需要在所有受保护的主机上都安装检测系统,配置费用高,所以实 际应用较多的是网络型的入侵检测系统。但是高带宽网络、交换式网络、v l a n 、加密 传输的发展都对基于网络的入侵检测造成了很大限制,所以现在主流的入侵检测系统是 两者结合。基于网络的入侵检测系统的发展主要面向大型网络。入侵检测技术及相关标 准化仍处于研究与开发阶段。目前,国内只有少数的网络入侵检测软件,相关领域的系 统研究也刚刚起步,与外国尚有差距。目前的入侵检测产品主要存在漏报与误报率高、 缺少行业标准、缺少协作等问题【4 】,今后将朝着智能化、全面化的方向发展。目前,瑞 星个人防火墙具有入侵检测的功能,它是以一个可选模块的形式存在的。由于加入入侵 检测功能后会占用一定的系统资源,所以用户可以根据需要选择此功能或者不选择此功 能。 2 1 3 本文工作 目前,防火墙、入侵检测系统等安全产品通常分别部署,各自单独运行,这样即浪 费了资源又占用了空间。而且它们通常彼此孤立、缺少联动。如果能将两者融合到一个 系统里,那么它们就能互补优缺,达到更好的保护计算机的目的。一个完善的个人防火 墙应该包括防火墙和入侵检测两部分。 基于此,本文首先研究分析了t c p m 协议和w i n d o w s 网络协议的体系架构以及目 前防火墙和入侵检测的各种技术,针对个人用户设计并实现了一个具有入侵检测功能的 w i n d o w s 个人防火墙系统。该系统借鉴网络防火墙的一些技术,通过精简将其应用到个 人防火墙中。另外,为了加强系统保护力度,减少系统的资源消耗,系统设计中将网络 入侵检测技术和个人防火墙技术融合起来,使它们互补所短,互扬所长。除此之外,系 统设计中还使用多种方法缩短链表长度,加快数据包的过滤速度;使用分层过滤的方式 来加强保护力度,提高系统的可扩展性。 1 4 本文组织结构 第一章绪论。内容包括课题研究的背景和意义,以及防火墙和入侵检测技术的国 内外研究现状。 第二章数据包截获。分析了在不同的协议层实现数据报截获的技术以及各自的优缺 点;详细讲述了使用i p 过滤钩子驱动实现数据包截获平台的过程;提出并 实现了一种分层过滤的模式,用于增加系统的稳定性和可宽展性。 第三章入侵检测功能的加入。从分析防火墙和入侵检测技术的特点和实现原理入手 讨论了将入侵检测功能加入到防火墙中来的必要性和可能性:讨论了实现两 者联动的两种方式和入侵检测的各种实现技术,选择合适的联动的方式和合 适的技术来实现入侵检测功能;从规则的表示格式、格式的转换、链表的合 并和分解处理、过滤流程和联动响应过程等几个方面详细讲述了实现两者融 合的过程。 第四章状态检测的加入。分析讨论几种防火墙的实现技术,重点分析了状态检测技 术的原理;从状态的表示、状态链表的实现和状态检测的算法流程等方面详 细描述了状态检测技术在本文设计的防火墙中实现的过程和细节;使用快速 3 指针的方式加快数据包过滤速度。 第五章系统的设计与实现。包括系统的总体设计和系统的实现。 第六章应用研究与实验分析。分析几种常见的入侵行为,讨论如何使用本文防火墙 防御这些入侵行为;建立一个实验环境,对此系统进行功能和性能的测试, 并对实验结果进行了分析比较。 第七章论文总结和以后工作的展望。主要包括本文工作的特点、本文的不足之处和 对以后工作的展望。 4 第二章数据包截获 使用什么样的数据包截获技术是每个基于网络数据流处理的应用程序都必须首先面 对的问题,数据包截获技术的好坏直接影响基于网络数据流处理的应用程序的处理速度 和质量。本章首先分析了w i n d o w s 平台下数据包截获的各种技术的好坏,选择了w i n d o w s 2 0 0 0 过滤钩子驱动作为数据包截获的实现技术。通过分析w i n d o w s2 0 0 0 口过滤钩子 驱动的技术原理,本文在w i n d o w s 平台上实现了这种技术,作为防火墙实现的基础。 2 1 w i n d o w s 平台下的数据包截获技术 2 1 1t c p i p 协议在w i n d o w s2 0 0 0 ) ( p 中的实现分析 t c p i p 协议与w m d o w s 系统的映射并不严谨,1 印i p s y s 不仅仅工作在传输层,它也 工作在网络层,w i n d o w s 系统中的1 c p i p s y s 至少提供了3 种服务,一是t c p 协议的实 现;二是u d p 协议的实现;三是i p 协议的实现。w i n d o w s 通过n d i s 和网卡进行交互。 n d i s 是w i n d o w s 的网络驱动接口规范,上接t c p i p 协议驱动程序,下接网卡驱动程序, 这就意味着从网卡驱动程序到协议驱动程序都要利用n d i s 这个规范来进行操作。 o s i ,t c p 口与w i n d o w s 程序之间的映射关系如图2 1 所示【5 1 。 应用蹬疵弼穰廖 旋承联 疲拜1 绥 w s 2 _ j 2 d i l 会蕊绥 s p l i t j j 、卷 l 印l p 乌黔内拨务 f 奄j 衾掰 传辘理 ( u d p 。t c p 网络堪。 i n t e m e t t c p l p 锣s l p 数掰链嬲理n d i s 嬲 网络接u 瑶 物理堪 网卡 图2 1o s i ,t c p i p 与w i n d o w s 系统结构之间的映射关系图 2 1 2w i n d o w s2 0 0 0 x p 的总体构架 w i n d o w s 2 0 0 0 操作系统的总体结构分为两个层次,上面为应用层,下面为核心层, 其结构如图2 2 所示。 使,州动态库的应用程序( d 固使州静态库的应 应用层 动态链按库( 工) 用程序( d 圆 驱动程序( 筑磅 核心层 硬件 图2 2 、m n d o w s 2 0 0 0 ) ( p 操作系统的总体结构 应用层是用户可以直接接触到的,应用程序( e x e ) 和动态链接库( d l l ) 工作在这一 层,动态链接库被应用程序调用时就成为应用程序的一部分,所以它们并没有本质的区 别。核心层主要为驱动程序,所有程序都可以调用同一个协议驱动程序。这样,应用程 序不用关心协议的实现方法,只要按提供的接口函数做相应的操作即可。 这种方法保护了操作系统内核,提高了系统的安全性,但同时也带来了不便。系统 的许多工作必须由内核代码完成( 如创建进程、分配内存、驱动设备等) ,应用程序无法、 也不能直接做这些工作。但应用程序又不得不做这些工作( 如创建子进程等) ,因此操作 系统提供系统调用机制让应用程序能在代码段中调用操作系统内核的函数,进程通过系 统调用进入核心态。当系统调用完成时,再回到用户态。 应用层的用户进程运行在用户态,核心层的网络设备驱动程序运行在核心态。当网 络设备从网络上接收到数据包后,产生硬件中段,网络设备驱动程序将数据拷贝到内核 空间。用户进程通过系统调用再将内核空间的数据拷贝到用户空间。可以看出,数据从 网络设备传输到用户程序,需要经过一次系统调用和多次数据拷贝操作【6 】。 2 1 3 不同层次上的数据报截获技术 要在、矾n d o w s2 0 0 0 ,下过滤网络数据包可以在两个层面进行:用户态( u s e r m o d e ) 和核心态( 1 ( e n l e l m o d e ) 。 在用户态下进行网络数据包过滤有以下三种方法: ( 1 ) w i n d o w s2 0 0 0 ) ( p 包过滤接口 w i n d o w s2 0 0 似p 包过滤接口,是利用w i n d o w s 2 0 0 0 ) ( p 提供的i p h e l pa p i 的包过 6 滤器的功能。但是,包过滤的规则有很多限制,对于个人防火墙来说是远远不够的。 ( 2 ) 替换系统自带的w i n s o c k 动态连接库 这种方法需要重新设计自己的w i n s o c k 库,难度较大,很少人采用这种方法。 ( 3 ) w i n s o c l ( 2s p i 忉 、i n s o c k 2 引入了一种新的编程接口,称为服务提供者接口,即s p i 。利用这种技术可 以完成诸如传输质量控制( q o s ) ,扩展t c p 口协议栈,u r l 过滤及网络安全控制等功能。 在用户态下进行数据包过滤最致命的缺点就是只能在w 协s o c k 层次上进行,而对于 网络协议栈中底层协议的数据包无法进行处理。对于一些木马和病毒来说很容易避开这 个层次的防火墙。 在核心态下进行网络数据包过滤主要有以下几种方法: ( 1 ) t d i 过滤驱动程序( t d if i l t e rd r i v 哪 t d i 过滤驱动程序:当应用程序要发送或接收网络数据包的时候,都是通过协议驱动 所提供的接口来进行的。因此,我们只需要开发一个过滤驱动来截获这些交互的接口,就可 以实现网络数据包的过滤。t d i 层的网络数据过滤还可以得到操作网络数据包的进程的 详细信息,这也是个人防火墙需要的一个重要功能。但是t d if i l t e rd d v e r 属于u p p e r d r i v e r ,位于1 印i p s y s 之上,这就意味着由t c p i p s y s 接收并直接处理的数据包就不会 传送到上面,从而无法过滤某些接收的数据包,典型的就是i c m p ,i c m p 的应答包直接 由t c p i p s y s 生成并回应,上面的过滤驱动程序全然不知。 ( 2 ) n d i s 中间层驱动程序( n d i si n t e 肌e d i a t ed f i v 哪 n d i s 中间驱动程序在协议驱动程序和小型端口驱动程序之间插入一层,使得来自 上层的发送包和来自网络的接收包都必须经过它而进行继续传递,从而可以用来过滤较 为底层的网络数据包,在此基础上进行过滤、加密、压缩、网络地址转换等操作。n d i s 中间层驱动的应用很广泛,不仅仅是个人防火墙,还可以用来实现) n 、n a t 、v u 蝌 等。目前个人防火墙的产品还很少用到这种技术,主要的原因在于中间层驱动的安装过 于复杂,w i n d o w s2 0 0 0 ) ( p 下可以通过程序实现自动安装,但是如果驱动没有经过数字 签名的话,系统会提示用户是否继续安装。 ( 3 ) n d i sh o o kd d v e f n d i s ( n e 俩o r kd r i v e ri n t e r f a c es p 鲥6 c a t i o n ,网络驱动程序接口规范) 是用于实现传 输驱动程序和网卡驱动程序之间相互通信的网络驱动规范,w i n d o w s 所有的网络通信最 终必须通过n d i s 完成。通过编写n d i sh o o kd r i v e r 可以实现数据包的过滤,这种方 7 法目前使用的比较多【引。但是由于其实现的复杂性,本文并没有使用这种技术。 ( 4 ) w i r 也o o on d i s 中的f i l t e r h o o kd r i v e r w i n 2 0 0 0f i l t e r h o o kd r i v e r :这是从w i n d o w s2 0 0 0 x p 开始系统所提供的一种驱动 程序,该驱动程序主要是利用i p f i l t d s y s 所提供的功能来过滤网络数据包。f i l t e r h o o k d r i v e r 在结构上非常简单,易于实现。本文使用的就是这种技术。 2 2w i n d o w s2 0 0 0i p 过滤钩子驱动 通过对、聃n d o w s 平台下各个数据包截获技术的分析比较,本文选择w i n d o w s2 0 0 0 过滤钩子驱动作为数据包截获的手段,原因主要有以下几点: ( 1 ) 用户态下进行数据包拦截最致命的缺点就是只能在w i n s o c k 层次上进行,而对 于网络协议栈中底层协议的数据包无法进行处理。对于一些木马和病毒来说很容易避开 这个层次的防火墙。w i n d o w s2 0 0 0 过滤钩子驱动工作在内核态,能够截获比较底层的数 据包,事实上w i n d o w s2 0 0 0 过滤钩子驱动能够截获i p 层及i p 以上层的数据包。 ( 2 ) 数据包从内核态转入到用户态需要进行数据的拷贝,因为w i n d o w s 2 0 0 0 过滤钩 子驱动工作在内核态,所以可以减少多余的数据拷贝,提高资源的利用率。 ( 3 ) w i n d o w s2 0 0 0 过滤钩子驱动安装和卸载的过程简单方便。 ( 4 ) 现在防火墙的数据包截获多采用两层的过滤结构,即在用户态和内核态分别进 行截获,但是由于经过两次截获,防火墙的处理速度会降低,影响防火墙的性能。特别 是在本系统中还要加入入侵检测模块的功能,所以本系统没有采用两次截获的方法。 2 3w i n d o w s 驱动设计 本系统的数据包截获模块主要是实现一个驱动程序,用这个驱动程序向i p 过滤驱 h 0 0 k 一个过滤函数,这样进出系统的数据包都必须首先经过这个函数的过滤。为了编 写这个驱动程序,必须先了解一下w i n d o w s 驱动的一些基本知识。 2 3 1 驱动设计原理 在w i n d o w s 系统中,驱动程序运行在系统的内核态下。在w i n d o w s9 8 以及以前的系 统中,驱动程序以、,) 【d 格式存在,在w i n d o w s2 0 0 0 以及以后的系统中驱动程序以s y s 格 式存在着。 驱动程序是一个分层的结构,一个硬件设备并不是只由一个驱动程序来管理,在它 相关联的物理设备驱动程序之上,还有很多过滤驱动程序。与这些过滤驱动程序相关联 的,就是这个物理设备对象的过滤器设备对象。那么,一个用户模式的请求,必须通过 上层的过滤器设备对象,一层一层的往下传,最终才能到达物理设备对象。这有点像 t c p 分层结构模型,一个应用层的数据包必须通过传输层、网络层这样一层一层的往 下传,最终才能达到物理层并传递到网络中。而设计这样的分层模型的目的是为了方便 扩展,比如如果想对某个设备加入新的管理操作,那么不需要修改其已有的物理设备驱 动程序和过滤器驱动程序,而只需要加入新的过滤器设备对象以及相应的驱动程序,在 这里加入新的操作就行了。 在很多内核模式编程中,驱动程序并不一定要与某一个实际存在的物理设备相关联, 它可以仅创建一个虚拟的设备对象,而这个设备对象不与任何实际的物理设备相关联。 因为在很多情况下,用户编写驱动的目的仅仅是要让自己的代码执行在系统的内核态中, 本文使用的口过滤钩子驱动就属于这种情况。, 2 3 2 驱动程序结构 像c 语言的腿i n 函数一样,驱动程序也有一个入口函数。在驱动程序中,这个入口 点就是d r i v e r e n t r y 函数,它在驱动程序被加载进内存的时候调用。d r i v e r e n t r y 函数有 两个参数,其中第一个参数p d r i v e r - o b j e c tp d r i v e r o b j ,是指向该驱动程序对应的驱动 程序对象的指针。 在d r i v e r e n t r y 函数中,一个重要的任务就是要设定驱动程序对象的几个函数指针, 这样,该驱动程序对象关联的设备对象在接收到上层的i r p 的时候,就会通过驱动程序 对象中设置的函数指针,找到相应的函数来做处理,例程的分派如下所示: p d r i v e r o b j 一 d r i v e r u n l o a d = d r i v e r u n l o a d : p d r i v e r o b j 一 m a j o r f u n c t i o n i r p - m j c r e a t e = p d r i v e r o b j 一 m a j o r f u n c t i o n i r p m j c l o s e = p d r i v e r o b j 一 m a j o r f u n c t i o n i r p - _ m l d e v i c e c o n t r o l = d r i v e r d i s p a t c h : 除此之外,d r i v e r e n t r y 函数还有一个重要的任务,就是要创建设备对象并为其建立 符号连接。在规范的w d m 程序中,创建设备对象的任务本来该由a d d d e v i c e 函数来做, 9 而这个函数也是通过驱动程序对象的一个函数指针来定位的。在这种规范的w d m 程序中, 一旦有新硬件加入,系统就会自动通过驱动程序对象的函数指针找到a d d d e v i c e 函数, 并调用它来创建设备对象。但是本文并不是在为实际存在的硬件写驱动,而只是写一个 内核模式下的程序,因此就只需要在d r i v e r e n t r y 函数中创建一个设备对象就行了。 从前面设定的驱动程序对象中的函数指针可以看到,主要有两个函数:卸载函数 d r i v e r u n l o a d 和派遣函数d r i v e r d i s p a t c h 。d r i v e r u n l o a d 函数应该很容易理解,它是在 驱动程序被卸载出内存的时候调用,主要做一些释放内存之类的工作。派遣函数 d r i v e r d i s p a t c h 用来处理各种不同类型的i r p 。下面就分别介绍一下这两个函数。 d r i v e r u n l o a d 函数的主要任务是将创建的设备对象和符号连接删除掉,当然如果在 程序中还分配了其他内存需要释放,也是由d r i v e r u n l o a d 函数完成。 派遣函数d r i v e r d i s p a t c h 主要负责处理上层的i r p 。必须说明的是,每个i r p 都与 两个数据结构相关联,就是i r p 本身和i r ps t a c k 1 0 _ s t a c k - l o c a t l 0 n 结构。在这两 个结构里面,包含了所有上层传递给本层设备对象的信息。最重要的一个信息就是:在 i os t a c kl o c a t l 0 n 结构中,包含了i r p 的功能码m a j o r f u n c t i o n 和m i n o r f u n c t i o n ( i r p 的功能码标识了该i r p 具体是什么请求,比如读请求的m a j o r f u n c t i o n 值为 i r p m j r e a d ) 。 d r i v e r d i s p a t c h 函数的处理流程一般是这样的:首先通过i r p 获得i p rs t a c k ;然 后从i r ps t a c k 中得到该i r p 的主功能码m a j o r f u n c t i o n ,判断主功能码并做相应处理; 处理完该请求后,根据具体情况选择完成该请求或者向下一层设备对象传递该i r p 阻1 。 2 3 3 驱动与应用程序的通讯 用户模式的程序要调用驱动,首先就要打开设备,也就是驱动程序中创建的设备对 象。这可以通过调用c r e a t e f i l e 函数来实现。c r e a t e f i l e 函数本来是用于打开文件,它的 第一个参数就是文件名。而这里,我们以设备名作为它的第一个参数传入,那么该函数 打开的就是设备了。这里所说的设备名,实际上是驱动程序里面为设备对象建立的符号 连接名。打开设备后,用户模式的程序就可以调用r e a d f i l e 、w n t e f i l e 和d e v i c e i o c o n 仃d l 等函数向驱动程序发出请求了。 1 0 2 4i p 过滤钩子驱动的实现 w 协d o w s2 0 0 0 口过滤钩子驱动是用来过滤网络封包的内核模式驱动,它扩展了系统 提供的过滤驱动的能力。口过滤驱动是w i n d o w s 2 0 0 0 以及以上系统提供的用于过滤 i p 数据包的内核模式驱动,它的文件名是i p f l t d s y s ,存放在操作系统安装盘下面的 w i n d o w s s y s t e m 3 2 d r i v e r s 目录下。过滤钩子驱动实现了个回调函数,并向系统提供 的口过滤驱动注册这个回调函数。这个回调函数就是过滤钩子,m 过滤驱动随后通过这 个过滤钩子来决定如何处理进出的封包。以下讲述该驱动的实现过程。 2 4 1 过滤钩子和钩子函数 过滤钩子实际上是一个函数指针,它用来告诉i p f l t d s y s 钩子函数的实际地址;钩 子函数是过滤钩子指向的函数,它实现具体的过滤功能,通过过滤的数据包在发给口过 滤驱动进行处理,数据包的流向在m 过滤驱动出就像打了一个弯。 过滤钩子是一个固定结构的函数指针,这个结构由口过滤驱动所决定,过滤钩子的 具体实现如下。 t ) ,p e d e fp f - f o 刚队r d - a c t i o n ( 木p a c k e t f i l t e 也) 【p 仃) ( i n1 1 i l s i 印e dc h a r 木p a c k e t h e a d 封包的i p 头指针 i nu i l s i 盟e dc h a r 书p a c k e t ,具体封包数据的指针,不包含i p 头 i nu i l s i 印e di n tp a c k e t l e n 加,数据包的大小,不包含p 头 i nu 1 1 s i 盟e d 硫r e c v i n t e 血c e i n d e x ,接收数据的接口适配器的编号 i n 吼s i 印e di n ts e i l d h n e r :f a c e i l l d e x ,发送数据的接口适配器的编号 i nu n s i 印e d1 0 n gr e c v l i l l | n e x t h o p ,接收数据的接口适配器的地址 i n 吼s i 印e dl o n gs e l l d l i i 姻、e x t h o p 发送数据的接口适配器的口地址 ) ; 过滤钩子的返回值是一个p ff o r 、a c t i o n 类型的结构,是给i p 过滤驱动程 序怎样处理的信息,具体有p ff o r 、,p fd r o p ,或p fp a s s 这三种类型【1 0 】。 p i _ f o r 、m u m 规定给口过滤驱动程序马上返回转发响应给i p 栈对于本地包,i p 转发他们到栈顶 如果包目标地址为外部机器并且路由允许,口路由他们到对应的路由。 量,量i 二- d r u p 规定给i p 过滤驱动程序马上返回d r o p 响应给i p 栈i p 将d r o p 这个包。 p f - p l a s s 规定给i p 过滤驱动程序过滤这个包并且返回这个结果响应给口栈,i p 过滤驱动程 序怎样处理这个过滤包决定于他怎样在p a c k e tf i l t 嘶n ga p i 中做的设置。过滤钩子如果他 检查到他不能处理的包但将允许i p 过滤驱动程序过滤包的时候返回这个p a s s 响应。 钩子函数是过滤钩子所指向的函数,因此钩子函数具有和过滤钩子相同的参数类型 和返回值。钩子函数是防火墙功能实现的核心函数,在钩子函数中通过分析数据包包头 和数据包内容可以用来实现防火墙过滤的功能,如下面的例子。 i f ( ( ( p i p h e a d 神p a c k e t h e a d 神- i p p r o t o c o l p r 0 p ) r l 孔啪p f d r o p ; r e t 啪p f _ f o r 、凇i m ; 这个例子实现了阻断t c p 协议的数据包通过的功能,其中p 口h e a d e r 为一个i p 包头 的数据结构。 2 4 2 注册过滤钩子 注册过滤钩子是本驱动程序的主要的任务之一,注册的过程就是告诉i p 过滤驱动钩 子函数的地址的过程,要实现一个钩子函数的注册要经历一下几个步骤。 ( 1 ) 取得i p 过滤驱动设备的对象指针,这个过程可以通过调用i o g e t d e c e p o i n t e r 函 数得到,这个函数有两个输入参数和两个返回参数,输入参数分别表示设备的名称和对 设备的访问权限设置,返回参数分别为设备对象指针和文件对象指针。在这里,p 过滤 驱动的设备名称为“d e v i c d i p f i l t e r d r e r ,这个驱动实际上放在 “w 烈d 0 w s s y s t 锄3 2 “v e r s ”目录下;访问权限这里设置为f i l ea l la c c e s s 。 ( 2 ) 创建一个p fs e te x t e n s i o nh o o ki n f o 数据结构对象,将过滤钩子函数的 指针填充到这个对象中。 ( 3 ) 创建一个内核事件对象,这个对象用于同步i p 过滤驱动的交互。i p 钩子过滤驱 动与i p 过滤驱动的交互通过发送i r p 来实现,只有在口过滤驱动接收并处理了此i i u , 1 2 这个内核对象才会受信。 ( 4 ) 用i o b u i l d d e “c e i o c o n 仃0 1 r e q u e s t 函数创建一个心,并将前面创建的 p fs e te x t e n s i o nh o o ki n f o 对象传给i p 的输入缓冲区,将前面获取的设备对 象指针和内核事件对象也传给i l 冲,并将冲的i o c o i l 仃o l c o d e 字段设置为 i o c t lp fs e te x t e n s i o np o i n t e r ,即告诉m 过滤驱动设置钩子函数。 ( 5 ) 使用i o c a l l d r i v e r 函数发送o 到口过滤驱动。 ( 6 ) 使用k 州嘣t f o r s i n g l e c i b j e c t 函数等待i p 过滤驱动完成设置钩子函数的动作。 2 4 3 创建通讯接口 应用程序与驱动程序之间的通讯也是通过发送u 来实现的,为了能够使驱动程序 能够正确处理时,必须进行以下步骤的设置。 ( 1 ) 在驱动的入口函数d r i v e r e n t 巧中定义i r p 的处理函数。这个过程通过以下的方式 来完成,其中i o d is p a t c h f u n 为时的处理函数的名字。 p d r i v e r o b j 一 m a j o r f u n c t i o n i r p m j d e v i c e c o n t r o l = i o d i s p a t c h f u n : ( 2 ) 定义设备控制代码。应用程序通过设备控制代码向驱动程序发送设备控制命令, 如开始过滤、添加规则等,定义开始过滤的设置如下。 煳娟n e s 1 a r l - i p _ h 0 0 k c 1 r i ,c o d e ( f i l e - d e v l c e - _ d r 、l r f u , i p d r v f u l p - i o c l f i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 13314-2025锻钢冷轧工作辊通用技术条件
- 2025福建福州市罗源县城市管理和综合执法局内勤人员招聘5人考前自测高频考点模拟试题及完整答案详解一套
- 2025年福建省古田县人力资源和社会保障局招聘10人模拟试卷及答案详解参考
- 2025福建福州市长乐生态环境局招聘编外人员2人考前自测高频考点模拟试题及答案详解(夺冠系列)
- 2025湖北咸宁市通城县城市发展建设投资(集团)有限公司招聘考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025广东技术师范大学招聘辅导员40人模拟试卷及答案详解(各地真题)
- 2025年陕西电力科隆发展有限责任公司招聘(1人)模拟试卷及答案详解(全优)
- 2025福建南平大学生志愿服务乡村振兴计划工作招聘500人模拟试卷附答案详解(突破训练)
- 2025年中国混凝土整体着色剂行业市场分析及投资价值评估前景预测报告
- 2025北京大学肿瘤医院云南医院招聘高层次人才(27人)考前自测高频考点模拟试题有答案详解
- 肠外营养疗法规范或指南2025
- 2025年中国药典培训试题及答案
- Q-JJJ 9002-2025 铁路建设项目安全穿透式管理实施指南
- 2025年新闻记者从业资格证考试题库(附含答案)
- 中国医疗卫生体系发展现状与展望
- 区块链智能合约技术与应用 课件 第1、2章 区块链概述;区块链中的信息安全技术
- 成都辅警笔试试题及答案
- 制药设备改造管理制度
- 心梗急救课件
- 2026届新高考语文热点精准复习:诗歌观点态度评价
- DB31/T 1013-2016城市轨道交通地下车站环境质量要求
评论
0/150
提交评论