解决Rocky 9 Linux高危漏洞

当我们配置了一台Rocky 9 Linux系统服务器,运行一段时间后,单位的网络管理员提示系统有高危安全漏洞,需要进行升级。我们一般对外开启了httpd和sshd服务,默认的Rocky 9 Linux系统会被扫描到OpenSSL、Apache和OpenSSH的安全漏洞。此外一般也要考虑ICMP timestamp请求响应漏洞。

1. 解决OpenSSL安全漏洞

OpenSSL安全漏洞描述示例:

OpenSSL 安全漏洞(CVE-2023-5363)

OpenSSL是OpenSSL团队的一个开源的能够实现安全套接层(SSLv2/v3)和安全传输层(TLSv1)协议的通用加密库。该产品支持多种加密算法,包括对称密码、哈希算法、安全散列算法等。 OpenSSL 3.1版本和3.0版本存在安全漏洞。攻击者利用该漏洞导致机密性受到影响。

OpenSSL也是Linux系统必须带的软件,需要在官网下载软件最新版进行安装,操作如下:

# 检测openssl版本
openssl version -a
# Rocky 9.2 Linux自带的openssl版本为3.0.7,不满足要求。以下操作更新到3.3.2版本。

# 下载并安装openssl软件,注意要将软件安装到/usr目录
wget https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gz
tar zxf openssl-3.3.2.tar.gz
cd openssl-3.3.2/
./Configure --prefix=/usr && make -j 40 && sudo make install
cd .. && rm -rf openssl-3.3.2/

# 下载并安装openLDAP软件,注意将软件安装到/usr目录
# 若不重新编译安装openLDAP软件,则系统会报错,sudo命令无法使用
# 注意要安装和系统之前相同版本的openLDAP,否则依然报错,在Rocky 9系统中使用2.4版本
wget https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.4.59.tgz
tar zxf openldap-2.4.59.tgz
cd openldap-2.4.59
./configure --prefix=/usr && make -j 40
# 由于更新了openssl,sudo命令无法使用,需要先使用密码切换到root用户进行安装
su root
make install
cd .. && rm -rf openldap-2.4.59/
# 安装完毕后,要设置正确的libldap库文件的软链接
cd /lib64
ln -sf libldap-2.4.so.2.11.7 libldap-2.4.so.2
ln -sf libldap-2.4.so.2.11.7 libldap-2.4.so.2.0.200
ln -sf libldap-2.4.so.2.11.7 libldap.so
ln -sf libldap-2.4.so.2.11.7 libldap.so.2

# 虽然新编译安装openLDAP软件后,sudo命令可以成功执行,但是/lib64/libcurl.so.4依然报错
# 对curl软件重新编译安装,注意将软件安装到/usr目录
wget https://curl.se/download/curl-7.76.0.tar.gz
tar zxf curl-7.76.0.tar.gz
cd curl-7.76.0/
./configure --prefix=/usr && make -j 40 && sudo make install
cd .. && rm -rf curl-7.76.0

需要注意的是,提升OpenSSL版本后,所有需要依赖于该软件的其它软件可能都需要重新安装,例如curl、OpenLDAP和OpenSSH等。

2. 解决OpenSSH安全漏洞

OpenSSH安全漏洞描述示例:

OpenSSH 安全漏洞(CVE-2023-38408)

OpenSSH(OpenBSD Secure Shell)是加拿大OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。 OpenSSH 9.3p2之前版本存在安全漏洞,该漏洞源于ssh-agent的PKCS11功能存在安全问题。攻击者可利用该漏洞执行远程代码。

由于Linux系统服务器必须要开启sshd服务,以利于ssh连接服务器进行运行操作。因此,只能通过提高OpenSSH软件的版本进行解决。通过访问OpenSSH官网,找到软件在中国的镜像站点下载软件。OpenSSH软件的常规版本非常小,只有Makefile,适用于BSD项目,可能不太利于Linux系统上的安装。推荐下载适合Linux系统的p1版本(Portable Release),有configure命令,安装更方便。操作如下:

# 检测openssh版本
ssh -V
sshd -V
# Rocky 9.2 Linux自带的openssh版本为8.7p1,不满足要求。以下操作更新到9.9p1版本。

# 先备份已有的sshd配置文件夹
sudo cp -a /etc/ssh/ /etc/ssh.bak

# 下载并安装openssh,注意要将软件安装到/usr目录
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
tar zxf openssh-9.9p1.tar.gz
cd openssh-9.9p1/
./configure --prefix=/usr && make -j 40 && sudo make install
cd .. && rm -rf openssh-9.9p1

# 重启sshd服务
sudo systemctl restart sshd.service

3. 解决Apache安全漏洞

Apache安全漏洞描述示例:

Apache HTTP Server 安全漏洞(CVE-2022-36760)

