猿创征文|HCIE-Security Day54:anti-ddos设备防御原理

发布于:2022-12-26 ⋅ 阅读:(447) ⋅ 点赞:(0)

 

 

相比防火墙,anti-ddos设备是专门做anti-ddos的,所以很多功能都是防火墙没有的。

TCP防御

针对TCP服务的防御策略包括阻断、限流、防御。

SYN Flood防御

syn flood攻击利用tcp三次握手机制,攻击者向服务器发送大量的syn报文请求,当服务器回应了ACK-SYN报文后,不再继续回应ACK,导致服务器上建立了大量半连接,直至老化,造成服务器的资源被半连接耗尽,正常的请求无法回应。

anti-ddos设备针对SYN Flood攻击,一般采用源认证进行防御。

基本源认证

针对虚假源。

没有报文来回路径一致性要求。

FW仍然处于客户端和服务器之间,对收到的SYN报文进行拦截,与代理方式不同的是,FW会返回一个错误序列号的SYN-ACK报文给客户端。

如果客户端是虚假源,不会发现这个问题,即不会对该错误的SYN-ACK进行回应。如果客户端是真实源,则会发现这个问题,会发送RST报文,请求FW重新发正确的SYN-ACK报文。一旦FW收到这个RST报文,就可以判断这个客户端是真实的,就会将这个客户端的源地址加入白名单,白名单老化前,这个源发出的报文都认为是合法的报文,FW直接放行,不再做验证。因为FW对相同源的SYN报文只做一次验证,所以有效缓解了FW的压力。

局限性在于,如果网络中存在某些设备会丢弃带有错误确认序号的SYN-ACK报文,或者有的客户端不响应带有错误确认序号的SYN-ACK报文,基本源认证就不能生效了。此时可以使用高级源认证。

高级源认证

高级源认证的原理也是Anti-DDoS系统代替服务器向客户端响应SYN-ACK报文,但与基本源认证不同的是,SYN-ACK报文中带有正确的确认序号。真实的客户端收到带有正确确认序号的SYN-ACK报文后,会向服务器发送ACK报文;而虚假源收到带有正确确认序号的SYN-ACK报文,不会做出任何响应。Anti-DDoS系统通过观察客户端的响应情况,来判断客户端的真实性。

1、当连续一段时间内去往目标服务器的SYN报文超过告警阈值后,Anti-DDoS系统启动源认证机制。源认证机制启动后,Anti-DDoS系统将会代替服务器向客户端响应带有正确确认序号的SYN-ACK报文。

2、如果这个源是虚假源,是一个不存在的地址或者是存在的地址但却没有发送过SYN报文,不会做出任何响应。

3、如果这个源是真实客户端,则会向服务器发送ACK报文,对收到的SYN-ACK报文进行确认。Anti-DDoS系统收到ACK报文后,将该客户端的源IP地址加入白名单。同时,Anti-DDoS系统会向客户端发送RST报文,要求重新建立连接。

4、后续这个客户端发出的SYN报文命中白名单直接通过。

无论是基本源认证还是高级源认证,其原理都是Anti-DDoS系统发送SYN-ACK报文来对源进行认证,形象点说,Anti-DDoS系统收到SYN报文后会反弹SYN-ACK报文。如果网络中存在海量的SYN报文,同样Anti-DDoS系统也会反弹出去海量的SYN-ACK报文,这样势必就会造成网络拥塞更加严重。

为了避免这个问题,减少反弹的SYN-ACK报文对网络拥塞的影响,Anti-DDoS系统提供了首包丢弃功能。

首包丢弃

TCP协议要求发送端每发送一个报文,就启动一个定时器并等待确认信息,如果在定时器超时前还没有收到确认,就会重传报文。首包丢弃功能就是利用了TCP的超时重传机制,anti-ddos系统对收到的第一个SYN报文直接丢弃,然后观察客户端是否重传,如果重传,再对重传的SYN报文进行源认证,即反弹SYN-ACK报文,在于可以大大减少反弹报文数量。

另外,有些攻击采用不断变换源IP地址或者源端口号的方式发送攻击报文,通过首包丢弃,可以有效拦截这部分流量。

正常情况下,tcp、dns、icmp报文都具有重传功能。如果在交互过程中报文被丢弃,则都会重传,首包丢弃是利用了报文的重传机制,将受到的第一个报文丢弃,以判定后续是否有重传报文。

anti-ddos设备判定报文是否属于重传报文是基于三元组以及时间间隔来判断的,三元组包含源IP地址、源端口和协议,时间间隔可以自定义配置。

当报文没有匹配到任何三元组时,认为该报文是首包,将其丢弃;

当报文匹配到某三元组,则计算该报文与匹配该三元组的上一个报文到达的时间间隔。如果时间间隔低于设定的下限,或者高于设定的上限,则认为是首包,将其丢弃,如果时间间隔落在配置的上限和下限之间,则认为是后续包,将其放行。

