浅谈WEB安全之DDoS攻击

日期:2017-06-16       浏览:749

一 概念

  1. DoS(denial-of-service attack):拒绝服务攻击
  2. DDoS(distributed denial-of-service attack):分布式拒绝服务攻击
  3. 都存在哪些攻击方式

二 DoS(拒绝服务攻击)

讲DDoS之前我们需要先说一下DoS攻击,DoS被称为拒绝服务攻击。我们可以这样理解:存在一个咖啡厅,每天的客流量都很固定,就算有浮动也不是很大,当前面积和座位量已经完全能够周转过来了。可是有一天突然来了很多人,他们从一早就坐进来,然后一坐就是一天,更可恶的是不消费,结果以往经常来的常客看到没位置后就走了。这就是DoS攻击,咖啡厅可以认为是服务器,那些占座位的恶劣客户可以认为是攻击者发起的占用服务器资源的一个连接,因为服务器的资源有限,当有大量连接都被攻击者占用,那来一个正常的访问请求也会被服务器拒绝掉,因为已经没有资源可以提供给访问者了,这就是拒绝服务攻击。

三 DDoS(分布式拒绝服务攻击)

如果攻击者只是用一台客户机发起攻击者对于服务器的压力还不是很大,当攻击者手中存在多个客户机(又称僵尸机),多台机器同时攻击服务器时,这就是分布式拒绝服务攻击,被称为DDoS攻击。

四 攻击方式

4.1、传输层-UDP攻击

我们都知道UDP是在网络层IP协议之上的协议,IP协议是不可靠(只负责传输数据包,不保证一定能到达目标),无连接(每一个数据包的传输路径都不是确定的)的协议,而UDP可以说只是将IP协议原封不动的拿过来就用,并没有做过多加工,所以说UDP也是不可靠,无连接协议,当数据包通过UDP发送时,所有的数据包在发送和接收时都是不需要进行握手验证的,当大量UDP数据包发送给服务器时,服务器拿到数据包会进行解析,解析完(根据数据包中的应用端口号)发现没有应用程序可以使用该数据包,然后就给发送者返回一个目标端口不可达等信息。这一来一回就占用了一个服务器连接,当存在海量该类型数据包时,服务器就会出现拒绝正常服务的现象。

4.2、传输层-TCP攻击

TCP也是基于IP协议之上的,只是TCP做了消息确认机制,发送数据前会进行三次握手,断开连接前会进行四次握手,每一个数据包都会进行接收确认、超时重发。所以TCP协议是一种可靠的数据传输协议。TCP传输数据前会进行三次握手,过程如下:
1)客户端向服务器发送一个SYN包,包含客户端使用的端口号和初始序列号x;
2)服务器收到客户端发来的SYN包后,再向客户端发送一个SYN和ACK,都是放在TCP报文内的,包含确认号x+1和服务器端的初始序列号y;
3)客户端收到服务器返回的SYN+ACK报文后,向服务器返回一个确认号y+1、序号为x+1的ACK报文,这时一个标准的TCP连接完成。
而攻击者在攻击时,伪造大量的源IP地址,分别向服务器发送大量的SYN包(上述第一步),此时服务器会返回SYN/ACK包(上述第二步),因为源地址是伪造的,所以伪造的IP并不会应答(上述第三步没有发生),服务器端没有收到伪造IP的回应,会尝试3~5次(上述第二步)并且等待一个SYN Time(一般是30秒至2分钟),如果超时则丢弃这个连接。如果攻击者海量发送这种伪造源地址的SYN请求,服务器将会消耗非常多的资源(CPU和内存)来处理这种半连接,同时还要不断的对这些IP进行SYN+ACK重试,最后的结果就是服务器没有可用资源来提供给正常的连接请求,导致拒绝服务。

4.3、应用层攻击

很多应用程序目前还并不是前后端分离的,也就是说页面的渲染还是在服务器上完成的,而有的页面非常的大,服务器渲染可以会很消耗资源,其中涉及到分页的请求且请求的页码和当前页数据量很大时可以更吃服务器资源。这时如果存在海量的连接,同时请求该页面,并且页码很大,当前页数据设置的也很大,如果数据库对分页查询条件还没有建立索引,那处理这个请求可能就会很耗时,并且是海量请求,服务器也就吃不消了,这自然就会出现其他正常请求过来时被服务器拒绝掉。
一个更形象的例子:假设在双十一当天,淘宝网的首页存在一个脚本,每一次刷新页面时都会发起一个请求到你的个人服务器中的一个很耗时的操作,你的个人服务器并没有那么高的并发能力,也就会出现拒绝服务。

4.4、资源耗尽攻击

我们都知道web server对于并发的连接数都有一定的上限,因此若是恶意的占用住这些连接不放手,那么web server的所有连接都将被恶意连接占用,从而无法接受新的请求,导致拒绝服务。在一个正常的HTTP包头中,是以rnrn表示HTTP Headers部分结束的。如果web server只收到一个rn,那么将认为HTTP Headers部分没有结束,并保持此连接不释放,继续等待完整的请求。此时客户端再发送任意的HTTP头,保持住连接即可。

4.5、HTTP POST攻击

HTTP POST攻击也是利用HTTP协议的Headers,在HTTP Headers中会有Content-Length属性,其值表示POST Body的数据长度,服务器收到Content-Length后没收到指定长度的数据是不会断开这个连接的。当我们指定一个非常大的Content-Length值后,然后我们再以非常低的速度发送数据,例如每80秒发送一个字节,保持住这个连接不断。这样当客户端连接数多了以后,占用住了web server的所有可用连接,从而导致DoS攻击成功。
DDoS攻击方式有很多,这里只是列出了一部分。
扫码关注有惊喜

(转载本站文章请注明作者和出处 qbian)

暂无评论

Copyright 2016 qbian. All Rights Reserved.

文章目录