4.1.3 华为Anti-DDoS系统的解决方案
SYN Flood这种没有明显攻击特征的报文,工程师不能通过特征识别或者指纹学习的方式对SYN报文进行过滤。我们可以从SYN报文建立连接的“行为”入手,判定其是否由真实源所发出的请求。
对于面向连接的DDoS攻击,最有效的防御方式是源认证。源认证有3个层面,分别为TCP/IP源认证、应用层源认证和用户源认证。
针对SYN Flood攻击的源认证,是整个源认证防御系统中的第一层TCP/IP源认证,如图4-5所示。在TCP三次握手还没有建立成功之前,Anti-DDoS会验证攻击源的TCP/IP是否真实可信。
从报文交互过程看出,Anti-DDoS设备代替Web服务器向客户端反弹一个错误序列号的SYN-ACK报文,等待客户端的回应。
① 如果是虚假源,网络中不存在这个源IP,或者源IP存在于网络但没有发送过SYN请求,源IP无故收到一个SYN-ACK报文,不会做任何响应,也无法通过源认证。
② 如果是真实源,当它收到一个错误的SYN-ACK报文,会回应一个RST报文,要求服务器重传。这时Anti-DDoS设备判定客户端是真实源,并加入白名单。后续这个源在一定时间内发送的SYN报文,会直接匹配白名单,并送达服务器。
当黑客发动10GB的变换源IP和源端口的攻击流量,服务器又反弹10GB的认证报文时,会造成网络严重拥塞。源认证的反弹机制会导致二次攻击的情况,因此Anti-DDoS设置了首包丢弃功能。
TCP之所以可靠,除了三次握手机制,还有一个是处理数据超时和重传的机制,如图4-6所示。TCP要求在发送端每发送一个报文段,就启动一个定时器并等待确认信息;接收端成功接收新数据后回复确认信息。若定时器在超时前数据未能被确认,TCP会认为报文段中的数据已丢失或损坏,并对报文段中的数据进行重新组织和重传。
首包丢弃便是利用TCP重传机制,对收到的第一个SYN报文直接丢弃,然后判定客户端是否重传。如果重传,再对第二个包进行源认证反弹。这样可以大大减少反弹包的数量,同时提高设备的处理性能,以达到最佳防御效果。
Anti-DDoS 设备判定这个报文是不是重传报文,有两个依据:三元组和时间间隔。三元组包含源IP地址、源端口和协议。
当 Anti-DDoS 设备收到一个 SYN 报文,首先会查询有没有匹配到三元组,如果没有,就认为该报文是首包,将其丢弃,并记录三元组信息。当 SYN 报文匹配到三元组时,再继续计算该报文与匹配到三元组的上一个报文到达的时间间隔。如果时间间隔不匹配,则认为是首包,将其丢弃;如果时间间隔匹配,则认为是后续包,将其放行。
源认证要和首包丢弃功能一起配合使用,对于虚假源攻击,尤其是针对不断变换源IP和源端口的虚假源攻击,可以达到最佳防御效果。其中,源认证是对IP层面的校验,认证这个源是不是真实存在的源;首包丢弃是对于TCP栈层面的校验,用于判断是否是这个源发出的真实请求。




