史上最大应用层DDoS攻击 H2 Rapid Reset攻击研究

前言

2023年10月Cloudflare、Google、AWS等厂商公布了一种利用HTTP/2快速重置进行应用层DDoS攻击的0day漏洞(CVE-2023-44487)[1][2],即H2 Rapid Reset DDoS。Google宣传其监控到此种攻击峰值超过每秒3.98亿个请求,打破互联网历史最大应用层DDoS攻击记录[3]。而本文中火山引擎网络安全团队将对H2 Rapid Reset DDoS进行深入的研究分析,并介绍火山引擎对这种新型攻击手法的防护效果。

关键信息速读

**【关键点一】**H2 Rapid Reset DDoS漏洞可绕过HTTP/2协议的并发流限制,迫使服务端处理超量请求,但无法绕过NGINX的keepalive_requests,故攻击威力视服务端配置而定

**【关键点二】**H2Rapid Reset DDoS对服务端CPU的压力实际略小于一般的应用层DDoS,但仍具有一定威力

**【关键点三】**H2Rapid Reset DDoS可阻塞反向代理集群中TLS decryption->上层应用的通道,从而瘫痪代理对外服务能力

**【关键点四】**H2Rapid Reset DDoS经过反向代理后会转化成对源站的SYN + RST的四层DDoS,在特定场景甚至可转换成TCP connection Flood

**【关键点五】**H2Rapid Reset DDoS相比一般的应用层DDoS能够节省攻击端的下行带宽,为攻击者带来"降本增效"

**【关键点六】**火山引擎已上线H2 Rapid Reset DDoS的优化补丁,对这种新型攻击攻击有显著的防护效果,如需更强的防护能力,推荐接入高防产品

一、背景知识:HTTP/2与多路复用

HTTP/2是超文本传输协议的最新版本,与HTTP/1对同一个TCP连接的每个请求需串行处理不同,HTTP/2通过引入二进制分帧层(Binary Framing Layer)的方式实现了多个请求和响应在同一个TCP连接上用不同流进行并发传输,实现多路复用,大大提升互联网访问效率。如图1所示:

图1 HTTP/1和HTTP/2访问流程对比

所谓的二进制分帧层即HTTP/2将HTTP协议通信分解为二进制编码帧,然后将其映射到特定的流(stream)中,具体流程见图2。

图2 HTTP/2将HTTP信息分解为二进制编码帧

在同一个TCP连接上,不同stream的帧并交错传输,并在对端重新组合,还原完整HTTP消息,最终实现在单个TCP连接上的多路复用。

此外HTTP/2还支持客户端发送RST_STREAM帧来让服务端终止处理和应答对应stream的请求,以节省服务端资源和客户端下行带宽,类似IM软件的“消息撤回功能" 。如图3中ID为3的流被客户端重置,服务端停止处理不作应答。

图3 HTTP/2传输过程和流重置

但正所谓"福祸相依",HTTP/2以其强大的功能为用户提供更高效、快速服务的同时也不可避免地增加了被黑客恶意利用,实现更高效DDoS的风险,而H2Rapid Reset DDoS就是其中一个典型的例子。

二、什么是H2 Rapid Reset DDoS

H2 Rapid Reset DDoS(CVE-2023-44487)的核心原理就是:恶意利用HTTP/2的重置机制绕过服务端对单个TCP连接的并发流数量限制(max_concurrent_streams),迫使服务端处理超量的请求,增强攻击效果。

具体漏洞利用过程如下:

(1)首先HTTP/2出于安全考虑,支持对单个TCP连接的并发流数量进行限制(详情见RFC9113)[4]

(2)但该限制策略只统计"OPEN"或"Half-closed"状态下的流,而"Closed"状态的流并不计入并发数[1],这也是整个漏洞的关键所在

(3)而HTTP/2 RST_STREAM帧可让对应stream快速进入"Closed"状态

(4)攻击者通过大规模发送应用层请求并快速重置,让服务端接收到请求后对应的stream快速进入"Closed"状态,最终并发流数量限制被绕过,服务端无法忽略超量的stream,造成资源被大量消耗。

图4 HTTP/2 Rapid Reset attack攻击过程

备注:这种快速重置的方式无法绕过NGINX对单TCP连接上的HTTP/2请求总数限制策略,故开启了此项功能的NGINX服务端对此类手法有一点抵御能力

由此可见整个漏洞利用的过程本身并不复杂,并且给人一种似曾相识的感觉…

1699868278_6551ee760623ba569ad2d.png!small?1699868279256

但是,大家可能会不禁疑惑:

(1)这种攻击手法有DDoS效果吗?

(2)跟一般的H2的应用层DDoS有什么差别?

(3)攻击过程中会有哪些异常迹象?

为此,火山引擎Anit-DDoS团队进行了HTTP/2快速重置攻击进行了深入的研究和测试。

