Windows防火墙设计

上传人:ldj****22 文档编号:51939385 上传时间:2018-08-17 格式:PPT 页数:50 大小:1.02MB
返回 下载 相关 举报
Windows防火墙设计_第1页
第1页 / 共50页
Windows防火墙设计_第2页
第2页 / 共50页
Windows防火墙设计_第3页
第3页 / 共50页
Windows防火墙设计_第4页
第4页 / 共50页
Windows防火墙设计_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《Windows防火墙设计》由会员分享,可在线阅读,更多相关《Windows防火墙设计(50页珍藏版)》请在金锄头文库上搜索。

1、Windows防火墙设计教学目的随着网络安全问题日益严重,广大用户对 网络安全产品也越来越关注。防火墙作为 一种网络安全工具,早已普遍应用,成为 广大网络用户的安全保护者。 本课程设计的目的是学习Windows下防 火墙设计技术,并实现一个简单的 Windows下的防火墙软件。教学内容n学习Windows下SPI的数据报过滤原理n读懂一个简单的SPI过滤程序n设计和实现一个简单的Windows应用层 防火墙基础知识n了解Windows API程序的一般结构n掌握Windows下Socket编程n了解Windows下DLL的概念(重要)n了解Windows下访问注册表函数参考书目Windows防

2、火墙与网络封包截获技术电子工业出版社,朱雁辉 Programming Windows程式开发设计指 南 作 者:Charles Petzold Windows 95 程式设计指南作 者:侯捷 WINDOWS网络编程技术MSDN相关资料讲课内容讲课时间4学时,实验16学时nWindows下Hook技术nWindows下报文截获技术nWindows下SPI原理n介绍一个简单的SPI截获程序n课程设计要求开发环境n操作系统为Windows XPn编程工具为VC+ 6.0n提供虚拟机文件,以及例子代 码和相关工具。1.Windows的Hook技术Hook分为两种 Hook消息Windows是消息驱动的

3、运行模式,所以Hook消息可以 进行很多特殊的处理。这里不详细介绍。参见 SetWindowsHookEx函数。(Windows 95 程式设计 指南) Hook函数调用Hook函数调用是指截获特定进程或者系统对某个API函 数的调用,使得API的执行流程转向特定的代码,后者 称为注入代码,注入代码一般保存在注入DLL中。1.Windows的Hook技术Hook函数调用技术n利用Hook消息技术,会自动将注入DLL装入, 修改目标程序的导入表,替换为注入函数。n使用注册表注入DLL,主要是某些特定注册表 项会被Windows自动调用。n使用远程线程注入DLL,利用LoadLibrary伪装 为

4、线程函数,装载注入DLL。n通过覆盖代码进行Hook,即修改一个函数在内 存中的映像,嵌入汇编代码,使该函数一执行 就转跳到注入函数执行,最霸道的方法。1.我们学习的Hook技术比较简单的Hook技术 使用注册表,修改注册表项,安排注入DLL。 在DLL中,利用函数指针来实现Hook。2.Windows应用层报文截获技术1、原始套结字(Raw Socket)。Winsock2以后提供了原始套结字功能,可以在用户态 用Winsock函数接收所有流经Winsock的IP包。这种方 法在MSDN里面有叙述,是MS官方支持的方法,在网 上也有很多资料。但是这种方法只能监听但是不能拦截 数据报,所以可以

5、作为网络监视器的选择技术,但是不 能实现防火墙等更高要求的功能。另外最致命的缺点就 是只能在Winsock层次上进行,而对于网络协议栈中底 层协议的数据包例如TDI无法进行处理。对于一些木马 和病毒来说很容易避开这个层次的监听。2、替换系统自带的WINSOCK动态连接库。这种方法可以 在很多文章里面找到详细的实现细节。 通过替换系统 Winsock库的部分导出函数,实现数据报的监听和拦截 。2.Windows应用层报文截获技术3、Winsock服务提供者(SPI)。SPI是Winsock的另一面 ,是Winsock2的一个新特性。起初的Winsock是围绕 着TCP/IP协议运行的,但是在Wi

6、nsock 2中却增加了对 更多传输协议的支持。Winsock2不仅提供了一个供应 用程序访问网络服务的Windows socket应用程序编程 接口(API),还包含了由传输服务提供者和名字解析 服务提供者实现的Winsock服务提供者接口(SPI)和 ws2_32.dll。4、Windows2000包过滤接口。由于过滤规则限制太多不 灵活而应用不多。5、网络监视器SDK。MS官方的实时监视分析网络数据的 方法。但是由于封装的太复杂使用起来不灵活。2.Windows核心层报文截获技术1、TDI接口2、firewall filter接口5、NDIS接口2.Windows报文截获技术我们重点学习

7、应用层报文截获的第三种方 法,这种方法简单、稳定、可靠、功能也 比较强大。3.Windows SPI原理在Microsoft Windows环境下的 网络编程接口就是Windows套接字 (Windows Socket,简称Winsock )。Winsock提供了包括TCP/IP、 IPX等多种通信协议下的编程接口。 indows98、Windows NT4.0、 Windows 2000则直接支持 Winsock2.0(32位)。 Winsock2.0引入的一个功能就是 允许开发者可以编写自己的服务提供 者接口程序,即SPI程序。SPI以 DLL方式存在,工作在应用层,为上 层程序提供结构函