支持首包丢弃后重传报文的协议包括tcp、dns、icmp协议。udp协议虽然不具备重传机制,如果有应用层协议来协助实现重传时,也可以配置首包丢弃功能。

实际部署时,我们将首包丢弃和源认证结合使用。防御SYN Flood攻击时,先通过首包丢弃功能来过滤掉一些攻击报文,当重传的SYN报文超过告警阈值后,再启动源认证。这样就能够减少反弹的SYN-ACK报文的数量,缓解网络拥塞情况。对于虚假源攻击,尤其是对于不断变换源IP和源端口的虚假源攻击,可以达到最佳防御效果。

TCP异常限速

源IP地址加入白名单后,需要继续对真实源IP地址进行统计分析,对异常的源IP地址进行限速,以防止真实源发起攻击。

基于源来统计除ACK以外的其他报文总和(SYN+SYN-ACK+FIN/RST)与ACK报文的比例,当这个比例超过TCP-Ratio比例阈值时,判定源IP地址异常,将除ACK以外的其他报文的速率总和限制在阈值内。

始终限速

任何情况下,都将除了ACK以外的其他报文的速率总和限制在阈值内。

SYN-ACK Flood防御

攻击源假冒服务器,发送大量SYN-ACK报文到达攻击目标网络,由于目标网络没有发送过SYN报文,平白无故的收到SYN-ACK报文,只好发送RST报文进行释放,如果这样的SYN-ACK报文很多,那么目标网络就会发送很多RST报文,导致资源耗尽,无法响应正常的请求。另外,如网络中存在防火墙和ips等设备,对于大量的SYN-ACK报文,会检查会话表,虽然无法匹配,但是消耗了设备性能。

源认证

华为Anti-DDoS解决方案使用源认证方式防御SYN-ACK Flood攻击,其原理是Anti-DDoS系统向发送SYN-ACK报文的源地址发送SYN报文,相当于发起了第一次握手,探测该地址是否真实存在。真实的源会向Anti-DDoS系统响应正确的SYN-ACK报文,也就是第二次握手的报文;而虚假的源则不会响应正确的SYN-ACK报文。

注意:防火墙不支持SYN-ACK Flood防御。

1、当连续一段时间内去往目标服务器的SYN-ACK报文超过告警阈值后,Anti-DDoS系统启动源认证机制。源认证机制启动后,Anti-DDoS系统向发送SYN-ACK报文的源地址发送SYN报文。

2、如果这个源是虚假源,不会向Anti-DDoS系统响应正确的SYN-ACK报文。

3、如果这个源是真实源,会向Anti-DDoS系统响应正确的SYN-ACK报文。Anti-DDoS系统收到该SYN-ACK报文后,将该源IP地址加入白名单,同时会向源地址发送RST报文,断开自己和这个源地址的连接。

4、后续这个源发出的SYN-ACK报文命中白名单直接通过,而对于那些未匹配白名单的SYN-ACK报文则继续进行源认证。

Anti-DDoS系统防御SYN-ACK Flood攻击与防御SYN Flood攻击采用的方式类似,也是采用源认证的方式。区别是防御SYN-ACK Flood攻击时,通过发送中TCP第一次握手中的SYN报文来探测源是否真实存在,防止虚假源攻击。可见,对于这两种基于TCP的面向连接的DDoS攻击,最有效的防御方式就是源认证。

ACK Flood防御

在TCP三次握手的过程中,ACK报文出现在第三次握手中,用来确认第二次握手中的SYN-ACK报文。ACK Flood攻击指的是攻击者利用工具或者操纵僵尸主机,向目标服务器发送大量的ACK报文,服务器忙于回复这些凭空出现的第三次握手报文,导致资源耗尽,无法响应正常的请求。

华为Anti-DDoS解决方案使用会话检查的方式防御ACK Flood攻击,这与防御SYN Flood和SYN-ACK Flood时采用的方式有所不同。提到会话,大家应该不会陌生,它是状态检测防火墙的一个机制,是防火墙最基本的功能,也是实现安全防护的基础技术。

Anti-DDoS系统借鉴了防火墙的会话机制,通过检查会话来确定ACK报文的真实性。我们可以把Anti-DDoS系统看成是关闭了链路状态检查功能的防火墙,SYN、SYN-ACK、ACK等报文都会创建会话。对于一次正常的TCP连接建立过程来说,必须先有SYN报文,接着是SYN-ACK报文,然后才是ACK报文,所谓有“因”才有“果”。只有ACK报文命中了会话这个“因”,才能说明该报文是正常交互过程中的报文,是真实的。

Anti-DDoS系统对ACK报文进行会话检查时,支持基本和严格两种模式,我们先来看基本模式。

基本模式

