重置普通攻击/深入分析 CVE-2023-44487 HTTP/2 快速重置攻击对 Nginx 的影响_0基础白帽子技巧

重置普通攻击/深入分析 CVE-2023-44487 HTTP/2 快速重置攻击对 Nginx 的影响_0基础白帽子技巧

最近安全圈公布了一个利用 HTTP/2 快速重置机制进行 DDoS 攻击的 0day 漏洞,CVE-2023-44487,鉴于 HTTP/2 协议已经在 上广泛使用,所以该漏洞一经发布,在业界引起广泛关注。

之前文章我们介绍过,雷池 WAF 使用 Nginx 作为其代理模式下的流量转发引擎,Nginx 已经在其官网介绍了该漏洞对 Nginx 的影响。简单来说,Nginx 作为一款久经考验的 Web 服务器/代理服务器,其本身就提供过了多种方式来缓解 DDoS 攻击。具体到该漏洞,如果如下两个配置采用 Nginx 的默认值,那么该攻击对 Nginx 基本无影响:

需要说明的是,Nginx 1.19.7 及其之后版本是通过 来限制一个 HTTP/2 TCP 连接上请求总数量,而 1.19.7 之前的版本则是通过 来实现该目的。当前雷池主线版本以上配置均保持默认值,所以该漏洞对雷池无影响。

这篇文章我们会深入 Nginx 的源码,分析为什么 Nginx 的这两个配置能够缓解该漏洞对 Nginx 的攻击。

1. 漏洞的原理

首先我们还是解释一下该漏洞的详细工作原理。

相比于 HTTP/1.1,HTTP/2 协议的一个显著优化就是 单连接上的多路复用:HTTP/2 允许在单个连接上同时发送多个请求,每个 HTTP 请求/响应使用不同的流。连接上的数据流被称为 数据帧,每个数据帧都包含一个固定的头部,用来描述该 数据帧 的类型、所属的流 ID 等。一些比较重要的 数据帧 类型包括:

HTTP/2 协议支持设置一个 TCP 连接上 最大并发流数目,从而限制一个 tcp 连接上的 in- HTTP 请求数目。客户端可以通过发送 帧直接取消一个流,当服务端收到一个 帧时,会直接关闭该流,该流也不再属于 活跃流。

举个例子,假设当前 TCP 连接设置的 最大并发流数目 为 1,下图展示了 发送 req1 后,马上发送 req2,此时 并不会真正处理第二个请求,而是直接响应 。只有在 处理完成 req1 后, 才能接着发送下一个请求:

111.png

那如果 发送 req1 后,紧接着发送 ,此时 可以不停向 发送请求而中间不用等待任何响应,而 则陷入了不停地 接受请求-处理请求-直接结束请求 的循环中:

112.png

虽然 收到 后会直接结束当前请求的处理,但是由于一般高性能服务器都是全异步模型,因此在优雅地结束当前请求处理前,可能已经消耗了部分系统资源来处理该请求(例如对于 proxy ,可能已经和 建立了连接)。恶意攻击者就可以利用该漏洞,通过持续的 、 帧组合,消耗 资源,进而影响 正常请求的处理,造成 DDoS 攻击。

2. 对 Nginx 的影响

接下来我们基于 Nginx 1.20.2 版本,分析为什么通过 Nginx 的 和 配置,就能缓解该攻击的影响呢?首先下图展示了 Nginx 的 HTTP/2 的大致实现原理:

可以看到,Nginx 对 HTTP/2 流量处理的核心实现逻辑是:

网络安全学习路线图(思维导图)

网络安全学习路线图可以是一个有助于你规划学习进程的工具。你可以在思维导图上列出不同的主题和技能,然后按照逻辑顺序逐步学习和掌握它们。这可以帮助你更清晰地了解自己的学习进展和下一步计划。

1. 网络安全视频资料

2. 网络安全笔记/面试题

3. 网安电子书PDF资料

如果你向网安入门到进阶的全套资料,我都打包整理好了,需要学习的小伙伴可以V我找我拿~

学网络安全/学黑客,零基础资料整理来啦~~~

~

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值