TCP原理篇之连接耗尽攻击&异常报文攻击
在前面的两篇贴子中,我们逐一介绍了利用TCP各种报文进行的Flood类攻击,以及华为Anti-DDoS解决方案的应对措施。由于TCP协议的重要性,攻击者们绞尽脑汁寻找协议可利用的弱点,针对TCP的攻击手段花样繁多。本篇我们就来介绍另外两种攻击方式:TCP连接耗尽攻击和TCP异常报文攻击。 0x01 TCP连接耗尽攻击与防御 TCP是面向连接的协议,通信双方必须保持连接状态,并且通过确认、重传、滑动窗口等机制,保证数据传输的可靠性和稳定性。攻击者利用TCP协议的上述特点,在TCP连接上做文章,利用TCP连接来消耗被攻击目标的系统资源,这类攻击的影响也不容小觑。 例如,攻击者与被攻击目标完成三次握手后,立刻发送FIN或RST报文,释放本端连接,同时快速发起新的连接,以此来消耗被攻击目标的系统资源。华为Anti-DDoS解决方案通过检查新建连接的速率来防御此类攻击。首先,针对受保护目标进行统计,当受保护目标的TCP新建连接速率超过阈值时,启动防御功能。然后针对源进行统计,如果某个源IP在指定的时间间隔内发起的TCP新建连接数超过了阈值,则将该源IP加入黑名单。
又比如,攻击者与被攻击目标完成三次握手后,发送很少的报文来维持连接状态,通过这种异常的TCP连接来消耗被攻击目标的系统资源。华为Anti-DDoS解决方案通过异常会话检查来防御此类攻击。如果受保护目标的TCP连接上特定时间内通过的报文数小于阈值,则认为该连接为异常会话。如果在特定时间内某个源IP的异常会话数超过阈值,则将该源IP加入黑名单。
除此之外,攻击者还会使用一些其他的攻击手段,比如构造大量的并发连接、设置很小的TCP窗口、发送重传报文等,其目的都是消耗被攻击目标的系统资源。总体来说,华为Anti-DDoS解决方案防御此类攻击时,还是基于会话机制,通过新建连接速率检查、并发连接数检查、异常会话检查等措施,将攻击源加入黑名单,阻断攻击流量达到防御效果。 0x02 TCP异常报文攻击与防御 TCP报文头中存在六个标志位字段,代表不同的含义,标志位的值置为1,表示该标志位起作用。我们在前面介绍TCP连接建立和断开过程时,提到过SYN、ACK和FIN标志位,下面是这六个标志位的详细信息: URG:置1时表示紧急指针有效。 ACK:置1时表示确认序号有效。 PSH:置1时表示接收方收到数据段后应该尽快送到应用程序。 RST:置1时表示重新建立连接。 SYN:置1时表示发起一个连接。 FIN:置1时表示发送方完成发送任务,释放连接。 这六个标志位在TCP交互过程中各司其职,标志位置1与否必须严格遵循TCP协议规范。如果不遵循规范随意将标志位置0或置1,这类报文就称为TCP异常报文。接收方处理这些异常报文时会消耗系统资源,甚至可能会导致系统崩溃。攻击者也可以利用TCP异常报文来发起DDoS攻击,向被攻击目标发送大量的构造的TCP异常报文,导致被攻击目标系统资源耗尽、网络拥塞,无法正常提供服务。 华为Anti-DDoS解决方案通过检查TCP报文是否符合协议规范来防御异常报文攻击。例如,正常情况下TCP报文中六个标志位的值不可能都置为0。Anti-DDoS系统检查发现此类异常报文后,就直接将报文丢弃。
又比如,SYN标志位用来建立连接,FIN标志位用来断开连接,正常情况下同一个TCP报文中SYN和FIN标志位不可能同时置为1。同样,Anti-DDoS系统检查发现此类异常报文后,直接丢弃报文。
下面给出了Anti-DDoS系统判定TCP异常报文的原则,通过这些检查项,Anti-DDoS系统可以全面准确的防御TCP异常报文攻击。