DDoS攻击概述
DDoS 攻击分类
- 带宽消耗型
就是消耗网络带宽,需要保证攻击端流量比被攻击端大,所以一般是分布式DoS发起; - 资源消耗型
消耗主机资源,比如三次握手中的backlog队列
网络层攻击
SYN Flood(资源消耗型)
防御
调整内核参数
tcp_syncookies
SYN Cookie的作用是缓解服务器资源压力。启用之前,服务器在接到SYN数据包后,立即分配存储空间,并随机化一个数字作为SYN号发送SYN+ACK数据包。然后保存连接的状态信息等待客户端确认。启用SYNCookie之后,服务器不再分配存储空间,而且通过基于时间种子的随机数算法设置一个SYN号,替代完全随机的SYN号。发送完SYN+ACK确认报文之后,清空资源不保存任何状态信息。直到服务器接到客户端的最终ACK包,通过Cookie检验算法鉴定是否与发出去的SYN+ACK报文序列号匹配,匹配则通过完成握手,失败则丢弃。tcp_max_syn_backlog则是使用服务器的内存资源,换取更大的等待队列长度,让攻击数据包不至于占满所有连接而导致正常用户无法完成握手。
tcp_synack_retries是降低服务器SYN+ACK报文重试次数,尽快释放等待资源。
TCP Proxy
所有的SYN数据报文由清洗设备接受,按照syn cookie 方案处理。和设备成功建立了TCP三次握手的IP地址被判定为合法用户加入白名单,由设备伪装真实客户端IP地址再与真实服务器完成三次握手,随后转发数据。而指定时间内没有和设备完成三次握手的IP地址,被判定为恶意IP地址屏蔽一定时间。除了SYN Cookie结合TCP Proxy外,清洗设备还具备多种畸形TCP标志位数据包探测的能力,通过对SYN报文返回非预期应答测试客户端反应的方式来鉴别正常访问和恶意行为。
ICMP Flood(带宽消耗型)
发送大量 ICMP包,
UDP Flood(带宽消耗型)
应用层攻击
DNS Flood(带宽消耗+资源消耗)
向DNS服务器发送大量不存在的域名解析请求,DNS服务器迭代查找过程中,不停地向上一级服务器发送DNS请求。
HTTP Flood
CC攻击(资源消耗型)
Challenge Collapsar 即挑战黑洞
CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。
- 请求动态页面,每次请求都要访问数据库,如果模拟大量用户并发,就会使数据库负载极高
反射攻击(流量放大技术)(带宽消耗型)
DRDoS Distributed Reflection Denial of Service
NTP反射
NTP是时间服务器,提供了一个monlist查询功能,主要用于监控NTP服务器的服务状况,当用户端向NTP服务提交monlist查询时,NTP服务器会向查询端返回与NTP 服务器进行过时间同步的最后600个客户端的IP,由于NTP服务使用UDP协议,攻击者可以伪造源发地址向NTP服务进行monlist查询,这将导致NTP服务器向被伪造的目标发送大量的UDP数据包。
检测: 检测到网络中有大量的来自123端口的数据
防御:
1、关闭服务的monlist功能
2、丢弃来自UDP 123端口的数据包
脉冲攻击(慢速连接攻击)(资源消耗型)
slowloris slow headers
HTTP协议规定,HTTP Request以\r\n\r\n(0d0a0d0a)结尾表示客户端发送结束,服务端开始处理。那么,如果永远不发送\r\n\r\n会如何?Slowloris就是利用这一点来做DDoS攻击的。攻击者在HTTP请求头中将Connection设置为Keep-Alive,要求Web Server保持TCP连接不要断开,随后缓慢地每隔几分钟发送一个key-value格式的数据到服务端,如a:b\r\n,导致服务端认为HTTP头部没有接收完成而一直等待。如果攻击者使用多线程或者傀儡机来做同样的操作,服务器的Web容器很快就被攻击者占满了TCP连接而不再接受新的请求。slow http post slow body
在POST提交方式中,允许在HTTP的头中声明content-length,也就是POST内容的长度。
在提交了头以后,将后面的body部分卡住不发送,这时服务器在接受了POST长度以后,就会等待客户端发送POST的内容,攻击者保持连接并且以10S-100S一个字节的速度去发送,就达到了消耗资源的效果,因此不断地增加这样的链接,就会使得服务器的资源被消耗,最后可能宕机。slow Reader Attack
采用调整TCP协议中的滑动窗口大小,来对服务器单次发送的数据大小进行控制,使得服务器需要对一个回应分成很多个包来发送。要使这种攻击效果更加明显,请求的资源要尽量大。