Apache HTTP Server是美国阿帕奇(Apache)基金会的一款开源网页服务器。该服务器具有快速、可靠且可通过简单的API进行扩充的特点。 Apache HTTP Server 2.4版本至2.4.54之前版本存在环境问题漏洞,该漏洞源于从mod_proxy_ajp函数中发现包含HTTP请求走私漏洞。

当不需要服务器对外提供网站服务时,直接关闭httpd服务即可。使用root权限执行如下命令

sudo systemctl disable httpd.service
# 执行该命令禁止开机启动httpd服务

sudo systemctl stop httpd.service
# 执行该命令关闭httpd服务

也可以考虑更新Apache软件到最新版本,在Apache官网,找到httpd下载网址下载软件安装包进行安装。操作如下:

# 检测Apache软件版本
httpd -v
# Rocky 9.2 Linux自带的Apache版本为2.4.53,不满足要求。以下操作更新到2.4.62版本。

# 先备份已有的httpd配置文件夹
cp -a /etc/httpd /etc/httpd.bak

# 先安装APR和APR-util组件
sudo dnf install -y expat expat-devel
wget https://downloads.apache.org/apr/apr-1.7.5.tar.gz
tar zxf apr-1.7.5.tar.gz
cd apr-1.7.5/
./configure --prefix=/usr && make -j 40 && sudo make install
cd .. && rm -rf apr-1.7.5/
wget https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz
tar zxf apr-util-1.6.3.tar.gz
cd apr-util-1.6.3/
./configure --prefix=/usr --with-apr=/usr/ && make -j 40 && sudo make install
cd .. && rm -rf apr-util-1.6.3

# 下载并安装Apache软件,注意要将软件安装到/usr目录
wget https://downloads.apache.org/httpd/httpd-2.4.62.tar.gz
tar zxf httpd-2.4.62.tar.gz
cd httpd-2.4.62/
./configure --prefix=/usr && make -j 40 && sudo make install
# 更新httpd的ssl库文件
mv /etc/httpd/modules/mod_ssl.so /etc/httpd/modules/mod_ssl.so.bak
cp modules/ssl/.libs/mod_ssl.so /etc/httpd/modules/
cd .. && rm -rf httpd-2.4.62/

# 修改配置文件/etc/httpd/conf.d/ssl.conf,使用更好的SSL加密设置
# 若使用Rochy 9 Linux默认的ssl.conf配置,会导致httpd无法重启
perl -p -i -e 's/.*SSLProtocol.*/SSLProtocol all -SSLv2 -SSLv3/' /etc/httpd/conf.d/ssl.conf
perl -p -i -e 's/.*SSLProxyProtocol.*/SSLProxyProtocol all -SSLv2 -SSLv3/' /etc/httpd/conf.d/ssl.conf
perl -p -i -e 's/.*SSLHonorCipherOrder.*/SSLHonorCipherOrder on/' /etc/httpd/conf.d/ssl.conf
perl -p -i -e 's/.*SSLCipherSuite.*/SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!DSS/' /etc/httpd/conf.d/ssl.conf
perl -p -i -e 's/.*SSLProxyCipherSuite.*/SSLProxyCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!DSS/' /etc/httpd/conf.d/ssl.conf

# 重启httpd服务
sudo systemctl restart httpd.service

对于httpd的SSL配置文件/etc/httpd/conf.d/ssl.conf,其主要的参数解释如下:

# 允许所有协议,但禁用有漏洞的SSLv2和SSLv3
SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3

# 严格按照加密套件的顺序进行协商
SSLHonorCipherOrder on

# 强制使用高强度加密算法:HIGH: 选择高强度加密算法。!aNULL: 禁止匿名认证。!eNULL: 禁止空密码。!EXPORT: 禁止弱导出密码。!DES: 禁止DES算法。!RC4: 禁止RC4算法。!MD5: 禁止MD5哈希算法。!PSK: 禁止预共享密钥。!SRP: 禁止SRP认证。!DSS: 禁止DSS签名算法。
SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!DSS

4. 解决ICMP timestamp请求响应漏洞

ICMP timestamp(ICMP时间戳)是一种网络协议,用于获取远程主机的系统时间。虽然它在某些情况下是有用的,但它也可能被恶意利用。因此,许多网络管理员都会选择在防火墙上过滤掉这种类型的流量。

# 阻止ICMP timestamp请求
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p icmp --icmp-type timestamp-request -m comment --comment "deny ICMP timestamp" -j DROP

# 阻止ICMP timestamp响应
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p icmp --icmp-type timestamp-reply -m comment --comment "deny ICMP timestamp" -j DROP

# 重新加载防火墙
firewall-cmd --reload

# 查看防火墙规则
firewall-cmd --direct --get-all-rules

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据