使用基本模式时,Anti-DDoS系统对ACK报文进行会话检查,如果ACK报文没有命中会话,Anti-DDoS系统会允许第一个ACK报文通过,并建立会话,以此来对后续ACK报文进行会话检查;如果ACK报文命中了会话,则继续检查报文的序号,序号正确的报文允许通过,序号不正确的报文则被丢弃。

 

 

基本模式允许第一个ACK报文通过,检查条件比较宽松。

旁路部署动态引流时,由于报文来回路径不一致,对于引流前已经建立的会话,anti-ddos设备上检查不到会话,此时建议采用基本模式。当连续一段时间内ack报文速率超过阈值时,启动会话检查基本模式。

如果ack报文没有命中会话表,anti-ddos设备会允许第一个ack报文通过,并建立会话,然后对后续ack报文进行会话检查,以确定是否允许后续同源ip发送的ack报文通过。

如果ack报文命中会话表,则继续检查报文序列号,序列号正确的报文允许通过,不正确的报文则被丢弃。

如果攻击者发送变源或变端口的ACK报文,基本模式会允许报文通过并建立会话,这样就会导致攻击报文被放过,影响防御效果。为此,Anti-DDoS系统提供了严格模式,检查条件更加严格,防御效果也会更好一些。

严格模式

严格模式指的是Anti-DDoS系统对ACK报文进行会话检查时,如果ACK报文没有命中会话,直接丢弃报文;如果ACK报文命中会话,并且序号正确,允许报文通过。

严格模式的检查条件比较苛刻,没有命中会话的ACK报文都会被丢弃。在旁路部署动态引流的场景,由于报文来回路径不一致,正常业务的ACK报文会因为没有命中会话而被丢弃,因此对正常业务有一定的影响。

FIN/RST Flood防御

TCP交互过程中还存在FIN和RST报文,FIN报文用来关闭TCP连接,RST报文用来断开TCP连接。这两种报文也可能会被攻击者利用来发起DDoS攻击,导致目标服务器资源耗尽,无法响应正常的请求。

会话检查

华为Anti-DDoS解决方案也是使用会话检查的方式防御FIN/RST Flood攻击,当FIN/RST报文速率超过阈值时,启动会话检查。如果FIN/RST报文没有命中会话,直接丢弃报文;如果FIN/RST报文命中会话,则根据会话创建原因和会话检查结果来判断该报文是否通过:

如果会话是由SYN或SYN-ACK报文创建的,则允许该FIN/RST报文通过。

如果会话是由其他报文创建的(例如ACK报文),则进一步检查报文序号是否正确,序号正确的报文允许通过,序号不正确的报文则被丢弃。

 

 

UDP防御

UDP Flood防御

UDP Flood属于带宽类攻击,这种报文比较大,而且速率快,通常造成以下危害:

消耗网络带宽资源,严重时造成链路拥塞。

大量变源变端口的UDP Flood会导致依靠会话转发的网络设备,性能降低甚至会话耗尽,从而导致网络瘫痪。

比较典型的是UDP反射放大攻击,反射就是伪造源地址是被攻击者的报文,放大就是将目的地址范围写的很大,或者通过某些协议大体积的应答报文来对小体积的请求报文进行回应的方式,达到四两拨千斤的目的。有点类似于icmp的smurf攻击。

UDP与TCP不同,是无连接的协议,针对UDP Flood的防护非常困难,也不能像TCP那样进行源认证,所以只能找特征。攻击工具产生的UDP攻击报文一般具有相同的或有规律的字段,这可以作为一种特征。另外对于数据段不具备相同特征的流量,也可以将目的端口相同作为一种特征。

特征有了,就可以针对特征进行过滤,特征过滤也就是指纹过滤。根据特征的获取方法,将指纹过滤分成两种:静态和动态。

静态指纹过滤

通过抓包分析,人为识别出攻击特征,UDP报文中的数据段、源IP地址、源端口、目的IP地址、目的端口都可能隐藏着攻击报文的特征。比如123(NTP)、53(DNS)、1900(SSDP)等目的端口。对于已知的攻击特征,可以直接配置到过滤器的参数中.另外anti-ddos系统还提供了常见的UDP反射放大攻击的过滤器模板,可以直接应用。

anti-ddos可以解析应用层,可以针对应用层头部信息字段进行过滤。对过滤到的报文,可以进行丢弃、限流等操作。

 

动态指纹过滤

如果anti-ddos设备预置的过滤器模板不够用,而且自己不会抓包分析,anti-ddos设备也可以通过静态学习自动提取有规律的UDP报文的指纹,将这个指纹作为过滤条件,自动应用并进行过滤。

 

关联防御

UDP是无连接的协议,无法通过源认证的方法防御UDP flood攻击。如果UDP业务流量需要通过TCP业务流量认证或控制,如果判断到达某个目的IP地址的UDP流量超过阈值,则对关联的TCP业务强制启动防御,用此TCP防御产生的白名单决定同一源的UDP报文是丢弃还是转发。

比如,有些服务例如游戏类服务,是先通过TCP协议对用户进行认证,认证通过后使用UDP协议传输业务数据,此时可以通过验证UDP关联的TCP类服务来达到防御UDP flood攻击的目的。当UDP业务受到攻击时,对关联的TCP业务强制启动防御,通过关联防御产生TCP白名单,以确定同一源的UDP流量的走向,即命中白名单的源的UDP流量允许通过,否则丢弃。

 

限流

将去往同一目的地址的UDP报文限制在阈值之内,直接丢弃超过阈值的UDP报文,以避免网络拥塞。

由于限流技术本身无法区分正常转发报文还是攻击报文,故建议在指纹防范技术和关联防御无法防住UDP flood时,才采用限流技术防范UDP flood。

UDP分片攻击防御

UDP分片分为首分片和后续分片,anti-ddos设备只对首分片进行防御动作,如果首分片异常被丢弃了,后续分片因为找不到首分片的会话会直接被后续转发流程丢弃。udp首分片防御方法和udp flood的防御方法一样。

造成危害:

1、消耗网络带宽资源,严重时造成链路拥塞;

2、大量UDP分片报文会导致具有会话重组功能的网络设备性能降低;

3、大量变源变端口的udp分片报文会导致依靠会话表转发的网络设备性能降低,甚至会话耗尽,从而导致网络瘫痪。

4、攻击报文到达服务器开放的udp业务端口,服务器检查报文的正确性需要消耗计算资源,造成服务器响应缓慢,甚至无法正常回应。

 

载荷检查

当udp首分片流量超过阈值时,会触发载荷检查,如果udp首分片报文数据段内容完全一样,例如数据段内容都为1,则会被认为是攻击而丢弃报文。

指纹学习

当udp首分片流量超过阈值时,会触发指纹学习,指纹由anti-ddos设备动态学习生成,将攻击报文的一段显著特征学习为指纹后,匹配指纹的报文会被丢弃。

ICMP Flood防御

攻击者短时间内发送大量的ICMP报文到被攻击目标,导致依靠会话转发的网络设备会话耗尽引起网络瘫痪,如果采用超大报文攻击也会导致网络链路拥塞。

限流

基本上没有业务承载在ICMP协议上,而ICMP flood至今仍旧是DDoS攻击的一大类。FW支持全局对ICMP报文限流,即将流量限制在较小范围内,超过阈值部分的报文直接丢弃。

FW针对目的IP进行统计,当到达同一目的IP地址的ICMP流量达到告警阈值时,启动限流策略,丢弃超过上限的ICMP报文。

阻断

同时,FW支持在入接口上阻断ICMP报文。

当FW发现对同一目的地址的ICMP报文超过阈值就认为发生攻击,FW将没有命中白名单的ICMP报文全部丢弃,从而保证不被ICMP Flood攻击影响正常服务。

DNS防御

DNS报文由12字节长的首部和4个长度可变的字段组成。标识字段由客户端程序设置并由服务器返回结果,客户端通过标识来确定响应与查询是否匹配。

  • UDP:表示DNS查询基于UDP协议传输数据。DNS服务器支持TCP和UDP两种协议的查询方式。
  • Destination port:目的端口默认是53。
  • QR:0表示查询报文query;1表示回应报文reply。
  • TC:表示“可截断的”。如果使用UDP时,当应答报文超过512字节时,只返回前512个字节。

通常情况下,DNS查询都是使用UDP查询,UDP提供无连接服务器,查询速度快,可降低服务器的负载。当客户端发送DNS请求,并且返回响应中TC位设置为1时,就意味着响应的长度超过512个字节,而仅返回前512个字节。这种情况下,客户端通常采用TCP重发原来的查询请求,并允许返回的响应报文超过512个字节。直白点说,就是UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志位会置1,这时则使用TCP发送。

  •  Queries:表示DNS请求的域名和类型。
  • 在回应报文中,比查询报文多了后三个字段:回答字段、授权字段和附加信息字段。其中回答字段是放置的域名对应的IP地址等信息。
  • Name:DNS查询中的请求域名。
  • Type:每一个查询都有一个查询类型,每一个响应也都有一个类型。这个类型大约有20多种,但是很多种类型现在已经过时了。最常用的查询类型是A类型,表示期望获得查询域名的IP地址。查询类型也可以是CNAME,这个在后面的详细介绍。
  • TTL:生存时间,表示客户端保留该解析资源记录的时间。

DNS报文交互

 

DNS服务可以分为两大类:

  •  一种是授权存储域名和IP地址映射关系的授权服务。
  • 一种是临时存放域名和IP地址映射关系的缓存服务。

比较常见的针对缓存服务器的攻击包括:

