这里写自定义目录标题
- 说明
- SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
- 漏洞信息
- 解决办法
- 验证方法
- 修复步骤
- 说明
- 查询当前使用的openssl版本号
- 下载并安装新版本的openssl
- 替换nginx中使用的openssl到最新版
说明
此文章主要记录工作中遇到的漏洞以及修复过程。
SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
漏洞信息
名称 | SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】【可验证】 |
---|---|
详细描述 | TLS是安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。TLS, SSH, IPSec协商及其他产品中使用的IDEA、DES及Triple DES密码或者3DES及Triple 3DES存在大约四十亿块的生日界,这可使远程攻击者通过Sweet32攻击,获取纯文本数据。 |
危险程度说明 | 攻击者可以远程执行任意命令或者代码,或对系统进行远程拒绝服务攻击。 |
发现日期 | 2016-08-31 |
CVE编号 | CVE-2016-2183 |
CNVD编号 | CNVD-2016-06765 |
CNNVD编号 | CNNVD-201608-448 |
CNCVE编号 | CNCVE-20162183 |
解决办法
建议:避免使用IDEA、DES和3DES算法
- OpenSSL Security Advisory [22 Sep 2016]
链接:https://www.openssl.org/news/secadv/20160922.txt
请在下列网页下载最新版本:
https://www.openssl.org/source/ - 对于nginx、apache、lighttpd等服务器禁止使用DES加密算法
主要是修改conf文件 - Windows系统可以参考如下链接:
https://social.technet.microsoft.com/Forums/en-US/31b3ba6f-d0e6-417a-b6f1-d0103f054f8d/ssl-medium-strength-cipher-suites-supported-sweet32cve20162183?forum=ws2016
https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/windows-security/restrict-cryptographic-algorithms-protocols-schannel
验证方法
根据SSL/TLS协议信息泄露漏洞(CVE-2016-2183)原理,通过发送精心构造的数据包到目标服务,根据目标的响应情况,验证漏洞是否存在
修复步骤
说明
原本我的nginx中使用的openssl 版本号为:1.0.2s
升级后的openssl 版本号为:1.1.1K
查询当前使用的openssl版本号
使用命令查询当前版本号
openssl version
下载并安装新版本的openssl
进入到 /usr/local 目录,使用以下命令下载最新版的安装包到此目录下。
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz --no-check-certificate
解压安装包
tar xvf openssl-1.1.1k.tar.gz
进入解压出来的文件夹
cd /usr/local/openssl-1.1.1k/
编译安装
./config && make && make install
echo "/usr/local/lib64/" >> /etc/ld.so.conf
ldconfig
将旧的备份
mv /usr/bin/openssl /usr/bin/openssl.old
创建文件软连接
ln -sv /usr/local/bin/openssl /usr/bin/openss
结束后在此查询openssl的版本号,验证是否升级成功
替换nginx中使用的openssl到最新版
进入nginx的安装目录下的sbin下,运行命令查看详细信息
./nginx -V
并从详细信息的onfigure arguments中获取到旧版本的详细配置参数,我的参数如下:
--prefix=/usr/local/nginx --with-http_sub_module --with-http_stub_status_module --with-pcre --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_realip_module --with-stream --with-stream_ssl_module --with-openssl=/usr/local/openssl-1.0.2s
找到nginx的 configure 文件。以下是我的nginx目录结构.configure 文件在 nginx-1.23.2 中,cd nginx-1.23.2 进入此文件夹。
使用以下命令重新编译nginx.
# 注意:
# --prefix 之后的配置内容和旧版的一致。但是 --with-openssl 部分必须改成新的版本号。
./configure --prefix=/usr/local/nginx --with-http_sub_module --with-http_stub_status_module --with-pcre --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_realip_module --with-stream --with-stream_ssl_module --with-openssl=/usr/local/openssl-1.1.1k
等待编译完成。
完成后,关闭原来运行着的nginx
pkill -9 nginx
进入安装路径下的sbin 目录下启动nginx
./nginx
启动完成后查看nginx的版本信息,验证nginx的openssl版本号是否已经升级成功。
将以下的内容替换 nginx 的443配置中的 ssl_ciphers 内容,禁用指定算法
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!3DES:!ADH:!RC4:!DH:!DHE:!IDEA:!DES;
进入安装路径下的sbin 目录下重新加载nginx配置
./nginx -s reload