一、CVE-2023-44487 漏洞究竟是什么?
(一)漏洞基本介绍
在当今的网络环境中,HTTP/2(HyperText Transfer Protocol version 2)是一种极为重要的用于在 Web 上进行通信的协议。它旨在减少延迟、提高效率、加快网页加载速度,尤其在高延迟和高带宽网络环境下表现更为突出,并且还保持与 HTTP/1.1 的向后兼容性,使得网站向新协议迁移的过程更加平滑,正因如此,大多数现代的 Web 浏览器和 Web 服务器都已经对 HTTP/2 提供了支持。
然而,就在 2023 年,新华三盾山实验室监测到了 HTTP/2 协议拒绝服务漏洞(CVE-2023-44487),而且这个漏洞已经存在在野利用的情况,引起了业界的广泛关注。攻击者利用该漏洞可造成服务器拒绝服务,其威胁等级被评定为高危,影响程度广泛,利用价值高,但利用难度较低,漏洞评分达到了 7.5。
这个漏洞具体来说,是当攻击者使用 HEADERS 和 RST_STREAM 发送一组 HTTP 请求,并重复此模式时,就能够在目标 HTTP/2 服务器上生成大量流量。通过在单个连接中打包多个 HEADERS 和 RST_STREAM 帧,可能会使每秒请求量显著增加,进而导致服务器上的 CPU 利用率较高,最终致使服务器资源耗尽,无法正常对外提供服务。
(二)漏洞原理剖析
要深入理解 CVE-2023-44487 漏洞,就需要先了解 HTTP/2 协议的相关机制。与 HTTP/1.1 相比,HTTP/2 协议的一大优化亮点在于单连接上的多路复用,即允许在单个连接上同时发送多个请求,每个 HTTP 请求和响应都会使用不同的流,而这些数据流就被称为数据帧。
其中有几种比较重要的数据帧类型,例如 SETTINGS 帧,它属于控制消息,主要用于传递关于 http2 连接的配置参数,像 SETTINGS_MAX_CONCURRENT_STREAMS 就定义了该连接上的最大并发流数目;还有 HEADERS 帧,其包含着 HTTP headers;以及 RST_STREAM 帧,它有着直接取消一个流的作用,如果客户端不想再接收服务端的响应,便可以直接发送 RST_STREAM 帧。
正常情况下,客户端发送请求,服务端接收并处理后响应,流程按部就班。但在这个漏洞场景下,攻击者利用了 HTTP/2 协议的特性来实施攻击。攻击者可以通过客户端不停地发送 HEADERS 帧来发起请求,随后马上发送 RST_STREAM 帧取消这个流,服务端收到 RST_STREAM 帧后会直接关闭该流。可问题在于,客户端此时可以不停向服务器发送请求,中间不用等待任何响应,这就导致服务器陷入了接受请求 - 处理请求 - 直接结束请求的循环中。
尽管服务端收到 RST_STREAM 帧后会结束当前请求处理,可由于一般高性能服务器都是全异步模型,在优雅地结束当前请求处理前,往往已经消耗了部分系统资源来处理该请求,比如对于代理服务器而言,可能已经和上游服务器建立了连接等操作。恶意攻击者就是抓住这个漏洞环节,通过持续的 HEADERS、RST_STREAM 帧组合,不断消耗服务器资源,进而影响服务器正常请求的处理,最终发起 DDoS 攻击,给服务器带来严重的影响。
二、CVE-2023-44487 漏洞影响范围
(一)涉及的组件列举
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;
- grpc-go:grpc-go < 1.58.3、grpc-go < 1.57.1、grpc-go < 1.56.3;
- jetty:jetty < 12.0.2、jetty < 10.0.17、jetty < 11.0.17、jetty < 9.4.53.v20231009;
- Netty:Netty < 4.1.100.Final;
- nghttp2:nghttp2 < v1.57.0。
如果你正在使用上述这些组件,且版本处于对应的区间内,那么就要特别留意该漏洞带来的风险,及时采取相应措施来进行修复和防范。
(二)影响后果说明
一旦 CVE-2023-44487 漏洞被攻击者利用,将会给相应的业务系统带来严重的不良影响。攻击者通过使用 HEADERS 和 RST_STREAM 发送一组 HTTP 请求,并重复此模式,可在目标 HTTP/2 服务器上生成大量的流量。由于在单个连接中能够打包多个 HEADERS 和 RST_STREAM 帧,这就使得每秒请求量会显著增加。
面对这样的大量请求,服务器需要不断地进行处理,而这会导致服务器的 CPU 利用率变得很高。比如一些业务系统中,服务器本身承载着众多的用户请求和业务逻辑运算,在遭受这种漏洞攻击产生的额外负载后,会不堪重负。随着资源被不断消耗,最终会致使服务器资源耗尽,无法正常对外提供服务,出现业务中断的情况。
像一些提供在线服务的网站,可能会出现用户无法正常访问、页面加载不出来等现象;对于依靠服务器进行数据交互的应用程序,也会出现卡顿、报错甚至无法运行的问题,严重影响用户体验以及业务的正常开展。
三、修复 CVE-2023-44487 漏洞的实用方法
(一)组件版本更新策略
对于受 CVE-2023-44487 漏洞影响的组件,各官方已发布了相应的最新安全版本,及时将对应组件升级到安全版本是修复该漏洞的关键举措之一。以下为大家详细介绍:
- Apache Tomcat:目前官方发布的安全版本分别为 11.0.0-M12 及以上、10.1.14 及以上、9.0.81 及以上、8.5.94 及以上。如果你的业务系统中正在使用 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 这些范围,就需要尽快升级到对应的安全版本。在升级操作前,务必要做好数据备份工作,避免因升级出现意外而导致数据丢失等问题。比如可以先将原 Tomcat 安装目录整体进行打包备份,或者将重要的配置文件、应用程序的相关数据等备份到其他安全的存储位置。
- Apache Traffic Server:其安全版本需达到 8.1.9 及以上、9.2.3 及以上。使用该组件且版本处于 8.0.0 ≤ Apache Traffic Server ≤ 8.1.8、9.0.0 ≤ Apache Traffic Server ≤ 9.2.2 区间内的用户,应尽快安排升级事宜,确保系统能够抵御该漏洞带来的风险。
- Go:需升级到 1.21.3 及以上、1.20.10 及以上版本。若你所使用的 Go 版本低于上述要求,建议及时进行更新,保障系统安全。
- grpc-go:对应的安全版本要求为 1.58.3 及以上、1.57.1 及以上、1.56.3 及以上。对于使用 grpc-go 且版本符合受影响范围的情况,要尽快将其升级到安全版本,防止因漏洞被利用而出现服务器拒绝服务等不良后果。
- jetty:安全版本应当达到 12.0.2 及以上、10.0.17 及以上、11.0.17 及以上、9.4.53.v20231009 及以上。如果正在使用的 jetty 版本较低,在其受影响的版本区间内,那就得着手进行升级操作了。
- Netty:要将 Netty 升级至 4.1.100.Final 及以上版本。使用旧版本的用户需重视起来,尽快完成升级,使系统处于安全状态。
- nghttp2:nghttp2 需更新到 v1.57.0 及以上版本,以修复此漏洞带来的安全隐患。
总之,按照官方给出的最新安全版本对相应组件进行升级,并做好数据备份,是从根源上修复 CVE-2023-44487 漏洞的重要手段,大家一定要重视并尽快落实。
(二)其他辅助修复手段
除了对组件进行版本更新外,还可以采取一些其他辅助修复手段来共同防御 CVE-2023-44487 漏洞攻击,以下为大家介绍几种常见且有效的方式:
配置防火墙
通过配置防火墙,可以在一定程度上阻止恶意的 HTTP/2 请求,从而降低漏洞被利用的风险。具体操作时,可以根据该漏洞特定的攻击模式来设置相应规则,比如限制连接速率,设定单位时间内允许的最大连接数量,避免攻击者通过短时间内大量发起连接请求来耗尽服务器资源;还可以限制特定类型的请求,对 HEADERS 和 RST_STREAM 等涉及该漏洞利用的相关请求类型进行针对性管控。不过在设置防火墙规则时,要充分考虑业务正常运行的需求,避免因规则过于严格而误拦截正常的用户请求,影响业务开展。要经过细致的测试和评估,确保在增强安全性的同时保障系统的可用性。
对负载均衡器进行相关设置
如果业务系统中使用了负载均衡器来处理 HTTP/2 请求,那么要确保负载均衡器已经更新到修复了该漏洞的版本。除此之外,还可以对负载均衡器进行一些优化设置,例如合理分配流量,避免某一台后端服务器承受过多的请求压力,使得服务器资源能够被均衡利用,增强整体系统应对攻击的能力。同时,可以设置健康检查机制,实时监测后端服务器的运行状态,一旦发现某台服务器出现异常,能够及时将请求转发到其他正常的服务器上,保障业务的连续性。在操作时,要依据负载均衡器的具体型号和功能特性,准确地进行相关参数配置,并且要与后端服务器的配置相适配,确保整个系统协同工作稳定可靠。
开展网络安全审计
网络安全审计对于发现和防范包括 CVE-2023-44487 漏洞在内的各类网络安全风险都有着重要作用。首先,要制定网络安全审计政策和相关制度,明确审计的目标、范围、方法以及程序等,让审计工作有章可循。定期对网络系统、网络设备以及网络运行状态等进行全面评估,分析是否存在安全隐患和风险,尤其要重点关注与 HTTP/2 协议相关的部分,查看是否存在该漏洞利用的迹象。同时,完善网络安全审计流程和方法,对网络设备、操作系统、应用程序以及数据库等各个层面都进行细致审计,及时发现已知的安全漏洞并采取修复措施。另外,强化网络流量监控和日志记录功能,建立完善的监控系统,对网络流量和日志进行实时监测,对于重要事件和异常行为做好记录与分析,这样一旦出现疑似该漏洞攻击的异常流量情况,能够迅速察觉并及时响应处理。在开展网络安全审计工作时,建议安排专业的安全人员或者与专业的安全服务机构合作,确保审计工作的专业性和有效性,全方位保障网络系统的安全稳定运行。
这些辅助修复手段从不同角度来防御 CVE-2023-44487 漏洞攻击,大家可以根据自身业务系统的实际情况,综合运用这些方法,最大程度地降低该漏洞带来的风险。
四、案例展示与经验总结
(一)实际修复案例分享
Nginx 修复案例
Nginx 作为一款常用的 Web 服务器 / 代理服务器,本身提供了多种方式来缓解 DDoS 攻击,对于 CVE-2023-44487 漏洞也有一定的抵御能力。在 Nginx 1.19.7 及其之后版本是通过 keepalive_requests 来限制一个 HTTP/2 TCP 连接上请求总数量,而 1.19.7 之前的版本则是通过 http2_max_requests 来实现该目的。像雷池主线版本以上配置保持默认值(keepalive_requests默认配置为 1000,http2_max_concurrent_streams默认配置为 128)时,该漏洞基本对其无影响。
其原理在于,Nginx 对 HTTP/2 流量处理时,对于每个底层的 TCP 连接会创建相应结构来解析数据帧,并转换为标准的请求处理流程。当 ngx_http_v2_create_stream() 创建一个流时,会增加该 TCP 连接上的一个请求计数,而每次收到 HEADERS 帧时,会判断当前 tcp 连接上的请求数量是否已经达到最大值(如通过 keepalive_requests 配置来判断)。由于 keepalive_requests 配置的默认值为 1000,所以即使利用 HEADERS、RST_STREAM 帧序列来构造快速重置攻击,Nginx 也能够限制一个 TCP 连接上的请求总数量为 1000 个。如果攻击者想持续利用该漏洞,就不得不新建新的 TCP 连接,此时可以继续结合标准的 L4 监控告警工具来进一步加强防护。
Cisco Expressway 修复案例
以 Cisco Expressway x14.X 为例,当面对 CVE-2023-44487 漏洞时,可按以下步骤进行修复:
- 使用 SCP 客户端访问 expressway 文件系统(使用根凭据),位置为 /tandberg/trafficserver/etc/ 。
- 创建文件的备份并将其保存到 PC 上,然后打开原始文件。
- 在记事本中打开该文件,然后搜索字符串 CONFIG proxy.config.http.server_ports STRING 8443,会看到类似如下突出显示的行:
##############################################################################
CONFIG proxy.config.http.server_ports STRING 8443:ssl
CONFIG proxy.config.http.connect_ports STRING NULL
##############################################################################
- 修改行: CONFIG proxy.config.http.server_ports STRING 8443:proto=http:ssl 8443:proto=http:ssl:ipv6。
- 保存文件并使用 WinSCP 将其上传到 expressway 中的同一位置,即 /tandberg/trafficserver/etc/ 。
- 使用根凭证登录到 Expressway CLI,然后使用命令 /etc/init.d/trafficserver restart 重新启动 “Traffic Server”。需要注意的是,系统重新启动会将配置恢复为默认值,更改将丢失。
在这个过程中,可能会遇到比如文件权限不足无法顺利备份、修改后上传失败等问题。如果遇到文件权限不足,要检查使用的根凭据是否正确以及对应文件系统的权限设置;若上传失败,需查看网络连接是否正常、WinSCP 的相关配置是否准确等,通过仔细排查这些可能出现的问题点,最终完成漏洞修复,保障 Cisco Expressway 的安全运行。
(二)修复经验归纳汇总
关注官方动态
各受影响组件的官方会及时发布关于 CVE-2023-44487 漏洞的相关信息以及对应的修复版本等关键内容。例如 Apache Tomcat、Apache Traffic Server、Go、grpc-go 等组件,官方会明确指出受影响的版本范围以及安全版本要求。我们要养成定期查看官方网站、官方公告等渠道消息的习惯,第一时间掌握最新动态,这样才能在漏洞出现后及时知晓自己使用的组件是否受影响,以及按照官方指引进行相应修复操作,避免因信息滞后而遭受漏洞攻击带来的损失。
定期自查
无论是大型企业的复杂网络系统,还是小型项目的简单网络环境,都应该定期开展自查工作。一方面,要梳理自己正在使用的各类可能涉及到该漏洞的组件,核对其版本号,查看是否处于受影响的版本区间内;另一方面,通过一些网络安全检测工具,对网络流量、服务器资源使用情况等进行监测,查看是否存在疑似该漏洞利用的异常迹象,比如是否有异常的大量 HTTP/2 请求、服务器 CPU 利用率是否无端升高等情况。只有通过定期且细致的自查,才能尽早发现潜在的安全隐患,为及时修复漏洞争取时间。
多手段结合修复
不要仅仅依赖单一的修复方法,而是要将组件版本更新、配置防火墙、对负载均衡器进行相关设置以及开展网络安全审计等多种手段结合起来。比如先将相关组件升级到安全版本,从根源上解决已知的漏洞问题;接着通过配置防火墙,按照该漏洞特定的攻击模式设置规则,限制连接速率、特定类型请求等,阻拦恶意的 HTTP/2 请求;同时,对负载均衡器进行优化设置,保证流量合理分配以及后端服务器的健康运行;并且开展网络安全审计工作,全面评估网络系统的安全状况,及时发现其他可能存在的漏洞或者弱点并加以修复。多种手段相互配合、相辅相成,能够最大程度地降低 CVE-2023-44487 漏洞带来的风险,保障整个系统的安全稳定运行。
墨者安全 防护盾
墨者安全作为专业级别安全防护专家,在应对 Webshell 风险隐患方面展现出了卓越的能力。其拥有全面的检测机制,能够精准识别 Webshell 的各种类型和变体,无论是复杂的大马,还是隐蔽的内存马,都难逃其敏锐的监测。
墨者安全防护盾具备强大的实时监控功能,对服务器的各项活动进行 7*24 小时不间断的监视。一旦发现任何可疑的 Webshell 活动迹象,立即发出警报,并迅速采取隔离和清除措施,将风险扼杀在萌芽状态。
在防护策略上,墨者安全防护盾采用了多层次的防御体系。不仅能够在网络层面阻挡外部的恶意访问和攻击,还能深入系统内部,对服务器的文件系统、进程等进行深度检查和保护,确保 Webshell 无法植入和运行。
同时,墨者安全防护盾拥有快速的应急响应能力。当 Webshell 攻击事件发生时,专业的安全团队能够迅速介入,进行深入的分析和处理,最大程度减少攻击带来的损失,并帮助用户快速恢复服务器的正常运行。
墨者安全防护盾还注重用户教育和培训,为用户提供关于 Webshell 防范的专业知识和最佳实践,帮助用户提升自身的安全意识和防范能力,共同构建坚实的网络安全防线。