DNS Request Flood攻击

DNS Reply Flood攻击

未知域名攻击

DNS缓存投毒攻击

异常DNS报文攻击

比较常见的针对授权服务器的攻击包括:

DNS Request Flood攻击

未知域名攻击

异常DNS报文攻击

DNS Request Flood防御

 

通常情况下,我们在上网访问网页的时候,输入的网址都是域名,比如www.huawei.com,这个请求的域名会发送到DNS缓存服务器,以请求其对应的IP地址。如果DNS缓存服务器上有此域名和IP地址的映射关系,DNS缓存服务器就会将查询到的IP地址返回给客户端。

当DNS缓存服务器查找不到该域名与IP地址对应关系时,它会向授权DNS服务器发出域名查询请求。为了减少Internet上DNS的通信量,DNS缓存服务器会将查询到的域名和IP地址对应关系存储在自己的本地缓存中。后续再有主机请求该域名时,DNS缓存服务器会直接用缓存区中的记录信息回应,直到该记录老化,被删除。

常见的DNS Flood攻击一般都是攻击者向DNS服务器发送大量的不存在的域名解析请求,导致DNS缓存服务器不停向授权服务器发送解析请求,最终导致DNS缓存服务器瘫痪,影响对正常请求的回应。

DNS Request Flood攻击源可能是虚假源,也可能是真实源,针对不同类型的攻击源,采取的防御方式也不同。

针对虚假源攻击缓存服务器

基本模式

超过阈值后,触发防御策略,发送TCP 53请求。DNS服务器支持TCP和UDP两种协议的查询方式,但是大多数的查询都是使用UDP查询的,UDP提供无连接服务,传输速度快,可以降低服务器的负载。也有特殊情况需要通过TCP方式查询,其中之一,就是DNS服务器可以设定使用TCP连接。当客户端向DNS服务器发起查询请求时,DNS回应报文里有一个TC标志位,如果TC标志位置1,就表示需要通过TCP方式查询。FW就是利用这一机制针对缓存服务器防御DNS Flood攻击。

 

在源认证过程中FW会触发客户端以TCP报文发送DNS请求,用以验证源IP的合法性,但在一定程度上会消耗DNS缓存服务器的TCP连接资源。

这种方式可以很好的防御针对缓存服务器的DNS请求攻击,但是在现网使用过程中,并不是所有场景都适用。因为在源探测过程中,FW会要求客户端通过TCP方式发送DNS请求,但是并不是所有的客户端都支持以TCP方式发送DNS请求,所以这种方式在使用过程中也有限制。如果有正常客户端不支持以TCP方式发送DNS请求,使用此功能时,就会影响正常业务。

增强模式

源认证过程中,anti-ddos设备还充当代理的角色,使用一个与dns缓存服务器路由可达的代理IP地址,将客户端发送的tcp格式的dns请求报文转换为udp格式并发送到dns缓存服务器,从而减少消耗dns缓存服务器的tcp连接资源。增强模式被人为禁止提供基于tcp的dns域名服务时,需要选择增强模式。

 

被动防御

现网防御DNS缓存服务器的虚假源request flood攻击的首选。

对不支持以tcp报文发送dns请求的客户端进行合法性认证,比如一些代理设备不响应dns源探测报文或者在NAT场景下NAT设备不响应源探测报文。

利用dns协议的重传机制,直接丢弃首包,然后看客户端是否重传。然后对DNS重传报文进行域名检查,如果后续报文和首包请求的域名相同则将源IP地址加入白名单。

 

1、Anti-DDoS系统在第一次收到DNS请求后,就会记录DNS请求的域名、源IP等基本信息,并HASH成一个值,记录到系统一张表里(白名单)。然后丢弃这个DNS查询报文,并且不回应任何报文。

2、后续一定时间戳内,如果再收到这个HASH值相同的DNS请求,就认定为重传包,放行。时间戳会随着收到的每一个相同HASH值的DNS请求包而不断的刷新。

针对虚假源攻击授权服务器

CNAME重定向模式

对于授权服务器的DNS Request Flood攻击,可采用授权服务器源认证(即重定向方式)。重定向只针对访问受攻击域名的源IP地址实施,以减少误判和避免对正常业务的访问延时。

FW基于目的地址对DNS Request报文的速率进行统计,当DNS Request报文的速率超过阈值时,启动重定向。

  1. FW返回给请求源一个别名地址,如果请求源是虚假源,则不会回应重定向报文,认证不通过,报文丢弃。
  2. 如果请求源是真实源,则重新请求FW发送的重定向地址。认证通过,FW将此真实源加入白名单。
  3. FW再次重定向正确的地址,请求源重新请求正确地址,报文命中白名单,直接通过FW,到达授权服务器,完成报文交互。

 

被动防御

现网防御DNS缓存服务器的虚假源request flood攻击的首选。

对不支持以tcp报文发送dns请求的客户端进行合法性认证,比如一些代理设备不响应dns源探测报文或者在NAT场景下NAT设备不响应源探测报文。

利用dns协议的重传机制,直接丢弃首包,然后看客户端是否重传。然后对DNS重传报文进行域名检查,如果后续报文和首包请求的域名相同则将源IP地址加入白名单。

 

1、Anti-DDoS系统在第一次收到DNS请求后,就会记录DNS请求的域名、源IP等基本信息,并HASH成一个值,记录到系统一张表里(白名单)。然后丢弃这个DNS查询报文,并且不回应任何报文。

2、后续一定时间戳内,如果再收到这个HASH值相同的DNS请求,就认定为重传包,放行。时间戳会随着收到的每一个相同HASH值的DNS请求包而不断的刷新。

针对真实源

无论是缓存还是授权,无论是request还是reply。

限速

dns请求报文限速:request特有

指定域名限速:通常某个域名在攻击前访问量并不算高,突然有一天访问量是平时的好几倍,那么这个域名可能是受到攻击了。好比超市卖东西,平时一天超市可能卖200包食盐,突然有一天,来了好多人买盐,超市仓库都卖空了,那这就不正常了。域名限速就是指资源有限的情况下,每天就定量提供这么多的资源, 先到先得。域名限速可以有针对性的对某个特定域名进行限制,而不影响其他域名的正常请求。

源IP限速:源IP地址限速和域名限速相比,属于另一个维度的限制。如果某个源IP地址域名解析的速率过大,就可以有针对性的对这个源IP地址进行限制,这样也不会对其他源有影响。

异常报文检测

antiddos设备还支持对异常dns报文的检测,根据预定义的规则分别从以下三个方面进行检测:

格式:将非标准格式的dns报文直接丢弃。

长度

ttl:尤其对dns缓存服务器防护,一般都是采用就近服务原则,比如:北京电信dns缓存服务器主要服务对象应该是北京电信用户,所以dns报文的ttl条数应该局限于一个范围内。antiddos设备将dns报文的跳数 限制在dns报文允许跳数或者dns报文允许跳数范围内,当dns报文的跳数超过阈值时,antiddos设备将直接丢弃该dns请求报文。

DNS Reply Flood防御

DNS服务器收到DNS reply报文时,不管自己有没有发出去过解析请求,都会对这些DNS reply报文进行处理。

DNS Reply Flood是指攻击者在一定条件下将大量伪造的DNS应答包发送给某个DNS服务器或主机,从而消耗服务器的处理性能。

源认证

DNS reply flood大多都是虚假源攻击,黑客控制僵尸主机发出的DNS reply报文的源IP地址通常都是伪造的,是不存在的。所以在防御的时候,就可以从回应源IP地址的真假性入手,判定这个源IP是否是真实源。

针对这种攻击行为,Anti-DDoS系统一般可使用源认证方式进行防御。源认证的方法就是构造一个DNS request报文,看客户端是否能正常回应。

FW基于目的地址对DNS回应报文速率进行统计,当DNS回应报文速率超过阈值时,启动源认证。

当FW收到DNS Reply报文时,构造携带新的Query ID和源端口的DNS Request探测报文。当FW再次收到对端发出的DNS Reply报文时,检查DNS Reply报文中的Query ID和源端口与DNS Request报文中是否一致,如果一致则将源IP地址加入白名单。

 

1、Anti-DDoS系统部署在防护目标前,并对到达防护目标的DNS reply报文进行统计。当到达防护目标的DNS reply报文超过告警阈值时,Anti-DDoS系统启动防御。

2、Anti-DDoS系统收到某个源IP地址发来的DNS reply报文后,会重新构造一个新的DNS request报文,然后记录构造查询报文的Query ID和源端口号。

3、如果是虚假源,则不会对这个DNS request报文进行回应,认证不通过。

4、如果是真实DNS授权服务器,则会重新回应DNS reply报文。

5、Anti-DDoS系统收到DNS reply报文后,会与之前记录的Query ID和源端口号进行匹配。如果完全一致,则判定此DNS reply报文就是反弹DNS request报文的回应,源认证成功,加入白名单。

6、后续这个源再发送的DNS reply报文,直接通过,直到白名单老化。

DNS反射攻击

DNS反射攻击是DNS reply flood的一种变异,是一种更高级的DNS reply flood。

DNS服务器是互联网最基础的设施之一,网络中有很多开放的免费DNS服务器。DNS反射攻击正是利用这些开放的DNS服务器制造的攻击。这种DNS反射攻击通常比普通的DNS reply flood攻击性更强,追踪溯源困难,更善于伪装。

 

从图中我们可以看到,黑客将自己的源IP地址伪造成被攻击目标的IP地址,然后向一系列网络中开放的DNS服务器发送大量的查询请求。通过伪造DNS请求报文的源IP地址,控制DNS回应报文的流向,这些DNS回应报文就会都被引导到被攻击目标,导致被攻击目标的网络拥塞,拒绝服务。而开放式的DNS服务器在全球有超过几千万台,这些服务器接入带宽往往都比较高,而且,DNS reply报文大小通常也是DNS request报文的几倍甚至几十倍,还可达到放大攻击的效果。对于控制成千上万台僵尸主机的黑客来说,制造几G乃至数十G的DNS攻击流量并不太困难。

DNS反射攻击和前面介绍的传统DNS reply flood有两点本质的不同:

1、传统DNS reply flood一般攻击目标是DNS缓存服务器;而DNS反射攻击一般攻击目标是客户端。

2、传统DNS reply flood大多是虚假源攻击,而DNS反射攻击中,DNS请求是真实的,所以DNS回应报文也都是真实的,是由网络中真实的DNS服务器发出的,属于真实源攻击。这种情况下,再使用前面刚讲过的源认证方式,对于DNS反射攻击就不适用了。

会话表匹配

Anti-DDoS系统借鉴防火墙的会话表机制,利用DNS交互交互过程中,DNS request报文首包建会话的机制,防御DNS反射放大攻击。

Anti-DDoS系统对DNS反射攻击采用的防御手段就是会话检查。会话表五元组信息包含:源IP地址、目的IP地址、源端口、目的端口和协议。当DNS request报文经过Anti-DDoS系统时,Anti-DDoS系统会创建一张会话表,记录DNS请求报文的这五元组信息。当Anti-DDoS系统再收到DNS reply报文时,就会查会话表:

  • 如果匹配会话表,就判定是真实的DNS reply报文,允许通过。
  • 如果没有匹配会话表,则判定这个DNS reply报文为攻击报文,禁止通过。

HTTP GET Flood防御

HTTP GET Flood攻击的原理很简单,攻击者利用攻击工具或者操纵僵尸主机,向目标服务器发起大量的HTTP GET报文,请求服务器上涉及数据库操作的URI或其它消耗系统资源的URI,造成服务器资源耗尽,无法响应正常请求。

华为Anti-DDoS解决方案防御HTTP GET Flood攻击的常用手段是源认证,这种防御方式适用于客户端为浏览器的场景,因为浏览器支持完整的HTTP协议栈,可以正常回应Anti-DDoS系统发出的探测报文。源认证包括两种方式,最基本的方式是302重定向认证。

攻击者通过代理或僵尸主机向目标服务器发起大量的HTTP请求报文,请求涉及数据库操作的URI(Universal Resource Identifier)或其它消耗系统资源的URI,造成服务器资源耗尽,无法响应正常请求。例如门户网站经常受到的HTTP Flood攻击,攻击的最大特征就是选择消耗服务器CPU或内存资源的URI,如具有数据库操作的URI。

源认证

源认证防御方式是防御HTTP Flood最常用的手段。这种防御方式适用于客户端为浏览器的HTTP服务器场景,因为浏览器支持完整的HTTP协议栈,可以正常回应重定向报文或者是验证码。FW基于目的IP地址对HTTP请求报文进行统计,当HTTP请求报文达到设定的告警阈值时,启动源认证防御功能,源认证防御包含以下三种方式:

基本模式(META刷新:两次重定向)

该模式可有效阻止来自非浏览器客户端的访问,如果僵尸工具没有实现完整的HTTP协议栈,不支持自动重定向,无法通过认证。而浏览器支持自动重定向,可以通过认证,该模式不会影响用户体验,但防御效果低于增强模式。

 

当网络中有HTTP代理服务器时,只要有一次源认证通过,

FW就会将代理服务器IP地址加入白名单,后续僵尸主机通过使用代理服务器就会绕开源认证,导致防御失效。在这种有代理服务器的网络中,建议开启代理检测功能,检测HTTP请求是否为通过代理发出的请求。如果是,FW会从HTTP报文中获取请求者的实际IP地址,将通过认证的真实IP地址和代理服务器IP地址加入白名单,后续只有此实际源IP地址发送的报文才能直接通过,其他源IP发送报文时,FW会对其进行源认证,达到防御效果。

302重定向模式

基本模式中的重定向功能只能对整个网页进行重定向,不能针对网页中的内嵌资源(比如:图片)进行重定向。当用户请求的页面与页面内嵌资源不在同一个服务器上,内嵌资源所在服务器发生异常时,可以对嵌套资源服务器启动302重定向防御,探测访问源是否为真实浏览器。真实浏览器支持重定向功能,可以自动完成重定向过程,不会影响客户体验。

 

增强模式(验证码认证)

