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

2023-11-02 02:11

本文主要是介绍猿创征文|HCIE-Security Day54:anti-ddos设备防御原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 

相比防火墙,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报文命中白名单直接通过

这篇关于猿创征文|HCIE-Security Day54:anti-ddos设备防御原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/327381

相关文章

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente