杨哥关注的华为官方的【华安解密之DDoS攻防】非常实用,纯纯的干货,决定每天一篇分享给爱看头条并且爱学习的条友们。
正文如下:
政治因素一直是黑客发动网络攻击的一个重要动机。2015年12月,著名黑客组织匿名者(Anonymous)发布视频谴责土耳其支持ISIS,并向土耳其发动了史上最大规模的DDoS攻击。
2015年12月14日开始,大规模网络攻击导致土耳其银行、政府网站离线,土耳其三家知名银行Ziraat银行,Isbank和Garanti确认受到攻击,攻击流量峰值带宽高达40Gbps。
一名土耳其电信代理商发言人Onur Oz在接受路透社采访时称:
“这次网络攻击事件是很严重的,但是这次目标不是土耳其电信,相反,土耳其的银行和公共机构网络受到了严重的攻击。现在大多数的土耳其机构使用土耳其电信作为网络服务商,目前我们在积极应对这次网络攻击并做好防御工作。”
土耳其大多数的银行和政府网站在华为Anti-DDoS系统防御之下,大流量攻击导致防御系统性能过载。华为工程师现场紧急扩容板卡,研发远程7*24小时值守,虽然黑客不断变更攻击手法,但所有攻击均被成功阻断,网站访问正常。
下面这个报表是从12月14日攻击开始,到12月31日攻击结束的攻击流量峰值带宽。从报表中可以看出,攻击持续时间相当长,而且攻击峰值最高达到40Gbps。
这次DDoS攻击事件中,Anonymous发动的是混合型的攻击,包含SYN flood、UDP flood、HTTP flood等多种类型的攻击。前几篇的案例中,我们已经分别了解了UDP flood、HTTP flood,今天我们就重点讲讲SYN flood。
0x01 什么是SYN flood攻击?
一提起SYN flood,大家都很熟悉吧。SYN flood是互联网上最经典的DDoS攻击方式之一,也是最原始的DDoS攻击,最早出现于1999年左右。在网络发展初期,由于系统的限制以及硬件资源性能的低下,SYN flood的出现对网络安全界是一大冲击。它与当时的单包攻击的不同在于,你很难通过单个报文的特征或者简单的统计限流防御住它,因为它“太真实”、“太常用”。 SYN flood能够一直占据江湖大佬地位这么多年依旧风生水起也是有原因的。SYN flood具有强大的变异能力,在攻击发展潮流中一直没有被湮没,这完全是他自身的优秀基因所决定的:
1、 攻击成本低,攻击过程简单。
2、 难防御,每个报文看起来都是一个正常的报文。
下面我们就来看看SYN flood是如何达到攻击的效果。SYN flood是基于TCP协议产生的,所以我们先回顾一下TCP的三次握手。
再来看SYN flood,SYN flood其实就是利用三次握手机制,制造多个半连接,消耗服务器的连接数。
黑客伪造源IP地址向服务器发送大量的SYN报文,请求建立三次握手。由于发送源IP是伪造的,所以服务器回应了SYN-ACK报文后,源IP并不会再继续回应ACK报文进行确认。这样服务器就会维持一个庞大的等待列表,不停地重试发送SYN-ACK报文,同时占用着大量的资源无法释放。这就导致,被攻击的服务器被恶意半连接占满,不再接受新的SYN请求,而合法用户无法完成三次握手建立TCP连接。
这就好比你去超市买东西,来了一大帮人,他们也不买东西,却把所有收银台都占满了,既不结账,也不走,这就是半连接。结果导致所有收银台都无法为正常客户结账,超市业务瘫痪,这就是资源耗尽。
0x02 华为Anti-DDoS解决方案怎么做?
对于SYN flood这种看似正常,没有明显攻击特征的报文,就不能再通过特征识别或者指纹学习的方式进行过滤。SYN flood是基于TCP协议的,TCP协议是面向连接的,我们就可以从SYN报文建立连接的“行为”入手,判定是不是真实源发出的请求。
基本源认证:
从报文交互过程可以看出,Anti-DDoS设备代替服务器,向客户端反弹一个错误序列号的SYN-ACK报文,等待客户端的回应。
Ø 如果是虚假源,这个源IP可能在网络中根本就不存在,或者即使存在也没有发送过SYN请求,莫名其妙的就收到一个SYN-ACK报文,不会做出任何响应,所以也就无法通过源认证。
Ø 如果是真实源,收到错误的SYN-ACK报文,会回应一个RST报文,要求重传。这样Anti-DDoS设备就会判定这个客户端是真实源,并加入白名单。后续这个源在一定时间内,发送的SYN报文,匹配白名单,直接送达服务器。
通过这种方式可以识别出,哪些是真实源,哪些是虚假源。不过,有的网络设备会丢弃错误序列号的SYN-ACK报文,那么这种基本源认证在以下两种情况下就不适用了:
1、 Anti-DDoS设备和客户端之前有防火墙。有的防火墙的设置可能会丢弃错误序列号的SYN-ACK报文。
2、极少数客户端对于错误序列号的SYN-ACK报文是不回应的。
限制虽然存在,但不是没有解决的办法,我们还有更高一级的源认证方式。
高级源认证:
Anti-DDoS设备同样是代替服务器,向客户端反弹一个SYN-ACK报文。不过这次和基本源认证不同,这次反弹的是正确序列号的SYN-ACK报文,也就是说Anti-DDoS设备代替服务器直接和客户端建立三次握手,然后观察客户端的回应。
l 如果是虚假源,这个源IP可能在网络中根本就不存在,或者即使存在也没有发送过SYN请求,所以是不会响应这个SYN-ACK报文,无法通过源认证。
l 如果是真实源,之前发送了SYN请求三次握手,并收到了正确序列号的SYN-ACK报文,则会立即回应ACK报文,三次握手建立成功。
Anti-DDoS设备会将这个源加入白名单。然后再立即发送一个RST报文,通知客户端断开此连接,并重新发起连接。等客户端再发送SYN请求时,匹配白名单,直接送到服务器。
首包丢弃:
了解了这两种源认证的防御机制后,可能有人又会问了,如果黑客发动10G的变换源IP和源端口的攻击流量,我们又反弹10G的认证报文,岂不是造成的网络拥塞更严重了吗?
恩,没错,这确实是个不小的问题。
源认证的这种反弹机制确实可能会导致二次攻击问题,所以Anti-DDoS还推出了首包丢弃功能。
TCP之所以可靠,除了三次握手,还有一个重要的机制是处理数据超时和重传。TCP协议要求在发送端每发送一个报文段,就启动一个定时器并等待确认信息;接收端成功接收新数据后返回确认信息。若在定时器超时前数据未能被确认,TCP就认为报文段中的数据已丢失或损坏,需要对报文段中的数据重新组织和重传。
首包丢弃就是利用了TCP重传机制,对收到的第一个SYN报文直接丢弃,然后判定客户端是否重传。如果重传了,再对第二个包进行源认证反弹。这样可以大大减少反弹包的数量,同时提高设备的处理性能,以达到最佳防御效果。
Anti-DDoS设备判定这个报文是不是重传报文,有两个依据:三元组和时间间隔。三元组包含源IP地址、源端口和协议。
l Anti-DDoS设备收到一个SYN报文,首先会查询有没有匹配到三元时,如果没有,就认为该报文是首包,将其丢弃,并记录三元组信息。
l 当SYN报文匹配到三元组时,再继续计算该报文与匹配该三元组的上一个报文到达的时间间隔。如果时间间隔不匹配,则认为是首包,将其丢弃;如果时间间隔匹配,则认为是后续包,将其放行。
首包丢弃功能要和源认证一起配合使用,对于虚假源攻击,尤其是针对不断变换源IP和源端口的虚假源攻击,可以达到最佳防御效果。
在上一篇关于HTTP flood防御的案例中,我们也讲过,对于这种面向连接的DDoS攻击,最有效的防御方式就是源认证。源认证有三个层面:
1、 TCP/IP源认证
2、 应用层源认证
3、 用户源认证
而本节的源认证,正是整个源认证防御系统中的第一层TCP/IP源认证。在TCP三次握手还没有建立成功之前,验证攻击源的TCP/IP是否真实可信。其中源认证是对IP层面的校验,认证这个源是不是真实存在的源;而首包丢弃是对于TCP协议栈层面的校验,用于判断是否是这个源发出的真实请求。
上期回顾:
「华安解密之DDoS攻防」09 UDP原理篇 UDP Flood
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1733951.html