拒绝服务***的原理
1.SYN Foold
SYN Flood是当前最流行的DoS(拒绝服务***)与DDoS(Distributed Denial Of Service分布式拒绝服务***)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,使被***方资源耗尽(CPU满负荷或内存不足)的***方式。
SYN Flood***的过程在TCP协议中被称为三次握手(Three-way Handshake),而SYN Flood拒绝服务***就是通过三次握手而实现的。
(1) ***者向被***服务器发送一个包含SYN标志的TCP报文,SYN(Synchronize)即同步报文。同步报文会指明客户端使用的端口以及TCP连接的初始序号。这时同被***服务器建立了第一次握手。
(2) 受害服务器在收到***者的SYN报文后,将返回一个SYN+ACK的报文,表示***者的请求被接受,同时TCP序号被加一,ACK(Acknowledgment)即确认,这样就同被***服务器建立了第二次握手。
(3) ***者也返回一个确认报文ACK给受害服务器,同样TCP序列号被加一,到此一个TCP连接完成,三次握手完成。
具体原理是:TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接。这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒~2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的***者大量模拟这种情况(伪造IP地址),服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃—— 即使服务器端的系统足够强大,服务器端也将忙于处理***者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况就称作:服务器端受到了SYN Flood***(SYN洪水***)。
2.IP欺骗DOS***
这种***利用RST位来实现。假设现在有一个合法用户(61.61.61.61)已经同服务器建立了正常的连接,***者构造***的TCP数据,伪装自己的IP为61.61.61.61,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从61.61.61.61发送的连接有错误,就会清空缓冲区中建立好的连接。这时,如果合法用户61.61.61.61再发送合法数据,服务器就已经没有这样的连接了,该用户就必须从新开始建立连接。***时,***者会伪造大量的IP地址,向目标发送RST数据,使服务器不对合法用户服务,从而实现了对受害服务器的拒绝服务***。
3. UDP洪水***
***者利用简单的TCP/IP服务,如Chargen和Echo来传送毫无用处的占满带宽的数据。通过伪造与某一主机的Chargen服务之间的一次的UDP连接,回复地址指向开着Echo服务的一台主机,这样就生成在两台主机之间存在很多的无用数据流,这些无用数据流就会导致带宽的服务***。
4. Ping洪流***
由于在早期的阶段,路由器对包的最大尺寸都有限制。许多操作系统对TCP/IP栈的实现在ICMP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区。当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是加载的尺寸超过64K上限时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使接受方死机。
5. 泪滴(teardrop)***
泪滴***是利用在TCP/IP堆栈中实现信任IP碎片中的包的标题头所包含的信息来实现自己的***。IP分段含有指明该分段所包含的是原包的哪一段的信息,某些TCP/IP(包括service pack 4以前的NT)在收到含有重叠偏移的伪造分段时将崩溃。 
6. Land***
Land***原理是:用一个特别打造的SYN包,它的原地址和目标地址都被设置成某一个服务器地址。此举将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接。被***的服务器每接收一个这样的连接都将保留,直到超时,对Land***反应不同,许多UNIX实现将崩溃,NT变的极其缓慢(大约持续5分钟)。
7. Smurf***
一个简单的Smurf***原理就是:通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)数据包来淹没受害主机的方式进行。最终导致该网络的所有主机都对此ICMP应答请求作出答复,导致网络阻塞。它比ping of death洪水的流量高出1或2个数量级。更加复杂的Smurf将源地址改为第三方的受害者,最终导致第三方崩溃。
8.Fraggle***
原理:Fraggle***实际上就是对Smurf***作了简单的修改,使用的是UDP应答消息而非ICMP。