CVE-2023-44487漏洞复现
2024-8-9 15:50:31 Author: www.freebuf.com(查看原文) 阅读量:23 收藏

image

1、漏洞描述

HTTP/2 协议拒绝服务漏洞(CVE-2023-44487)允许恶意攻击者发起针对HTTP/2 服务器的DDoS攻击,使用HEADERSRST_STREAM发送一组HTTP请求,并重复此模式以在目标HTTP/2服务器上生成大量流量。通过在单个连接中打包多个HEADERSRST_STREAM帧,可能导致每秒请求量显著增加,并导致服务器上的CPU 利用率较高,最终导致资源耗尽,造成拒绝服务

对于漏洞原理,简而言之,就是HTTP/2协议有一个bug,它使得用户单方面可以取消通信(耗时短),而服务器需要耗时来处理该响应(耗时长),从而导致拒绝服务,可参考如下文章

深入分析 CVE-2023-44487 HTTP/2 快速重置攻击对 Nginx 的影响

How it works: The novel HTTP/2 ‘Rapid Reset’ DDoS attack

2、配置环境

配置环境:Ubuntu20.04两台

被攻击主机:victim

攻击主机:jfkk

python3.8、python3.10、python3.11都可

Ubuntu20.04安装教程:https://blog.csdn.net/fr16021028/article/details/125888815

(1)安装Apache2

在被攻击主机(victim)上安装apache2服务,以模拟http/2服务,命令如下

sudo apt update
sudo apt install apache2

示意图如下

image
安装成功以后,可以通过浏览器访问127.0.0.1,可以看到,是安装成功的。
image
使用service apache2 status命令也可以看到是成功的,如下所示。
image

(2)启用HTTP/2模块

使用curl命令可以查看协议(默认是80端口)

curl -I -k -s --http2 localhost

image
由上可以看到,刚安装的apache2是没有http/2模块的,需要手动安装,命令如下

sudo a2enmod http2
systemctl restart apache2

操作示意图如下所示
image

(3)开启443端口

当使用浏览器访问443端口时,可以看到,是失败的,这是因为要为apache2配置一些ssl等东西。
image
开启SSL https 443比较麻烦,ssl配置不好搞,可以参考这个文章Linux Apache2如何开启SSL https 443,下面提供比较简单的命令,执行即可。

sudo a2enmod ssl
sudo a2ensite default-ssl
sudo systemctl restart apache2

用https再次访问(https://127.0.0.1/),发现是可以访问的,如下所示。
image
以上就是配置的环境,攻击主机可以在宿主机上进行,也可以在虚拟机中进行,只要能ping通就行。

3、漏洞复现

想要实现精确的攻击,可以查看该github:https://github.com/secengjeff/rapidresetclient,该工具需要安装go环境,比较麻烦,不再赘述,想要尝试,可以参考文献引用部分的第一条。

(1)安装脚本环境

该漏洞github上的脚本有很多,这边挑一个简单的就行,下载攻击脚本(在攻击主机(jfkk)上下载),命令如下。

git clone https://github.com/imabee101/CVE-2023-44487.git

查看一下被攻击主机victim)的IP:192.168.70.169

image
然后修改CVE-2023-44487目录下的main.py文件,将url改为被攻击主机的ip192.168.70.169

image
在**攻击主机(jfkk)**上执行main.py需要安装依赖库

pip install hyper

image

(2)执行攻击脚本

DDoS攻击成功的表现如下:

  1. **请求超时:**客户端在等待服务器响应时超时。

  2. **服务不可用:**浏览器或客户端收到服务器错误(如502 Bad Gateway,503 Service Unavailable等)。

  3. **高负载:**系统监控工具(如top,htop)显示CPU使用率达到100%,内存和交换空间被完全使用。

  4. **系统响应缓慢或无响应:**服务器上的其他操作(如登录,命令执行)变得非常缓慢或无法完成。

其实本文的复现应该称为DoS攻击,因为DDOS攻击的实施更为复杂,需要控制大量的计算资源和僵尸网络。

执行main.py,并使用htop命令(这个命令没有安装可以apt安装一下)在虚拟机(victim)中观察,下面是没有进行攻击时的CPU使用情况,可以看到,CPU利用率很少,其中图上的12表示CPU的序号,其下面为内存Mem和交换区Swp
如果虚拟机的CPU越多,那么服务器处理消息的能力就越强,那么DoS的效果就越差,所以为了尽可能的展现出攻击的效果,必须使得服务器端的CPU核数越少越好,客户端的CPU核数越多越好

sudo apt update
sudo apt install htop

image
开启攻击脚本之后,可以看到,CPU使用率迅速上涨,攻击成功,如下图所示。

至于为什么有这么多apache的进程,这是因为apache使用多个进程或线程来处理并发的客户端请求。这样做主要是为了提高性能、扩展性和可靠性,能够处理大量并发请求和高负载。(我的猜测)
image

(3)相关报错

当然,在运行脚本时可能会遇到一下情况,[Errno 24] Too many open files
image
too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯连接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制,使用如下命令查看当前系统设置的最大句柄数是多少。

ulimit -a

可以看到,最大打开数量是1024
image
提高一下最大打开数量,再次运行脚本即可

ulimit -n 8912

image

4、相关细节

1、安装pyhton虚拟环境

在安装过程中,有些python包之间可能会冲突,如下图所示
image
因此可以使用虚拟环境,每个虚拟环境都有自己独立的 Python 解释器和依赖包。这样,不同项目的依赖不会相互冲突,安装过程如下。
(1)安装venv 模块:

sudo apt update
sudo apt install python3-venv

(2)创建虚拟环境:
选择一个目录来创建虚拟环境,并运行以下命令:

python3 -m venv myenv

上述命令将在当前目录下创建一个名为myenv的虚拟环境,可以根据需要更改虚拟环境的名称。
(3)激活虚拟环境:
要激活刚创建的虚拟环境,运行以下命令:

source myenv/bin/activate

激活后,命令提示符会发生变化,显示虚拟环境的名称,类似于这样:

(myenv) user@hostname:~/path/to/your/project$

(4)安装依赖包:
在激活的虚拟环境中,你可以使用pip来安装所需的Python包。例如,安装hyper包:

pip install hyper

image

(5)停用虚拟环境:
完成工作后,可以通过以下命令停用虚拟环境:

deactivate

REFERENCE

  1. https://www.youtube.com/watch?v=zvNnqblGGs0&pp=ygUOY3ZlLTIwMjMtNDQ0ODc%3D

  2. https://www.youtube.com/watch?v=XD_PONWpdmw&pp=ygUOY3ZlLTIwMjMtNDQ0ODc%3D

  3. https://github.com/bcdannyboy/CVE-2023-44487

  4. https://github.com/imabee101/CVE-2023-44487
    5.https://blog.csdn.net/Roy_70/article/details/78423880

  5. https://stack.chaitin.com/techblog/detail/164


文章来源: https://www.freebuf.com/vuls/407757.html
如有侵权请联系:admin#unsafe.sh