首先各位应该清楚的是,作为目前市场上主流的商用防火墙,无论是NETSCREEN还是Checkpoint,就基本的防火墙功能而言两者没有太大的差异也不可能有太大的差异(如果你听相关的厂家鼓吹自己产品的某种基本功能与竞争对手有多么明显的差异,那他必定在糊弄你)所以我们这篇文章不打算浪费时间讨论任何与防火墙的基本功能有关的内容。
1. Checkpoint
在本文的第一部分我们提到过,目前利用操作系统和网络设备本身安全问题入侵和攻击的浪潮已经逐步呈下降趋势,人们越来越将攻击的目标转向高层的应用,关于这一点著名的市场调查研究机构Gartner也有一个调查结论可以参考,如下:
Today over 70% of attacks against a company's network come at the 'Application Layer' not the Network or System layer.
-----Gartner Group
目前越来越多的商用防火墙厂家都在应用层安全这一方面投入力量进行研发,这也是防火墙适应安全市场变化的一个体现,作为业界的翘楚,Checkpoint自然也不会落后,5月份该公司推出的所谓AI(Application Integlligence)就是强化防火墙对应用层安全功能的一个很好的验证。在Checkpoint的文档里,AI主要完成如下功能:确认通信是否遵循相关的协议标准;进行异常协议检测;限制应用程序携带恶意数据的能力;对应用层操作进行控制。AI只是一个概念,在Checkpoint的防火墙产品上,是如何具体体现的呢?
从Yiming能拿到的资料上来看,Checkpoint的AI由两个内容组成:Inspection Module和Security Server。
Inspection Module在part1中我们已经作了说明,它构成Checkpoint firewall的内核,在完成防火墙acl等基本功能以外,它还能对一些高层的应用,主要是HTTP、SMTP、FTP的一些属性进行直接的限制和保护。
来看一个例子理解:Checkpoint的HTTP Worm Catcher,相信大家都留意到,一段日子以来,利用80端口进行网络自动传播的蠕虫非常活跃,因为一般而言,现在互联网上的企业即使安装了防火墙,80端口通常也都是开放的,如果防火墙没有检查数据高层内容的能力(SPF类型),同时被保护的WEB系统又存在有相应的安全漏洞,那么这些攻击数据包会顺利的进入防火墙后被保护的主机,此时,虽然WEB系统是被防火墙保护的,但由于防火墙不具有高层应用的核查能力,无法对80口经由的数据包高层内容进行核查,从蠕虫的角度来看,这个防火墙等同于虚设。
Checkpoint防火墙的HTTP Worm Catcher就是针对这一问题的一个解决方法。该技术的关键在于不仅对数据包使用的端口,数据包的状态进行核查,在需要的时候,还要对数据包的内容进行模式匹配核查。管理员通过SmartDefense配置HTTP Worm Catcher,根据蠕虫的特征来添加蠕虫的特征码(如添加规则匹配.IDA则防火墙将阻挡CodeRed攻击),防火墙根据匹配从而拦截阻断含有对应特征码的网络数据包。
目前最新版本(NG with AI R54)中就应用层安全提供的一些功能:控制最大的URL长度,限制P2P软件的使用,记录web访问的详细日志等等。
由于Inspection Module的特性(工作在内核,靠近底层),因此Inspection Module在实施对高层的数据包的控制时性能比较理想。
Security Server:Security Server 是工作在Inspection Module之上的,它就像一个插件,辅助Inspection Module完成的对所关心的高层数据限制和保护的工作,由于Checkpoint不可能将所有的和高层有关的限制和保护功能都放入到它的内核(Inspection Module)中,由此产生了Security Server这个模块,它和防火墙内核交互,完成一些更加复杂的访问控制和审核任务,在实际的工作中,Security Server像一个代理服务器模块,底层的Inspection Module将数据包交给Security Server处理,Security Server完成相应的工作后,再将处理完毕的数据反馈给Inspection Module。由于是在Inspection Module内核之上的一个插件,Security Server对应用层控制就能够灵活许多,可以对数据实施更多的核查,但也正是因为这个代理的特性,性能上[url=mailto:#@$%]#@$%[/url]了点。
Security Server是个奇怪的名字,本人猜测Checkpoint这么叫可能主要是想掩饰Checkpoint防火墙使用了部分代理模块的特征—这可是性能降低的代名词
从实际情况看来,应用了Security Server也确实会带来性能上的降低,今年3月Network Computing 的一次测试中,Checkpoint的防火墙使用了Security Server后,性能由766Mbps下降到122Mbps,这是非常明显的一个降低。
但是防火墙性能降低的换来的是功能上的增强,很多依靠Inspection Module无法完成的复杂工作,借助于Security Server后就变得可行了,Security Server大大增强了防火墙对高层的控制能力。比如,ftp应用中,可以限制ftp连结中使用的命令,限制传输的的文件路径,和防病毒产品联动实现病毒扫描等等。
要更多的功能还是更快的速度,这是需要防火墙的用户去权衡的问题了。
后台的Inspection Module加Security Server构成了前台展现的Resource和SmartDefense。(用过Checkpoint的人应该知道,这两者都可以在SmartDashborad的界面上看到,其中Resource在SmartDashborad的Manager菜单里,而SmartDefense就在主界面内)。
SmartDefense
SmartDefense是集成在Checkpoint FIREWALL-1中的一个非常重要的模块,通过这个模块,Checkpoint防火墙逐步将对网络攻击的防范手段集中起来,一方面防火墙阻断普通的非授权数据包,另一方面防火墙对照管理员配置的特定的控制规则来搜索授权通过的数据包应用,即使这些数据包从端口以及连结状态上符合防火墙要求,如果数据包的内容不符合某些相应的规则特征,则数据包被认为是具有攻击特性的,被丢弃。
SmartDefense主要防范的内容包括两大类:
提供网络层的网络安全服务,主要用来防范网络层的网络安全事件。比如,对DoS服务的控制和阻断、对ip fragment的控制、SYN攻击的防范、防范IP SPOOF等(具体内容参看SmartDefense,没什么好讲的)。
提供Application Intelligence 这个我们在第一部分提到过,主要用来防范应用层的网络安全事件。比如,对MAIL、HTTP、FTP 、VOIP等控制(具体内容参看SmartDefense)。
可以看到,Checkpoint在不断强化SmartDefense的功能,这也是Checkpoint一个比较有特色的东西,个人理解Checkpoint通过这个模块开始向传统的IDP(入侵防御系统)渗透。
说到这里我们要多说几句,目前入侵防御类产品(IDS,IDP,IPS等等)技术上还存在较多的问题,其中一个比较关键点在于误报漏报太严重。单纯的看尤其是入侵防御系统,误报问题不解决,入侵防御类产品本身将成为网络问题的发生源,SmartDefense本身尽管不被Checkpoint称为IDP,但个人理解实际上这就是Checkpoint的IDP,只不过要注意的是,这是选择性的网络入侵防御(本人造的词汇,可能用英文可以表达为Selective Prevent,缩写为SIDP?^_^ )这其实是一种技术上的折衷,无法阻挡全部可能的攻击?OK,那么阻挡有把握的那些攻击吧。
目前Checkpoint的SmartDefense提供可防御攻击数目是有限的,预测Checkpoint会不断加大这方面的投入,增加这个单子上的AI项目。
此外还要废话一句,列位看官千万不要被Checkpoint的 AI这个词唬住了,这并不是一个非常新的东西,实际上这也就是其他厂家所说的DEEP PACKET INSPECTION,不是Checkpoint的唯一,这方面的工作大家都在做。
Netscreen
说完了Checkpoint该说Netscreen了,Netscreen在应用层控制方面做的中规中矩,基本上所有能够控制的高层的控制都是以services形式预定义好的,防火墙的使用者所能做的就是组合这些应用。与Checkpoint可以为防火墙用户提供比较丰富的控制功能相比,平心而论,Netscreen缺乏太多的可以控制的高层内容,没有特别值得说明的东西。
2. 一些错误说法
在Netscreen和Checkpoint的宣传文档里面,经常可以看见彼此诋毁对手的内容(相比之下,Checkpoint好像做得更狠一些,;)),这些时候,就要看购买者的经验和知识了。
本人看过一些双方的宣传文档,经常会看见一些错误的宣传内容,这主要包括两个方面:
a:炒冷饭
这就是说厂商拿过时的概念来做比较,
比如Checkpoint公司自己出的一篇名为”Why all Stateful Firewalls are not Created Equal”文中指出“Netscreen’s implementation of Stateful Inspection is also incomplete. Netscreen firewall devices are unable to reassemble fragmented TCP packets on all applications before enforcing the ecurity policy.“
这是Checkpoint公司2002年的一份文档,指出Netscreen不能处理tcp fragment,当时版本的Netscreen screenOS的情况确实是这样的,但是不要忘记,Netscreen的4.0.1的版本中,这个问题其实已经解决了。
现在的Netscreen产品操作系统基本上都在4.0.1以上了。但可惜本人在Checkpoint在国内一家很大的代理商非常新的一个宣传资料里面还看到这条内容被当作宝贝堂而皇之的被陈列出来—要么是写这个宣传资料的人根本不懂,要么是明知道Netscreen已经解决这个问题了还在装—我猜测前者的可能性更大一些~~ ;)
b:根本的欺骗
这种花样就很多了,
比如如下内容:
“性价比:在一台4000美元的机架式PC服务器上,Check Point可以提供4Gbps防火墙和2Gbps VPN性能的解决方案。“ 动动脑子吧,大哥!
又如
“是否支持windows:Checkpoint是;Netscreen 否“ 天啊,有点厚颜无耻吧!
3:评测,评测!
对绝大多数用户而言,毕竟作为使用者对防火墙产品不可能非常熟悉,这些时候,可能就会依赖一些权威的评测报告了,国内外目前搞评测的很多,但平心而论,很多评测根本就是糊弄人,而且可悲的是,可能这些评测的机构自己都不知道自己在误人子弟-因为他们采用的评测方法根本就是不科学的,这样后即使后面的工作再努力认真,结果都没有什么意义。
这包括很多方面,比如目前比较流行使用发包工具(比如说利用SMARTBIT)制造流量来测试防火墙设备这个问题,SMARTBITS等发包工具主要是测试底层设备,一般是网络层及以下设备,这些设备不需要分析高层内容,所以他们的测试很有意义,但是对越来越走DEEP PACKET INSPECTION路线的防火墙而言,我们可以考虑一下,到底有什么意义:
对于SMARTBITS单纯的狂发某种包(比如SYN包),这些数据包超时后应该被防火墙直接丢弃无需后续的分析。此外,由于防火墙可能要同时需要维护瞬间据多的SESSION表,很可能会导致防火墙拒绝服务。
对于SMARTBITS非单纯的发包,而是起SESSION的(尤其是起很少的SESSION ,比如一个测试起两个SESSION),很可能会把防火墙搞死,这是因为一个SESSION包含着成百上千兆的数据量,又一直没有FIN,防火墙的状态表很快就会溢出的。
又比如很多评测机构选择评测对象的方法,评测的结果是完全建立在不公平的起点或者是有问题的测试设计上的。这个我们可以看Checkpoint官方网站上的一个例子,在该文中赫然有一篇Tolly Group发布防火墙性能测试报告,在这个评测里面选取的对象是Check Point VPN-1 Pro、Cisco Pix 535和Netscreen 500 三家产品,方法是在防火墙设置单条访问控制规则,然后用SMARTBIT作为平台发包测试。结论当然是必然的:在这次测试中,Check Point 再一次展示了在 FireWall 和 VPN 性能方面的实力,各方面性能都超过了竞争对手。
Tolly Group的名头不小,看起来测试也都很公正,但是我们用点脑子就会发现有些问题:
首先是一个非常不公正的评测对手选型问题,在这个测试里面cisco的旗舰产品pix 535的选择还比较公正,而Netscreen的选择就不对了,Netscreen500系列的防火墙标称也就是几十万级别的并发session数,而Checkpoint的该款产品可是百万级的并发session数,两者的处理等级就不在一个水平上,结果怎么可能公正?自行车拼死了也不可能跑过赛车。如果测试,应该是Checkpoint -1 pro VS Netscreen 5000(而非500)VS pix 535
其次还有评测手法失误:就是评测的时候在防火墙上仅仅设置单个访问控制规则(single-rule)然后发包,这样非常不合理,很多基于软件的防火墙,处理复杂的规则,以及处理1条和1000条访问控制规则的时候效率可差别太远太远了,同时这样做把Netscreen基于ASIC的优势完全瓦解。
虽然木马程序千变万化,但正如一位木马组织的负责人所讲,大多数木马程序没有特别的功能,入侵的手法也差不多,只是以前有关木马程序的重复,只是改了个名而已,现在他们都要讲究效率,据说他们要杜绝重复开发,浪费资源。当然我们也只能讲讲以前的一些通用入侵手法,因为我们毕竟不是木马的开发者,不可能有先知先觉。
1、在win.ini文件中加载
一般在win.ini文件中的[windwos]段中有如下加载项:
run= load= ,一般此两项为空,如图1所示。
图1
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmousewheel="return imgzoom(this);">
如果你发现你的系统中的此两项加载了任何可疑的程序时,应特别当心,这时可根据其提供的源文件路径和功能进一步检查。我们知道这两项分别是用来当系统启动时自动运行和加载程序的,如果木马程序加载到这两个子项中之后,那么当你的系统启动后即可自动运行或加载了。当然也有可能你的系统之中确是需要加载某一程序,但你要知道这更是木马利用的好机会,它往往会在现有加载的程序文件名之后再加一个它自己的文件名或者参数,这个文件名也往往用你常见的文件,如command.exe、sys.com等来伪装。
2、在System.ini文件中加载
我们知道在系统信息文件system.ini中也有一个启动加载项,那就是在[BOOT]子项中的“Shell”项,如图2所示。
图2
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmousewheel="return imgzoom(this);">
在这里木马最惯用的伎俩就是把本应是“Explorer”变成它自己的程序名,名称伪装成几乎与原来的一样,只需稍稍改"Explorer”的字母“l”改为数字“1”,或者把其中的“o”改为数字“0”,这些改变如果不仔细留意是很难被人发现的,这就是我们前面所讲的欺骗性。当然也有的木马不是这样做的,而是直接把“Explorer”改为别的什么名字,因为他知道还是有很多朋友不知道这里就一定是“Explorer”,或者在“Explorer”加上点什么东东,加上的那些东东肯定就是木马程序了。
3、修改注册表
如果经常研究注册表的朋友一定知道,在注册表中我们也可以设置一些启动加载项目的,编制木马程序的高手们当然不会放过这样的机会的,况且他们知道注册表中更安全,因为会看注册表的人更少。事实上,只要是”Run\Run-\RunOnce\RunOnceEx\ RunServices \RunServices-\RunServicesOnce 等都是木马程序加载的入口,如[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Run或\RunOnce],如图3所示;
图3
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmousewheel="return imgzoom(this);">
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run或Run-或RunOnce或RunOnceEx或RunServices或RunServices-或RunServicesOnce],如图4所示。
图4
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmousewheel="return imgzoom(this);">
你只要按照其指定的源文件路径一路查过去,并具体研究一下它在你系统这中的作用就不难发现这些键值的作用了,不过同样要注意木马的欺骗性,它可是最善于伪装自己呵!同时还要仔细观察一下在这些键值项中是否有类似netspy.exe、空格、.exe或其它可疑的文件名,如有则立即删除。
4、修改文件打开关联
木马程序发展到了今天,他们发现以上的那些老招式不灵了,为了更加隐蔽自己,他们所采用隐蔽的手段也是越来越高明了(不过这也是万物的生存之道,你说呢?),它们采用修改文件打开关联来达到加载的目的,当你打开了一个已修改了打开关联的文件时,木马也就开始了它的运作,如冰河木马就是利用文本文件(.txt)这个最常见,但又最不引人注目的文件格式关联来加载自己,当有人打开文本文件时就自动加载了冰河木马。
修改关联的途经还是选择了注册表的修改,它主要选择的是文件格式中的“打开”、“编辑”、“打印”项目,如冰河木马修改的对象如图5所示,
图5
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmousewheel="return imgzoom(this);">
如果感染了冰河木马病毒则在[HKEY_CLASSES_ROOT\txtfile\shell\open\command]中的键值不是“c:\windows\notepad.exe %1”,而是改为“sysexplr.exe %1”。
以上所介绍的几种木马入侵方式,如果发现了我们当然是立即对其删除,并要立即与网络断开,切断黑客通讯的途径,在以上各种途径中查找,如果是在注册表发现的,则要利用注册表的查找功能全部查找一篇,清除所有的木马隐藏的窝点,做到彻底清除。如果作了注册表备份,最好全部删除注册表后再导入原来的备份注册表。
在清除木马前一定要注意,如果木马正在运行,则你无法删除其程序,这时你可以重启动到DOS方式然后将其删除。有的木马会自动检查其在注册表中的自启动项,如果你是在木马处于活动时删除该项的话它能自动恢复,这时你可以重启到DOS下将其程序删除后再进入Win9x下将其注册表中的自启动项删除。
分布式攻击的危害很大,因此,研究阻止和击败此类攻击的解决方法是目前信息安全领域面临的一个重要课题。本文着眼于一般性的分布式攻击。目的在于提供一种简单易行、费用较低的解决方案。
容易实现而又适当的防护措施有很多。首先要做的是尽可能去掉不必要地通过防火墙的传输,所有的公开方式,比如Web、FTP和邮件服务器应该放置在分离的网络中,所有因特网联接方式都不应该有编译器。
要确定管理通道和端口都被关闭,或是安全的。为保证计算机的安全,可以按这样的顺序保护它们:防火墙、DMZ中的公开部位、内部服务、工作站。
也可以通过新补丁和调整来减少攻击的潜在目标和发起点。
1.ICMP防护措施
ICMP最初开发出来是为了“帮助”网络,经常被广域网管理员用作诊断工具。但今天各种各样的不充分的ICMP被滥用,没有遵守RFC 792原先制订的标准,要执行一定的策略可以让它变得安全一些。
入站的ICMP时间标记(Timestamp)和信息请求(Information Request)数据包会得到响应,带有非法或坏参数的伪造数据包也能产生ICMP参数问题数据包,从而允许另外一种形式的主机搜寻。这仍使得站点没有得到适当保护。
以秘密形式从主方到客户方发布命令的一种通用方法,就是使用ICMP Echo应答数据包作为载波。 回声应答本身不能回答,一般不会被防火墙阻塞。
首先,我们必须根据出站和入站处理整个的“ICMP限制”问题。ICMP回声很容易验证远程机器,但出站的ICMP回声应该被限制只支持个人或单个服务器/ICMP代理(首选)。
如果我们限制ICMP回声到一个外部IP地址(通过代理),则我们的ICMP回声应答只能进入我们网络中预先定义的主机。
重定向通常可以在路由器之间找到,而不是在主机之间。防火墙规则应该加以调整,使得这些类型的ICMP只被允许在需要信息的网际连接所涉及的路由器之间进行。
建议所有对外的传输都经过代理,对内的ICMP传输回到代理地址的时候要经过防火墙。这至少限制了ICMP超时数据包进入一个内部地址,但它可能阻塞超时数据包。
当ICMP数据包以不正确的参数发送时,会导致数据包被丢弃,这时就会发出ICMP参数出错数据包。主机或路由器丢弃发送的数据包,并向发送者回送参数ICMP出错数据包,指出坏的参数。
总的来说,只有公开地址的服务器(比如Web、电子邮件和FTP服务器)、防火墙、联入因特网的路由器有真正的理由使用ICMP与外面的世界对话。如果调整适当,实际上所有使用进站和出站ICMP的隐密通讯通道都会被中止。
2. 关于主机的建议
所有对因特网提供公开服务的主机都应该加以限制。下面建议的策略可以保护暴露在因特网上的主机。
将所有公开服务器与DMZ隔离
提供的每种服务都应该有自己的服务器。
如果使用Linux(建议这样做),你就可以使用一个或几个“缓冲溢出/堆栈执行”补丁或增强来防止绝大多数(如果不能全部)本地或远程缓冲溢出,以避免这些溢出危及根的安全。强烈建议将Solar Designer的补丁包括在附加的安全特征中。
使用SRP(Secure Remote Password 安全远程口令)代替SSH。
限制只有内部地址才能访问支持SRP的telnet和FTP守护程序,强调只有支持SRP的客户端才可以与这些程序对话。如果你必须为公开访问运行常规的FTP(比如匿名FTP),可以在另一个端口运行SRP FTP。
使用可信任的路径。根用户拥有的二进制执行程序应该放置的目录的所有权应该是根,不能让全部用户或组都有写权限。如果有必要的话,为了强制这样做,你可以改变内核。
使用内置防火墙功能。通过打开防火墙规则,可以经常利用内核状态表。
使用一些防端口扫描措施。这可以使用Linux的后台程序功能或通过修改内核实现。
使用Tripwire 和相同作用的软件来帮助发觉对重要文件的修改。
3.有关入侵检测系统的建议
由于许多用来击败基于网络的入侵检测系统的方法对绝大多数商业入侵检测系统产品仍然是有效的,因此建议入侵检测系统应该至少有能重组或发觉碎片的自寻址数据包。
下面是部分要注意的事项:
确信包括了现有的所有规则,包括一些针对分布式拒绝服务攻击的新规则。
如果遵循了ICMP建议项,许多ICMP会被阻塞,入侵检测系统触发器存在许多机会。任何通常情况下要被阻塞的入站或出站的ICMP数据包可以被触发。
“任何”被你用防火墙分离的网络传输都可能是一个潜在的IDS触发器。
如果你的入侵检测系统支持探测长时间周期的攻击,确信没有把允许通过防火墙的被信任主机排除在外。这也包括虚拟专用网。
如果你能训练每个使用ping的用户在ping主机时使用小数据包,就可能设置入侵检测系统寻找超29字节的Echo和Echo应答数据包。
总结
本文通过加强主机安全、限制不良基础的通讯通道、调整防火墙和入侵检测系统的规则等防护措施,将可以有效地对付分布式攻击,这里描述的绝大多数网络攻击(不论是实际上还是理论上的)都能够被抑制。执行以上所述的这些防护建议,不仅可以防止多种分布式攻击,而且可以大大增强多方面的安全。
__________________________________
rootkit?!?
半开放式扫瞄原理
作者: Bernardus160
********************************************************************************
视图:
-------|---------------->;(Request)|
客户端 |;|服务器端
Client |
一般的TCP的三次握手连接程序(communication three way handshake)是:
Client--------Syn------->;Server
Client
Client-------Ack-------->;Server
从而达成通讯连接程序(communication connection proces)。
半开放式连接(handshake cheating connection)
Client--------Syn------->;Server
Client
Client----->;\\延迟回应---Server
Client-connected--?
Client--------RST------->;Server
这时client和server已连接上,而server不知道client的准确身份,从而client达到隐瞒身份而与server接通的效果。这样 Server logging 就没有对client的正确性的记录,在这种情况下扫瞄时被发现的机会就大大减少了。
关键: Client------->;\\延迟回应------Server 的意义在Client不给Server及时回答Ack=Acknowledgment, Server就不知道Client的确实的回答与真正身份,但 Client 在
Client
半开放式的扫瞄器就应用这种原理达到隐瞒身份而与server接通的效果。但这种作法不太可靠。因为有监视性能较好的Server发现Client不正确地完成通讯三次握手程序(Three way handshake procedure),就会把连接裁断。
有较多较好的扫瞄器就是应用这种原理的进行扫瞄的。当然如果Server装备有IDS或其它监听设备或性能,那Client还是会被发现的。这是猫和鼠的斗争,强者为王!!!!
Bernardus160 于荷兰 2001-12-07
__________________________________
To be the happy children of the mother nature,
To be The Best among the best.
1、1拒绝服务攻击原理
DOS是指这样一种攻击手段:攻击者在一定时间内发送大量的服务请求来“轰炸”目的主机或其它网络设备,使其不能提供正常的服务。这种方式类似于某人通过不停拨打某个公司的电话来阻止其它电话打进,从而导致公司通信瘫痪。
硬件DoS攻击的方法同那些普通的攻击方法差别不大。事实上,在很多情况下,同一个DoS攻击既能破坏软件又能破坏硬件。下面是一些例子:
1.攻击者从假造的,并不存在的IP地址发出连接请求。因为接收方不能解析这些地址,任务将被挂起。(它使一个单个服务或端口或整个接收单元失效)
2.攻击者占用了每个可用的任务(SESSIONS),以此阻止你到达远程的路由。如果你的服务器提供关键的服务,这将迫使你在工作日的早上早起,驾车去办公室,并且重新设置硬件。
3.攻击者在例行注册时造成溢出,使得系统崩溃或重新启动。你可能又得被迫去重起你的硬件。
4.攻击者给接收单元灌输大量的错误的或是特殊结构的数据包。由于接收单元不能正确处理这些包而锁定。
1、2常见拒绝服务攻击
一般而言,存在着三种形式的DOS,
1. 针对于硬件(网络设备,路由器,交换机)的DOS。
2. 针对于网络层(IP协议)核心实现的DOS。
3. 针对于应用层(浏览器,Web服务器,Mail)的DOS。
最常见的是第二种。这种攻击方式多数是发送畸形的数据包,导致目的设备或主机无法处理而挂起。程序代码并不长,也不复杂,但要求作者对于系统核心,对网络协议有深入的了解。
第一个著名的DOS攻击是Morris病毒,此程序不断的自我繁殖,不断地消耗系统资源,直至系统崩溃。比较著名的DOS攻击手段还有很多,这里列举一些:
1. teardrop.c,向目的主机改造过的IP数据包,IP报头中长度为负值。多数操作系统只检查数据包是否超过了最大长度,并不检查数据包是否太小。当数据包分组重组完毕,由于数据包长度按无符号整数处理,系统将试图靠拷贝极长的数据包。此时系统可能会崩溃或重起。
2. sesquipedalian.c,发送一系列IP分组,其第一个IP分组的长度为零。
3. nestea.c,发送过大的IP分组。
4. pingofdeath,发送过长的ICMP数据包。win95下ping -l65510 yourtarget。
5. smurf.c,它的原理是:发出伪装的ICMP数据包,目的地址设为某个网络的广播地址,源地址设为要攻击的目的主机。所有接收到此ICMP数据包的主机都将对向要攻击的目的主机发出一个回应。这样被攻击主机将在某一段时间内收到成千上万的数据包。简单提一下解决方法:网络管理员必须在防火墙出口设置这样一条规则,禁止所有的目的地址为广播地址的ICMP数据包通过。
2、DDOS攻击
2、1从DoS到DDoS
---- 拒绝服务(Denial of Service,DoS)由来已久。自从有了Internet,就有了拒绝服务式攻击方法。由于过去没有大型网站或机构受到过这种攻击,其劣性并不突出。直到2000年初,Yahoo!、eBay及Amazon等遭其暗算,它才露出庐山真面目。
---- 在典型的Internet连接中,用户访问一个网站时,客户端会先向网站服务器发送一条信息要求建立连接,只有当服务器确认该请求合法,并将访问许可返回给用户时,用户才可对该服务器进行访问。DoS攻击的方法是,恶意用户会向服务器发送多个连接请求,使其呈满负载状态,并且将所有请求的返回地址进行伪造。这样,在服务器企图将认证结构返回给用户时,它将无法找到这些用户。此时,服务器只好等待,有时可能会等上1分钟才关闭此连接。可怕的是,在服务器关闭连接后,攻击者又会发送新的一批虚假请求,重复上一次过程,直到服务器因过载而拒绝提供服务。这些攻击事件并没有入侵网站,也没有篡改或是破坏资料,只是利用程序在瞬间产生大量的网络封包,让对方的网络及主机瘫痪,使正常使用者无法获得主机及时的服务。
---- 然而,年初攻击Yahoo!的元凶还不是简单的DoS,虽然与DoS攻击一样,也是向被攻击目标连续发送大量伪造的IP包,以导致服务器不能为合法用户提供正常服务(比如此次给Yahoo!站点路由器发出的无效请求高达1GB/s),但是它区别于DoS的“绝妙”之处在于: 动员了大量“无辜”的计算机向目标共同发起进攻,采用了分布式拒绝服务(Distributed Denial of Service,DDoS)攻击手段。
---- DDoS把DoS又向前发展了一步,DDoS的行为更为自动化,它可以方便地协调从多台计算机上启动的进程,让一股DoS洪流冲击网络,并使网络因过载而崩溃。确切地讲,DDoS攻击是指在不同的高带宽主机上安装大量的DoS服务程序,它们等待来自中央客户端的命令,中央客户端随后通知全体受控服务程序,并批示它们对一个特定目标发送尽可能多的网络访问请求。作为攻击者,必须通过telnet连接到他想利用的每一台远程主机上,并以用户身份登录,然后手工输入命令,启动每一台主机向攻击目标发送海量信息流(如附图所示)。
---- DDoS与DoS的最大区别是人多力量大。原来的DoS是一台机器攻击目标,现在的DDoS是很多台机器利用他们的高带宽攻击目标,更容易将目标网站攻掉。除此之外,DDoS攻击方式较为自动化,攻击者可以把他的程序安装到网络中的多台机器上,所采用的攻击工具致使被攻击对象难以察觉,只要攻击者发下攻击命令,这些机器便发起进攻。
2、2常见DDoS的攻击方法
---- 目前,我们知道的对网络进行DDoS攻击所使用的工具有:Trinoo、Tribe Flood Network(TFN)、TFN2k和Stacheldraht等。它们的攻击思路基本相近。
---- 1. Trinoo: 它是基于UDP flood的攻击软件,它向被攻击目标主机的随机端口发出全零的4字节UDP包,在处理这些超出其处理能力垃圾数据包的过程中,被攻击主机的网络性能不断下降,直到不能提供正常服务,乃至崩溃。它对IP地址不做假,此攻击方法用得不多。
---- 2. TFN:它是利用ICMP给代理服务器下命令,其来源可以做假。它可以发动SYN flood、UDP flood、ICMP flood及Smurf(利用多台服务器发出海量数据包,实施DoS攻击)等攻击。TFN的升级版TFN2k的特点是:对命令数据包加密、更难查询命令内容、命令来源可以做假,还有一个后门控制代理服务器。
---- 3. Stacheldraht:对命令来源做假,而且可以防范一些路由器用RFC2267过滤。若检查出有过滤现象,它将只做假IP地址最后8位,从而让用户无法了解到底是哪几个网段的哪台机器被攻击。此外,它还具有自动更新功能,可随软件的更新而自动更新。
---- 值得一提的是,像Trinoo和TFN等攻击软件都是可以从网上随意找到的公开软件,所以任何一个上网者都可能构成网络安全的潜在威胁。面对凶多吉少的DDoS险滩,我们该如何对付随时出现的黑客攻击呢?杨宁先生说,那要看用户处于何种状态,是正身处被攻击的困围中,还是准备事先预防。
3、DOS/DDOS的防范
3、1DOS/DDOS攻击检测和处理方法
I、配置IDS系统
许多人或工具在监测分布式拒绝服务攻击时常犯的错误是只搜索那些DoS/DDoS工具的缺省特征字符串、缺省端口、缺省口令等。要建立网络入侵监测系统(NIDS)利用这些工具的监测规则,人们可以着重观察分析DDoS网络通讯的普遍特征,不管是明显的,还是模糊的。
DoS/DDoS工具产生的网络通讯信息有两种:控制信息通讯(在DoS/DDoS客户端与服务器端之间)和攻击时的网络通讯(在DoS/DDoS服务器端与目标主机之间)。
根据以下异常现象在网络入侵监测系统建立相应规则,能够较准确地监测出DoS/DDoS攻击。
异常现象0:虽然这不是真正的"DDoS"通讯,但却能够用来确定DDoS攻击的来源。根据分析,攻击者在进行DDoS攻击前总要解析目标的主机名。BIND域名服务器能够记录这些请求。由于每台攻击服务器在进行一个攻击前会发出PTR反向查询请求,也就是说在DDoS攻击前域名服务器会接收到大量的反向解析目标IP主机名的PTR查询请求。
异常现象1:当DDoS攻击一个站点时,会出现明显超出该网络正常工作时的极限通讯流量的现象。现在的技术能够分别对不同的源地址计算出对应的极限值。当明显超出此极限值时就表明存在DDoS攻击的通讯。因此可以在主干路由器端建立ACL访问控制规则以监测和过滤这些通讯。
异常现象2:特大型的ICMP和UDP数据包。正常的UDP会话一般都使用小的UDP包,通常有效数据内容不超过10字节。正常的ICMP消息也不会超过64到128字节。那些大小明显大得多的数据包很有可能就是控制信息通讯用的,主要含有加密后的目标地址和一些命令选项。一旦捕获到(没有经过伪造的)控制信息通讯,DDoS服务器的位置就无所遁形了,因为控制信息通讯数据包的目标地址是没有伪造的。
异常现象3:不属于正常连接通讯的TCP和UDP数据包。最隐蔽的DDoS工具随机使用多种通讯协议(包括基于连接的协议)通过基于无连接通道发送数据。优秀的防火墙和路由规则能够发现这些数据包。另外,那些连接到高于1024而且不属于常用网络服务的目标端口的数据包也是非常值得怀疑的。
异常现象4:数据段内容只包含文字和数字字符(例如,没有空格、标点和控制字符)的数据包。这往往是数据经过BASE64编码后而只会含有base64字符集字符的特征。TFN2K发送的控制信息数据包就是这种类型的数据包。TFN2K(及其变种)的特征模式是在数据段中有一串A字符(AAA……),这是经过调整数据段大小和加密算法后的结果。如果没有使用BASE64编码,对于使用了加密算法数据包,这个连续的字符就是“\0”。
异常现象5:数据段内容只包含二进制和high-bit字符的数据包。虽然此时可能在传输二进制文件,但如果这些数据包不属于正常有效的通讯时,可以怀疑正在传输的是没有被BASE64编码但经过加密的控制信息通讯数据包。(如果实施这种规则,必须将20、21、80等端口上的传输排除在外。)
II、避免FUD
FUD代表恐惧,无常以及多疑(fear, uncertainty, and doubt)。DoS/DdoS并非完全不可抵挡。综合采用多种技术手段,是可以解决这一问题的,至少可以缓解。
III、与上级网管配合处理
---- 首先,检查攻击来源,通常黑客会通过很多假的IP地址发起攻击,此时,用户若能够分辨出哪些是真IP地址,哪些是假IP地址,然后了解这些IP来自哪些网段,再找网段管理员把机器关掉,即可消除攻击。
---- 其次,找出攻击者所经过的路由,把攻击屏蔽掉。比如黑客发射SNP包,用户可把此包过滤掉。若黑客从某些端口发动攻击,用户可把这些端口屏蔽掉,以狙击入侵。
---- 在路由器上滤掉ICMP(Internet Control Message Protocol)和UDP。ICMP用于提交错误和改变控制信息,常用来判断网络的连通性。
各级网管相互配合立即采取一切需要的技术手段阻断与攻击发起点的网络的连接。
3、2事先预防攻击
I、技术手段
---- 1. 用足够的机器承受黑客攻击。这是一种较为理想的应对策略。如果用户拥有足够的容量和足够的资源给黑客攻击,在它不断访问用户、夺取用户资源之时,自己的能量也在逐渐耗失,或许未等用户被攻死,黑客已无力支招儿。
---- 2. 充分利用网络设备保护网络资源,优化网络结构和路由策略。
一个较为庞大的网络,我方将对您的路由器进行合理设置以使您遭受各类拒绝服务攻击(DoS/DDoS)的可能性最小化,例如,为了防止SYN flooding攻击,您可以在路由器上设定TCP侦听功能,应当过滤所有的您不需要的UDP和ICMP包信息---3. 使用Inexpress、Express Forwarding过滤不必要的服务和端口,即在路由器上过滤假IP。比如Cisco公司的CEF(Cisco Express Forwarding)可以针对封包 Source IP 和 Routing Table 做比较,并加以过滤。
---- 3. 使用Unicast Reverse Path Forwarding检查访问者的来源。它通过反向路由表查询的方法检查访问者的IP地址是否是真,如果是假的,它将予以屏蔽。许多黑客攻击常采用假IP地址方式迷惑用户,很难查出它来自何处,因此,利用Unicast Reverse Path Forwarding可减少假IP地址的出现,有助于提高网络安全性。
---- 4 过滤所有RFC1918 IP地址。RFC1918 IP地址是内部网的IP地址,像10.0.0.0、192.168.0.0和172.16.0.0,它们不是某个网段的固定IP地址,而是Internet内部保留的区域性IP地址,应该把它们过滤掉。
---- 5. 限制SYN/ICMP流量。用户应在路由器上配置CAR/TCP拦截控制SYN/ICMP的最大流量来限制 SYN/ICMP 封包所能占有的最高频宽,这样,当出现大量的超过所限定的SYN/ICMP流量时,说明不是正常的网络访问,而是有黑客入侵。
6、选择一款优秀的防黑安全产品。即配备监测工具,不断提高对系统的认识。无论是从网上下载公开源代码的监测工具,还是购买网络监测工具,都要实时监测别人是否在扫描自己的端口。若有人扫描端口,意味着有人可能要攻击此网络。
7、配备网络安全评估工具,定期对网络漏洞、密码强度进行安全评估,从而采取修复措施,不被黑客利用。
8、留有备份链路、备份设备和带宽
备用设备是网络遭到各类拒绝服务攻击(DoS/DDoS)的对抗平台。
首先要将备用DNS部署到其他省网,或全国骨干网上。
可能是瓶颈的链路,要留有在紧急时可以马上启用的备用链路。
留有备用的服务器设备,在服务器系统负载过高时,可以应急增容。
9、优化服务主机的操作系统、应用服务和数据库系统。
不仅仅对于网络设备,对潜在的有可能遭受攻击的主机也要同样进行优化设置保护。在服务器上禁止一切不必要的服务,此外,如果使用分布式系统的话也会给攻击者带来相当大的麻烦。建议将应用分布在多个不同的物理主机上,这样每一台主机只包含了应用系统的一部分,防止了服务在遭受攻击时全部瘫痪。
II、管理手段
---- 1. 一个企业必须有专人负责其网络安全,至少有一个人全权进行系统安全维护,他应该对企业网络中的所有机器进行检查,以减少漏洞。
---- 2. 作为专门负责网络安全的管理员,必须对攻击方法了如指掌,换句话说,他要了解黑客是怎么工作的,只有这样,他才能保护好自己的机器。甚至负责人可在局域网中模仿黑客,“入侵”自己的系统,以发现网络漏洞,及时补漏。
---- 3. 网络安全管理员应该尽职尽责,仔细认真。在已发生的黑客攻击中,相当一部分事件是因为管理员工作疏忽造成的。
---- 4. 严格控制密码,提高密码保险性。在网络中,有些密码设置得较易被破获,因此应尽量减少知道密码的人数,分别给不同的人设定不同的使用权限。
5、时刻注意各个系统的运转,清楚的明白您的系统和应用软件是如何正常运做的以及它们的原理,记录,回顾经常采取的安全措施以及系统配置。时刻检查著名的安全网站时刻关心最新揭露的安全漏洞,并注意他们是否将来会在您的系统中发生。
__________________________________
人间五十年,
与天相比,
不过渺小一物看世事,
梦幻似水任人生一度,
入灭随即当前此即为菩提之种,
懊恼之情,满怀于心胸。
汝此刻即上京都,
若见敦盛卿之首级……
IIS(Internet Information Server)作为当今流行的Web服务器之一,提供了强大的Internet和Intranet服务功能。如何加强IIS的安全机制,建立高安全性能的可靠的Web服务器,已成为网络管理的重要组成部分。
以Windows NT的安全机制为基础
1.应用NTFS文件系
统
NTFS文件系统可以对文件和目录进行管理,FAT文件系统则只能提供共享级的安全,而Windows NT的安全机制是建立在NTFS文件系统之上的,所以在安装Windows NT时最好使用NTFS文件系统,否则将无法建立NT的安全机制。
2.共享权限的修改
在系统默认情况下,每建立一个新的共享,Everyone用户就享有“完全控制”的共享权限,因此,在建立新的共享后应该立即修改Everyone的缺省权限。
3.为系统管理员账号更名
域用户管理器虽可限制猜测口令的次数,但对系统管理员账号(adminstrator)却无法限制,这就可能给非法用户攻击管理员账号口令带来机会,通过域用户管理器对管理员账号更名不失为一种好办法。具体设置方法如下:
选择“开始”选单→“程序”→启动“域用户管理器”→选中“管理员账号(adminstrator)”→选择“用户”选单→“重命名”,对其进行修改。
4.取消TCP/IP上的NetBIOS绑定
NT系统管理员可以通过构造目标站NetBIOS名与其IP地址之间的映像,对Internet或Intranet上的其他服务器进行管理,但非法用户也可从中找到可乘之机。如果这种远程管理不是必须的,就应该立即取消(通过网络属性的绑定选项,取消NetBIOS与TCP/IP之间的绑定)。
设置IIS的安全机制
1.安装时应注意的安全问题
1)避免安装在主域控制器上
安装IIS之后,在安装的计算机上将生成IUSR_Computername匿名账户。该账户被添加到域用户组中,从而把应用于域用户组的访问权限提供给访问Web服务器的每个匿名用户,这不仅给IIS带来潜在危险,而且还可能威胁整个域资源的安全。所以要尽可能避免把IIS服务器安装在域控制器上,尤其是主域控制器上。
2)避免安装在系统分区上
把IIS安装在系统分区上,会使系统文件与IIS同样面临非法访问,容易使非法用户侵入系统分区,所以应该避免将IIS服务器安装在系统分区上。
2.用户的安全性
1)匿名用户访问权限的控制
安装IIS后产生的匿名用户IUSR_Computername(密码随机产生),其匿名访问给Web服务器带来潜在的安全性问题,应对其权限加以控制。如无匿名访问需要,则可以取消Web的匿名访问服务。具体方法:
选择“开始”选单→“程序”→“Microsoft Internet Server(公用) ”→“Internet服务管理器” →启动Microsoft Internet Service Manager→ 双击“WWW”启动WWW服务属性页→取消其匿名访问服务。
2)控制一般用户访问权限
可以通过使用数字与字母(包括大小写)结合的口令,使用长口令(一般应在6位以上),经常修改密码,封锁失败的登录尝试以及设定账户的有效期等方法对一般用户账户进行管理。
3.IIS三种形式认证的安全性
1)匿名用户访问:允许任何人匿名访问,在这三种中安全性最低。
2)基本(Basic)认证:用户名和口令以明文方式在网络上传输,安全性能一般。
3)Windows NT请求/响应方式:浏览器通过加密方式与IIS服务器进行交流,有效地防止了窃听者,是安全性比较高的认证形式(需IE 3.0以上版本支持)。
4.访问权限控制
1)设置文件夹和文件的访问权限:安放在NTFS文件系统上的文件夹和文件,一方面要对其权限加以控制,对不同的组和用户设置不同的权限;另外,还可以利用NTFS的审核功能对某些特定组的成员读、写文件等方面进行审核,通过监视“文件访问”、“用户对象的使用”等动作,来有效地发现非法用户进行非法活动的前兆,及时加以预防和制止。具体方法:
选择“开始”选单→“程序”→启动“域用户管理器” →选择“规则”选项卡下的“审核”选项→设置“审核规则”。
2)设置WWW目录的访问权限:已经设置成Web目录的文件夹,可以通过操作Web站点属性页实现对WWW目录访问权限的控制,而该目录下的所有文件和子文件夹都将继承这些安全机制。WWW服务除了提供NTFS文件系统提供的权限外,还提供读取权限——允许用户读取或下载WWW目录中的文件;执行权限——允许用户运行WWW目录下的程序和脚本。具体设置方法如下:
选择“开始”选单→“程序”→“Microsoft Internet Server(公用) ”→“Internet服务管理器” →启动Microsoft Internet Service Manager→ 双击“WWW”启动WWW服务属性页→选择“目录”选项卡→选定需要编辑的WWW目录→选择“编辑属性”中的“目录属性”进行设置。
5.IP地址的控制
IIS可以设置允许或拒绝从特定IP发来的服务请求,有选择地允许特定节点的用户访问。可以通过设置来阻止指定IP地址外的网络用户访问你的Web服务器。具体设置方法如下:
选择“开始”选单→“程序”→“Microsoft Internet Server(公用) ”→“Internet服务管理器” →启动Microsoft Internet Service Manager→双击“WWW”启动WWW服务属性页→启动Web属性页中“高级”选项卡;进行IP地址的控制设置。
6.端口安全性的实现
对于IIS服务,无论是WWW站点、Fpt站点,还是NNpt、SMpt服务等都有各自侦听和接收浏览器请求的TCP端口号(Post),一般常用的端口号为:WWW是80,Fpt是21,SMpt是25,你可以通过修改端口号来提高IIS服务器的安全性。如果你修改了端口设置,只有知道端口号的用户才可以访问,不过用户在访问时需要指定新端口号。
7.IP转发的安全性
IIS服务可提供IP数据包的转发功能,此时,充当路由器角色的IIS服务器将会把从Internet接口收到的IP数据包转发到内部网中,禁用这一功能将提高IIS服务的安全性。设置方法如下:
选择“开始”选单→“程序”→“Microsoft Internet Server(公用) ”→“Internet服务管理器” →启动Microsoft Internet Service Manager→ 双击“WWW”启动WWW服务属性页→选择“协议”选项卡→在TCP/IP属性中去掉“路由选择”。
8.SSL安全机制
SSL(加密套接字协议层)位于HTpt层和TCP层之间,建立用户与服务器之间的加密通信,确保信息传递的安全性。SSL是工作在公共密钥和私人密钥基础上的。任何用户都可以获得公共密钥来加密数据,但解密数据必须要通过相应的私人密钥。使用SSL安全机制时,首先客户端与服务器建立连接,服务器把它的数字证书与公共密钥一并发送给客户端,客户端随机生成会话密钥,用从服务器得到的公共密钥对会话密钥进行加密,并把会话密钥在网络上传递给服务器,而会话密钥只有在服务器端用私人密钥才能解密,这样,客户端和服务器端就建立了一个唯一的安全通道。具体设置方法如下:
选择“开始”选单→“程序”→“Microsoft Internet Server(公用) ”→“Internet服务管理器” →启动Microsoft Internet Service Manager→ 双击“WWW”启动WWW服务属性页→选择“目录安全性”选项卡→单击“密钥管理器”按钮→通过密钥管理器生成密钥文件和请求文件→从身份认证权限中申请一个证书→通过密钥管理器在服务器上安装证书→激活Web站点的SSL安全性。
建立了SSL安全机制后,只有SSL允许的客户才能与SSL允许的Web站点进行通信,并且在使用URL资源定位器时,注意输入的是“htpts://”,而不是“htpt://”。
SSL安全机制的实现,将增加系统开销,增加服务器CPU的额外负担,从而会在一定程度上降低系统性能。笔者建议在规划网络时,仅考虑为高敏感度的Web目录使用SSL安全机制。另外,SSL客户端需要使用IE 3.0及以上版本才能使用。
如何使用IPSec保护我的网络
A:
IPSec 术语
在执行以下指导步骤之前,确保您知道以下术语的含义:
身份验证:确定计算机的身份是否合法的过程。Windows 2000 IPSec 支持三种身份验证:K
erberos、证书和预共享密钥。只有当两个终结点(计算机)都位于同一个 Windows 2000 域
时,Kerberos 身份验证才有效。这种类型的身份验证是首选方法。如果计算机位于不同的域
中,或者至少有一台计算机不在某个域中,则必须使用证书或预共享密钥。只有当每个终结
点中包含一个由另一个终结点信任的颁发机构签署的证书时,证书才有效。预共享密钥与密
码有着相同的问题。它们不会在很长的时间段内保持机密性。如果终结点不在同一个域中,
并且无法获得证书,则预共享密钥是唯一的身份验证选择。
加密:使准备在两个终结点之间传输的数据难以辨认的过程。通过使用充分测试的算法,每
个终结点都创建和交换密钥。该过程确保只有这些终结点知道密钥,而且如果任何密钥交换
序列被拦截,拦截者不会得到任何有价值的内容。
筛选器:对 Internet 协议 (IP) 地址和协议的描述,可触发 IPSec 安全关联的建立。
筛选器操作:安全要求,可在通信与筛选器列表中的筛选器相匹配时启用。
筛选器列表:筛选器的集合。
Internet 协议安全策略:规则集合,描述计算机之间的通讯是如何得到保护的。
规则:筛选器列表和筛选器操作之间的链接。当通信与筛选器列表匹配时,可触发相应的筛
选器操作。IPSec 策略可包含多个规则。
安全关联:终结点为建立安全会话而协商的身份验证与加密方法的集合。
在 Microsoft 管理控制台中查找 IPSec
通过使用 Microsoft 管理控制台 (MMC) 配置 IPSec。Windows 2000 在安装过程中创建一个
带有 IPSec 管理单元的 MMC。若要查找 IPSec,请单击开始,指向程序,单击管理工具,然
后单击本地安全策略。在打开的 MMC 中的左窗格中,单击本地计算机上的 IP 安全策略。M
MC 将在右窗格中显示现有的默认策略。
更改 IP 地址、计算机名和用户名
为了此示例的目的,假设 Alice 是一个计算机用户,该计算机名为"Alicepc"、IP 地址为
172.16.98.231,Bob 的计算机名为"Bobslap",IP 地址为 172.31.67.244。他们使用 Abcz
z 程序连接他们的计算机。
通过使用 Abczz 程序互相连接时,Alice 和 Bob 必须确保通信是被加密的。当 Abczz 建立
其连接时,启动程序使用其本身上的随机高端口并连接(出于本示例中的目的)到 6667/TC
P 或 6668/TCP 端口上的目标(其中,TCP 是"传输控制协议"的缩写)。通常,这些端口用
作 Internet 多线交谈 (IRC)。因为 Alice 或 Bob 均可发起连接,所以该策略必须存在于
两端。
创建筛选器列表
通过在 MMC 控制台中右键单击 IP 安全策略,可访问用于创建 IPSec 策略的菜单。第一个
菜单项是"创建 IP 安全策略"。尽管此菜单似乎是要开始的位置,但却不应从此位置开始。
在可创建策略及其相关规则之前,您需要定义筛选器列表和筛选器操作,它们是任何 IPSec
策略的必需组件。单击管理 IP 筛选器表和筛选器操作开始工作。
将显示带有两个选项卡的对话框:一个用于筛选器列表,另一个用于筛选器操作。首先,打
开管理 IP 筛选器列表选项卡。已经有两个预先定义的筛选器列表,您不会使用它们。相反
,您可以创建一个特定的筛选器列表,使其与要连接到的其他计算机对应。
假设您在 Alice 的计算机上创建策略:
单击添加创建新的筛选器列表。将该列表命名为"Abczz to Bob's PC"。
单击添加添加新筛选器。将启动一个向导。
单击我的 IP 地址作为源地址。
单击一个特定的 IP 地址作为目标地址,然后输入 Bob 的计算机的 IP 地址 (172.31.67.2
44)。或者,如果 Bob 的计算机已在域名系统 (DNS) 或 Windows Internet 名称服务 (WIN
S) 中注册,则可选择特定的 DNS 名,然后输入 Bob 的计算机名,Bobslap。
Abczz 使用 TCP 进行通讯,因此单击 TCP 作为协议类型。
对于 IP 协议端口,单击从任意端口。单击到此端口,键入:6667,然后单击完成完成该向
导。
重复上述步骤,但这次键入:6668作为端口号,然后单击关闭。
您的筛选器列表中包含两个筛选器:一个在端口 6667 (属于 Bob)上用于从 Alice 到 Bo
b 的通讯,另一个在端口 6668 (属于 Bob)上。(Bob 在自己的计算机上设置了 6667 和
6668 两个端口:一个端口用于传出的通讯,另一个用于传入的通讯。)这些筛选器是镜像
的,每次创建 IPSec 筛选器时通常都需要如此。对于已镜像的每个筛选器,该列表可包含(
但不显示)与其正好相反的筛选器(即目标和源地址与其相反的筛选器)。如果没有镜像筛
选器,IPSec 通讯通常不成功。
创建筛选器操作
您已经定义了必须受到保护的通信的种类。现在,您必须指定安全机制。单击管理筛选器操
作选项卡。列出三个默认操作。不要使用要求安全操作,您必须创建一个更严格的新操作。
若要创建新操作,请:
单击添加创建新筛选器操作。启动一个向导。将该操作命名为"Encrypt Abczz"。
对于常规选项,单击协商安全,然后单击不和不支持 IPsec 的计算机通讯。
单击 IP 通信安全性为高选项,然后单击完成以关闭该向导。
双击新的筛选器操作(前面命名的"Encrypt Abczz")。
单击清除接受不安全的通讯,但总是用 IPSec 响应复选框。这一步骤确保计算机在发送 Ab
czz 数据包之前必须协商 IPSec。
单击会话密钥完全向前保密以确保不重新使用密钥资料,单击确定,然后单击关闭。
创建 IPSec 策略
您已经获得了策略元素。现在,您可以创建策略本身了。右键单击 MMC 的右窗格,然后单击
创建 IP 安全策略。当向导启动时:
将该策略命名为"Alice's IPSec"。
单击清除激活默认响应规则复选框。
单击编辑属性(如果未选中的话),然后完成该向导。该策略的属性对话框将打开。
为使 IPSec 策略有效,它必须至少包含一个将筛选器列表链接到筛选器操作的规则。
若要在属性对话框中指定规则,请:
单击添加以创建新规则。启动向导后,单击此规则不指定隧道。
单击局域网 (LAN) 作为网络类型。
如果 Alice 和 Bob 的计算机位于同一个 Windows 2000 域中,单击 Windows 2000 默认值
(Kerberos V5 协议)作为身份验证方法。如果不在一个域中,则单击使用此字串来保护密
钥交换(预共享密钥),然后输入字符串(使用您可记住的长字符串,不要有任何键入错误)
。
选择前面创建的筛选器列表。在此示例中,该筛选器列表为"Abczz to Bob's PC"。然后,选
择前面创建的筛选器操作。在此示例中,该筛选器操作为"Encrypt Abczz"。
完成该向导,然后单击关闭。
配置其他终结点
在 Bob 的计算机上重复上述应用于 Alice 的计算机的所有步骤。显然要进行一些必要的更
改,例如,"Abczz to Bob's PC"必须更改为"Abczz to Alice's PC"。
指派策略
您已经在两个端点上定义了策略。现在,必须指派它们:
在本地安全设置 MMC 中,右键单击策略(在此示例中为 Abczz )。
单击指派。
一次只能指派一个 IPSec 策略,但是一个策略可根据需要拥有多个规则。例如,如果 Alic
e 还需要通过使用不同的协议保护与 Eve 的通讯,则您必须创建相应的筛选器列表和操作,
并向 IPSec (属于 Alice)添加一个规则,以便将特定的筛选器列表和筛选器操作链接起来
。单击为此规则使用不同的共享密钥。Alice 的策略现在有两个规则:一个用于与 Bob 进行
Abczz 通讯,另一个用于与 Eve 进行通讯。因为 Bob 和 Eve 无需安全地互相通讯,所以
Bob 的策略中未添加任何规则,Eve 的策略中包含一个用于与 Alice 进行通讯的规则。
疑难解答
使用 IPSecMon 测试策略
Windows 2000 包括一个实用程序 (IPSecMon.exe),它可用于测试 IPSec 安全关联是否已成
功建立。若要启动 IPSecMon,请:
单击开始,然后单击运行。
键入:ipsecmon,然后按 ENTER 键。
单击选项。
将刷新间隔更改为 1。
必须在不同终结点之间建立通讯。可能会有一个延迟,这是由于终结点需要几秒钟时间来交
换加密信息并完成安全关联。可在 IPSecMon 中观察此行为。当这两个终结点都建立了它们
的安全关联,可在 IPSecMon 中观察到显示此行为的条目。
如果期望的安全协商没有建立,则返回并检查每个终结点上的筛选器列表。在您方便地将源
地址和目标地址或端口反向时,确保已经收到所使用协议的正确定义。您可能要考虑创建一
个指定所有通信的新筛选器列表。同样,可向使用此筛选器列表的策略添加一个新规则,然
后禁用现有的规则。在两个终结点上执行这些步骤。然后,可使用 ping 命令测试连接性。
ping 命令在安全关联阶段可显示"Negotiating IP security"(正在协商 IP 安全),然后
显示建立安全关联之后的正常结果。
NAT 与 IPSec 不兼容
如果在两个终结点之间有任何网络地址转换 (NAT),则 IPSec 不起作用。IPSec 将终结点地
址作为有效负载的一部分嵌入。在将数据包发送到电缆上之前进行数据包校验和计算时,IP
Sec 也使用源地址。NAT 可更改出站数据包的源地址,目标在计算自己的校验和时使用头中
的地址。如果数据包中携带的用初始来源计算的校验和与用目标计算的校验和不符,则目标
可丢弃这些数据包。不能将 IPSec 用于任何类型的 NAT 设备。
参考
有关 Windows 2000 中 IPSec 的白皮书和详细的技术信息,请参阅以下 Microsoft Web 站
点:
http://www.microsoft.com/windows2000/technologies/security/default.asp
SNIFF真是一个古老的话题,关于在网络上采用SNIFF来获取敏感信息已经不是什么
新鲜事,也不乏很多成功的案例,那么,SNIFF究竟是什么呢? SNIFF就是嗅探器,就是
窃听器,SNIFF静悄悄的工作在网络的底层,把你的秘密全部记录下来。看过威尔史密斯
演的《全民公敌》吗?SNIFF就象里面精巧的窃听器一样,让你防不胜防。
SNIFF可以是软件,也可以是硬件,既然是软件那就要分平台,有WINDOWS下的、UNXI
下的等,硬件的SNIFF称为网络分析仪,反正不管硬件软件,目标只有一个,就是获取在网
络上传输的各种信息。本文仅仅介绍软件的SNIFF。
当你舒适的坐在家里,惬意的享受网络给你带来的便利,收取你的EMAIL,购买你喜欢
的物品的时候,你是否会想到你的朋友给你的信件,你的信用卡帐号变成了一个又一个的
信息包在网络上不停的传送着,你是否曾经这些信息包会通过网络流入别人的机器呢?你
的担忧不是没有道理的,因为SNIFF可以让你的担忧变成实实在在的危险。就好象一个人躲
在你身后偷看一样。。。。。。
二 网络基础知识
“网络基础知识”,是不是听起来有点跑题了?虽然听起来这和我们要谈的SNIFF没什么
关系,可是还是要说一说的,万丈高楼平地起,如果连地基都没打好,怎么盖楼?!如果你
对网络还不是十分清楚的话,最好能静下心来好好看看,要知道,这是基础的基础,在这里
我只是简单的说一下,免得到时候有人迷糊,详细的最好能够自己去找书看看。
(1)TCP/IP体系结构
开放系统互连(OSI)模型将网络划分为七层模型,分别用以在各层上实现不同的功能,
这七层分别为:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。而TCP/IP
体系也同样遵循这七层标准,只不过在某些OSI功能上进行了压缩,将表示层及会话层合并入
应用层中,所以实际上我们打交道的TCP/IP仅仅有5层而已,网络上的分层结构决定了在各层
上的协议分布及功能实现,从而决定了各层上网络设备的使用。实际上很多成功的系统都是基
于OSI模型的,如:如帧中继、ATM、ISDN等。
TCP/IP的网络体系结构(部分)
-----------------------------------
| SMTP | DNS | HTTP | FTP | TELNET| 应用层
-----------------------------------
| TCP | UDP | 传输层
-----------------------------------
| IP | ICMP | ARP RARP | 网络层
------------------------
| IEEE 802 以太网 SLIP/PPP PDN etc| 数据链路层
-----------------------------------
| 网卡 电缆 双绞线 etc | 物理层
-----------------------------------
从上面的图中我们可以看出,第一层物理层和第二层数据链路层是TCP/IP的基础,而
TCP/IP本身并不十分关心低层,因为处在数据链路层的网络设备驱动程序将上层的协议和
实际的物理接口隔离开来。网络设备驱动程序位于介质访问子层(MAC)。
(2)网络上的设备
中继器:中继器的主要功能是终结一个网段的信号并在另一个网段再生该信号,一句话,
就是简单的放大而已,工作在物理层上。
网 桥:网桥使用MAC物理地址实现中继功能,可以用来分隔网段或连接部分异种网络,工
作在数据链路层。
路由器:路由器使用网络层地址(IP,X.121,E.164等),主要负责数据包的路由寻径,也能
处理物理层和数据链路层上的工作。
网 关:主要工作在网络第四层以上,主要实现收敛功能及协议转换,不过很多时候网关都
被用来描述任何网络互连设备。
(3)TCP/IP与以太网
以太网和TCP/IP可以说是相互相成的,可以说两者的关系几乎是密不可分,以太网在
一二层提供物理上的连线,而TCP/IP工作在上层,使用32位的IP地址,以太网则使用48位
的MAC地址,两者间使用ARP和RARP协议进行相互转换。从我们上面TCP/IP的模型图中可以
清楚的看到两者的关系。
载波监听/冲突检测(CSMA/CD)技术被普遍的使用在以太网中,所谓载波监听是指在以
太网中的每个站点都具有同等的权利,在传输自己的数据时,首先监听信道是否空闲,如
果空闲,就传输自己的数据,如果信道被占用,就等待信道空闲。而冲突检测则是为了防
止发生两个站点同时监测到网络没有被使用时而产生冲突。以太网采用广播机制,所有与
网络连接的工作站都可以看到网络上传递的数据。
为了加深你的理解,我们来看看下面的图,一个典型的在以太网中客户与服务器使用
TCP/IP协议的通信。
用户进程 FTP客户 ; FTP服务器 应用层
| |
内核中的协议栈 TCP ; TCP 传输层
| |
内核中的协议栈 IP ; IP 网络层
| |
以太网驱动程序 ; 以太网驱动程序 数据链路层
──────-------------------------------
以太网
??唆唆了这么多,有人烦了吧?相信我,这是基础的基础,可以说是说得是很简单拉,
如果需要,拿出个几十万字来说上面的内容,我想也不嫌多,好了,让我们进入下一节,
sniff的原理。
三 SNIFF的原理
要知道在以太网中,所有的通讯都是广播的,也就是说通常在同一个网段的所有网络接
口都可以访问在物理媒体上传输的所有数据,而每一个网络接口都有一个唯一的硬件地址,
这个硬件地址也就是网卡的MAC地址,大多数系统使用48比特的地址,这个地址用来表示网
络中的每一个设备,一般来说每一块网卡上的MFC地址都是不同的,每个网卡厂家得到一段
地址,然后用这段地址分配给其生产的每个网卡一个地址。在硬件地址和IP地址间使用ARP
和RARP协议进行相互转换。
在正常的情况下,一个网络接口应该只响应这样的两种数据帧:
1.与自己硬件地址相匹配的数据帧。 2.发向所有机器的广播数据帧。
在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来的数据,网卡
内的单片程序接收数据帧的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判
断该不该接收,认为该接收就接收后产生中断信号通知CPU,认为不该接收就丢掉不管,所
以不该接收的数据网卡就截断了,计算机根本就不知道。CPU得到中断信号产生中断,操作
系统就根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收数据,驱动程序接收
数据后放入信号堆栈让操作系统处理。而对于网卡来说一般有四种接收模式:
广播方式:该模式下的网卡能够接收网络中的广播信息。 组播方式:设置在该模式下 的网卡能够接收组播数据。 直接方式:在这种模式下,只有目的网卡才能接收该数 据。 混杂模式:在这种模式下的网卡能够接收一切通过它 的数据,而不管该数据是否是 传给它的。
好了,现在我们总结一下,首先,我们知道了在以太网中是基于广播方式传送数据的,也
就是说,所有的物理信号都要经过我的机器,再次,网卡可以置于一种模式叫混杂模式
(promiscuous),在这种模式下工作的网卡能够接收到一切通过它的数据,而不管实际上数
据的目的地址是不是他。这实际上就是我们SNIFF工作的基本原理:让网卡接收一切他所能接
收的数据。
(图一)
我们来看一个简单的例子,如图一所示,机器A、B、C与集线器HUB相连接,集线器HUB通
过路由器Router访问外部网络。这是一个很简单也很常见的情况,比如说在公司大楼里,我
所在的网络部办公室里的几台机器通过集线器连接,而网络部、开发部、市场部也是同样如
此,几个部门的集线器通过路由器连接。还是回到我们的图一上来,值得注意的一点是机器
A、B、C使用一个普通的HUB连接的,不是用SWITCH,也不是用ROUTER,使用SWITCH和ROUTER
的情况要比这复杂得多。
我们假设一下机器A上的管理员为了维护机器C,使用了一个FTP命令向机器C进行远程登陆,
那么在这个用HUB连接的网络里数据走向过程是这样的。首先机器A上的管理员输入的登陆机
器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网
驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了HUB上,
现在由HUB向每一个接点广播由机器A发出的数据帧,机器B接收到由HUB广播发出的数据帧,
并检查在数据帧中的地址是否和自己的地址相匹配,发现不是发向自己的后把这数据帧丢弃,
不予理睬。而机器C也接收到了数据帧,并在比较之后发现是发现自己的,接下来他就对这数
据帧进行分析处理。
在上面这个简单的例子中,机器B上的管理员如果很好奇,他很想知道究竟登陆机器C上FTP
口令是什么?那么他要做的很简单,仅仅需要把自己机器上的网卡置于混杂模式,并对接收到
的数据帧进行分析,从而找到包含在数据帧中的口令信息。
四 做一个自己的sniff
在上一节里,我们已经知道了SNIFF的基本原理是怎么一回事,这一节我们来亲自动手做一个
自己的sniff,毕竟,用程序代码来说话比什么都要来得真实,也容易加深理解。
回头想一想我们上面说的原理,我们要做的事情有几件:
1. 把网卡置于混杂模式。 2. 捕获数据包。 3. 分析数据包。
注:下面的源代码取至Chad Renfro的;>;
一文中
/************************Tcp_sniff_2.c********************/
1.#include
2.#include
3.#include
4.#include
5.#include
6.#include
7.#include
8.#include
9.#include "headers.h"
#define INTERFACE "eth0"
/*Prototype area*/
10.int Open_Raw_Socket(void);
11.int Set_Promisc(char *interface, int sock);
12.int main() {
13.int sock, bytes_recieved, fromlen;
14.char buffer[65535];
15.struct sockaddr_in from;
16.struct ip *ip;
17.struct tcp *tcp;
18.sock = Open_Raw_Socket();
19. Set_Promisc(INTERFACE, sock);
20. while(1)
22. {
23. fromlen = sizeof from;
24. bytes_recieved = recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddr *)&from, &fromlen);
25. printf("\nBytes received ::: %5d\n",bytes_recieved);
26. printf("Source address ::: %s\n",inet_ntoa(from.sin_addr));
27. ip = (struct ip *)buffer;
/*See if this is a TCP packet*/
28. if(ip->;ip_protocol == 6) {
29. printf("IP header length ::: %d\n",ip->;ip_length);
30. printf("rotocol ::: %d\n",ip->;ip_protocol);
31. tcp = (struct tcp *)(buffer + (4*ip->;ip_length));
32. printf("Source port ::: %d\n",ntohs(tcp->;tcp_source_port));
33. printf("Dest port ::: %d\n",ntohs(tcp->;tcp_dest_port));
34. }
35. }
36.}
37.int Open_Raw_Socket() {
38. int sock;
39. if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP))
/*Then the socket was not created properly and must die*/
40. perror("The raw socket was not created"
41. exit(0);
42. };
43. return(sock);
44. }
45.int Set_Promisc(char *interface, int sock ) {
46. struct ifreq ifr;
47. strncpy(ifr.ifr_name, interface,strnlen(interface)+1);
48. if((ioctl(sock, SIOCGIFFLAGS, &ifr) == -1)) {
/*Could not retrieve flags for the interface*/
49. perror("Could not retrive flags for the interface"
50. exit(0);
51. }
52. printf("The interface is ::: %s\n", interface);
53. perror("Retrieved flags from interface successfully"
54. ifr.ifr_flags |= IFF_PROMISC;
55. if (ioctl (sock, SIOCSIFFLAGS, &ifr) == -1 ) {
/*Could not set the flags on the interface */
56. perror("Could not set the PROMISC flag:"
57. exit(0);
58. }
59. printf("Setting interface ::: %s ::: to promisc", interface);
60. return(0);
61. }
/***********************EOF**********************************/
上面这段程序中有很详细的注解,不过我想还是有必要说一说,首先
第10行--int Open_Raw_Socket(void); 是我们的自定义函数,具体内容如下:
37.int Open_Raw_Socket() {
38. int sock;
39. if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP))
/*Then the socket was not created properly and must die*/
40. perror("The raw socket was not created"
41. exit(0);
42. };
43. return(sock);
44. }
第39行 if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP))
这里我们调用了socket函数,使创建了了一个原始套接口,使之收到TCP/IP信息包。
接下来第11行-int Set_Promisc(char *interface, int sock),这也是我们的自定义函数,
目的是把网卡置于混杂模式,具体内容如下:
45.int Set_Promisc(char *interface, int sock ) {
46. struct ifreq ifr;
47. strncpy(ifr.ifr_name, interface,strnlen(interface)+1);
48. if((ioctl(sock, SIOCGIFFLAGS, &ifr) == -1)) {
/*Could not retrieve flags for the interface*/
49. perror("Could not retrive flags for the interface"
50. exit(0);
51. }
52. printf("The interface is ::: %s\n", interface);
53. perror("Retrieved flags from interface successfully"
54. ifr.ifr_flags |= IFF_PROMISC;
55. if (ioctl (sock, SIOCSIFFLAGS, &ifr) == -1 ) {
/*Could not set the flags on the interface */
56. perror("Could not set the PROMISC flag:"
57. exit(0);
58. }
59. printf("Setting interface ::: %s ::: to promisc", interface);
60. return(0);
61. }
首先 struct ifreq ifr; 定一了一个ifrreg的结构ifr,接下来
strncpy(ifr.ifr_name, interface,strnlen(interface)+1);,就是把我们网络设备的名字填
充到ifr结构中,在这里 #define INTERFACE "eth0" ,让我们再往下看,
ioctl(sock, SIOCGIFFLAGS, &ifr),SIOCGIFFLAGS请求表示需要获取接口标志,现在到了
第54行,在我们成功的获取接口标志后把他设置成混杂模式,
ifr.ifr_flags |= IFF_PROMISC;ioctl (sock, SIOCSIFFLAGS, &ifr)。OK,现在我们所说的
第一步已经完成--------把网卡置于混杂模式。
现在进入第二步,捕获数据包。从第20行开始,我们进入了一个死循环,while(1),在
第24行,recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddr *)&from, &fromlen),
这个函数要做的就是接收数据,冰把接收到的数据放入buffer中。就是这么简单,已经完成了我
们要捕获数据包的任务。
到了第三步,分析数据包。27行,ip = (struct ip *)buffer,使我们在头文件中的IP结
构对应于所接收到的数据,接下来判断在网络层中是否使用的是TCP协议,
if(ip->;ip_protocol == 6) ,如果答案是,tcp信息包从整个IP/TCP包 buffer + (4*ip->;ip_length)
地址处开始,所以31行 tcp = (struct tcp *)(buffer + (4*ip->;ip_length)),然后对应
结构把你所需要的信息输出。
/*************************headers.h**************************/
/*structure of an ip header*/
struct ip {
unsigned int ip_length:4; /*little-endian*/
unsigned int ip_version:4;
unsigned char ip_tos;
unsigned short ip_total_length;
unsigned short ip_id;
unsigned short ip_flags;
unsigned char ip_ttl;
unsigned char ip_protocol;
unsigned short ip_cksum;
unsigned int ip_source; unsigned int ip_dest;
};
/* Structure of a TCP header */
struct tcp {
unsigned short tcp_source_port;
unsigned short tcp_dest_port;
unsigned int tcp_seqno;
unsigned int tcp_ackno;
unsigned int tcp_res1:4, /*little-endian*/
tcp_hlen:4,
tcp_fin:1,
tcp_syn:1,
tcp_rst:1,
tcp_psh:1,
tcp_ack:1,
tcp_urg:1,
tcp_res2:2;
unsigned short tcp_winsize;
unsigned short tcp_cksum;
unsigned short tcp_urgent;
};
/*********************EOF***********************************/
从上面的分析我们可以清楚的认识到,认识一个SNIFF需要对TCP/IP协议有着详细的了解,
否则你根本无法找到你需要的信息。有了上面的基础,你可以自己来做一个你需要的SNIFF了。
五 常用的SNIFF
很少有原因会让你自己亲自动手来做一个自己的SNIFF,除非你是想了解他的原理,或者是
其他一些特别的原因,比如你要在某个特殊的环境拦截一些特殊的数据包。下面我们就来看
看一些在网络上经常使用的SNIFF。
(1)windows环境下
windows环境下当然是大名鼎鼎的netxray以及sniffer pro了,实际上很多人都是用他在
windows环境下抓包来分析,不过我想很少有人笨到去在别人的机器上安装一个图形界面的SNIFF,
除非他和管理员很熟悉........ netxray的使用就不多说了,反正windows下的东西就是
click,click,click,非常的方便用户。
(2)UNUX环境下
UNUX环境下的sniff可以说是百花齐放,一抓就是一大把,如sniffit,snoop,tcpdump,dsniff
等都是比较常见的,他们都有一个好处就是发布源代码,可以让你研究,当然也都是免费的:)
1. sniffit
sniffit可以运行在Solaris、SGI和Linux等平台上,由Lawrence Berkeley Laboratory 实验
室开发的一个免费的网络监听软件。最近Sniffit 0.3.7也推出了NT版本,并也支持WINDOWS2000.
使用方法:
-v 显示版本信息
-a 以ASCII形式将监听的结果输出。
-A 在进行记录时,所有不可打印的字符都用代替
-b 等同于同时使用参数-t & -s。
-d 将监听所得内容以十六进制方式显示在当前终端
-p 记录连接到的包,0为所有端口。缺省为0。
-P protocol 选择要检查的协议,缺省为TCP。可能的选择有IP、TCP、ICMP、UDP和他们的组合。
-s 指定sniffer 检查从 发送的数据包。 -t 指定sniffer 检查发送到的数据包。
-i 进入交互模式
-l 设定数据包大小,default是300字节
注:参数可以用@来表示一个IP范围,比如 -t 192.168.@ -t和-s 只适用于TCP/UDP数据包,对
于ICMP和IP也进行解释。但如果只选择了-p参数,则只用于TCP和UDP包。
举例说明:
#sniffit -a -p 21 -t xxx.xxx.xxx.xxx
监听流向机器xxx.xxx.xxx.xxx的21端口(FTP)的信息,并以ASCII显示
#sniffit -d -p 23 -b xxx.xxx.xxx.xxx
监听所有流出或流入机器xxx.xxx.xxx.xxx的23端口(telnet)的信息,并以16进制显示
你可以在这里找到sniffit http://reptile.rug.ac.be/~coder/sniffit/sniffit.html
2. snoop
snoop默认情况安装在Solaris下,是一个用于显示网络交通的程序,不过SNIFF是把双刃剑,
既然管理员能用他来监视自己的网络,当然一个心怀恶意的入侵者也可以用他来SNIFF自己感兴
趣的内容。值得一提的是, SNOOP被发现存在一个缓冲区溢出漏洞,当以导致入侵者以运行
snoop(通常为root)的身份远程进入系统。这是题外话,暂且就此打住。
使用方法:
[ -a ] # Listen to packets on audio
[ -d device ] # settable to le?, ie?, bf?, tr?
[ -s snaplen ] # Truncate packets
[ -c count ] # Quit after count packets
[ -P ] # Turn OFF promiscuous mode
[ -D ] # Report dropped packets
[ -S ] # Report packet size
[ -i file ] # Read previously captured packets
[ -o file ] # Capture packets in file
[ -n file ] # Load addr-to-name table from file
[ -N ] # Create addr-to-name table
[ -t r|a|d ] # Time: Relative, Absolute or Delta
[ -v ] # Verbose packet display
[ -V ] # Show all summary lines
[ -p first[,last] ] # Select packet(s) to display
[ -x offset[,length] ] # Hex dump from offset for length
[ -C ] # Print packet filter code
例如:
#snoop -o saved A B
监听机器A与B的谈话,并把内容存储于文件saved中
3. tcpdump
tcpdmp也算是一个很有名气的网络监听软件,FREEBSD还把他附带在了系统上,是一个被
很多UNIX高手认为是一个专业的网络管理工具。
使用方法:
tcpdump采用命令行方式,它的命令格式为:
tcpdump [ -adeflnNOpqStvx ][ -c 数量 ][ -F 文件名 ][ -i 网络接口 ][ -r 文件名]
[ -s snaplen ][ -T 类型 ][ -w 文件名 ][表达式 ]
1. tcpdump的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc和snmp
2. tcpdump的表达式介绍
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式
的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net,
port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0
是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关
键字指明了 传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 ,
dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是
src or dst关键字。
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在
FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether
具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的
几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有
协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:
gateway, broadcast,less,greater,还有三种 逻辑运算,取非运算是 ''not '' ''! '', 与运算
是''and'',''&&'';或运算 是''or'' ,''||''。
举例使用:
#tcpdump host AAA.BBB.CCC.DDD
将监听IP地址为AAA.BBB.CCC.DDD的机器的通话
#tcpdump tcp port 23 host AAA.BBB.CCC.DDD
将监听IP地址为AAA.BBB.CCC.DDD的机器的23端口的通话
4. dsniff
之所以要谈谈dsniff,是因为他不仅仅是一个sniff,在他的整个套件包中,包含了很多
其它有用的工具,如arpspoof,dnsspoof,macof,tcpkill等等,SNIFF的手段更加的多样和
复杂化。dsniff是由DugSong开发的你可以在他的主页上找到这个工具。 目前dsniff支持
OpenBSD (i386), Redhat Linux (i386), 和Solaris (sparc). 并且在FreeBSD, Debian Linux,
Slackware Linux, AIX, 和HP-UX上也能运转得很好。但是dsniff需要几个其他的第三方软件进
行支持,他们分别是,Berkeley DB ,OpenSSL, libpcap, libnet, libnids。如果条件允
许的话,你最好能够亲自读一读dsniff的源代码,你可以在
http://naughty.monkey.org/~dugsong/
找到dsniff。
六 深入sniff
单纯的sniff的功能始终是局限的,所以在大多数的情况下,sniff往往和其他手段结合起来使
用,sniff和spoof已及其他技术手段结合在一起对网络构成的危害是巨大的。单纯的sniff好比缺
了一只腿,无法发挥大的作用,例如在sniff原理一节中我们讨论的例子里,我一再的强调我们使
用的是一个普通的HUB进行连接是有原因的,如果我们把在图一中的HUB用一个switch代替,那情况
就要复杂一些了,如图二所示:
图(二)
在图二中,我们的机器A、B、C与Switch相连接,而Switch通过路由器Router访问外部网络。我
们先来了解Switch的工作原理:
在我们图一中的 HUB 只是简单地把所接收到的信号通过所有端口(除了信号来的那个口)重复
发送出去不同,而图二中的Switch却可以检查每一个收到的数据包,并对数据包进行相应的处理。
在Switch内保存着每一个网段上所有节点的物理地址,只允许必要的网络流量通过Switch。举例来
说,当Switch接收到一个数据包之后,根据自身保存的网络地址表检查数据包内包含的发送和接收
方地址。如果接收方位于发送方网段,该数据包就会被Switch丢弃,不能通过交换机传送到其它的
网段;如果接收方和发送方位于两个不同的网段,该数据包就会被Switch转发到目标网段。这样,
通过交换机的过滤和转发,可以有效避免网络广播风暴,减少误包和错包的出现。顺便说一句,现在
Switch和HUB的价格相去无几,所以hub正逐渐被网络交换机取代。
现在回到我们的例子中来,在图二中仍然和图一一样,我们假设机器A上的管理员为了维护机器C,
使用了一个FTP命令向机器C进行远程登陆,那么在这里,数据是这样走的:首先机器A上的管理员输入
的登陆机器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网
驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了Switch上,而
Switch检查数据帧中的目的地址,并在他自身保存的网络地址表中知道了他应该把这数据帧发到机器
C那里,于是,接下来机器C接收到了从A发来的信息,发现他是发给自己的信息,于是进行分析处理。
OK,现在我们机器B上的管理员的好奇心只能深深的埋藏在心里了,因为数据包根本就没有经过他,
就算他把自己的网卡设置成混杂模式也是有力无处使。
在了解在一个Switch环境下原理后,我们结合一些手段去设法sniff,是的,我们可以做到这一点,
有许多的手段可以让管理员B满足他的好奇心,在下面我会提出几个办法,当然只是其中的一些办法
而已。
1 ARP Spoof
在基于IP通信的内部网中,我们可以使用 ARP Spoof 的手段,了解什么是ARP Spoof的前提你先
要明白一下什么是ARP和RARP协议,什么是MAC地址,什么又是IP地址。ARP协议是地址转换协议,
RARP被称为反向地址转换协议,他们负责把IP地址和MAC地址进行相互转换对应。
ARP Spoof 攻击的根本原理是因为计算机中维护着一个 ARP 高速缓存,并且这个ARP 高速缓存是
随着计算机不断的发出ARP请求和收到ARP响应而不断的更新的,ARP 高速缓存的目的是把机器的IP地
址和MAC地址相互映射。你可以使用 arp 命令来查看你自己的 ARP 高速缓存。现在设想一下,一个
Switch工作在数据链路层,他根据MAC地址来转发他所接收的数据包,而计算器维护的 ARP 高速缓存
却是动态的......你想到什么了吗?
为了加深理解,现在给我们的机器编上号,机器A:IP地址为 10.0.0.1 ,MAC地址为
20-53-52-43-00-01 ,机器B:IP地址为 10.0.0.2 ,MAC地址为 20-53-52-43-00-02,机器C:IP地址
为 10.0.0.3 ,MAC地址为 20-53-52-43-00-03 。现在机器B上的管理员是个聪明的家伙,他向机器
A发出一个 ARP Reply (协议没有规定一定要等ARP Request出现才 能发送ARP Reply,也没有
规定一定要发送过ARP Request才能接收ARP Reply),其中的目的IP地址为10.0.0.1,目的MAC
地址为 20-53-52-43-00-01 ,而源IP地址为10.0.0.3,源MAC地址为 20-53-52-43-00-02 ,好了,
现在机器A更新了他的 ARP 高速缓存,并相信了IP地址为10.0.0.3的机器的MAC地址是
20-53-52-43-00-02 。当机器A上的管理员发出一条FTP命令时---ftp 10.0.0.3,数据包被送到了
Switch,Switch查看数据包中的目的地址,发现MAC为 20-53-52-43-00-02 ,于是,他把数据包
发到了机器B上。再设想一下,如果不想影响A和C之间的通信该怎么办?你可以同时欺骗他们双方,
来一个 man-in-middle 。
当然,在实际的操作中你还需要考虑到一些其他的事,比如某些操作系统在会主动的发送ARP请
求包来更新相应的ARP入口等。
2. MAC Flooding
在上面我们曾经提到过,Switch之所以能够由数据包中目的MAC地址判断出他应该把数据包发送到
那一个端口上是根据他本身维护的一张地址表。这张地址表可能是动态的也可能是静态的,这要看
Switch的厂商和Switch的型号来定,对于某些Switch来说,他维护的是一张动态的地址表,并且地
址表的大小是有上限的,比如 3com Superstack Switch 3300 (3c16981 Hardware v.1 Software v.2.10)
就是这样一种Switch,我们可以通过发送大量错误的地址信息而使SWITCH维护的地址表“溢出”,
从而使他变成广播模式来达到我们要 sniff 机器A与机器C之间的通信的目的。
3. Fake the MAC address
伪造MAC地址也是一个常用的办法,不过这要基于你网络内的Switch是动态更新其地址表,这实
际上和我们上面说到的 ARP Spoof 有些类似,只不过现在你是想要Switch相信你,而不是要机器A
相信你。因为Switch是动态更新其地址表的,你要做的事情就是告诉Switch:HI,我是机器C。换成
技术上的问题你只不过需要向Switch发送伪造过的数据包,其中源MAC地址对应的是机器C的MAC地址,
现在Switch就把机器C和你的端口对应起来了。不过其中存在一个问题,现在机器C也会说了:
HI,Switch老大,我才是机器C呢!,现在你该怎么办?切,还用问!让他说不了话就可以了,
DOS还是其他什么,随便你了......
4. ICMP Router Advertisements
这主要是由ICMP路由器发现协议(IRDP)的缺陷引起的,在Windows 95、98、2000及SunOS、
Solaris 2.6等系统中,都使用了IRDP协议,SunOS系统只在某些特定的情况下使用该协议,而
Windows95 ,Windows95b, Windows98, Windows98se, 和 Windows2000都是默认的使用IRDP协议。
IRDP协议的主要内容就是告诉人们谁是路由器,设想一下,一个HACK利用IRDP宣称自己是路由器的
情况会有多么的糟糕!所有相信HACK的请求的机器把他们所有的数据都发送给HACK所控制的机器.........
5. ICMP Redirect
所谓ICMP重定向,就是指告诉机器向另一个不同的路由发送他的数据包,ICMP重定向通常使
用在这样的场合下,假设A与B两台机器分别位于同一个物理网段内的两个逻辑子网内,而A和B都
不知道这一点,只有路由器知道,当A发送给B的数据到达路由器的时候,路由器会向A送一个ICMP
重定向包裹,告诉A:HI,别再送数据给我转交了,你就直接送到B那里就可以了。设想一下,
一个hack完全可以利用这一点,使得A发送给B的数据经过他。
上面提到的这些方法只不是其中的一些,为了配合sniff能够工作得更有效率,还有其他许多
的办法,其实sniff的目的说穿了只有一个,就是抓包,从抓包这个概念上引伸下去,所有为了能
够抓到网络上的信息包而采用的技术都可以归入sniff,单纯的sniff是没有什么效率的。你还能
想到什么吗?进攻路由器,在路由器上放置sniff......,在系统内核中植入sniff......等等。
七 如何防止SNIFF
防止sniff最有效的手段就是进行合理的网络分段,并在网络中使用交换机和网桥,在理想的情
况下使每一台机器都拥有自己的网络段,当然这会使你的网络建设费用增加很多,所以你可以尽量
使相互信任的机器属于同一个网段,使他们互相之间不必担心sniff的存在。并在网段于网段间进
行硬件屏障。你也可以使用加密技术对你在网络中传送的敏感数据如户ID或口令,你的银行帐号,
商业机密等进行加密,你可以选用SSH等加密手段。为了防止ARP欺骗,你可以使用永久的ARP
缓存条目,反正上面的攻击手段和原理你也看了,你就反过来想想该怎么办好了。不过有盾必有矛,
平时的安全意识才是最重要的。
(注:以下关于AntiSniff的介绍取至backend翻译整理的L0pht AntiSniff 技术文档一文)
当你做做层层保护后,你还是怀疑自己的网络上存在sniff该怎么办? L0pht 小组为了探测
sniff专门发布了一个软件 AntiSniff,当然这个软件不是免费的:),AntiSniff 工具用于检测局
域网中是否有机器处于混杂模式,AntiSniff Version 1.x被设计为运行在以太网的Windows系统中,
提供了简单易用的图形用户界面,AntiSniff Version 1.x 主要工作在非交换环境下的本地网段中,
如果运行在交换环境下其功能将大打折扣。AntiSniff Ver 2.0 将不但能在本地网段中,而且能够穿
过路由器和交换机进行工作。
◆ 操作系统类特殊测试
Linux 内核测试
旧版本的Linux内核存在一个奇怪的特性,可被用于确定机器是否处于混杂模式。在正常情形下,
网卡会过滤和丢弃那些目标地址不是本机MAC地址或以太网广播地址的数据包。如果数据包的目标地
址为本机以太网地址或广播地址,将传送给内核进行处理,因为其认为该以太网数据帧包含了本机
的正确IP地址或该网络广播地址。如果网卡处于混杂模式,则每个数据包都会传递给操作系统进行
分析或处理。许多版本的 Linux内核只检查数据包中的IP地址以确定是否存放到IP堆栈中进行处理。
为了利用这一点,AntiSniff构造一个无效以太网地址而IP地址有效的数据包。对于使用了这些内核
版本和处于混杂模式的Linux系统,由于只检查到IP地址有效而将其接收并存放到相应堆栈中。通过
在这个伪造的以太网数据帧中构造一个ICMP ECHO请求,这些系统会返回响应包(如果处于混杂模式)
或忽略(如果不处于混杂模式),从而暴露其工作模式。当伪造的以太网数据帧中的IP地址设置为网络
广播地址时这个测试非常有效。 AntiSniff的使用者可以修改伪造的以太网址,缺省值为66:66:66:66:66:66。
NetBSD
许多NetBSD内核具有与上述Linux内核相同的特性,不过伪造以太网数据帧中的 IP地址必须设为广
播地址。
Windows 95/98/NT
根据对网络驱动程序头文件的了解,可以知道当处于混杂模式时,Microsoft的操作系统会确切地检
查每个包的以太网地址。如果与网卡的以太网地址匹配,将作为目标IP地址为本机的数据包存放到相应
堆栈中处理。可以被利用的一点是系统对以太网广播包的分析。在正常情形下,例如机器工作在非混
杂模式下,网卡只向系统内核传输那些目标以太网址与其匹配或为以太网广播地址(ff:ff:ff:ff:ff:ff)
的数据包。如果机器处于混杂模式下,网络驱动程序仍然会检查每个数据包的以太网地址,但检查是否
为广播包时却只检查头8位地址是否为0xff。因此,为了使处于混杂模式的系统返回响应信息,
AntiSniff构造以太网地址为ff:00:00:00:00:00且含有正确目标IP 地址的数据包,当Microsoft的操
作系统接收到这个数据包时,将根据网络驱动程序检查到的细微差别而返回响应包(如果处于混杂模式)
或丢弃这个数据包(如果处于非混杂模式)。
需要注意的是,这个检查与使用的网络驱动程序有关。Microsoft缺省的网络驱动程序具有以上特性,
大多数的厂商为了保持兼容性也继承了这些特性。不过有些网卡会在其硬件层中检查以太网地址的头8位,
所以可能会无论系统真正的状态是什么都总是返回正值。关于这类网卡和驱动程序请访问
AntiSniff Ver 1.x的web网站。
◆ DNS 测试
进行DNS测试的原因是许多攻击者使用的网络数据收集工具都对IP地址进行反向 DNS解析,因为他们
希望根据域名寻找更有价值的主机。例如joepc1.foo.bar对攻击者的吸引力往往不如payroll.foo.bar
这种商业域名。此时这些工具就由被动型网络工具变为主动型网络工具了。而不监听网络通讯的机器
不会试图反向解析数据包中的 IP地址。为了利用这一点,AntiSniff Ver 1.x使自身处于混杂模式下,
向网络发送虚假目标IP地址的数据包,然后监听是否有机器发送该虚假目标IP地址的反向DNS查询。
伪造数据包的以太网地址、检查目标、虚假目标IP地址可由用户定制。
◆ 网络和主机响应时间测试
这种测试已被证明是最有效的。它能够发现网络中处于混杂模式的机器,而不管其操作系统是什么。
警告,这个测试会在很短的时间内产生巨大的网络通讯流量。进行这种测试的理由是不处于混杂模式
的网卡提供了一定的硬件底层过滤机制。也就是说,目标地址非本地(广播地址除外)的数据包将被网卡
的固件丢弃。在这种情况下,骤然增加、但目标地址不是本地的网络通讯流量对操作系统的影响只会
很小。而处于混杂模式下的机器则缺乏此类底层的过滤,骤然增加、但目标地址不是本地的网络通讯
流量会对该机器造成较明显的影响(不同的操作系统/内核/用户方式会有不同)。这些变化可以通过网
络通讯流量工具监视到。
根据以上要点,AntiSniff Ver 1.x 首先利用ICMP ECHO请求及响应计算出需要检测机器的响应时间
基准和平均值。在得到这个数据后,立刻向本地网络发送大量的伪造数据包。与此同时再次发送测试
数据包以确定平均响应时间的变化值。非混杂模式的机器的响应时间变化量会很小,而混杂模式的机
器的响应时间变化量则通常会有 1-4个数量级。为了对付攻击者和入侵者们最常用的多种工具,
AntiSniff进行了三种网络饱和度测试:SIXTYSIX、TCPSYN和THREEWAY。
* SIXTYSIX测试构造的数据包数据全为0x66。这些数据包不会被非混杂模式的机器接收,同时
方便使用常见的网络监听/分析工具(如tcpdump和snoop等)记录和捕获。
* TCPSYN测试构造的数据包包含有效的TCP头和IP头,同时TCP标志域的SYN位被设置。
* THREEWAY测试采取的原理基本上与TCPSYN一样,但更复杂些。在这种测试中两个实际不存在
的机器间多次建立完整的TCP三方握手通讯。它能够更好地欺骗那些骇客工具。
AntiSniff Ver 1.x 中能够通过以上三种数据包测试发现正处于混杂模式机器的测试方法最好周
期性地进行和与以前的数据比较。响应时间测试第一次运行的数据还能够用于分析一个大型网络在
flooding和非flooding状态时的性能,并帮助工程师调整网络性能。一旦确信本地网络已运行在正
常(没有未经允许而处于混杂模式的机器) 状态,就应该设置AntiSniff工具周期性运行。只要发现
某台机器性能(响应时间)发生数量级的变化,一般就能确定其正处于混杂模式。这种方法不需比较
两台独立系统间的性能数据,而只需比较同一台机器不同时候的数据就能确定该机器是否处于混杂
模式。
八 结尾
本文旨在向你描述sniff的基本原理,为的是要使你不仅仅能够了解什么是sniff而已,而是要明
白sniff运转的根本原理,文章参考了大量的资料,牵涉到直接引用的已经注明出处和作者,非常的
感谢他们。在此还要感谢 W.Richhard.Stevens,虽然其人已逝,但留下的TCP/IP三卷本真是造福了
大家,文章的很多地方也是拜他老人家指点迷经才得以感悟。最后还要感谢雀巢咖啡,让我得以熬
夜把这篇文章写完,呵呵,谢谢大家。