三、H2 Rapid Reset DDoS威力如何

为了全面、客观、量化地分析H2 Rapid Reset DDoS的实际效果,火山引擎Anit-DDoS团队基于NGINX搭建了HTTP/2 Server和HTTP2 Proxy(反向代理)两种常见的业务场景进行测试(见图5)。

3.1 CPU使用率指标分析

应用层DDoS攻击的效果主要依赖耗尽服务端CPU资源,故在同等量级请求速率的前提下,对服务端的CPU消耗量是量化攻击威力的重要指标。火山引擎网络安全团队通过控制变量法测试了各种场景:

图6 各类被攻击场景下的NGINX的CPU使用率

由测试结果可见:

(1)H2 Rapid Reset DDoS不管在H2 Server还是H2 Proxy场景下威力均略弱于一般的H2应用层DDoS,这是因为快速Reset后NGINX马上终止了对攻击请求的处理,"节省"了服务端资源;

(2)H2 Proxy对一般的H2应用层DDoS的抗压能力最差,这是由于H2 Proxy既要处理客户端请求,又要处理源站应答。而H2 Rapid Reset DDoS的快速"撤回"请求,无需Proxy过多处理,反而降低了H2 Rapid Reset DDoS对H2 Proxy的压力;

(3)H2 Proxy的回源协议版本对应用层攻击的抗压能力影响不大。

综上所述:H2 Rapid Reset DDoS虽然能绕过服务端的并发流限制,但对在等量的请求频率下对服务端压力弱于一般的H2应用层DDoS,特别是在H2 Proxy场景下,反而为Proxy"减负"。而且H2 Rapid Reset DDoS无法绕过绕过NGINX对单TCP连接上的HTTP/2请求总数限制[5],所以其攻击效果的"增益"并没有想象中大.

3.2 对反向代理架构的压力分析

前面只是在协议层面的分析,而实际现网的攻击效果中还需结合业务架构综合评估。当前业界常见的HTTP服务架构通常是在Web服务段前部署HTTP/2反向代理集群,且为了实现高性能、高可靠,代理集群会对请求作异步处理:例如处理HTTPS流量时,要先经过TLS解密模块进行解密,再将解密后的明文数据上报至上层服务,这使得H2 Rapid Reset DDoS有更大发挥空间:(如图7)

(1)攻击者对目标域名发起H2 Rapid Reset DDoS;

(2)TLS解密模块至上层服务间的通道被大规模攻击数据阻塞;

(3)正常用户访问由于阻塞问题,Proxy返回"502 Bad Gateway",正常业务受损。

图7 H2 Rapid Reset DDoS对HTTP服务架构的威胁

当然事实上所有经过TLS加密的应用层DDoS都有此类风险,而并非H2 Rapid Reset DDoS所独有的特性。

3.3 H2 Proxy场景下源站性能分析

H2 Proxy场景中除了要评估反向代理自身的压力以外,还需考虑源站的受影响情况。在一般的H2应用层DDoS中,如果反向代理上层的安全策略被绕过,那么攻击请求将到达源站,也就是源站自身也遭受应用层DDoS攻击。而H2 Rapid Reset DDoS由于会在发送请求后会马上重置,所以应用层攻击请求并不会透传到源站,那是否意味着在Rapid Reset DDoS源站完全无压力?–事实并非如此。

火山引擎网络安全团队测试确认:当H2 Proxy遭受H2 Rapid Reset DDoS时,攻击请求的QPS会被转化针对源站的SYN Flood + RST Flood,具体过程:

(1)H2 Proxy收到应用层请求后马上给源站发syn报文,准备回源;

(2)而后H2 Proxy收到对应流的"RST_STREAM"帧,H2 Proxy停止后续处理并清空对应回源的SYN_SENT节点;

(3)此时源站收到syn后应答synack,但由于H2 Proxy的SYN_SENT节点被回收,直接返回rst;

(4)最终大量的Rapid Reset经过H2 Proxy后被转化成对源站的大规模SYN+ RST的四层DDoS(当然实际现网回源会有复用已有连接的情况,故这个转化率不一定能达到1:1)

图8 H2 Proxy场景下H2 Rapid Reset DDoS会转化成对源站的四层DDoS

当然从源站来说,处理SYN Flood + RST Flood的性能消耗比等量的应用层DDoS要小,故也从侧面说明H2 Rapid Reset DDoS相比一般的H2应用层DDoS对源站的威力更小

值得注意的是,火山网络安全团队测试中发现当H2 Rapid Reset DDoS攻击满足一定条件时,可以转换成对源站的TCP connection Flood(即完成TCP握手后,马上fin断连),这种情况下会耗尽源站的连接池,消耗更多的CPU资源/内存,对源站压力更大。

