原文地址:https://www.cnblogs.com/davidwang456/p/3590846.htmlhtml
DoS究竟是什么?接触PC机较早的同志会直接想到微软磁盘操做系统的DOS--DiskOperationSystem?不,此DoS非彼DOS也,DoS即DenialOfService,拒绝服务的缩写。安全
DoS是Denial of Service的简称,即拒绝服务,形成DoS的***行为被称为DoS***,其目的是使计算机或网络没法提供正常的服务。最多见的DoS***有计算机网络带宽***和连通性***。
1、概念理解:服务器
做个形象的比喻来理解DoS。街头的餐馆是为大众提供餐饮服务,若是一群地痞流氓要DoS餐馆的话,手段会不少,好比霸占着餐桌不结帐,堵住餐馆的大门不让路,骚扰餐馆的服务员或厨子不能干活,甚至更恶劣……相应的计算机和网络系统则是为Internet用户提供互联网资源的,若是有***要进行DoS***的话,能够想象一样有好多手段!今天最多见的DoS***有对计算机网络的带宽***和连通性***。带宽***指以极大的通讯量冲击网络,使得全部可用网络资源都被消耗殆尽,最后致使合法的用户请求没法经过。连通性***指用大量的链接请求冲击计算机,使得全部可用的操做系统资源都被消耗殆尽,最终计算机没法再处理合法用户的请求。 传统上,***者所面临的主要问题是网络带宽,因为较小的网络规模和较慢的网络速度的限制,***者没法发出过多的请求。虽然相似“thepingofdeath”的***类型只须要较少许的包就能够摧毁一个没有打过补丁的UNIX系统,但大多数的DoS***仍是须要至关大的带宽的,而以我的为单位的***们很难使用高带宽的资源。为了克服这个缺点,DoS***者开发了分布式的***。***者简单利用工具集合许多的网络带宽来同时对同一个目标发动大量的***请求,这就是DDoS***。
不管是DoS仍是DDoS,简单的看,都只是一种破坏网络服务的***方式,虽然具体的实现方式变幻无穷,但都有一个共同点,就是其根本目的是使受害主机或网络没法及时接收并处理外界请求,或没法及时回应外界请求。其具体表现方式有如下几种:网络
利用被主机所提供服务程序或传输协议的自己实现缺陷,反复发送畸形的数据引起系统错误的分配大量系统资源,使主机处于挂起状态甚至死机。
2、***流程:并发
要理解dos***,首先要理解TCP链接的三次握手过程(Three-wayhandshake)。在TCP/IP协议中,TCP协议提供可靠的链接服务,采用三次握手创建一个链接。
1.第一次握手:创建链接时,客户端发送SYN包((SYN=i)到服务器,并进入SYN SEND状态,等待服务器确认;
2.第二次握手:服务器收到SYN包,必须确认客户的SYN (ACK=i+1 ),同时本身也发送一个SYN包((SYN=j)}即SYN+ACK包,此时服务器进入SYN_RECV状态;
3.第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=j+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据。tcp
在上述过程当中,还有一些重要的概念:分布式
上面三个参数对系统的TCP链接情况有很大影响。ide
SYN洪水***属于DoS***的一种,它利用TCP协议缺陷,经过发送大量的半链接请求,耗费CPU和内存资源。 SYN***除了能影响主机外,还能够危害路由器、防火墙等网络系统,事实上SYN***并无论目标是什么系统,只要这些系统打开TCP服务就能够实施。从图 4-3可看到,服务器接收到链接请求(SYN=i )将此信息加入未链接队列,并发送请求包给客户端( SYN=j,ACK=i+1 ),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未链接队列删除。配合IP欺骗,SYN***能 达到很好的效果,一般,客户端在短期内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,因为源地址是不存 在的,服务器须要不断的重发直至超时,这些伪造的SYN包将长时间占用未链接队列,正常的SYN 请求被丢弃,目标系统运行缓慢,严重者引发网络堵塞甚至系统瘫痪。过程以下: ***主机C(地址假装后为C')-----大量SYN包---->被***主机 C'<-------SYN/ACK包----被***主机
因为C’地址不可达,被主机等待SYN包超时。主机经过发大量SYN包填满未链接队列,致使正常SYN包被拒绝服务。另外,SYN洪水还能够经过发大量ACK包进行DoS。
3、***手段:工具
拒绝服务***是一种对网络危害巨大的恶意***。今天,DoS具备表明性的***手段包括PingofDeath、TearDrop、UDPflood、SYNflood、LandAttack、IPSpoofingDoS等。看看它们又是怎么实现的。
泪滴 (teardrop)
泪滴利用在TCP/IP协议栈实现中信任IP碎片中的包的标题头所包含的信息来实现本身的。IP分段含有指示该分段所包含的是原包的哪一段的信息,某些TCP/IP协议栈(例如NT在servicepack4之前)在收到含有重叠偏移的伪造分段时将崩溃。测试
UDP泛洪(UDPflood)
UDPflood:现在在Internet上UDP(用户数据包协议)的应用比较普遍,不少提供WWW和Mail等服务设备一般是使用Unix的服务器,它们默认打开一些被恶意利用的UDP服务。如echo服务会显示接收到的每个数据包,而本来做为测试功能的chargen服务会在收到每个数据包时随机反馈一些字符。UDPflood假冒就是利用这两个简单的TCP/IP服务的漏洞进行恶意,经过伪造与某一主机的Chargen服务之间的一次的UDP链接,回复地址指向开着Echo服务的一台主机,经过将Chargen和Echo服务互指,来回传送毫无用处且占满带宽的垃圾数据,在两台主机之间生成足够多的无用数据流,这一拒绝服务***飞快地致使网络可用带宽耗尽。
SYN泛洪(SYNflood)
SYNflood:咱们知道当用户进行一次标准的 TCP(TransmissionControlProtocol)链接时,会有一个3次握手过程。首先是请求服务方发送一个 SYN(SynchronizeSequenceNumber)消息,服务方收到SYN后,会向请求方回送一个SYN-ACK表示确认,当请求方收到 SYN-ACK后,再次向服务方发送一个ACK消息,这样一次TCP链接创建成功。“SYNFlooding”则专门针对TCP协议栈在两台主机间初始化链接握手的过程进行DoS,其在实现过程当中只进行前2个步骤:当服务方收到请求方的SYN-ACK确认消息后,请求方因为采用源地址欺骗等手段使得服务方收不到ACK回应,因而服务方会在必定时间处于等待接收请求方ACK消息的状态。而对于某台服务器来讲,可用的TCP链接是有限的,由于他们只有有限的内存缓冲区用于建立链接,若是这一缓冲区充满了虚假链接的初始信息,该服务器就会对接下来的链接中止响应,直至缓冲区里的链接企图超时。若是恶意***方快速连续地发送此类链接请求,该服务器可用的TCP链接队列将很快被阻塞,系统可用资源急剧减小,网络可用带宽迅速缩小,长此下去,除了少数幸运用户的请求能够插在大量虚假请求间获得应答外,服务器将没法向用户提供正常的合法服务。
Land(LandAttack)
在Land中,利用一个特别打造的SYN包--它的原地址和目标地址都被设置成某一个服务器地址进行。此举将致使接受服务器向它本身的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并建立一个空链接,每个这样的链接都将保留直到超时,在Land***下,许多UNIX将崩溃,NT变得极其缓慢(大约持续五分钟)。
IP欺骗dos
这种利用TCP协议栈的RST位来实现,使用IP欺骗,迫使服务器把合法用户的链接复位,影响合法用户的链接。假设如今有一个合法用户(100.100.100.100)已经同服务器创建了正常的链接,者构造的TCP数据,假装本身的IP为100.100.100.100,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从100.100.100.100发送的链接有错误,就会清空缓冲区中已创建好的链接。这时,合法用户100.100.100.100再发送合法数据,服务器就已经没有这样的链接了,该用户就被拒绝服务而只能从新开始创建新的链接。
Smurf是一种简单但有效的DDoS技术,它利用了ICMP(Internet控制信息协议)。ICMP在Internet上用于错误处理和传递控制信息。它的功能之一是与主机联系,经过发送一个“回音请求”(echorequest)信息包看看主机是否“活着”。最普通的ping程序就使用了这个功能。Smurf是用一个偷来的账号安装到一个计算机上的,而后用一个伪造的源地址连续ping一个或多个计算机网络,这就致使全部计算机所响应的那个计算机并非实际发送这个信息包的那个计算机。这个伪造的源地址,实际上就是的目标,它将被极大数量的响应信息量所淹没。对这个伪造信息包作出响应的计算机网络就成为***的不知情的同谋。
4、常见的DoS***与防御
SYN Flood
原理:
问题就出在TCP链接的三次握手中,假设一个用户向服务器发送了SYN报文后忽然死机或掉线,那么服务器在发出SYN+ACK应答报文后是没法收到客户端的 ACK报文的(第三次握手没法完成),这 种状况下服务器端通常会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的链接,这段时间的长度咱们称为SYN Timeout,通常来讲这个时间是分钟的数量级(大约为30秒 -2分钟);一个用户出现异常致使服务器的一个线程等待1分钟并非什么很大的问题,但若是有一个恶意的者大量模拟这种状况,服务器端将为了维护一个 很是大的半链接列表而消耗很是 多的资源----数以万计的半链接,即便是简单的保存并遍历也会消耗很是多的CPU时间和内存,况且还要不断对这个列表中的IP进行SYN+ACK的重 试。实际上若是服务器的TCP/IP栈不够强大,最 后的结果每每是堆栈溢出崩溃---即便服务器端的系统足够强大,服务器端也将忙于处理者伪造的TCP链接请求而无暇理睬客户的正常请求(毕竟客户端的 正常请求比率很是之小),此时从 正常客户的角度看来,服务器失去响应,这种状况咱们称做:服务器端受到了SYN Flood(SYN洪水)。
防范:
第一种是缩短SYN Timeout时间
第二种方法是设置SYN Cookie,就是给每个请求链接的IP地址分配一个Cookie,若是短期内连续受到某个IP的重复SYN报文,就认定是受到了,之后从这个IP地址来的包会被一律丢弃。
netstat -n -p tcp >result.txt
Smurf:
原理:
发送假装的ICMP数据包,目的地址设为某个网络的广播地址,源地址设为要的目的主机,使全部收到此ICMP数据包的主机都将对目的主机发出一个回应,使被***主机在某一段时间内收到 成千上万的数据包
防范:
在cisco路由器上配置以下能够防止将包传递到广播地址上:
Router(config-if)# no ip directed-broadcast
Ping of Death
原理:
"ping of death"就是咱们常说的"死亡Ping"
这种经过发送大于65536字节的ICMP包使操做系统崩溃;一般不可能发送大于65536个字节的ICMP包,但能够把报文分割成片断,而后在目标主机上重组;最终会致使被目标缓冲区溢出,引发拒绝服务。有些时候致使telnet和http服务中止,有些时候路由器重启。
泪滴
原理:
对于一些大的IP数据包,每每须要对其进行拆分传送,这是为了迎合链路层的MTU(最大传输单元)的要求。好比,一个6000字节的IP包,在MTU为2000的链路上传输的时候,就须要分红3个IP 包。在IP报头中有一个偏移字段和一个拆分标志(MF)。若是MF标志设置为1,则表示这个IP包是一个大IP包的片断,其中偏移字段指出了这个片断在整 个IP包中的位置。例如,对一个6000字 节的IP包进行拆分(MTU为2 000),则3个片断中偏移字段的值依次为0,2000,4000。这样接收端在所有接收完IP数据包后,就能够根据这些信息从新组装这几个分次接收的拆分IP包。在这 里就有一个安全漏洞能够利用了,就是若是们在截取IP数据包后,把偏移字段设置成不正确的值,这样接收端在收到这些分拆的数据包后,就不能按数据包中 的偏移字段值正确组合这些拆 分的数据包,但接收端会不断尝试,这样就可能导致目标计算机操做系统因资源耗尽而崩溃。