DDoS(全称Distributed Denial of Service)攻击中译分布式拒绝服务攻击,是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。
分布式拒绝服务攻击原理分布式拒绝服务攻击DDoS是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布的、协同的大规模攻击方式。单一的DoS攻击一般是采用一对一方式的,它利用网络协议和操作系统的一些缺陷,采用欺骗和伪装的策略来进行网络攻击,使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。与DoS攻击由单台主机发起攻击相比较,分布式拒绝服务攻击DDoS是借助数百、甚至数千台被入侵后安装了攻击进程的主机同时发起的集团行为。
一个完整的DDoS攻击体系由攻击者、主控端、代理端和攻击目标四部分组成。主控端和代理端分别用于控制和实际发起攻击,其中主控端只发布命令而不参与实际的攻击,代理端发出DDoS的实际攻击包。对于主控端和代理端的计算机,攻击者有控制权或者部分控制权.它在攻击过程中会利用各种手段隐藏自己不被别人发现。真正的攻击者一旦将攻击的命令传送到主控端,攻击者就可以关闭或离开网络.而由主控端将命令发布到各个代理主机上。这样攻击者可以逃避追踪。每一个攻击代理主机都会向目标主机发送大量的服务请求数据包,这些数据包经过伪装,无法识别它的来源,而且这些数据包所请求的服务往往要消耗大量的系统资源,造成目标主机无法为用户提供正常服务。甚至导致系统崩溃。
攻击者进行一次DDoS攻击大概需要经过了解攻击目标、攻占傀儡机、实际攻击三个主要步骤,下面依次说明每一步骤的具体过程:
1、了解攻击目标就是对所要攻击的目标有一个全面和准确的了解,以便对将来的攻击做到心中有数。主要关心的内容包括被攻击目标的主机数目、地址情况。目标主机的配置、性能、目标的带宽等等。对于DDoS攻击者来说,攻击互联网上的某个站点,有一个重点就是确定到底有多少台主机在支持这个站点,一个大的网站可能有很多台主机利用负载均衡技术提供服务。所有这些攻击目标的信息都关系到后面两个阶段的实施目标和策略,如果盲目的发动DDoS攻击就不能保证攻击目的的完成,还可能过早的暴露攻击者的身份,所以了解攻击目标是有经验的攻击者必经的步骤。
2、攻占傀儡主机就是控制尽可能多的机器,然后安装相应的攻击程序。在主控机上安装控制攻击的程序,而攻击机则安装DDoS攻击的发包程序。攻击者最感兴趣,也最有可能成为别人的傀儡主机的机器包括那些链路状态好、性能好同时安全管理水平差的主机。攻击者一般会利用已有的或者未公布的一些系统或者应用软件的漏洞.取得一定的控制权,起码可以安装攻击实施所需要的程序,更厉害的可能还会取得最高控制权、留下后门等等。在早期的DDoS攻击过程中,攻占傀儡主机这一步主要是攻击者自己手动完成的,亲自扫描网络,发现安全性比较差的主机,将其攻占并且安装攻击程序。但是后来随着DDoS攻击和蠕虫的融合,攻占傀儡机变成了一个自动化的过程,攻击者只要将蠕虫放入网络中,蠕虫就会在不断扩散中不停地攻占主机,这样所能联合的攻击机将变得非常巨大,DDoS攻击的威力更大。
3、DDoS攻击的最后一个阶段就是实际的攻击过程,攻击者通过主控机向攻击机发出攻击指令,或者按照原先设定好的攻击时间和目标,攻击机不停的向目标或者反射服务器发送大量的攻击包,来吞没被攻击者,达到拒绝服务的最终目的。和前两个过程相比,实际攻击过程倒是最简单的一个阶段,一些有经验的攻击者可能还会在攻击的同时通过各种手段检查攻击效果,甚至在攻击过程中动态调整攻击策略,尽可能清除在主控机和攻击机上留下的蛛丝马迹。
DDoS 的攻击原理,往简单说,其实就是利用 tcp/udp 协议规律,通过占用协议栈资源或者发起大流量拥塞,达到消耗目标机器性能或者网络的目的。下面我们先简单回顾 TCP “三次握手” 与 “四次挥手” 以及 UDP 通信流程。
TCP 建立连接:三次握手
1.client: syn
2.server: syn+ack
3.client: ack
TCP 断开连接:四次挥手
1.client: fin
2.server: ack
3.server: fin
4.client: ack
根据上图可发现,udp 通信是无连接、不可靠的,数据是直接传输的,并没有协商的过程。
按照攻击对象的不同,将对攻击原理和攻击危害的分析分成 3 类,分别是攻击网络带宽资源、系统以及应用。
攻击网络带宽资源
攻击系统资源
攻击应用资源
从 tcp/udp 协议栈原理介绍 DDoS 防护原理:
syn flood:
可以在收到客户端第三次握手 reset 、第二次握手发送错误的 ack,等 Client 回复 Reset,结合信任机制进行判断。
ack flood:
丢弃三次 ack,让对方重连:重发 syn 建立链接,后续是 syn flood 防护原理;学习正常 ack 的源,超过阈值后,该 ack 没有在正常源列表里面就丢弃 ack 三次,让对方重连:重发 syn 建立链接,后续是 syn flood 防护。
udp flood:
按攻击流量规模分类
较小流量
小于 1000Mbps,且在服务器硬件与应用接受范围之内,并不影响业务的:
利用 iptables 或者 DDoS 防护应用实现软件层防护。
大型流量
大于 1000Mbps,但在 DDoS 清洗设备性能范围之内,且小于机房出口,可能影响相同机房的其他业务的:
利用 iptables 或者 DDoS 防护应用实现软件层防护,或者在机房出口设备直接配置黑洞等防护策略,或者同时切换域名,将对外服务 IP 修改为高负载 Proxy 集群外网 IP 或者 CDN 高仿 IP 或者公有云 DDoS 防护网关 IP,由其代理到 RealServer;或者直接接入 DDoS 清洗设备。
超大规模流量
在 DDoS 清洗设备性能范围之外,但在机房出口性能之内,可能影响相同机房的其他业务,或者大于机房出口,已经影响相同机房的所有业务或大部分业务的:
联系运营商检查分组限流配置部署情况,并观察业务恢复情况。
按攻击流量协议分类
syn/fin/ack 等 tcp 协议包
设置预警阀值和响应阀值,前者开始报警,后者开始处理,根据流量大小和影响程度调整防护策略和防护手段,逐步升级。
udp/dns query 等 udp 协议包
对于大部分游戏业务来说,都是 TCP 协议的,所以可以根据业务协议制定一份 tcp 协议白名单,如果遇到大量 udp 请求,可以不经产品确认或者延迟跟产品确认,直接在系统层面 /HPPS 或者清洗设备上丢弃 udp 包。
http flood/CC 等需要跟数据库交互的攻击
这种一般会导致数据库或者 webserver 负载很高或者连接数过高,在限流或者清洗流量后可能需要重启服务才能释放连接数,因此更倾向在系统资源能够支撑的情况下调大支持的连接数。相对来说,这种攻击防护难度较大,对防护设备性能消耗很大。
其他
icmp 包可以直接丢弃,先在机房出口以下各个层面做丢弃或者限流策略。现在这种攻击已经很少见,对业务破坏力有限。