综上所述:在H2 Proxy场景中Rapid Reset DDoS会转化成对源站的四层DDoS攻击,对源站也有压力和威胁。

3.3 流量指标分析

虽然应用层DDoS攻击重点在于应用层请求的QPS,但实际四层的流量大小也会影响服务端的带宽成本、肉鸡自身的带宽瓶颈,故也具备一定的分析和评估意义。

经过对比测试,在发起相同QPS的情况下:

(1)H2 Rapid Reset DDoS和General H2 DDoS在上行带宽维度(客户端->服务端)差别不大;

(2)但下行带宽维度(客户端->服务端)差别很大:H2 Rapid Reset DDoS的下行带宽远小于General H2 DDoS(见图9)。这其实也很好理解,毕竟快速重置后,服务端不会进行应用层应答。

图9 攻击带宽对比

这就意味着H2 Rapid Reset DDoS可为肉鸡节省大量的下行带宽成本,为攻击者"降本增效"。当然也有些攻击场景专门请求服务端大文件,通过大规模下行流量来阻塞服务端带宽资源,所以H2 Rapid Reset DDoS这个特性并非在所有场合下都能称为优点。

最后需要补充说明的是:上述分析数据是在实验环境控制变量下的测试结果,以客观、准确地量化攻击威力,而实际现网的攻防情况由业务架构、防护策略、肉鸡规模等多种因素共同决定,故实际攻防结果需具体情况具体分析。

四、火山的应对和防护效果

面对H2 Rapid Reset DDoS的威胁,火山网络安全团队联WAF、LB、CDN等相关团队进行了紧急分析和评估,并在火山相关产品(包括但不限于高防IP、高防WAF、CDN、LB等)上线了优化补丁,经过测试确认:火山引擎可在不影响正常业务的基础上对Rapid Reset DDoS攻击的识别和拦截,如图10所示

图10 火山引擎优化补丁对H2 Rapid Reset DDoS的防护效果

然而所谓"大力出奇迹",假设攻击者发起的攻击量足够大,还是有可能耗尽HTTP/2反向代理集群的资源,最终影响业务整体稳定性。为此对于有严重DDoS威胁的业务,建议接入火山DDoS高防产品(DDoS高防IP/高防WAF)进行应对。

火山引擎高防在精确识别各类应用层DDoS的同时,还基于四七层防御系统联动,对超大规模应用层DDoS攻击分层治之,为客户提供专业、可靠的防护服务。

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料! 点击下方蓝色字 即可免费领取↓↓↓

**读者福利 |** 👉CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 **(安全链接,放心点击)**

网络安全资源分享

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

在这里插入图片描述

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

👋全套《黑客&网络安全入门&进阶学习资源包》👇👇👇

这份完整版的学习资料已经上传CSDN,也可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6098.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python 如何在 Web 环境中使用 Matplotlib 进行数据可视化

Python Matplotlib 在 Web 环境中的可视化 数据可视化是数据科学和分析中一个至关重要的部分,它能帮助我们更好地理解和解释数据。在现代应用中,越来越多的开发者希望能够将数据可视化结果展示在网页上。Matplotlib 是 Python 中最常用的数据可视化库之…

JavaWeb项目-----博客系统

