完整版windows平台下个人防火墙的设计与实现毕业设计Word文件下载.docx
《完整版windows平台下个人防火墙的设计与实现毕业设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整版windows平台下个人防火墙的设计与实现毕业设计Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
spropertyandprivacy.PersonalfirewallastheearliestandthemostusedNetworkSecuritytoolkit,itexistsassoftware,betweenacomputeranditsnetwork.Inordertoprotectthesystem,personalfirewallmonitorsandpreventsnetworkpacketswhichareflowingthroughthecomputeandunauthorized.Therefore,thedevelopmentofaneffectivepersonalfirewallthecurrentmarket,combinedwiththeeaseoftheirimplementationandrelativemerits.Thistopicdetermined.Secondlythefunctionandthecoretechnologyofthisprojectisintroducedindetail,thenintroducesanddisplaystherelatedfunctionsofapersonalfirewall,andfinallysummarizesthefeelingsandexperiencesincompletingthispaper.
Ø
Inthistopic,thecorefilteringtechnologyinrealizationofpersonalfirewallisadoptedbytheFilter-HookDriver.Filter-HookDriverusingVisualStudio2010andWDKtodevelopmentwhichisadriverdevelopmenttoolundertheWindows,UsingClanguagetowriteuserlayer.TheuserinterfaceuseMFCtoachieve.Thispersonalfirewallachievedthosefunctions:
networkpacketfiltering,controlrulessetandlogging.Fullyconsideringthebasicfunctionsofapersonalfirewall,thissystemiseasytooperateand)技术的第四代防火墙。
它根据过去的通信信息和应用程序状态信息动态生成过滤规则。
1994年,以色列的CheckPoint公司开发出了第一个采用这种技术的商业化的防火墙产品。
1998年,NAI公司推出了一种自适应代理(Adaptiveproxy)技术,并在其产品GauntletFirewallforNT中得以实现,给代理类型的防火墙赋予了全新的意义,可以称之为第五代防火墙。
该类型的防火墙整合了动态包过滤技术和应用代理技术,本质上也可认为仍属于状态检测防火墙。
另外,基于实现划分,防火墙又可分基于路由器的防火墙、用户花的防火墙、建立在通用操作系统上的防火墙和具有安全操作系统的防火墙四个阶段:
基于路由器的防火墙即第一代防火墙,上面已做简单介绍。
用户化的防火墙即把过滤功能从路由器中独立出来加上日志和警告功能,并针对用户需求提供相应功能,使得防火墙的安全性和性价比相对第一代防火墙有所提高。
建立在通用操作系统上的防火墙,顾名思义,就是将防火墙以软件或硬件的实现方式独立出来,并配有专用的代理系统,以监控所有协议的数据和指令,并能保护用户的编程空间和可配置内核参数的设置,这使得防火墙的安全性和速度得到大幅提高。
具有安全操作系统的防火墙本身就是一个操作系统,在安全性上较前几种防火墙有本质的提高,这也是目前防火墙产品的主要发展趋势,这类防火墙的开发厂商有操作系统的源代码,可实现安全内核并对其加固,甚至对每个服务器和子系统都做安全处理,一旦骇客攻破了一个服务器,防火墙就将它隔离在此服务器内,不会对其他部分构成威胁,且透明性良好,易于使用。
windows操作系统作为全球使用者最多的操作系统,其平台下开发出了许多优秀的个人防火墙。
国外的如Symantec公司的Norton、Networkice公司的BlackIceDefender、Mcafee公司的Cisco、卡巴斯基互联网安全套装个人版以及ZoneLab公司的FreeZoneAlarm等都是比较著名的个人防火墙。
国内市场上个人用户较多的有天网防火墙个人版、金山网镖、瑞星、费尔等常见个人防火墙。
所有这些基于windows的个人防火墙的区别主要在于它们所采用的对网络数据包拦截的核心技术不同。
总的来说,可分为用户态和内核态数据包拦截两大类[]。
用户态下的个人防火墙主要为基于winsock2SPI技术的个人防火墙(如费尔个人防火墙等);
和内核态下的个人防火墙主要有:
基于TDI过滤驱动的个人防火墙(如国内的天网防火墙和金山网镖等),基于NDIS中间层驱动(如冰盾防火墙等)的个人防火墙,基于NDIS-HOOK的个人防火墙(如卡巴斯基互联网套装个人版)和基于Win2KFilter-HookDriver的个人防火墙。
目前很多比较优秀著名的个人防火墙多采用复合型数据包过滤技术进行开发,即采用两种或多种封包截获技术进行数据包的过滤,以达到全面、强大、平台兼容的效果。
本课题将采用Filter-HookDriver过滤技术,Filter-HookDriver是从Windows2000开始提供的一种机制,利用ipfiltdrv.sys所提供的功能来拦截网络数据包,其结构简单,相对易于实现,且能截获所有的IP包。
1.3课题研究内容与结构
本文主要研究通过实现Filter-HookDriver的方式来操控ipfiltdrv.sys对网络数据包的过滤,本课题主要分为核心层驱动和用户层调用函数及界面两个模块,通过用户层操作控制核心层驱动程序,从而实现个人防火墙。
简单来说,实现Filter-Hook就是对系统ipfiltdrv.sys的接口的实现。
本文的整体结构如下:
第一章主要阐述系统开发的背景和研究意义、国内外研究现状以及本文总体概述。
第二章主要针对本文所涉及的技术的相关知识理论进行简单的介绍。
第三章将介绍本防火墙系统开发中所用到的开发环境和工具。
第四章详细介绍本文个人防火墙的系统设计和各个功能模块。
第五章主要阐述核心功能的具体实现和详细分析以及系统测试等。
最后是总结,致谢等。
第二章相关理论简介
本章将对课题实现中所用到的技术和开发工具进行介绍。
将对各种主流防火墙核心过滤技术、TCP\IP和驱动开发相关基础知识再做简单介绍。
另将主要介绍如Filter-HookDriver、IP过滤驱动(IPFilterDriver)等所用到的技术。
2.1防火墙核心过滤技术
网络防火墙的核心过滤都是基于数据包的拦截技术之上的。
在Windows下数据包的拦截方式可分为用户态和内核态数据包拦截两大类[]。
2.1.1用户态数据包拦截技术
用户态下的数据包拦截技术主要为Winsock2SPI(ServiceProviderInterface)。
Winsock2是WindowsSockets的2.0版本,SPI是Winsock2提供的一个可编程接口。
SPI以动态链接库(DLL)的形式工作在应用层,开发者通过安装自己编写的SPI程序(服务提供者接口程序)来处理截获的基于Socket的网络数据包以完成过滤。
Winsock2SPI以DLL形式存在,编程简单,调试方便。
并且数据封包比较完整,便于内容过滤。
但无法拦截核心层或不用Socket的网络通讯(如ICMP)的数据包,容易被木马或病毒绕过[]。
2.1.2内核态数据包拦截技术
内核态下的数据包拦截方式有多种:
TDI过滤驱动程序、NDIS中间层驱动程序、NDIS-HookDriver和Filter-HookDriver。
目前很多大型防火墙都是采用复合型的数据包过滤技术。
下面简单介绍各包拦截技术。
Filter-HookDriver将在后边进行单独的介绍。
1.TDI(TransportDriverInterface)过滤驱动:
TDI-FilterDriver程序通过将创建的一个或者多个设备对象挂载到一个现有的驱动程序(tcpip.sys)之上,当有应用程序或其他驱动程序调用这一个或多个设备对象时,会首先映射到过滤驱动程序上,然后再由过滤驱动程序传递给原来的设备对象[]。
这就完成了数据包的过滤。
其优点是可以获取到当前进程的详细信息。
缺点是该驱动位于tcpip.sys上,不能获取由tcpip.sys直接处理的数据包,且TDI驱动需重启系统才能生效。
另外Windows2000之前的系统不支持。
2.NDIS中间层驱动:
位于协议驱动和小端口驱动之间。
主要在网络层和数据链路层对数据包进行过滤。
NDIS由于是在网卡驱动程序和传输驱动程序间插入了一层,其优点是过滤功能强大,能截获所有的数据包,安全系数高[]。
缺点是编程规范要求苛刻复杂,难度较大;
不容易安装,安装出错容易导致系统错误;
也不支持Windows2000之前的系统。
3.NDIS-HookDriver:
NDIS-HookDriver是目前大多数网络防火墙采用的方法。
NDIS(NetworkDriverInterfaceSpecification)是微软和3COM公司定制的一套开发Windows下网络驱动程序的标准,为网络驱动的开发提供一套标准接口,使得网络驱动程序的跨平台性更好。
该技术的实现方法是安装Hook钩子到ndis.sys中,替换其中某些关键函数,从而达到截获网络数据包的目的[]。
具有安装简单,截包完整全面,安全性高等优点,但无法获得应用程序进程信息。
以上几种方法对于团队开发而言,NDIS-Hook是最佳选择,TDI-FilterDriver次之。
但对个人而言,工作量较大。
2.1.3Filter-HookDriver
国内关于TDI和NDIS驱动的资料比较多,但有关Filter-HookDriver的书籍资料就相对少很多。
本文所采用的Filter-HookDriver数据包拦截过滤驱动技术在Microsoft微软相关文档里也只有Windows2000DDK中有一些介绍,实际上它只是扩展了IP过滤驱动(IPFilterDriver)的功能,是一种内核模式驱动(KernelModeDriver)。
IPFilterDriver对应ipfltdrv.sys文件,该文件在WindowsXP中的System32\drivers目录下,它允许用户注册自己的IP数据包处理函数。
这个驱动文件默认未加载,但可以手动加载。
Filter-HookDriver主要利用IpFilterDriver(ipfiltdrv.sys)所提供的功能来拦截网络数据包,可应用与TCP\IP协议[]。
其工作方式如下:
在Filter-HookDriver中提供我们自己编写的回调(callback)函数,然后用IP过滤驱动注册回调函数。
实现步骤如下:
1.建立Filter-HookDriver。
2.得到指向IPFilterDriver的指针。
3.获得指针后,通过发送特殊的IRP请求安装过滤函数,该请求传递的数据包含了过滤函数的指针。
4.过滤数据包。
5.结束过滤,撤销过滤函数(通过传递NULL指针作为过滤函数指针来实现)。
另外,最多只能注册一个Filter-HookDriver。
只有当Filter-Hook回调函数为空时,Filter-HookDriver才能向IPFilterDriver注册自己提供的回调函数,后者调用提供的回调函数来实现Filter-HookDriver控制数据包过滤。
该技术的优点是结构简单,易于实现,且能截获所有的IP数据包(包括ICMP包)。
但无法获取当前应用程序进程信息,也无法取得数据包的以太帧,也不支持Windows2000之前的系统。
本文采用Filter-HookDriver控制数据包过滤,故不支持Windows2000以前的系统。
2.2TCP\IP网络通信协议
TCP\IP协议指因特网整个TCP\IP协议族,而不是表面上的TCP和IP协议的合称。
TCP\IP协议族用于各平台下计算机之间的通信,是当今互联网通信的基础。
与OSI七层参考模型不完全相同,TCP\IP协议族通常被认为是一个四层协议系统。
TCP\IP协议族的四个层次与OSI七层参考模型间的对应关系如图2-1所示:
如上图所示,人们通常(由于对于TCP\IP协议族与OSI七层模型不能精确的匹配,故也没有一个完全正确的说法来说明他们之间的对应关系)认为OSI模型的应用层、表示层和会话层这上三层在TCP\IP协议族中是应用层,而其最底两层在TCP\IP协议族中是链路层。
防火墙系统的过滤驱动模块工作在WindowsTCP\IP协议模型的传输层。
下文将对本文用到的协议做简单介绍。
2.2.1IP网际协议
IP是TCP\IP协议族中最为核心的协议。
所有的TCP、UDP和ICMP数据都以IP数据报格式传输。
IP数据报由IP首部和数据组成。
IP首部一般长度为20Byte,除非包含有选项字段[]。
其首部的固定部分的字段为:
版本(4bit)、首部长度(4bit)、服务类型(8bit)、总长度(16bit)、标识(16bit)、标志(3bit)、片偏移(13bit)、生存时间TTL(8bit)、协议(8bit)、首部检验和(16bit)、源地址(32bit)、目的地址(32bit)。
本文中对数据报的处理时所需注意的主要为版本、服务类型、协议、源地址和目的地址字段。
2.2.2TCP传输控制协议
TCP协议属于运输层,向应用层提供面向连接的,可靠的字节流服务。
TCP数据被封装在IP数据报中,如图2-2所示:
TCP首部包含源端口和目的端口的端口号字段、序号字段、确认序号字段、首部长度字段、检验和字段等。
源端口和目的端口号用于需找发送端和接收端的应用进程,这两个值加上IP首部中的源地址和目的地址可以唯一确定一个TCP链接。
序号用来标识源目端之间的数据字节流。
许多应用程序都使用TCP,如FTP、Telnet和SMTP。
2.2.3UDP用户数据报协议
UDP是一个简单的面向数据的运输层协议。
与TCP协议同属运输层,但与TCP协议不同,它是一种非连接导向协议,不提供可靠性。
UDP首部字段包含源端口号、目的端口号、UDP长度、UDP检验和以及数据(可无)几个字段。
源、目端口号指明发送进程和接收进程;
UDP长度表示UDP首部和UDP数据的字节长度,最小值为8byte。
UDP的检验和可选,其覆盖UDP首部和UDP数据。
2.3内核模式驱动程序开发
内核模式驱动是Windows系统中两种基本驱动程序之一。
设备驱动程序的功能就是Windows操作系统给的一个扩展。
内核模式驱动程序可执行某些受保护的操作,并可访问用户模式驱动程序无法访问的系统结构。
但随着访问权的增加,调试难度和系统损害几率也随之增大。
本个人防火墙的核心Filter-Hook驱动就是内核模式驱动程序,它利用Microsoft在Windows的网络协议层上提供的接口在系统中实现过滤驱动[]。
驱动程序由一系列例程组成,加载驱动或处理I\O请求时就会调用特定的例程。
每个驱动程序都至少实现三个例程:
入口例程(DriverEntry)、卸载例程和打开关闭例程。
驱动编程属于内核编程的范畴,内核开发中会经常的创建、打开和操作内核对象,但内核对象不允许用户直接访问,它是系统提供的用户模式下代码与内核模式下代码进行交互的基本接口[]。
当驱动被加载到内存中时,DriverEntry例程将被调用。
DriverEntry例程负责执行驱动程序初始化工作。
IO管理器为每个加载到内存的驱动程序创建一个驱动程序对象,并将这个对象指针传递给驱动程序,驱动程序就可以在需要的时候调用这个设备对象。
卸载例程负责做清理工作,I\O管理器调用这个例程时,将清除当前驱动创建的设备对象和符号链接名称,以释放资源。
打开关闭例程,当应用程序需要打开或关闭到驱动的句柄时,I\O管理器调用这个例程,以做出相应处理。
一般接收到关闭请求表明设备对象的文件对象句柄已经被释放。
第三章开发工具与环境简介
本章主要介绍本课题的开发环境和所用到的开发工具,平台如题所述,是Windows平台,版本为WindowsXP。
开发工具用到MicrosoftVisualStudio2010,驱动开发工具WDK等,编程语言采用C语言,编程的系统环境为虚拟机下的WindowsXP环境。
另外,由于本文涉及驱动编程,为了避免调试过程中驱动程序错误引起的系统错误等不必要的麻烦,本文所述系统的开发将在VMwareWorkstation虚拟机内的操作系统上完成开发和测试。
3.1MicrosoftVisualStudio2010
MicrosoftVisualStudio2010是微软公司于2010年推出的最新的Windows平台应用程序集成开发环境,是一款非常流行的IDE。
VisualStudio功能强大,可以用以创建Windows应用程序、网络应用程序、网络服务、android应用程序等,里边包含了VisualStudioC++开发工具,可进行C\C++相关程序开发,且引入了MFC库。
该版本做了重大修改并引入了很多新的特性,如对最新的C++标准的支持等。
能切实提高开发人员的开发效率。
3.2C语言简介
C程序设计语言是由DennisRitchie于1973年设计并实现的。
经历标准制定和多次修订(现在最新标准为C99),发展至今,已成为全球使用者最多的程序设计语言之一。
同样著名的C++和Java也由它衍生而来。
C语言是一种通用的程序设计语言,他不受限于操作系统或机器。
C语言是一种低级语言,适合系统编程。
此外,该语言还有高效性、可移植性、功能强大、灵活性、提供标准库等优点[],这也是本文所述系统采用C语言编写的主要原因。
3.3驱动开发工具
本文所要编写的Filter-HookDriver即为一个Windows内核模式驱动,故需要相应的内核开发工具——WDK。
接下来对驱动开发工具和驱动程序的编译执行做简单介绍。
3.3.1WDK内核编程工具
就像应用程序使用开发包SDK一样,内核编程使用“WindowsDriverKit”,简称WDK。
WDK已经自带所有需要的头文件、库、CC++语言及汇编语言的编译器与连接器,所以可以在不安装VisualStudio等SDK的环境下编程。
WDK的获得可通过微软官方网站下载。
WDK是Windows内核开发工具,驱动程序属于内核编程而非应用程序编程,故用WDK编译的驱动程序源文件中不能调用Win32API函数,另外,部分的CRuntime函数也不能使用,编写程序可以参考说明文档,文档中说明的函数都可使用。
3.3.2编译驱动程序源文件
编译器在编译驱动内核驱动程序源文件时把中DriverEntry当做每个内核模块的入口点历程(就是一个函数,相当于普通C源文件中的main函数),在加载这个模块时被系统进程System调用一次。
另外附加说明一点,为了方便驱动被加载后能够被卸载,我们需要在编写程序的时候设置DriverUnload函数指针[]。
WDK在编译工程的时候,必须在工程目录下增加两个文件,以便WDK可以成功的build。
这两个文件分别是makefile和source,且文件名必须如此。
makefile文件几乎都一样,不用更改,如本文所用的makefile文件内容如下:
!
INCLUDE$(NTMAKEENV)\makefile.def
另外一个source文件的内容则关系到这个驱动模块要编译的文件,以及编译出来的.sys文件的名字。
如本文总所用source文件内容实例如下:
TARGETNAME=DrvFltIp
TARGETPATH=obj
TARGETTYPE=DRIVER
SOURCES=DrvFltIp.c
其中TARGETNAME表示编译后得到的文件的名字,如本实例编译后得到的为DrvFltIp.sys;
TARGETPATH表示文件所在路径;
TARGETTYPE表示编译的目标类型;
SOURCES则为所要编译的.c文件(多个文件间用空格分开)。
这样我们在选择相应的系统版本后打开WDK,进入控制台编译环境后就可以进入文件所在目录进行编译了,编译命令为build,编译后的.sys文件保存在文件所在目录下自动生成的文件夹内的子文件夹内。
3.3.3安装运行驱动程序
安装驱动程序的工具有很多,本文采用InstDrv.exe这个软件。
使用方法简单,打开软件,找到.sys文件路径,然后点击所需操作即可完成驱动的安装、卸载、开启和停止。
安装好驱动程序后,就可以通过我们的方式查看它的运行情况。
3.4MFC简介
本文个人防火墙的用户界面采用MFC实现。
微软提供的MFC是放置WindowsAPI的面向对象的包装的C++类库。
是应用程序编程的框架结构。
MFC封装了许多类,其中一些可以