TCP连接耗尽攻击与防御
TCP是面向连接的协议,其通信双方必须保持连接状态,并且通过确认、重传、滑动窗口等机制,保证数据传输的可靠性和稳定性。攻击者利用 TCP 的上述特点,利用TCP连接消耗被攻击目标的系统资源。
连接耗尽攻击是指攻击者通过僵尸网络,向服务器发起大量的 TCP 连接,耗尽服务器的 TCP 连接资源。连接耗尽一般有以下几种攻击类型:
-
完成三次握手后,不发送任何报文,一直维持这些 TCP 连接。
-
完成三次握手后,立刻发送 FIN 或 RST 报文,释放本端连接,同时快速发起新的连接。
-
连接过程中呈现给服务器端很小的 TCP windows size,导致服务器 TCP 协议栈资源耗尽。
-
发送大量 TCP 重传请求,以很小的流量即可导致被攻击网络上行链路拥塞。
针对此攻击会耗尽服务器的 TCP 连接资源的特点, Anti-DDoS 设备对目的 IP 地址的新建连接速率和并发连接数分布进行统计,当新建连接速率或并发连接数大于阈值时,则触发对源 IP 地址的相应检查:
-
源 IP 地址新建连接速率检查:启动源 IP 地址新建连接速率检查后,如果某个源P 地址在检查周期内发起的 TCP 新建连接数大于阈值,则将该源 IP 地址判定为攻击源。
-
源 IP 地址并发连接数检查:启动源 IP 地址并发连接数检查后,如果某个源 IP 地址的 TCP 并发连接数大于阈值,则将该源 IP 地址判定为攻击源。
-
慢速连接速率检查:启动慢速连接速率检查后,统计同一源 IP 地址对同一目的 IP址的连接次数,在各统计时间间隔内,如果连续多次连接数相同,则判定为TCP 慢速连接攻击。
-
异常会话检查:如果在检查周期内,某个源 IP 地址发起的 TCP 异常会话的连接数大于阈值时,则将该源 IP 地址判定为攻击源。判定 TCP 异常会话依据如下:
-
空连接检查:如果在检查周期内,在某条 TCP 连接上通过的报文数小于阈值,则判定该连接为异常连接。
-
重传会话检查:当某条 TCP 连接上重传报文数量大于阈值时,则判定该连接为异常连接。
-
慢启动连接检查:当某条 TCP 连接上通过的报文窗口小于阈值时,则判定该连接为异常连接。
当检查发现异常时,将异常源 IP 地址加入黑名单,切断其 TCP 流量。
TCP异常报文攻击与防御
TCP报文标志位包括URG、 ACK、 PSH、 RST、 SYN、 FIN六位,其代表不同的含义,标志位的值置为1,表示该标志位起作用。
-
URG:置1时表示紧急指针有效。
-
ACK:置1时表示确认序号有效。
-
PSH:置1时表示接收方收到数据段后应该尽快送到应用程序。
-
RST:置1时表示重新建立连接。
-
SYN:置1时表示发起一个连接。
-
FIN:置1时表示发送方完成发送任务,释放连接。
这6个标志位在TCP交互过程中各司其职,标志位置必须严格遵循TCP规范。如果不遵循规范随意将标志位置0或置1,这类报文称为TCP异常报文。接收方处理这些异常报文时会消耗系统资源,甚至可能会导致系统崩溃。攻击者也可以利用TCP异常报文来发起DDoS攻击,向被攻击目标发送大量构造的TCP异常报文,导致被攻击目标系统资源耗尽、网络拥塞,无法正常提供服务。
下图给出了 Anti-DDoS 系统判定 TCP 异常报文的原则,通过这些检查项,AntiDDoS系统可以全面准确地防御TCP异常报文攻击。