漏洞处置:HTTP/2 快速重置攻击对 F5 NGINX 的影响
原文作者:Michael Vernik, Nina Forsyth
原文链接:漏洞处置:HTTP/2 快速重置攻击对 F5 NGINX 的影响
转载来源:NGINX 开源社区
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn
本文主要介绍了最近发现的一个与 HTTP/2 协议有关的漏洞——HTTP/2 快速重置(HTTP/2 Rapid Reset)攻击。在特定条件下,攻击者可利用此漏洞在 NGINX 开源版、NGINX Plus 以及在服务器端实施 HTTP/2 规范的相关产品上执行拒绝服务(DoS)攻击。为了保护您的系统免遭此类攻击,我们建议您立即更新 NGINX 配置。
HTTP/2 数据流重置问题
与服务器建立连接后,HTTP/2 协议允许客户端启动并发流进行数据交换。与之前的协议迭代不同,如果最终用户决定离开页面或因任何其他原因停止数据交换,HTTP/2 提供了取消数据流的方法——它会向服务器发送一个 RST_STREAM 帧,以避免服务器执行不必要的工作。
利用该漏洞进行攻击的方法是通过已建立的连接启动并快速取消大量 HTTP/2 数据流,从而绕过服务器对并发流的最大值限制。由于传入数据流的重置速度快于后续数据流的抵达速度,因此客户端能够绕过服务器的配置阈值,达到使服务器超载的目的。
对 NGINX 的影响
出于对性能和资源消耗的考虑,NGINX 将默认的并发流地数量限制为128。此外,为了兼顾网络和服务器性能,NGINX 允许客户端使用 HTTP keepalive,在默认情况下为最多 1,000 个请求保持 HTTP 连接。
通过默认的 keepalive 限制,NGINX 可以防止此类攻击。如果攻击者企图创建更多连接来绕过这一限制,标准四层监控和警报工具就会发出告警。
但如果 NGINX 配置的 keepalive 数量明显高于默认和推荐设置,攻击可能会耗尽系统资源。当发生数据流重置的情况时,HTTP/2 协议要求不向该数据流上的客户端返回任何后续数据。通常情况下,重置会以任务的形式优雅地处理取消操作,只产生可忽略不计的服务器开销。
然而,如果能绕过 NGINX 的数据流阈值,客户端就能在这种开销上做文章,通过快速启动数千个数据流放大这一开销。这会导致服务器 CPU 占用率激增,从而拒绝为合法客户提供服务。
在异常高的 keepalive 限值下通过建立并快速取消 HTTP/2 数据流发起拒绝服务攻击
针对该攻击的缓解措施
作为一款功能齐全的服务器和代理服务器,NGINX 为管理员提供了强大的工具来缓解拒绝服务攻击。要使用这些功能,必须对 NGINX 配置文件进行如下更新,以尽量缩小服务器的攻击面:
-
keepalive_requests 应保持 1,000 次请求的默认设置
-
http2_max_concurrent_streams 应保持 128 个数据流的默认设置
我们还建议添加这些安全措施作为最佳实践:
-
limit_conn 限制单个客户端的连接数添加该指令时,应合理设置在应用性能和安全性之间取得平衡
-
limit_req 限制在给定时间内处理的来自单个客户端的请求数。添加该指令时,应合理设置在应用性能和安全性之间取得平衡
我们对该攻击的响应
我们试验了多种缓解策略,以充分了解这种攻击对我们广大客户和用户的影响。虽然研究证实 NGINX 已经配备了规避此类攻击的所有必要工具,但我们仍希望更进一步,确保有需求的用户能够对 NGINX 进行超出推荐规格的配置。
通过研究,我们发现了一种方法,能够提高服务器在各种理论上可通过 HTTP/2 协议发起的洪水攻击下的弹性。针对这些情况,我们发布了一个补丁来提高系统稳定性。为了防范此类攻击,我们建议 NGINX 开源版用户基于最新的代码库重新构建二进制文件,而 NGINX Plus 客户请立即更新到最新的软件包(R29p1 或 R30p1)。
新增补丁的工作原理
为确保及早检测到 NGINX 上的洪水攻击,我们对同一个事件循环中可引入的新数据流的数量施加了限制。该限值被设置为 http2_max_concurrent_streams 指令所配置的值的两倍。即使从未达到最大阈值,例如在发送请求后立即重置数据流(如本攻击案例),该限值也会生效。
受影响的产品
该漏洞会影响 NGINX HTTP/2 模块 (ngx_http_v2_module)。
如欲进一步了解可能受影响的特定 NGINX 或 F5 产品,请访问:https://my.f5.com/manage/s/article/K000137106。
有关 CVE-2023-44487 - HTTP/2 快速重置攻击的更多信息,请参阅:https://www.cve.org/CVERecord?id=CVE-2023-44487
致谢
感谢 Cloudflare、亚马逊和 Google 在发现和协作确定及缓解这一漏洞方面所做的工作。
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Elasticsearch:什么是 kNN?
kNN - K-nearest neighbor 定义 kNN(即 k 最近邻算法)是一种机器学习算法,它使用邻近度将一个数据点与其训练并记忆的一组数据进行比较以进行预测。 这种基于实例的学习为 kNN 提供了 “惰性学习(lazy learning)” 名称,并使算法能够执行分类或回归问题。 kNN 的假设是相似的点可以在彼此附近找到 —— 物以类聚。 作为一种分类算法,kNN 将新数据点分配给其邻居中的多数集。 作为一种回归算法,kNN 根据最接近查询点的值的平均值进行预测。 kNN 是一种监督学习算法,其中 “k” 代表分类或回归问题中考虑的最近邻的数量,“NN”代表为 k 选择的数量的最近邻。 kNN 算法简史 kNN 最初由 Evelyn Fix 和 Joseph Hodges 于 1951 年在为美国军方进行的研究中开发。 他们发表了一篇解释判别分析的论文,这是一种非参数分类方法。 1967 年,Thomas Cover 和 Peter Hart 对非参数分类方法进行了扩展,并发表了他们的 “最近邻模式分类” 论文。 大约 20 年后,詹姆斯·凯勒 (James Kelle...
- 下一篇
千卡利用率超98%,详解JuiceFS在权威AI测试中的实现策略
2023 年 9 月,AI 领域的权威基准评测 MLPerf 推出了Storage Benchmark。该基准测试通过模拟机器学习 I/O 负载的方法,在不需要 GPU 的情况下就能进行大规模的性能压测,用以评估存储系统的在 AI 模型训练场景的适用性。 目前支持两种模型训练:BERT (自然语言模型) 和 Unet3D(3D医学成像)。虽然目前不支持大语言模型如 GPT、LLaMA,但 BERT 与大语言模型同为多层 transformer 结构,大语言模型的用户仍可从 BERT 训练结果获得一定的参考。 高性能存储产品厂商 DDN、Nutanix、Weka 和 Argonne National Laboratory(简称 ANL)发布了 MLPerf 的测试结果作为行业参考,我们也使用 JuiceFS 企业版进行了测试,让用户了解它在模型训练中的表现。 测试中最直观的指标是 GPU 利用率,大于 90% 为测试通过,表示存储系统能够满足训练业务的性能需求。JuiceFS 在 Unet3D 的 500 卡规模测试中,GPU 利用率保持在 97% 以上;在 BERT 的1000 卡规模...
相关文章
文章评论
共有0条评论来说两句吧...