Hướng dẫn vá lỗ hổng OpenSSH (CVE-2023-28531) trên CentOS bằng cách nâng cấp phiên bản

1. Kiểm tra phiên bản hiện tại của OpenSSL và OpenSSH

Trước tiên, cần xác định phiên bản đang sử dụng:

openssl version -a
ssh -V

2. Cài đặt và kích hoạt dịch vụ Telnet (dự phòng khi nâng cấp bị gián đoạn)

Cài đặt gói Telnet và xinetd:

yum -y install telnet-server xinetd

Kích hoạt tự động khởi động:

systemctl enable xinetd.service
systemctl enable telnet.socket

Khởi động các dịch vụ:

systemctl start telnet.socket
systemctl start xinetd

Kiểm tra trạng thái hoạt động:

systemctl status telnet.socket
systemctl status xinetd

Cho phép người dùng root đăng nhập qua Telnet:

mv /etc/securetty /etc/securetty.bak

3. Cấu hình tường lửa (có thể bỏ qua nếu tắt tường lửa)

Cách 1: Mở cổng 23 cho tất cả (rủi ro cao):

firewall-cmd --add-port=23/tcp --permanent
firewall-cmd --reload

Cách 2: Chỉ mở cho IP cụ thể:

firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.66.9.1 port protocol=tcp port=23 accept'
firewall-cmd --reload

4. Cho phép root đăng nhập từ xa

Chỉnh sửa file /etc/securetty (nếu còn tồn tại), thêm dòng sau:

pts/4

5. Khởi động lại các dịch vụ Telnet

systemctl restart telnet.socket
systemctl restart xinetd.service

6. Kiểm tra kết nối Telnet

Trên máy Windows, mở CMD và gõ:

telnet <địa chỉ IP máy chủ>

7. Nâng cấp OpenSSL lên phiên bản 3.0.7

Tải và giải nén mã nguồn:

wget http://www.openssl.org/source/old/3.0/openssl-3.0.7.tar.gz --no-check-certificate
tar -zxvf openssl-3.0.7.tar.gz
cd openssl-3.0.7

Cài đặt các thư viện phụ thuộc:

yum install -y gcc gcc-c++ glibc make automake autoconf pam pam-devel zlib zlib-devel

Cấu hình trước khi biên dịch:

./config shared --prefix=/usr/local/openssl

Biên dịch và cài đặt:

make && make install

Sao lưu phiên bản cũ (tùy chọn):

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak

Tạo liên kết tượng trưng cho phiên bản mới:

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl

Cập nhật đường dẫn thư viện:

echo '/usr/local/openssl/lib64' > /etc/ld.so.conf.d/openssl-x86_64.conf
ldconfig -v

8. Nâng cấp OpenSSH lên phiên bản 9.3

Tải và giải nén:

wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p1.tar.gz
tar -zxvf openssh-9.3p1.tar.gz

Thay đổi chủ sở hữu thư mục:

chown -R root.root ./openssh-9.3p1

Dừng dịch vụ SSH hiện tại:

systemctl stop sshd

Xóa cấu hình cũ:

rm -rf /etc/ssh/*

Gỡ bỏ các gói OpenSSH cũ:

rpm -e `rpm -qa | grep openssh` --nodeps

Cấu hình biên dịch:

cd openssh-9.3p1
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-zlib --with-ssl-dir=/usr/local/openssl/include/openssl --with-md5-passwords --with-pam

Biên dịch và cài đặt:

make && make install

Xóa script khởi động cũ:

ls /usr/lib/systemd/system/ssh*
rm -f /usr/lib/systemd/system/ssh*

Tạo liên kết tượng trưng:

ln -s /usr/local/openssh/sbin/sshd /usr/sbin/
ln -s /usr/local/openssh/bin/* /usr/bin/

Tải lại cấu hình systemd:

systemctl daemon-reload

Khởi động và kích hoạt khởi động cùng hệ thống:

systemctl start sshd && systemctl enable sshd

Cho phép root đăng nhập từ xa qua SSH:

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

Khởi động lại dịch vụ SSH:

systemctl restart sshd

Xác nhận phiên bản mới:

ssh -V

Tắt dịch vụ Telnet sau khi kiểm tra SSH hoạt động:

systemctl stop telnet.socket
systemctl disable telnet.socket

Xóa quy tắc tường lửa cho cổng 23:

firewall-cmd --remove-port=23/tcp --permanent
firewall-cmd --reload

9. Các lỗi thường gặp khi biên dịch OpenSSH và cách khắc phục

Lỗi 1: configure: error: *** zlib.h missing - please install first or check config.log ***
Giải pháp: Cài đặt gói zlib-devel:

yum install -y zlib-devel

Lỗi 2: configure: error: *** OpenSSL headers missing - please install first or check config.log *** hoặc configure: error: *** working libcrypto not found, check config.log
Giải pháp: Cài đặt gói openssl-devel:

yum -y install openssl-devel

Lỗi 3: checking whether OpenSSL's headers match the library... no
Giải pháp: Thêm tham số --without-openssl-header-check khi cấu hình:

./configure --prefix=/usr --sysconfdir=/etc/ssh --without-openssl-header-check

Sau đó chạy lại cấu hình và biên dịch:

./configure --prefix=/usr --sysconfdir=/etc/ssh
make && make install

Thẻ: openssh CentOS CVE-2023-28531 openssl Telnet

Đăng vào ngày 25 tháng 5 lúc 01:02