【漏洞复现】CVE-2004-2761:使用弱哈希算法签名的 SSL 证书(SSL Certificate Signed Using Weak Hashing Algorithm)

概要:本次复现是针对编号为CVE-2004-2761的漏洞,由于条件有限,本次复现通过创建自签名证书进行操作。

问题描述:证书链中的 SSL 证书使用弱哈希算法进行签名。

1 环境搭建

本次复现环境在Linux平台下使用Nginx进行环境的搭建,通过Openssl组件生成自签名证书,并在Nginx配置文件中进行加载,最后使用Nussus社区版进行漏洞扫描测试。

类型名称版本
平台Ubuntu20.04.6 LTS
中间件Nginx1.18.0-0ubuntu1.4
证书工具Openssl1.1.1f-1ubuntu2.19
漏扫工具Nessus社区版10.5.4 (#13) LINUX
主机IP172.30.103.52/

1. 安装Nginx

sudo apt install nginx

安装好后访问地址:http://172.30.103.52,弹出Nginx欢迎页(如下图)即安装成功。

2. 安装openssl

sudo apt isntall opensll

安装完成后执行openssl version,弹出版本好即安装成功。
注意:这里我用的是1.1.1版本,在3.0.0以上的高版本并没有进行测试。高版本可能存在将一些弱密码配置的参数给删除的情况。

2 创建 SSL 证书

创建使用 sha1 散列的SSL证书
命令如下:

sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -sha1 -days 365

以下是此命令每个部分的作用的细分:

  • -openssl:这是用于创建和管理 OpenSSL 证书、密钥和其他文件的基本命令行工具。

  • -req:此子命令指定我们要使用X.509证书签名请求 (CSR) 管理。“X.509”是 SSL 和 TLS对其密钥和证书管理所遵循的公钥基础设施标准。我们想创建一个新的 X.509 证书,所以我们使用这个子命令。

  • -x509:这通过告诉实用程序我们要制作自签名证书而不是像通常发生的那样生成证书签名请求来进一步修改前一个子命令。

  • -nodes:这告诉 OpenSSL 跳过使用密码保护我们的证书的选项。当服务器启动时,我们需要 Nginx 能够在没有用户干预的情况下读取文件。密码可以防止这种情况发生,因为我们必须在每次重新启动后输入它。

  • -days 365:此选项设置证书被视为有效的时间长度。我们在这里设置了一年。

  • -newkey rsa:2048:这指定我们要同时生成新证书和新密钥。我们没有在上一步中创建签署证书所需的密钥,因此我们需要将其与证书一起创建。该rsa:2048部分告诉它制作一个2048
    位长的 RSA 密钥。

  • -keyout:这一行告诉 OpenSSL 在哪里放置我们正在创建的生成的私钥文件。

  • -out:这告诉 OpenSSL 在哪里放置我们正在创建的证书。

  • -sha1:指定一种单向加密算法,这里选的是sha1.

命令执行后,系统会询问您一些有关服务器的问题,以便将信息正确嵌入到证书中。

最重要的一行是请求Common Name (e.g. server FQDN or YOUR name). 需要输入与您的服务器相关联的域名。

由于我们是自签名证书做漏洞复现测试,这里为了方便我是直接回车。并没有详细填写。

整个提示将如下所示:

#这是表示组织所在国家的两个字母的代码。
Country Name (2 letter code) [AU]:US

#这是组织所在州或省的全名。
State or Province Name (full name) [Some-State]:New York

#这是组织所在的城市。
Locality Name (eg, city) []:New York City

#这是颁发证书的组织或公司的法律名称。
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bouncy Castles, Inc.

#此字段允许您指定组织内的特定部门或单元。
Organizational Unit Name (eg, section) []:Ministry of Water Slides

#这是将使用证书的服务器的完全限定域名(FQDN
Common Name (e.g. server FQDN or YOUR name) []:server_IP_address

#这是与负责服务器或证书的组织或个人相关的电子邮件地址。
Email Address []:admin@your_domain.com

输入完成后,创建的证书文件和私钥文件都将放置在该/etc/ssl目录的相应子目录中。
证书:/etc/ssl/certs/nginx-selfsigned.crt
私钥:/etc/ssl/private/nginx-selfsigned.key

3 配置 Nginx 以使用 SSL

1. 打开Nginx的默认配置文件。

sudo vim /etc/nginx/nginx.conf

嵌入以下内容

 server {
                listen 443 ssl;
                server_name localhost;
                ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
                ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
}

如图所示:

2. 检查配置文件是否正确。

sudo nginx -t 

输出如下则表示正确。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test issuccessful

3. 重新加载nginx配置文件,使其生效。

sudo nginx -s reload

4 使用漏扫工具测试

  1. 打开浏览器,输入本机Nginx服务地址 https://172.30.103.52
    由于是自签名证书会收到警告,因为您创建的证书不是由您浏览器的受信任证书颁发机构之一签署的。直接点高级,然后访问即可。

在这里查看证书所使用的签名算法,可以看出正是我们之前创建的sha1.

2. 使用Nessus对172.30.103.52这个IP进行扫描。发现漏洞问题如下:

到这里我们就算复现成功。

5 漏洞修复

1. 重新制作强密码哈希算法的证SSL证书,还是使用之前的命令。

sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -sha256 -days 365

对比之前的命令主要是将-sha1替换为-sha256

2. 再次加载nginx配置。

nginx -s reload

3. 再次查看证书签名算法,已经变为sha256.

4. 再次使用nessus进行扫描。结果如下,可以看见弱密码的漏洞已经被修复。只剩下了自签名证书的漏洞问题。

本次复现漏洞已经全部结束,对您有帮助的可以点个关注。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年12月26日
下一篇 2023年12月26日

相关推荐