来自:木马帝国的http://article.mmbest.com/article/4/2006/2006032415506.html
TCP/IP漏洞是指利用主机协议栈处理及协议本身机制的缺陷造成的安全漏洞,这类安全漏洞很容易造成系统缓冲区溢出,不识别IP欺骗,而要是在处理大量异常连接,畸形消息时更容易导致拒绝服务。这类漏洞从PoD到DRDoS,每一种攻击都是黑客技术的杰作,而且越来越可怕,越来越难对付。我就在这里给大家详细介绍一下各种各样的TCP/IP网络拒绝服务攻击及其大体防范方法。
一 死亡之Ping(ping of death)
1.原理
不用我多说了,大名鼎鼎的Ping早已经家喻户晓了。早期的Ping之所以能称为死亡之Ping,那是因为在早期阶段路由器对包的最大尺寸都有限制,很多操作系统对TCP/IP栈的实现在ICMP包上都是规定为64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息为有效载荷生成缓冲区。当产生畸形的包——加载尺寸超过64KB上限的包时,就会出现内存分配错误,从而导致TCP/IP堆栈崩溃,使系统死机。理论上Ping发出的ICMP数据包最大为65507字节,如果超过这个限度,就会导致目标系统缓冲区溢出,TCP/IP堆栈崩溃而死机。
2.攻击
Ping命令的-l参数可以定制包的大小,-t参数可以循环发送无数包,但是仅有这些是不够的,黑客们通常使用自己的Ping工具,甚至可以调动众多肉鸡进行分布式攻击。
Tosser是一款很实用的网络测试工具,提供了Ping和Trace功能,如图1所示。
javascript:resizepic(this) border=0>
图1
3.防御
现在所有标准的TCP/IP都已经具备对付超大尺寸包的能力了,各种操作系统(Windows 98之后的Windows NT,Linux,Unix和Mac OS)都能抵抗一般的死亡之Ping,并且大多数防火墙都能够自动过滤这些攻击,所以现在的普通Ping是很难形成Death之势了。针对Ping攻击只需利用路由器,防火墙对ICMP进行有效的筛选即可。
二 古老的Smurf
1.原理
Smurf是一种很古老的DoS攻击。这种方法使用了广播地址,广播地址的尾数通常为0,比如:192.168.1.0。在一个有N台计算机的网络中,当其中一台主机向广播地址发送了1KB大小的ICMP Echo Requst时,那么它将收到N KB大小的ICMP Reply,如果N足够大它将淹没该主机,最终导致该网络的所有主机都对此ICMP Echo Requst作出答复,使网络阻塞!利用此攻击时,假冒受害主机的IP,那么它就会收到应答,形成一次拒绝服务攻击。Smurf攻击的流量比Ping of death洪水的流量高出一两个数量级,而且更加隐蔽。
2.攻击
Smurf2K是一个强大的攻击工具,它通过一个储存广播列表地址的文件,记录下Internet上可用的主机,然后利用这些主机发起进攻。如图2所示:
javascript:resizepic(this) border=0>
图2
3.防御
为了防止黑客利用你的网络进行Smurf攻击,关闭外部路由器或防火墙的广播地址特性;为了防止被攻击,在防火墙上设置规则丢弃掉ICMP包。
三 Fraggle攻击
1.原理
Fraggle攻击与Smurf攻击类似,只是利用UDP协议;虽然标准的端口是7,但是大多数使用Fraggle攻击的程序允许你指定其它的端口。Fraggle攻击是这样实现的:攻击者掌握着大量的广播地址,并向这些地址发送假冒的UDP包,通常这些包是直接到目标主机的7号端口——也就是Echo端口,而另一些情况下它却到了Chargen端口,攻击者可以制造一个在这两个端口之间的循环来产生网络阻塞。
2.攻击
编写Fraggle攻击程序时只要把Smurf攻击程序的代码作一下修改就可以了。
3.防御
最好的防止系统受到Smurf和Fraggle攻击的方法是在防火墙上过滤掉ICMP报文,或者在服务器上禁止Ping,并且只在必要时才打开Ping服务。
四 原子弹——OOB Nuke
1.原理
OOB Nuke又名Windows nuke,是在1997年5月被发现的,这种攻击将导致Windows 95/98蓝屏,在当时的IRC聊天用户中很流行。OOB Nuke攻击的实现是由于Windows 95/98不能正确的处理带外数据。在TCP协议中提供了“紧急方式”,是传输的一端告诉另一端有些具有某种方式的“紧急数据”已经放到普通的数据流中,如何处理由接受方决定。通过设置TCP首部中的两个字段发出这种通知,URG比特被设置为1,并且一个16比特的紧急指针被设置为一个正的偏移量,某些实现将TCP的紧急方式称之为带外数据。问题在于Windows 95/98不知道如何处理带外数据。OOB Nuke一般使用139端口。
2.攻击
仅提供一款工具:WindowsNuke2,如下图3所示:
javascript:resizepic(this) border=0>
图3
3.防御
打相关的补丁或者将你的Windows 95/98升级到2000或更高,不过连微软都已经放弃了Windows 95/98,估计现在还在使用它的人少之又少了。
五 Land攻击
1.原理
Land攻击是由著名的黑客组织RootShell发现的,于1997年11月20日公布的,原理比较简单,就是利用TCP连接三握手中的缺陷,向目标主机发送源地址与目标地址一样的数据包,造成目标主机解析Land包占用太多的资源,从而使网络功能完全瘫痪。具体说应该是,Land攻击打造一个特别的SYN包,其源地址和目标地址被设置成同一个计算机的地址,这时将导致该计算机向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每个这样的连接都将保留直到超时。
2.攻击
Land攻击对Windows 95很有效,但实际上,很多基于BSD的操作系统都有这个漏洞。不同的操作系统对Land攻击反应不同,很多Unix将崩溃,而Windows NT会变得非常缓慢,而且对Linux,路由器,其它大量的Unix都具有相当的攻击力。这里提供Land程序的源代码(请见光盘)。
3.防御
打最新的相关的安全补丁,在防火墙上进行配置,将那些在外部接口上进入的含有内部源地址的包过滤掉,包括10域,127域,192.168域,172.16到172.31域。由于Land攻击主要是构造IP包,使源IP和目标IP相同,源端口和目的端口相同,所以如果使用Tcpdump,可记录到攻击特征为:
23:45:13 815705 192.168.0.111 23>192.168.0.111 23:S 3868:3868(0) Windows 2048
六 泪滴——Teardrop攻击
1.原理
对于一些大的IP包,需要对其进行分片传送,这是为了迎合链路层的MTU(最大传输单元)的要求。比如,一个4500字节的IP包,在MTU为1500的链路上传输的时候,就需要分成三个IP包。
在IP报头中有一个偏移字段和一个分片标志(MF),如果MF标志设置为1,则表面这个IP包是一个大IP包的片断,其中偏移字段指出了这个片断在整个IP包中的位置。例如,对一个4500字节的IP包进行分片(MTU为1500),则三个片断中偏移字段的值依次为:0,1500,3000。这样接收端就可以根据这些信息成功的组装该IP包。
如果一个攻击者打破这种正常情况,把偏移字段设置成不正确的值,即可能出现重合或断开的情况,就可能导致目标操作系统崩溃。比如,把上述偏移设置为0,1300,3000。这就是所谓的泪滴攻击。
2.攻击
在早期的由BSD实现的网络协议中,在处理数据包分段时存在漏洞,后来的一些操作系统都沿用了BSD的代码,所以这个漏洞在Linux,Windows 98和Windows NT中都是存在的。网上有一个Linux上运行的Teardrop程序——Teardrop.c,它就是实现这样的攻击的。下载地址是:http://www.computec.ch/software/denial_of_service/teardrop/teardrop.c
3.防御:
安装最新的服务包,设置防火墙时对分段进行重组,而不是转发它们。
七 UDP Flood
1.原理
做个简单的实验,用Telnet连接到对方TCP chargen 19号端口,看看返回了什么?很吃惊的是,返回了大量的回应数据,如果能加以利用的话就能够发动DoS攻击了。先介绍一下Chargen服务, RFC0864中定义了这种服务,其UDP/TCP均使用了19号端口。UDP chargen server若收到一个封包,就会随一个封包回去;而TCP chargen server若发现与Client的连线存在,就会不断的发送封包给Client,所以TCP chargen可以直接诱发DoS攻击。不过常用的还是UDP chargen,它常被用来作为DDoS中放大网络流量之用,一般要结合Echo服务。Echo服务用的是UDP的7号端口,如果它收到一个包,就会把包中的负载按原样返回,而如果你向UDP的19号端口Chargen发送一个任意字符,它将返回一个假的随机字符串。UDP Flood攻击就是通过伪造与某一台主机的Chargen服务之间的UDP连接,回复地址指向开着Echo服务的一台主机,这就能在两台主机之间产生无用的数据流,如果数据流足够多就会导致DoS。
UDP Flood图解(如图4所示):
javascript:resizepic(this) border=0>
图4
2.攻击
一个典型的UDP Flood攻击工具——UDP Flooder,如图5所示:
javascript:resizepic(this) border=0>
图5
3.防御
关掉一些不必要的TCP/IP服务,或者对防火墙进行配置,阻断来自Internet的请求这些服务的UDP请求。
八 分布式拒绝服务——DDoS
1.原理
大名鼎鼎的DDoS在2000年的“电子珍珠港事件”中名声大震,我也没必要说很多。从名字中我们就能得知,它是利用很多台机器一起发动攻击。攻击手法可能只是简单的Ping,也可能是SYN Flood或其它,但是由于它调用了很多台机器,所以规模很大,火力更猛,而且因为它利用了TCP/IP网络协议的缺陷,所以很难防御这种进攻。
2.攻击
2001年用来攻击Yahoo等网站的程序——TFN,Trinoo,TFN2K等都堪称是黑客技术的杰作,而且网上都有它们的源代码。
3.防御
主要谈一下防御。要阻止这种进攻关键是网络出口反欺骗过滤器的功能是否强大,也就是说如果你的WEB服务器收到的数据包的源IP地址是伪造的话,你的边界路由器或防火墙必须能够识别出来并将其丢弃,最快速的方法是和ISP联手通过丢包等方法一起来阻挡这种庞大的进攻。另外针对DDoS进攻是集中于某一个IP地址的特点,使用移动IP地址技术也是一种不错的选择。大多数的DDoS攻击代码是公开的,分析源代码我们也可以根据其特点设计出有效的反击方法,或者使用工具检测这种进攻。现在已经出现了名为Ngrep的工具,它使用DNS来跟踪TFN2K驻留程序。
九 分布式反射拒绝服务——DRDoS
1.原理
一种比DDoS更可怕的攻击方式已经出现了!它就是DRDoS——分布式反射拒绝服务(Distributed Reflection Denial of Service)。DRDoS不同于以往的拒绝服务方式,它对DDoS作了改进,它是通过对正常的服务器进行网络连接请求来达到攻击目的的。从TCP的三次握手中我们知道了任何合法的TCP连接请求都会得到返回数据包,而这种攻击方法就是将这个返回包直接返回到被攻击的主机上,这里涉及到数据包内的源IP地址问题,就是利用数据包的IP地址欺骗方法,欺骗被利用的网络服务器提供TCP服务,让此服务器认为TCP请求连接都是被攻击主机上发送的,接着它就会发送“SYN+ACK”数据包给被攻击主机,恶意的数据包就从被利用的服务器“反射”到了被害主机上,形成洪水攻击。
DRDoS图解(如图9所示):
javascript:resizepic(this) border=0>
图9
3.攻击
DRDoS很好地隐蔽了攻击者的真实地址,利用时我们也可以使用威力更大的方式。DRDoS攻击体系如图10所示:
javascript:resizepic(this) border=0>
图10
这里提供一款命令行攻击工具——DRDoS(安全焦点有下载),使用很简单,但是威力很大。慎用!
3.防御
防御这种攻击需要相当高的专业技巧,一般来说应该让网络安全事件响应小组来取证分析,并请信息安全服务商来解决。