首先开门见山,DDOS就是利用合理的请求造成资源过载,导致服务不可用。
在知乎上看到一篇对DDOS的解释很有趣,就把他引用过来,复仇者联盟看过吧,有这么一个场景,一大堆请求过来了:
然后服务器扛不住,拒绝了所有请求,把绿巨人这些也要进去的超级英雄也拦住了,像下面一样:
实际上DDOS就是所谓的,资源一直被无效的请求占用,导致真正有需要使用的客户反而用不了,就好像是商店售货员要给客户售卖东西,但所有的售货员都被一群不买东西的用户拦着聊天,导致真正要买东西的人反而接收不到服务。
回到正题,DDOS常见的攻击方式有:SYN flood、CC、UDP flood、ICMP flood.
SYN flood:
SYN flood为利用TCP/IP协议的漏洞进行攻击的一种手段。需要了解这种攻击手段首先要了解TCP/IP的三次握手。
如下所示:(图片取自百度百科)
第一次
第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。[3]
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。[3]
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。[3]
简而言之,就是
客户端请求建立连接2.服务器应答3.客户端确认。
SYN flood攻击流程:
伪造大量的源IP地址,对服务端进行请求
服务端收到请求,进行回应。
由于是假IP地址,不会响应。
服务端在第二步后过段时间又进行回应,直到多次失败后才放弃。
由于一直在进行这种半连接的处理,服务端就会陷入大量资源被占用的情况,而真实需要连接的用户就出现了连接不上的现象了。
SYN flood攻击的防御机制:对频繁访问的IP进行识别并过滤。
CC攻击:
CC攻击为黑客刻意去制造一堆访问资源消耗比较大的正常请求,造成服务器资源被占满的情况。这种在web应用上尤为常见,比如说查询数据库、磁盘读写等。
这样的场景在测试中很容易制造,比如说我查询一个比较复杂的报表,查询的时候进行并发调用,就很可能把服务资源用完。
如果换做一个网站,几乎避免不了各种爬虫爬取资源的现象,早已是爬虫满世界的互联网国度,如果不做好墙,分分钟可以把对面的服务器给爬到挂掉。
CC攻击的防御机制:由于CC攻击做出的是正常的业务请求,很难以区分,一般会有两种方式去避免,1、限制用户过于频繁的请求。2、验证码阻隔。
举个例:
记得我最早在学习写爬虫的时候,忘记调整频率,结果我的IP一进去爬虫就被拒绝访问了,对方网站识别出了爬虫直接拒绝了我的请求。但只用几分钟我就找到了重新访问的办法,那就是开ip代理进行访问,那时候网上免费的ip代理一大堆,立马就访问通过了。所以用1的方式就比较局限。因而有了第二种方法,只要验证码不被轻易识别,普通爬虫用户就难以进去。所以可以明白为什么有段时间12306那些反人类的验证码出现的理由了吧。
UDP flood:
上面说到过利用TCP/IP漏洞进行攻击的案例,同样的UDP也可以被利用,UDP协议是一种无连接的服务,在UDP Flood 中,攻击者通常发送大量伪造源IP地址的小UDP包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。100k bps的UDP Flood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。
ICMP flood:
ICMP(Internet控制报文协议)用于在IP主机、路由器之间传递控制消息,控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息,虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。通过对目标系统发送海量数据包,就可以令目标主机瘫痪,如果大量发送就成了洪水攻击。
HTTP POST DOS:
POST攻击是在使用这些接口的时候,把对应要发送的报文长度设置的很长很长,然后发送速度调的很慢很慢,这样这个接口就一直被占用着,当同样的请求数多了之后,就会达到对应的连接上限,后面正常的业务请求就无法进行了。
小结:
各种各样的DOS层出不穷,但终归就是抢占资源,然后让正常用户无法使用。由于攻击成本很低,所以这种攻击在如今变得很频繁,如果要做到正确防范这样的攻击,却需要花费很大的精力。我认为这种现象未来依旧还会很多,而对抗这种攻击的路依旧道阻且长。
参考资料:《 白帽子讲WEB安全》
《WEB安全测试.(美)霍普》
《云安全》