8、数。3.Windows SPI原理即用户程序是通过WS2_32.dll来调用实际的Winsock 函数,这些函数都由服务提供者来提供。管理者3.Windows SPI原理服务提供者又有两种方式,一种是基础服务提供者(Base Service Provider),另外一种是分层服务提供者(Layer Service Provider)。两者功能相同,但是插入Winsock体系的 方式不同。基础服务者在最底层,而分层服务提供者在一个链式 结构中。3.Windows SPI原理无论那种服务提供者,其信息都保存在注册表的分支: HKEY_LOCAL_MACHINESYSTEMCurrentContro

9、lSet ServicesWinsock2ParametersProtocol_Catalog9C atalog_entries中。3.Windows SPI原理上图中PackedCatalogItem中到底保存的是什么呢?由 于我们可以看到是以REG_BINARY表示二进制方式保存 ,而REG_SZ表示以0结尾的字符串。保存的是一个结构 :typedef struct _WSAPROTOCOL_INFOW DWORD dwServiceFlags1;DWORD dwServiceFlags2;DWORD dwServiceFlags3;DWORD dwServiceFlags4;DWORD

10、dwProviderFlags;GUID ProviderId;DWORD dwCatalogEntryId;WSAPROTOCOLCHAIN ProtocolChain; /这个结构中的域决定是否 LSPint iVersion;int iAddressFamily;int iMaxSockAddr;int iMinSockAddr;int iSocketType;int iProtocol;int iProtocolMaxOffset;int iNetworkByteOrder;int iSecurityScheme;DWORD dwMessageSize;DWORD dwProvider

11、Reserved;WCHAR szProtocolWSAPROTOCOL_LEN+1; WSAPROTOCOL_INFOW, FAR * LPWSAPROTOCOL_INFOW;typedef struct _PACKEDCATALOGITEM Char sSpiPathNameMAX_PATH;WSAPROTOCOL_INFOW ProtocolInfo; PACKETCATALOGITEM;结构中每个字段含义在MSDN中可以找到typedef struct _WSAPROTOCOLCHAIN int ChainLen; /* the length of the chain, */* len

12、gth = 0 means layered protocol, */* length = 1 means base protocol,/* length 1 means protocol chain */DWORD ChainEntriesMAX_PROTOCOL_CHAIN;/* a list of dwCatalogEntryIds */ WSAPROTOCOLCHAIN, FAR * LPWSAPROTOCOLCHAIN;3.Windows SPI原理由于SPI程序可以截获所有通过的报文,所以反倒成为很多木马监视用 户流量或者进行进程保护的地方,例如ccnic就会在此增加一个自己的LSP

13、 。所以反木马软件也有监控该注册表项的功能,图中为一个反木马软件对 注册表项的监控。通过工具DumpSPI也可以查看详细信息。3.Windows SPI原理另外一个监视所有可能自动启动程序的安全工具界面,也 将SPI列为监视对象。3.Windows SPI原理我们重点学习如何设计一个 Windows防火墙,该防火墙替换掉TCP 协议的基础服务提供者,然后运行安全功 能,当安全功能运行完成后,再运行原有 的Winsock功能。对于如何编写一个分层服务提供者, MSDN有例子文档,可以参考,原理接近 。4.介绍一个简单的防火墙程序工程名:MiniSPIn演示效果n实现流程介绍4. IP_Monit

14、er.dll具体代码效果演示:4.介绍一个简单的防火墙程序程序分为两个部分: 1.install程序,为命令行程序,负责修改注 册表,替换掉TCP基础服务提供者的某些 信息,使得WS2_32.dll启动的是注入DLL 。 2.一个DLL即注入DLL,名称为 IP_Moniter.dll完成安全功能,同时遵守 SPI接口。4.介绍一个简单的防火墙程序install程序流程: 1.从命令行中参数判断是安装还是卸载 IP_Moniter.dll 2.如果为安装,调用CInstall类的 InstallPriovider()方法,该方法负责修 改注册表,达到注入新的SPI DLL目的。 3.如果为卸载

15、,调用CInstall类的 RemoveProvider()方法,该方法恢复 原来的注册表。4. CInstall类方法介绍InstallPriovider()流程:nIsInstalled()方法判断是否已经修改注册表,如果已 经生成了新的注册表项: SYSTEMCurrentControlSetServicesWinSock2 MiniSpi就认为已经安装,那么退出。n调用EnumHookKey(FALSE),该方法遍历 SYSTEMCurrentControlSetServicesWinSock2 ParametersProtocol_Catalog9Catalog_Entries下 所

16、有的基础服务提供者,判断是否TCP/IP协议,如果是 ,则替换调注册表中DLL名字为IP_Moniter.dll,并将 原来的DLL名字,保存到 SYSTEMCurrentControlSetServicesWinSock2 MiniSpi下和dwCatalogEntryId对应的值中。4. CInstall类方法介绍RemovePriovider()流程: 基本是InstallProvider的逆过程,负责将原来的基础服务 提供者的DLL名字恢复。注意install程序仅仅修改了注册表,将原基础服务提供者 的DLL指向IP_Moniter.dll,没有完成任何安全功能。4. 效果演示没有Install之前的注册表:4. 效果演示Install之后的注册表:4. IP_Moniter.dll功能IP_Moniter.dll功能: 1.按照要求,输出WSPStartup函数,该函数负责 初试化,该函数也是所有使用Winsock程序首 先调用的程序

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号