01. 这漏洞,到底啥来头?

CVE-2023-44487 是 HTTP/2 协议中一个极为严重的漏洞 ,它利用了 HTTP/2 协议的快速重置机制来发动 DDoS 攻击。HTTP/2 作为 HTTP/1.1 的升级版,采用二进制协议和多路复用技术,实现了更高效的数据传输,还引入头部压缩、服务器推送和流优先级等新特性,显著提升网页加载速度和性能。但就是这样一个旨在优化网络传输的协议,却被发现存在严重的安全隐患。
这个漏洞的原理并不复杂。在 HTTP/2 协议中,客户端和服务器之间通过 “流” 来传输数据,每个流都有唯一的标识符。当客户端想要取消某个流的传输时,可以发送 RST_STREAM 帧给服务器。正常情况下,这是一种合理的机制,用于快速终止不需要的连接。然而,攻击者却利用这一点,通过不断发送 HEADERS 帧和 RST_STREAM 帧的组合,在短时间内发起大量的请求,然后又迅速取消这些请求。服务器在接收到这些请求后,会按照协议规定进行处理,哪怕这些请求很快被取消,服务器也已经在处理过程中消耗了大量的资源,如 CPU、内存和网络带宽。
想象一下,你的服务器就像一个繁忙的客服中心,正常情况下,它能够有条不紊地处理客户的咨询。但突然有一群恶意的 “客户” 不断打进电话,刚说几句就挂断,如此反复。客服人员不得不一次次地接听电话、准备回答问题,却始终无法完成一次完整的服务。很快,客服中心的资源就会被耗尽,真正有需求的客户反而无法得到服务,这就是 CVE-2023-44487 漏洞造成的后果 —— 服务器拒绝服务。
据相关报道,利用该漏洞发动的攻击已经达到了惊人的规模。谷歌云、亚马逊网络服务(AWS)和 Cloudflare 等公司都监测到了大规模的 DDoS 攻击,其中谷歌云遭遇的攻击峰值时期每秒超过 3.98 亿个请求 ,Cloudflare 追踪到的峰值时期每秒超过 2.01 亿个请求,几乎是之前观察到的创纪录攻击的三倍 。这些数据足以说明该漏洞的高危性和影响力。由于 HTTP/2 协议在互联网上广泛使用,几乎每一台现代 Web 服务器都可能受到攻击,从电商平台到社交媒体,从在线游戏到金融服务,一旦遭受攻击,业务中断、数据丢失、用户流失等严重后果都可能接踵而至。
02. 哪些系统在 “危险名单” 上?
由于 HTTP/2 协议应用广泛,许多使用该协议的组件和系统都受到了 CVE-2023-44487 漏洞的影响。以下是部分受影响的组件及版本:
- Apache Tomcat:11.0.0-M1 ≤ Apache Tomcat ≤ 11.0.0-M11;10.1.0-M1 ≤ Apache Tomcat ≤ 10.1.13;9.0.0-M1 ≤ Apache Tomcat ≤ 9.0.80;8.5.0 ≤ Apache Tomcat ≤ 8.5.93。
- Apache Traffic Server:8.0.0 ≤ Apache Traffic Server ≤ 8.1.8 ;9.0.0 ≤ Apache Traffic Server ≤ 9.2.2。
- Go 语言:Go < 1.21.3;Go < 1.20.10 。在使用 Go 语言开发的网络应用程序中,如果涉及 HTTP/2 协议通信,且版本处于上述范围,就存在被攻击的风险。
- grpc - go:grpc-go < 1.58.3;grpc-go < 1.57.1;grpc-go < 1.56.3。基于 grpc - go 构建的 RPC 系统若版本在此区间,其服务端在处理 HTTP/2 请求时容易受到攻击。
- jetty:jetty < 12.0.2;jetty < 10.0.17;jetty < 11.0.17;jetty < 9.4.53.v20231009 。使用这些版本 jetty 服务器的 Web 应用,可能因漏洞导致拒绝服务。
- Netty:Netty < 4.1.100.Final。Netty 是一个广泛应用的网络应用框架,低版本存在该漏洞隐患。
- nghttp2:nghttp2 < v1.57.0。作为 HTTP/2 协议的 C 库实现,此版本以下的 nghttp2 易受攻击。
如果你正在使用上述组件,且版本符合上述范围,那么你的系统就像一座没有设防的城堡,随时可能遭受攻击,必须尽快采取措施进行修复。
03. 修复指南:对症下药保安全
面对 CVE-2023-44487 这个来势汹汹的漏洞,及时修复是保障系统安全的关键。下面为大家详细介绍几种有效的修复方法。
(一)更新组件版本
各组件的官方已发布最新版本,及时更新是最直接有效的修复方式。以 Apache Tomcat 为例,若当前使用的是受影响版本,可前往
Apache Tomcat 官方网站下载最新版。下载时务必核对版本号,确保获取的是修复了 CVE-2023-44487 漏洞的版本。安装过程中,要严格遵循官方安装指南,先停止正在运行的旧版本服务,备份相关配置文件,防止数据丢失,再按步骤完成新版本的安装与配置 。
对于 Apache Traffic Server,可从
Apache Traffic Server 官方网站获取更新;Go 语言开发者需将 Go 版本更新至 1.21.3 及以上或 1.20.10 及以上;grpc-go 更新到 1.58.3 及以上、1.57.1 及以上或 1.56.3 及以上;jetty 更新到 12.0.2 及以上、10.0.17 及以上、11.0.17 及以上或 9.4.53.v20231009 及以上;Netty 更新到 4.1.100.Final 及以上;nghttp2 更新到 v1.57.0 及以上 。每个组件的更新方式略有不同,可参考官方文档进行操作。
(二)Nginx 配置调整
Nginx 作为常用的服务器软件,其相关配置对缓解该漏洞有重要作用。其中,keepalive_requests 和 http2_max_concurrent_streams 这两个配置项尤为关键。
keepalive_requests 用于限制一个 HTTP/2 TCP 连接上请求的总数量。在 Nginx 1.19.7 及其之后的版本中,通过该配置项能有效约束连接上的请求量。例如,将其设置为默认值 1000 时,即使攻击者利用 HEADERS 和 RST_STREAM 帧序列发动快速重置攻击,Nginx 也能够把一个 TCP 连接上的请求总数量控制在 1000 个以内 。这意味着攻击者若想持续攻击,就不得不频繁新建 TCP 连接,增加了攻击难度和成本。
http2_max_concurrent_streams 配置项定义了连接上的最大并发流数目。合理设置该值,可以限制攻击者同时发起的请求数量,避免服务器因过多并发请求而陷入瘫痪。例如,根据服务器性能和业务需求,可将其设置为一个合适的值,如 64 或 128 。在实际配置时,运维人员需综合考虑服务器性能、预期并发连接数和业务需求等因素,确定这两个配置项的最佳取值,以有效缓解漏洞风险。以下是配置示例:
http {
keepalive_requests 1000;
http2_max_concurrent_streams 128;
# 其他配置项
}
(三)防火墙与负载均衡器设置
防火墙在网络安全防护中起着 “守门卫士” 的作用。针对 CVE-2023-44487 漏洞,可以配置防火墙来阻挡恶意的 HTTP/2 请求。比如根据特定攻击模式设置规则,限制连接速率,设定单位时间内允许的最大连接数,有效遏制攻击者发起大规模连接请求,防止服务器瞬间被海量请求淹没 。还能限制特定类型的请求,如对 HEADERS 和 RST_STREAM 帧的频率进行限制,只允许正常业务范围内的请求通过,阻断攻击者利用漏洞构造的恶意请求序列。
若使用负载均衡器处理 HTTP/2 请求,确保负载均衡器已更新到修复该漏洞的版本十分重要。负载均衡器更新后,能在分发请求时识别和过滤恶意请求,将合法请求合理分配到后端服务器,避免单个服务器因遭受攻击而导致整个系统瘫痪,保障系统整体稳定性和可用性。例如,F5 负载均衡器的用户应及时关注官方更新,按照指引进行版本升级 。
04. 实战案例:看他们如何成功修复
为了让大家更直观地了解 CVE-2023-44487 漏洞的修复过程,下面分享两个实际案例。
(一)Geoserver 地图服务器修复案例
Geoserver 是一款在开源系统中广泛应用的地图服务器,通常采用官方二进制安装包部署,依赖 Java 环境运行。在一次甲方月度漏洞扫描时,发现 Geoserver 所依赖的 Jetty 存在漏洞。经确认,Jetty 9.4.53 版本以下受 Apache HTTP/2 拒绝服务漏洞(CVE-2023-44487)影响,而现场的 Geoserver 版本为 2.24.0,对应的 Jetty 版本是 9.4.52 ,正好处于受影响范围。
在问题排查阶段,技术人员首先明确了受影响的组件及版本信息,随后尝试从 Geoserver 官网获取最新版本,希望通过升级 Geoserver 来解决问题。然而,下载后发现 Geoserver 的 2.24.1 版本对应的 Jetty 版本仍为 9.4.52,未修复该漏洞。于是,技术团队决定手动替换 Jetty 的 jar 包来修复漏洞。
修复措施实施过程如下:从 Jetty 官网下载 zip 包,对照 Geoserver 发行版本中的 Jetty jar 包,分两步进行替换,共需替换 13 个 jar 包 。为了确保 Jetty 的正常启动,还将 Jetty 中的 start.jar 包也替换到 Geoserver 发行包中。但在替换完成启动时,遇到了 java.lang.UnsupportedClassVersionError 错误,经排查是因为替换的 Jetty 包是由高版本 Java 编译的,而当前运行环境的 Java 版本较低,不兼容新的 Jetty 包。根据 Java 版本与 class file version 的对应关系,将 Java 版本最低升级到 Java 11 ,最终成功解决问题。修复后,再次进行漏洞扫描,结果显示 Jetty 相关漏洞已被成功修复,Geoserver 恢复安全稳定运行,保障了地图服务的正常提供 。
(二)某电商平台修复案例
某电商平台在日常安全监测中发现部分 Web 服务器存在 CVE-2023-44487 漏洞风险。该平台使用了大量基于 Apache Tomcat 构建的服务,且部分服务器的 Tomcat 版本处于受影响范围。由于电商平台业务复杂,涉及大量用户交易和数据交互,一旦遭受攻击,后果不堪设想。
平台的技术团队迅速展开问题排查,详细梳理了受影响的服务器列表、Tomcat 版本以及相关业务模块。考虑到直接更新 Tomcat 版本可能对现有业务造成兼容性问题,技术团队决定采用先在测试环境进行充分测试的策略。他们搭建了与线上环境一致的测试环境,在其中模拟各种业务场景,然后对 Tomcat 进行版本更新,从受影响的版本升级到官方发布的修复版本 。
在测试过程中,发现部分业务模块出现了兼容性问题,如某些自定义的 Servlet 无法正常加载,部分页面样式错乱等。技术团队针对这些问题,深入分析代码,与业务部门沟通协调,对相关业务模块进行了针对性的代码调整和优化,解决了兼容性问题。
在确认测试环境中一切正常后,技术团队制定了详细的上线计划,选择在业务低峰期进行线上服务器的 Tomcat 版本更新。更新过程中,采用逐步替换的方式,先对部分非关键业务服务器进行更新,观察一段时间确保没有问题后,再逐步扩大到所有受影响的服务器。经过紧张有序的操作,最终成功完成了所有服务器的 Tomcat 版本更新。更新后,通过安全监测工具持续监控服务器的运行状态和安全指标,经过一段时间的观察,未发现与 CVE-2023-44487 漏洞相关的异常情况,电商平台的业务恢复正常且安全性得到有效保障,用户能够正常进行购物、支付等操作 。
05. 日常防护小贴士,防患于未然
修复 CVE-2023-44487 漏洞固然重要,但在日常生活和工作中,提前做好防护措施,预防类似安全事件的发生同样关键。以下是一些实用的日常防护小贴士:
- 保持系统和软件更新:养成定期更新系统和软件的习惯,无论是操作系统、应用程序还是服务器组件,及时更新到最新版本,以获取最新的安全补丁,降低被攻击的风险 。很多软件和系统会自动推送更新提醒,建议开启自动更新功能,确保第一时间安装安全补丁。如果担心自动更新可能带来兼容性问题,可以定期手动检查更新,并在更新前备份重要数据。
- 定期进行安全审计:定期对网络设备、服务器、应用程序等进行安全审计,检查安全配置是否合理,是否存在潜在的安全隐患 。通过安全审计,可以及时发现并解决问题,避免安全漏洞被攻击者利用。例如,每月对服务器的安全配置进行一次全面检查,包括用户权限设置、防火墙规则、日志记录等;每季度对应用程序进行一次漏洞扫描,及时发现并修复潜在的安全漏洞。
- 提高安全意识:加强网络安全知识学习,提高自身安全意识,不轻易点击不明链接、不随意下载未知来源的软件、不随意透露敏感信息 。在日常生活中,遇到要求提供个人信息或敏感数据的情况,要保持警惕,确认对方身份和目的后再进行操作。对于企业员工,公司可以定期组织网络安全培训,提高员工的安全意识和应急处理能力。比如,通过模拟钓鱼邮件测试,让员工识别钓鱼邮件的特征,避免上当受骗;组织安全演练,让员工熟悉安全事件的应急处理流程。
- 使用安全工具:安装防火墙、入侵检测系统(IDS)、入侵防御系统(IPS)等安全工具,实时监控网络流量,及时发现并阻止恶意攻击 。防火墙可以设置访问规则,限制未经授权的访问;IDS 和 IPS 能够检测并拦截异常流量和攻击行为。例如,在企业网络中部署防火墙,只允许特定的 IP 地址和端口访问内部服务器;使用 IDS 实时监控网络流量,一旦发现异常流量,立即发出警报并采取相应的防御措施。
- 制定应急响应计划:提前制定完善的应急响应计划,明确在发生安全事件时的应对流程和责任分工,确保能够快速、有效地应对安全事件,减少损失 。应急响应计划应包括事件报告、应急处理、数据恢复、事后总结等环节。定期对应急响应计划进行演练和更新,确保其有效性和可行性。比如,每半年组织一次应急演练,模拟不同类型的安全事件,检验应急响应计划的执行效果,及时发现问题并进行改进。
关于墨者安全墨者安全致力于安全防护、服务器高防、网络高防、ddos防护、cc防护、dns防护、防劫持、高防服务器、高防dns、网站防护等方面的服务,全网第一款指纹识别技术防火墙,自研的WAF指纹识别架构,提供任意CC和
DDoS攻击防御。