SSL/TLS 协议信息泄露漏洞(CVE-2016-2183)修复(机器无外网)

前言

最近公司扫漏,发现 SSL/TLS 协议信息泄露漏洞:TLS是安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。 TLS, SSH, IPSec 协商及其他产品中使用的 IDEA、DES 及 Triple DES 密码或者 3DES 及 Triple 3DES 存在大约四十亿块的生日界,这可使远程攻击者通过 Sweet32 攻击,获取纯文本数据。让根据给出的建议进行漏洞加固,下面记录了没有外网 linux 服务器的修复过程。

加固建议

避免使用 IDEA、DES 和 3DES算法。

1、更新 OpenSSL 到最新版本。

2、对于 nginx、apache、lighttpd 等服务器禁止使用 DES 加密算法,主要是修改 conf 文件。

安装 openssl

下载最新版本 openssl

www.openssl.org/source/

通过 rz 命令或者 ftp 工具将压缩包上传到目标机器。

安装相关依赖

以下是需要的依赖包:

可以在有网络的机器上通过以下命令下载:

css 复制代码
yum install --downloadonly --downloaddir=存放路径 包名

不指定目录时 centos7 默认会存放在 /var/cache/yum/x86_64/7/base/packages/

或者通过 yumdownloader:

ini 复制代码
yumdownloader httpd php subversion mod_dav_svn # 指定目录(不指定为当前目录)
yumdownloader --destdir=存放路径 包名
yumdownloader --resolve --destdir=存放路径 包名 # 下载包同时下载相关依赖

在目标机器创建 yum-cache 目录,上传所有依赖

安装当前目录下的所有依赖:

复制代码
yum localinstall *.rpm

安装 openssl

解压缩并进入 openssl 目录:

bash 复制代码
tar xvf openssl-3.2.0.tar.gz 
cd ./openssl-3.2.0

编译部署:

bash 复制代码
./config --prefix=/usr/local/openssl
make && make install

备份:

bash 复制代码
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak

创建软链接(如果失败可以用 ln -sf 强制执行):

bash 复制代码
ln -s /usr/local/openssl/bin/openssl   /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl   /usr/include/openss

更新动态链接:

bash 复制代码
echo "/usr/local/openssl/lib">>/etc/ld.so.conf
ldconfig

测试:

复制代码
openssl version

遇到 ./openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory 错误:

查看 /usr/local/openssl/lib64 目录,发现有 libssl.so.3 库文件,但是 openssl 程序却找不到,openssl 程序会去 /usr/lib/ 路径下去寻找库文件。 于是,把 openssl 的库文件全部拷贝到 /usr/lib/ 路径中去:

bash 复制代码
cp -r /usr/local/openssl/lib64/* /usr/lib

或者编辑 /etc/ld.so.conf 文件并添加共享库文件所在的目录。例如在文件中添加:

vbnet 复制代码
/path/to/openssl/lib

更新动态链接库

复制代码
ldconfig

更新 nginx

查看已安装模块

运行 nginx -V 命令查看已经安装的 nginx 模块,configure arguments:后面表示当前已经安装的nginx模块,如果有就复制下来。

重新编译

在 nginx 安装目录重新编译 nginx:

javascript 复制代码
./configure --原来有的模块(如果有的话) --with-openssl=/usr/local/openssl && make && make install

编译遇到 make[1]: *** [/usr/local/ssl/.openssl/include/openssl/ssl.h] 相关的错误: 修改 nginx 编译时对 openssl 的路径选择,打开 nginx 安装目录下的 nginx-1.23.3/auto/lib/openssl/conf 文件,找到下面代码:

bash 复制代码
CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
CORE_LIBS="$CORE_LIBS $NGX_LIBDL"

将路径改成已经安装的 openssl 路径,我的是:

bash 复制代码
CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib64/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib64/libcrypto.a"
CORE_LIBS="$CORE_LIBS $NGX_LIBDL

禁用算法

将以下的内容替换 nginx 443端口配置中的 ssl_ciphers 内容,禁用指定算法:

ruby 复制代码
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!3DES:!ADH:!RC4:!DH:!DHE:!IDEA:!DES;

重启 nginx

bash 复制代码
/usr/local/nginx/sbin/nginx -s reload

修改成功

总结

本文记录了机器在无外部网络情况下更新 OpenSSL,确保系统安全性的提升。解释了如何获取 OpenSSL 更新包、手动传输至目标机器并进行安装的具体过程,以及修改 Nginx 配置,确保 Nginx 能够正确地利用新版本的 OpenSSL。希望对类似的安全漏洞的修复工作提供帮助。

相关推荐
dyxal20 分钟前
非对称加密:彻底解决密钥分发难题的数字安全革命
服务器·网络·安全
q***9942 小时前
IPV6公网暴露下的OPENWRT防火墙安全设置(只允许访问局域网中指定服务器指定端口其余拒绝)
服务器·安全·php
k***45993 小时前
服务器无故nginx异常关闭之kauditd0 kswapd0挖矿病毒 CPU占用200% 内存耗尽
运维·服务器·nginx
p***62993 小时前
【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则
运维·服务器·安全
腾讯云开发者3 小时前
你相信光吗?
安全
记得记得就1513 小时前
【Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装】
前端·nginx·http
6***B485 小时前
Nginx搭建负载均衡
运维·nginx·负载均衡
2501_939909055 小时前
Web与Nginx网站服务(1)
运维·nginx
安娜的信息安全说5 小时前
LLM 安全实战:Prompt 攻击原理、案例与防御指南
安全·ai·prompt
MicroTech20255 小时前
微算法科技(NASDAQ :MLGO)基于区块链的混合数据驱动认知算法:开启智能安全新范式
科技·安全·区块链