DDoS 攻击与防御:从原理到实践(上)

社区编辑2018-05-18 15:26

可怕的 DDoS

 
出于打击报复、敲诈勒索、政治需要等各种原因,加上攻击成本越来越低、效果特别明显等趋势,DDoS 攻击已经演变成全球性的网络安全威胁。
 

危害

 
根据卡巴斯基 2016Q3 的调查报告,DDoS 攻击造成 61% 的公司无法访问其关键业务信息,38% 的公司无法访问其关键业务,33% 的受害者因此有商业合同或者合同上的损失。
 

 

趋势

 
总结来看,现在的 DDoS 攻击具有以下趋势:
 
1. 国际化
 
现在的 DDoS 攻击越来越国际化,而我国已经成为仅次于美国的第二大 DDoS 攻击受害国,而国内的 DDoS 攻击源海外占比也越来越高。
 

 
2. 超大规模化
 
由于跨网调度流量越来越方便、流量购买价格越来越低廉,现在 DDoS 攻击的流量规模越来越大。在 2014 年底,国内曾有云服务提供商遭受过高达 450Gbps 的攻击。
 
3. 市场化
 
市场化势必带来成本优势,现在各种在线 DDoS 平台、肉鸡交易渠道层出不穷,使得攻击者可以以很低的成本发起规模化攻击。按流量获取方式进行的对比可参考下表:
 

 

DDoS 攻击科普

 
DDoS 的攻击原理,往简单说,其实就是利用 tcp/udp 协议规律,通过占用协议栈资源或者发起大流量拥塞,达到消耗目标机器性能或者网络的目的。下面我们先简单回顾 TCP “三次握手” 与 “四次挥手” 以及 UDP 通信流程。
 

TCP 三次握手与四次挥手

 

 
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 通信流程

 

 
根据上图可发现,udp 通信是无连接、不可靠的,数据是直接传输的,并没有协商的过程。
 

攻击原理与攻击危害

 
按照攻击对象的不同,将对攻击原理和攻击危害的分析分成 3 类,分别是攻击网络带宽资源、系统以及应用。
 
攻击网络带宽资源
 

 
攻击系统资源
 

 
攻击应用资源
 

 

DDoS 防护科普

 

攻击防护原理

 
从 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 包可以直接丢弃,先在机房出口以下各个层面做丢弃或者限流策略。现在这种攻击已经很少见,对业务破坏力有限。


下篇:DDoS 攻击与防御:从原理到实践(下)