一.设计数据库 1.创建数据库 create database if not exists java108_blog_system character set utf8; drop table if exists user; drop table if exists blog;2.创建博客列表 create table blog(blogId int primary key auto_increment,title varchar(20),content varcha…

算法练习——双指针

前言:大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。 学前须知(对自己):这里的指针不一定指地址!也可能是数组下标。 1:移动零(双指针) 题目要求: 解题思路&#x…

vue3实现一个无缝衔接、滚动平滑的列表自动滚屏效果,支持鼠标移入停止移出滚动

文章目录 前言一、滚动元素相关属性回顾一、实现分析二、代码实现示例:2、继续添加功能,增加鼠标移入停止滚动、移出继续滚动效果2、继续完善 前言 列表自动滚屏效果常见于大屏开发场景中,本文将讲解用vue3实现一个无缝衔接、滚动平滑的列表自…

vscode翻译插件

vscode翻译插件 需求 : 在编写代码的时候, 打印或者定义变量的时候总是想不起来英文名称, 所有就开发了一款中文转换为英文的插件。 功能 1、目前支持选中中文,右键选择打印或者变量进行转换。 2、目前支持选中中文&#xff0…

Linux -- 初识线程

目录 线程的初步认识 为什么需要线程 怎么让代码分成多个执行流并发执行呢? 管理线程 线程的初步认识 线程是进程内部的一个执行分支,线程是CPU调度的基本单位。 在Linux操作系统中,线程是程序执行流的最小单位。一个进程可以包含多个线…

基于IM场景下的Wasm初探:提升Web应用性能|得物技术

一、何为Wasm ? Wasm,全称 WebAssembly,官网描述是一种用于基于堆栈的虚拟机的二进制指令格式。Wasm被设计为一个可移植的目标,用于编译C/C/Rust等高级语言,支持在Web上部署客户端和服务器应用程序。 Wasm 的开发者参…

Linux SSH免密登入以及配置脚本

一、ssh原理简单介绍 客户端生成一对公钥和私钥,并将自己的公钥发送到服务器上 其中公钥用来加密,私钥用来解密。 二、ssh免密登入实现步骤详解 我这就以服务器controller和客户端compute来做为例子 2.1、首先在controller上输入ssh-keygen -t rsa …

Flutter 获取照片权限的时候是否要获取存储权限?

获取存储权限 Permission.storage.request(); 获取照片权限通常意味着访问相册,而访问相册可能还需要外部存储权限,因为照片通常存储在设备的外部存储中。所以,当你请求照片权限时,你也需要检查并请求外部存储权限。 是不是所有…

一个基于Rust适用于 Web、桌面、移动设备等的全栈应用程序框架

大家好,今天给大家分享一个用 Rust 语言编写的、受 React 启发的前端框架Dioxus,旨在为构建跨平台的用户界面提供高效、高性能的解决方案。 项目介绍 Dioxus项目的诞生源于开发者们对于更高效、更灵活的跨平台UI解决方案的渴望。 随着技术的发展&#…

IntelliJ Idea设置自定义快捷键

我IDEA的快捷键是自己修改成了和Eclipse相似,然后想要跳转到某个方法的上层抽象方法没有对应的快捷键,IDEA默认的是Ctrl U (Windows/Linux 系统) 或 Command U (Mac 系统),但是我的不起作用&a…

前深度学习时代-经典的推荐算法

参考自《深度学习推荐系统》—— 王喆,用于学习记录。 1.协同过滤 “协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出目标用户可能感兴趣的信息的推荐过程。 基于用户相似度进行推荐的协同过滤算法 UserCF 用户相似度…

达梦数据守护集群_动态增加实时备库

目录 1、概述 2、实验环境 2.1环境信息 2.2配置信息 2.3 查看初始化参数 3、动态增加实时备库 3.1数据准备 3.2配置新备库 3.3动态增加MAL配置 3.4 关闭守护进程及监视器 3.5修改归档(方法1:动态添加归档配置) 3.6 修改归档&…

6.qsqlquerymodel源码分析

目录 继承关系入口浅析qsqlquery刷新数据 扩展列或者移除列以及取别名读取数据与增减行读取数据 下一章节:如何使用qsqlquerymodel 与 qtableview实现自定义表格 继承关系 qsqlquerymodel 继承与qabstracttablemodel 入口 负责填充数据 void QSqlQueryModel::s…

【JavaEE】认识线程

一、引入线程 在任务管理器界面可以看到很多进程,可以利用CPU多核心这一点来更有效的执行这些进程,即在处理过程中将CPU的多个时间片分配给每个进程,这样的 "多进程编程"就可以起到并发编程的效果,因为进程可以被调度到…

qt QStatusBar详解

1、概述 QStatusBar是Qt框架提供的一个小部件,用于在应用程序窗口底部显示状态信息。它可以显示一些固定的文本和图标,并且可以通过API动态更新显示内容。QStatusBar通常是一个水平的窗口部件,能够显示多行文本内容,非常适合用于…

【Ubuntu】ubuntu 22.04 设置 Xorg 弃用 Wayland

# 编辑gdm3配置文件 sudo vim /etc/gdm3/custom.conf # 重启gdm3 sudo systemctl restart gdm3方式一:如果进行上述操作后,有对比度严重错误问题,请执行下列命令 # 安装驱动 sudo ubuntu-drivers autoinstall 方式二:推荐尝试方式…

日语学习的难易程度

日语学习的难易程度是一个相对主观的问题,它受到多种因素的影响,包括个人的语言学习能力、学习方法、学习时间、学习资源的可获得性以及个人对日语文化的兴趣和投入程度等。以下是对日语学习难易程度的一些分析: 优点与易学之处 文字系统&am…

WPF 打包

打包为单个exe文件直接运行 - - -版本.NET8 新建WPF项目 右键 - 发布 选择发布文件夹 选择发布文件夹 选择发布文件夹 配置 配置,保存 发布 WPF 打包为exe安装程序 示例 实现思路 引导项目中嵌入其它项目可运行目录的zip引导项目中解压zip文件到指定文件夹是…

RTC精度及校准

RTC精度偏差: RTC的基准时间和精度与石英晶体的频率相关,晶体的谐振频率取决于温度,因此RTC性能与温度相关,晶体的频率偏差是晶体正常频率的温度反转函数。 一、硬件方面: 1.使用高精度振荡器的RTC模块; …