猿创征文|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

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA