DDoS攻击与防御(4)

时间:2022-10-23 18:49:28

在发生DDoS攻击的情况下,可以通过一些缓解技术来减少攻击对自身业务和服务的影响,从而在一定程度上保障业务正常运行。
缓解DDoS攻击的主要方法是对网络流量先进行稀释再进行清洗。

1.攻击流量的稀释

1.1 内容分发网络 CDN
CDN技术的初衷是提高互联网用户对网站静态资源的访问速度,由于分布式多节点的特点,它也能够对DDoS攻击的流量产生稀释的效果。
CDN在互联网范围内广泛设置多个节点作为代理缓存,并将用户的访问请求导向最近的缓存节点,以加快访问速度。
CDN使用智能DNS系统,一个域名对应一张IP地址表,当收到域名解析请求时,智能DNS会查看解析请求的来源,并给出地址表中距离请求来源最近的IP地址。
用户收到域名解析应答时,认为该CDN节点就是他请求的域名所对应的IP地址,并向该节点发起服务或资源请求。
CDN节点在收到用户的请求时,会在其存储的缓存内容中寻找用户请求的资源,如果找到,就直接将资源响应给用户,如果找不到,则作为代理服务器向源站请求资源并将结果缓存并返回给用户。
对于有大量静态资源的网站,使用CDN进行代理缓存能够大大减少源站的访问流量。
在发生DDoS攻击时,智能DNS会将来自不同位置的攻击流量分散到对应位置的CDN节点上,从而达到流量稀释的效果。
利用CDN技术只能稀释通过域名发起的DDoS攻击的流量,如果攻击者直接通过IP地址进行攻击,就不会经过智能DNS解析,也就无法稀释流量了。

1.2 任播 Anycast
Anycast技术是一种网络寻址和路由方法。通过使用它,多台提供特定服务的服务器可以使用相同的IP地址,客户端访问请求报文将会被IP网络路由到这一组服务器中最近的一台之上。
Anycast技术通常是通过在不同的节点处同时使用BGP协议向外声明同样的目的IP地址的方式实现的。
使用Anycast技术能够稀释DDoS攻击流量,在Anycast寻址过程中,流量会被导向最近的节点,攻击者不能对流量路径进行操控。
由于Anycast技术的高度可靠性,即使少数节点被DDoS攻击打垮,其周围客户端的请求也能够被快速地引导向其他可用的服务器,从而保证服务的高可用性。

2.攻击流量的清洗

2.1 IP信誉检查
IP信誉机制是指为互联网上的IP地址赋予一定的信誉值,那些过去或现在经常被作为僵尸主机发动DDoS攻击的IP地址会被赋予较低的信誉值。
当发生DDoS攻击时,流量清洗设备会对通过的网络流量进行IP信誉检查,优先丢弃信誉值低的IP地址所发来的数据包或建立的会话连接。
IP信誉检查的极端情况就是IP黑名单机制,如果数据包的来源存在于黑名单之中,则直接丢弃。
这种方式一般会造成较多的误报。

2.2 攻击特征匹配
多数情况下,发动DDoS攻击需要借助工具,为了提高发送请求的效率,攻击工具发出的数据包通常是由编写者伪造并固化到工具中的,因此一种攻击工具所发出的数据包载荷会具有一定的特征。
流量清洗设备可以将这些数据包载荷中的特征作为指纹,来识别工具所发出的攻击流量。
命中指纹特征的数据包会被丢弃。

2.3 速度检查与限制
一些攻击方法在数据包载荷上可能并不存在明显的特征,没有办法进行攻击特征匹配,但却在请求数据包发送的频率和速度上有着明显的异常。
这些攻击方法可以通过速度与限制来进行清洗。
例如在受到THC SSL DoS攻击时,会在同一个SSL会话中多次进行密钥协商,而正常情况下是不会这样的,因此当流量清洗设备发现SSL会话中密钥协商的次数超过了特定的值,就可以中断这个会话并将来源IP加入黑名单中。
再如受到Slowloris和POST慢速攻击时,客户端和服务器之间会以非常低的速率进行交互和数据传输,流量清洗设备在发现HTTP请求长时间没有完成传输时,就可以将会话中断。

2.4 TCP代理和验证
在一个TCP SYN请求到达流量清洗设备后,设备并不将它交给服务器,而是回复一个SYN+ACK响应,并等待客户端回复。
如果SYN请求来自合法用户,那么它会对SYN+ACK进行响应,这时流量清洗设备会代替用户与服务器建立TCP连接,之后合法用户和服务器之间就通过流量清洗设备进行通信。
而如果SYN请求来自攻击者,它通常不会对SYN+ACK进行响应,从而形成半开连接。流量清洗设备会暂时保留半开连接,在经过短暂超时后丢弃它。
相比于服务器,流量清洗设备对连接表进行了优化,能够处理极其庞大的连接请求,因此即使有非常多的SYN请求同时涌向清洗设备,它也能够处理。
在此过程中,服务器并没有消耗任何连接资源,因此保证了服务器的性能不受影响。

2.5 协议完整性验证
为了提高发送攻击请求的效率,大多数的攻击方法都只会发送攻击请求,而不接收和处理服务器的响应数据。
因此,如果能够对请求来源进行交互式验证,就可以检查请求来源协议实现的完整性。对于协议实现不完整的请求来源,通常可以丢弃其数据包。
例如对于提供HTTP服务的Web服务器,可以使用302重定向来验证请求来源是否完整实现了HTTP协议。
HTTP状态码302表示请求的资源被临时转移,并会给出一个转移后的地址。合法用户在接收到302重定向响应码后会顺着跳转地址寻找对应的资源,而攻击工具则不会进行跳转。
因此,攻击请求将会被流量清洗设备拦截并丢弃,Web服务器不会受到影响。

2.6 客户端真实性验证
一些攻击工具在开发过程中使用了第三方库,完整实现了协议交互功能。对于这些攻击工具,需要使用客户端真实性验证技术进行攻击流量清洗。
例如对于Web服务,可以通过检查客户端是否支持JavaScript来验证请求是否来自合法用户。
对于加入了JavaScript解析和执行功能的攻击工具,则需要使用验证码来进行识别。
对于无法解析JavaScript或无法识别验证码的请求,流量清洗设备可以丢弃它,从而保护Web服务器不受影响。