有些僵尸工具实现了重定向功能,或者攻击过程中使用的免费代理支持重定向功能,导致基本模式的防御失效,通过推送验证码的方式可以避免此类防御失效。此时通过让用户输入验证码,可以判断HTTP访问是否由真实的用户发起,而不是僵尸工具发起的访问。因为僵尸网络攻击依靠自动植入PC的僵尸工具发起,无法自动响应随机变化的验证码,故可以有效的防御攻击。为避免防御对正常用户体验的影响,此防御方式仅对超过源访问阈值的异常源实施。

 

 

 

验证码认证方式与302认证方式相比,防御效果更好,但是由于需要人机交互输入验证码,用户体验稍差一些。在实际使用验证码认证方式时,可以增加源IP统计的环节,即Anti-DDoS系统先基于目的IP进行统计,当去往某个目的IP的HTTP请求超过阈值时,启动基于源IP的统计。当来自某个源的HTTP请求也超过阈值时,才启动验证码认证机制。这样就会精确控制需要进行验证码认证的源IP范围,避免大范围的源IP都要输入验证码。

302重定向认证和验证码认证这两种源认证方式是防御HTTP GET Flood攻击的有效手段,但是源认证方式也存在一定的局限,比如机顶盒视频点播、特定移动网络等场景中,无法对客户端使用源认证方式。为此,Anti-DDoS系统还支持URI动态指纹学习和URI行为监测防御方式,作为源认证方式的补充,满足不同场景的需求。

HTTP源统计

基于目的IP流量异常的基础上,再启动针对源IP流量进行统计,anti-ddos设备首先对到达目的IP的流量进行统计,当目的IP流量触发告警阈值时,再启动到达这个目的IP的每个源的流量进行统计,判定具体哪个源流量异常,并对源IP的流量进行防御。

http源统计功能可以更准确的定位异常源,并对异常源发出的流量进行防御。

URI行为监测

URL监测是HTTP源认证防御的补充功能,当通过HTTP源认证的流量还是超过阈值时,可以启用URI监测。

URI行为监测防御方式要先设置需要重点监测的URI,可以将消耗资源多、容易受到攻击的URI加入到“重点监测URI”列表中。URI行为监测防御方式通过判断两个比例是否超过阈值来确定攻击源。

首先,在特定时间内对某个目的服务器的所有访问中,对重点监测URI的访问数与总访问数的比例超过设置的阈值时,Anti-DDoS系统启动针对源的URI检测。当这个源对某个重点检测URI的访问数与总访问数的比例超过设置的阈值时,就将该源加入黑名单。

在指定时间内,某个uri的访问流量超过一定阈值时,anti-ddos设备启动针对源IP的uri行为监测。当这个源IP地址对某个uri的访问数与总访问数的比例超过阈值时,则将该源IP地址作为攻击源并加入动态黑名单,在配置uri监测时,可以将消耗内存或者占用计算资源多、容易受攻击的uri加入重点监测uri列表。

uri源指纹学习功能

指纹学习方法适用于攻击源访问的uri比较固定的场景。因为如果要形成攻击效果,攻击者一般都事先进行探测,找到容易消耗系统资源的uri作为攻击目标,然后一个攻击源的一个会话上会有多个针对该uri的请求,最终呈现为该源对选定的uri发送大量的请求报文。动态指纹学习正是基于这个原理,anti-ddos设备对源访问的uri进行指纹学习,找到攻击目标uri指纹,如果对该uri指纹的命中次数高于设置的阈值就将该源加入黑名单。

http慢速攻击

http慢速攻击是利用http现有合法机制,在建立了与http服务器的连接后,尽量长时间保持该连接,不释放,达到对http服务器的攻击。

针对http慢速攻击的特点,anti-ddos设备对每秒钟http并发连接数进行检查,当每秒钟http并发连接数超过设定值时,会触发http报文检测,检测出slow post和slow headers的任意一种情况,都认定受到http慢速连接攻击,则将该源IP地址判定为攻击源,加入动态黑名单,同时断开此IP地址与http服务器的连接。

slow post:攻击者发送post报文向服务器请求提交数据,将总报文长度设置为一个很大的数值,但是在随后的数据发送中,每次只发送很小的报文,这样导致服务器端一直等待攻击者发送数据。

slow headers:攻击者通过get或者post向服务器建立连接,但是http头字段不发送结束符,之后发送其他字段进行保活,服务器会一直等待头信息中结束符而导致连接始终被占用。

HTTPS Flood防御

攻击者通过代理、僵尸网络或者直接向目标服务器发起大量的HTTPS连接,造成服务器资源耗尽,无法响应正常的请求。

源认证

通过源认证对HTTPS业务端口的连接耗尽进行防御,FW基于目的地址对目的端口为443的HTTPS报文(不区分请求或响应报文)速率进行统计,当到达同一目的IP且目的端口为443的HTTPS报文速率达到阈值时,启动源认证防御。

 

 


网站公告

今日签到

点亮在社区的每一天
去签到