DDoS攻击分为SYN Flood、UDP Flood、ACK Flood、ICMP Flood、DNS Query Flood、NTP reply Flood、CC攻击等,按攻击方式针对三到七层协议发起,最终达到使目标服务器拒绝服务的目的。
SYN Flood
效果
服务器TCP连接资源耗尽,停止响应正常的TCP连接请求。
原理
建立一次TCP连接需要三次握手:
1)用户发送SYN消息给服务器,要求服务器做好接受消息的准备。
2)服务器响应SYN-ACK消息,确认已做好接收准备,同时要求用户做好接收消息的准备(半开状态)
3)用户回应ACK消息,告诉服务器我已做好接收准备
至此一个正常的TCP连接就建立起来了,但是如果用户构造了一个syn消息发送给服务器,服务器响应syn-ack后用户故意延迟或者干脆不发送ack,那么服务器将不能确定自己发的syn-ack是否被用户收到,或者用户的ack时候丢在了半路,于是服务器会给这个连接设置一个timer,超时之后会一直重复发送syn-ack消息,直到重试一定次数后才放弃。
在这种情况下,服务器为了帮助用户建立连接,会分配一定资源维护半开连接,那么如果大量请求只发送syn消息而不去响应ack,服务器会不得不维护大量的半开连接,直到资源耗尽无法正常响应用户请求。
防御
- 提高TCP端口连接容量的同时减少半开连接的资源占用时间
- 减少半开状态下等待ACK消息的时间或者重试发送SYN-ACK消息的次数
- SYN cache 维护一个哈希表,根据请求的ip,port加密后生成key,将请求大致随机的缓存到不同bucket中去,bucket满了就清空,这样攻击者必须要装满所有桶,而且还需要足够的填桶速度
- SYN cookie 服务器把请求信息编码后组装成cookie随SYN-ACK消息一同返回给用户,随之丢弃这个连接,正常用户会返回带着cookie的ack消息,服务器据此建立连接。恶意攻击不会返回ack信息,服务器也不会有损失,但是服务器将不能重发syn-ack消息。
UDP Flood
效果
拥塞网络直至网络瘫痪
拥塞网络转发设备直至会话耗尽
占用服务器资源直至服务器无法响应正常请求
原理
当服务器在特定端口接收到UDP数据包时,会有两个步骤:
1)服务器首先检查是否正在运行正在侦听指定端口的请求的程序
2)如果没有程序在该端口接收数据包,则服务器使用ICMP(ping)数据包进行响应,以通知发送方目的地不可达
服务器会利用自己的资源尽可能的响应所有udp包,在DDoS攻击期间,大量伪造的体积较大的udp包拥塞网络带宽资源,耗尽服务器资源,使服务器无法响应正常请求
防御
- 关联tcp服务,当UDP攻击发生时启用TCP防御白名单,根据tcp提供的白名单决定某一源的UDP包是否丢弃
- 载荷检查,当udp流量超过阈值,检查报文消息,如果报文消息完全一样则认为是攻击包丢弃
- 指纹学习,将攻击udp报文中的显著特征学习为指纹,指纹匹配则丢弃
ACK Flood
效果
tcp拒绝服务
原理
tcp通信的报文中都含有ack标志位,服务器在接到一个带ack标志的数据包时,需要检查该ack代表的连接是否存在, 如果连接合法则正常响应,如果ack代表的连接不合法,则会回应rst包丢弃连接。
因此服务器要做两个动作:
1)查询ack是否合法
2)回应ack或者rst
因此攻击者可以构造小体积大流量的ack攻击对服务器发起攻击,通过不断消耗服务器查询的资源最终使服务器拒绝服务。
防御
- 对称判断:收包数远大于发包数
- ack攻击为了提高发包速度,报文基本都是一样的,可以用作特征识别
ICMP Flood
原理
ICMP是信息控制协议,服务器接到一个ICMP报文需要响应当前的网络状态,当大量ICMP报文到达时,服务器最终不堪重负,失去正常响应的能力。
DNS Query Flood
效果
DNS服务器崩溃
原理
向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络上根本不存在的域名,被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层DNS服务器递归查询域名信息。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。
防御
- 对突然发起大量频度较低的域名解析请求的源 IP 地址进行带宽限制? 在攻击发生时降低很少发起域名解析请求的源 IP 地址的优先级;
- 限制每个源 IP 地址每秒的域名解析请求次数。
NTP reply Flood
效果
服务器流量损失
原理
NTP是用于互联网中时间同步的协议,NTP服务器向网络上的设备提供标准授时服务,保证系统的时间同步。标准NTP 服务提供了一个 monlist查询功能,此功能会返回与服务器进行过授时的600个客户端IP,调用一次monlist,服务器就将返回大量的UDP包发送IP信息,因此攻击者用极少的流量就可消耗NTP服务器大量的流量资源。
防御
- emmm。。当然是关掉monlist查询功能
CC攻击
效果
web页面卡顿,服务器CPU占满,无法响应操作
原理
模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。
- 只构造请求,不关心请求结果,即发送完请求后立即关闭会话;
- 持续请求同一操作;
- 故意请求小字节的数据包(如下载文件);
- qps高;
防御
- 添加session机制,不登陆或无权限的请求全部拒绝
- 限制统一访问源请求频率