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。希望对类似的安全漏洞的修复工作提供帮助。

相关推荐
九河云9 小时前
5秒开服,你的应用部署还卡在“加载中”吗?
大数据·人工智能·安全·机器学习·华为云
枷锁—sha10 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
桌面运维家12 小时前
vDisk安全启动策略怎么应用?防止恶意引导攻击
安全
我是一只puppy12 小时前
使用AI进行代码审查
javascript·人工智能·git·安全·源代码管理
迎仔14 小时前
10-网络安全监控与事件响应:数字世界的智能监控与应急系统
网络·安全·web安全
larance14 小时前
Gunicorn + Nginx+systemd 配置flask
nginx·flask·gunicorn
文艺理科生Owen16 小时前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
运维·nginx
x-cmd17 小时前
[x-cmd] jsoup 1.22.1 版本发布,引入 re2j 引擎,让 HTML 解析更安全高效
前端·安全·html·x-cmd·jsoup
kali-Myon17 小时前
2025春秋杯网络安全联赛冬季赛-day2
python·安全·web安全·ai·php·pwn·ctf
独行soc18 小时前
2026年渗透测试面试题总结-19(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