【漏洞修复】 CVE Linux 系统应用漏洞修复笔记

说明

此文章主要记录工作中遇到的漏洞以及修复过程。

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算法

  1. OpenSSL Security Advisory [22 Sep 2016]
    链接:https://www.openssl.org/news/secadv/20160922.txt
    请在下列网页下载最新版本:
    https://www.openssl.org/source/
  2. 对于nginx、apache、lighttpd等服务器禁止使用DES加密算法
    主要是修改conf文件
  3. 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/openssl

结束后在此查询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 && make && make install

等待编译完成。
完成后,关闭原来运行着的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

sudo 漏洞 CVE-2021-3156

漏洞信息

此漏洞是在sudo中存在一个基于堆的缓冲区溢出漏洞,非root用户可以使用sudo命令来以root用户身份执行命令.sudo在参数中转义反斜杠导致堆缓冲区溢出.攻击者在不需要获得root密码的情况下取得root权限。

影响版本

  1. 从版本1.8.2 到版本 1.8.31sp12
  2. 从版本1.9.0 到版本 1.9.5sp1

解决办法

前往sudo官网下载最新版本的安装包升级。

验证方法

  1. 查看当前的sudo版本是否在受影响的版本范围内
sudo -V

在这里插入图片描述
2. 使用普通用户执行以下命令

sudoedit -s /

若出现 sudoedit: /: not a regular file 表示存在漏洞

修复步骤

  1. 去sudo官方下载最新的安装包,此处我下载的版本为 1.9.13p3
    官网地址: 地址
    在这里插入图片描述

  2. 将下载的压缩包上传到服务器的 /root下,并使用以下命令将压缩包解压

tar zxvf sudo-1.9.13p3.tar.gz
  1. 解压后得到文件夹sudo-1.9.13p3 ,将此文件夹复制到 /usr/share/doc/
cp -r ~/sudo-1.9.13p3 /usr/share/doc/
  1. 进入 文件夹 sudo-1.9.13p3 中 执行以下命令.
    注意:-docdir= 之后的路径
./configure --prefix=/usr --libexecdir=/usr/lib --with-secure-path --with-all-insults --with-env-editor --docdir=/usr/share/doc/sudo-1.9.13p3 --with-passprompt="[sudo] password for %p: " && make && make install && ln -sfv libsudo_util.so.0.0.0 /usr/lib/sudo/libsudo_util.so.0
  1. 等待安装完成之后查询版本号为1.9.13p3 时,说明升级成功。
    在这里插入图片描述

OpenSSH ssh-agent 远程代码执行漏洞(CVE-2023-38408)

漏洞信息

OpenSSH ssh-agent 组件存在远程代码执行漏洞(CVE-2023-38408)。此漏洞允许远程攻击者在 OpenSSH 上执行任意命令。

影响版本

5.5 < OpenSSH ≤ 9.3p1

解决办法

升级最新为版本

修复步骤

1. 下载新版包

下载地址:官网下载地址
此处我下载的是openssh-9.4p1.tar.gz版本
在这里插入图片描述

2. 开始升级

注意:

  1. openssl必须版本必须大于等于1.1.1,建议先按照本文中的【SSL/TLS协议信息泄露漏洞(CVE-2016-2183)】升级openssl的版本
  2. 需要依赖gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel ,所以留意一下服务器中是否已经有相关依赖,没有则需要安装。
  3. 此处使用脚本进行安装,安装步骤请详细查看shell脚本。(需要看懂shell脚本,当然脚本里有输出提示)。脚本地址:centerOs7安装相关的应用脚本 中的 【更新openssh】 章节。

liblzma/xz 官方库被植入后门漏洞(CVE-2024-3094)

漏洞信息

xz 是一种通用的数据压缩格式,几乎存在于每个 Linux 发行版中,无论是社区项目还是商业产
品发行版。从 5.6.0 版本开始,在 xz 的上游 tarball 包中发现了恶意代码。通过一系列复杂的混淆
手段,liblzma 的构建过程从伪装成测试文件的源代码中提取出预构建的目标文件,然后用它来修改
liblzma 代码中的特定函数。这导致生成了一个被修改过的 liblzma 库,任何链接此库的软件都可能
使用它,从而拦截并修改与此库的数据交互。

影响版本

xz 和 liblzma 5.6.0~5.6.1 版本,可能包括的发行版 / 包管理系统有:

  • List item
  • Fedora 41 / Fedora Rawhide
  • Debian Sid
  • Alpine Edge
  • x64 架构的 homebrew
  • 滚动更新的发行版,包括 Arch Linux / OpenSUSE Tumbleweed

如果您的系统使用 systemd 启动 OpenSSH 服务器,您的 SSH 认证过程可能被攻击。非 x64 (amd64) 架构的系统不受影响。

解决办法

  1. 使用以下命令查看系统中的xz版本是否在影响版本的范围。如果在影响版本 5.6.0~5.6.1范围内,则说明有可能存在此漏洞。
xz --version
  1. 如果在漏洞影响版本范围内,则利用以下脚本进行排查是否存在后门
#!/bin/bash

# 设置shell。如果任何命令的退出状态码(返回值)不为0,脚本将立即退出。确保脚本在出现错误时立即停止执行非常有用,以防止错误的状态继续传播。如果尝试使用未定义的变量,脚本将产生错误并退出
set -eu 

# 查找liblzma 所在路径
path="$(ldd $(which sshd) | grep liblzma | grep -o '/[^ ]*' )"

# 判断是否存在漏洞
if [ "${path}" == "" ];then
	echo "不存在漏洞,脚本退出"
	exit 1001;
fi 

# 检查函数签名
if hexdump -ve '1/1 "%.2x"' "$path" | grep -q f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410
then
	echo "存在漏洞"
	exit 1001;
else
	echo "不存在漏洞"
	exit 1001;
fi

  1. 如果存在漏洞,请升级至 5.6.4 版本。目前官方已经更新最新版本。
 yum update
 yum install xz-devel
 rpm -q xz-devel
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张帅三代

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值