文章目录
- [1. UDP协议基础](#1. UDP协议基础)
- [2. UDP Flood](#2. UDP Flood)
-
- [2.1. 攻击原理](#2.1. 攻击原理)
- [2.2. 防护方法](#2.2. 防护方法)
- [3. TCP三次握手和四次挥手](#3. TCP三次握手和四次挥手)
-
- [3.1. 三次握手](#3.1. 三次握手)
- [3.2. 四次挥手](#3.2. 四次挥手)
- [4. SYN Flood](#4. SYN Flood)
-
- [4.1. 攻击原理](#4.1. 攻击原理)
- [4.2. 防护方法](#4.2. 防护方法)
- [5. SYN-ACK Flood](#5. SYN-ACK Flood)
-
- [5.1. 攻击原理](#5.1. 攻击原理)
- [5.2. 防护方法](#5.2. 防护方法)
- [6. ACK Flood](#6. ACK Flood)
-
- [6.1. 攻击原理](#6.1. 攻击原理)
- [6.2. 防护方法](#6.2. 防护方法)
- [7. FIN/RST Flood](#7. FIN/RST Flood)
-
- [7.1. 攻击原理](#7.1. 攻击原理)
- [7.2. 防护方法](#7.2. 防护方法)
- [8. TCP连接耗尽](#8. TCP连接耗尽)
-
- [8.1. 攻击原理](#8.1. 攻击原理)
- [8.2. 防护方法](#8.2. 防护方法)
- [9. 异常报文](#9. 异常报文)
-
- [9.1. 攻击原理](#9.1. 攻击原理)
- [9.2. 防护方法](#9.2. 防护方法)
1. UDP协议基础
UDP - 用户数据报协议:是一种无连接的四层传输协议,不提供数据的校验机制。当报文成功发送之后不再关心此报文是否完整的到达对端。
可以简单理解为:以牺牲协议安全性为前提,减少了需要传输的内容,UDP报文资源消耗更小,处理和传输速度更快,因此大部分的音频和视频数据均使用UDP协议传输。
2. UDP Flood
2.1. 攻击原理
黑客发送大量UDP协议报文到目标,由于UDP协议无法进行数据校验,因此目标会处理大量UDP报文而占用其业务资源。
2.2. 防护方法
- 常用端口限速:常见UDP协议,如DNS、NTP、SNMP等协议均有固定端口,可以对其端口进行阈值限速处理,防止流量过大;
- 特征提取过滤:UDP报文伪造多为工具输出,因此具有一定的特征值,常位于协议包的尾部,因此可以尝试获取UDP协议包载荷的最后几个字节,这个字节数最好为递增值(如1-8内递增变动),还需要注意偏移量。
3. TCP三次握手和四次挥手
3.1. 三次握手
- SYN:第一次握手,客户端向服务器发起连接请求,报文中设置SYN标志位为1,序号为0;
- SYN-ACK:第二次握手,服务器收到客户端请求后,向客户端回应报文,报文中设置SYN和ACK标志位为1,序号为0(服务器与客户端的序列号都是自维护递增关系,可以在Next Seq Number字段查看下一个序列号的值),确认序号为客户端的序号+1,即0+1=1;
- ACK:第三次握手,客户端收到服务器回应的报文后,检查报文中的确认序列号是否正常,如果正确则发送确认报文,确认报文中ACK标志位为1,确认序列号为服务器的序列号+1,即为0+1=1;
经过上述三次握手之后,TCP连接建立完成。若中间机制存在异常,则会发送RST报文(RST标志位为1)中断TCP连接会话,并重新建立新的连接。
3.2. 四次挥手
- FIN:TCP断开连接时第一次握手由服务器发起,报文中FIN标和ACK标志位为1,序号为11;
- ACK:第二次握手,客户端收到服务器发送的FIN报文之后,向服务器发送回应报文,报文中ACK标志位为1,确认序列号为服务器FIN报文中序列号+1,即为11+1=12;
- FIN:第三次握手,此时客户端也需要关闭与服务器的连接,客户端向服务器发送FIN报文,报文中FIN标和ACK标志位为1,序号为22(服务器与客户端的序列号都是自维护递增关系,可以在Next Seq Number字段查看下一个序列号的值);
- ACK:第四次握手,服务器收到客户端发送的FIN报文之后,向客户端发送回应报文,报文中ACK标志位为1,确认序列号为客户端FIN报文中序列号+1,即为22+1=23;
4. SYN Flood
4.1. 攻击原理
攻击者利用攻击或操纵僵尸网络主机发送大量TCP SYN报文,当服务器回应SYN-ACK报文后,攻击者不再回应ACK,导致三次握手连接无法建立,因此服务器上会残留大量的TCP半连接,导致其服务资源的浪费。
4.2. 防护方法
- 基本源认证:当流量触发防护阈值时,新的SYN报文被防护设备拦截,防护设备向客户端发送一个SYN-ACK报文, 其携带了错误的ACK Seq,真实客户端收到了带错误的序号报文,会RST当前连接,重新发起新的连接,防护设备若收到此IP的RST报文,则对IP加白即可。
- 高级源认证:与基本源认证不同的是,高级源认证发送的是正常的SYN-ACK报文,只不过连接的超时时间比TCP连接更加短,在限定时间内无法收到ACK时则断开此链接,不再进行多余的等待;
- 首包丢弃:防护设备丢弃第一个SYN报文并且同时记录其报文的三元组信息,此时会触发TCP重传机制,当新的SYN报文匹配到已保存的三元组后进行加白即可。
5. SYN-ACK Flood
5.1. 攻击原理
在TCP连接中,SYN-ACK报文是用来确认第一次握手的机制,如果攻击者利用工具或者操纵僵尸主机发送大量SYN-ACK报文到目标机器,目标会首先判断该报文是否属于当前正在建立的三次握手范畴内,不属于的话会直接发送RST报文中断此次连接,目标机器忙于发送大量的RST报文而导致资源消耗。
5.2. 防护方法
- 反向确认法:当流量触发防护阈值时,收到SYN-ACK报文时会记录其三元组信息,进行反向SYN连接探测,若源头做出响应,直接进行RST并将IP加白,反之无响应时则判断为虚假源。
6. ACK Flood
6.1. 攻击原理
在TCP连接中,ACK报文出现在第三次握手,用来确认第二次的SYN-ACK报文,攻击者利用工具或者操纵僵尸主机发送大量ACK报文,服务器忙于处理这些凭空出现的ACK报文而导致资源耗尽。
6.2. 防护方法
- 会话匹配模式:对ACK进行会话检查,如果ACK报文没有命中会话,则以此ACK报文的三元组信息建立会话进行存储,后续ACK报文进行会话检查,若命中会话则继续检查报文的序列号Seq Number,正确则放过,反之丢弃;
- 加强会话模式:不允许第一个ACK报文通过创建会话,只校验完成TCP三次握手的会话,没有命中的ACK均被丢弃,在引流场景下可能存在来回路径不一致问题(请求被代理,响应不过代理),会影响到因为转发的ACK报文。
7. FIN/RST Flood
7.1. 攻击原理
在TCP连接中,FIN和RST报文均用来关闭TCP连接,这两种报文仍然会被大量伪造用来消耗服务器资源。
7.2. 防护方法
- 会话匹配模式:若会话由SYN或SYN-ACK建立,则允许FIN/RST通过;若会话由其他报文创建,则检查报文内序列号,正确则通过,反之丢弃。
8. TCP连接耗尽
8.1. 攻击原理
攻击者利用僵尸机器大量创建TCP连接,当连接建立完成后
- 立即发送FIN或RST断开连接,同时快速发起新的连接,重复进行操作即可消耗服务器系统资源;
- 攻击者发送很少的报文来维持连接状态,以消耗服务器系统资源。
8.2. 防护方法
- 连接数监控:防护设备可以设置TCP连接速率,当受保护的TCP目标新建了连接,针对源IP进行统计,若某个IP在指定的时间内发起的TCP新建连接数超过了设置阈值,则进行拉黑操作。
- 报文数量监控:防护设备监控受保护目标的TCP连接,设置在特定时间内通过报文的数量阈值,若时间段内若低于设置阈值的传输报文数量,则断开此异常TCP连接即可。
9. 异常报文
TCP特殊标志位:
- URG:置1时表示紧急指针有效;
- ACK:置1时表示确认序号有效;
- PSH:置1时表示接收方收到数据段后应该尽快送到应用程序;
- RST:置1时表示重新建立连接;
- SYN:置1时表示发起一个连接;
- FIN:置1时表示发送方完成发送任务,释放连接。
9.1. 攻击原理
TCP协议标志位置1严格遵守协议规范,其不遵循规范的报文即为异常报文。
9.2. 防护方法
监控标志位置1的情况:
- 六个标志位都为1或0;
- SYN和FIN同时为1;
- SYN和RST同时为1;
- FIN和RST同时为1;
- 仅FIN为1;
- 仅PSH为1;
- 仅URG为1;
- 带有载荷的SYN和SYN-ACK报文;
- SYN、RST、FIN为1的分片报文;
...