vpsを利用して立ち上げたUbuntu 24.04。
まずは2024年7月に発生した脆弱性に対応させます。
- openssl
openssl version -a
OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
built on: Fri Aug 9 02:33:21 2024 UTC
platform: debian-amd64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -fzero-call-used-regs=used-gpr -DOPENSSL_TLS_SECURITY_LEVEL=2 -Wa,--noexecstack -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/build/openssl-uVxJzP/openssl-3.0.13=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -fdebug-prefix-map=/build/openssl-uVxJzP/openssl-3.0.13=/usr/src/openssl-3.0.13-0ubuntu3.3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=3
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-3"
MODULESDIR: "/usr/lib/x86_64-linux-gnu/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0x9fb82203478bfffd:0x0
- openSSH
ssh -V
OpenSSH_9.6p1 Ubuntu-3ubuntu13.5, OpenSSL 3.0.13 30 Jan 2024
脆弱性に対応していないバージョンだったので、まずはここから対応します。
環境
- Ubuntu 24.04LTS
- インストールしたばかりの状況
さっくりとならない手順
- 【オプション】ロケールを変更します。
- 【OpenSSL】必要なパッケージをインストールします。
- 【OpenSSL】githubレポジトリから最新安定版のソースコードをダウンロードします。
- 【OpenSSL】ソースからインストールしていきます。
- 【OpenSSL】設定を行います。(コンフィグを反映させ、パスを通します)
- 【OpenSSL】バージョンアップを確認します。
- 【OpenSSL】自動アップデートを無効化します。
- システム全体の再起動を行います。(1回目)
- 【OpenSSH】コンフィグに必要なディレクトリの作成を行います。
- 【OpenSSH】作業用ディレクトリに移動します。
- 【OpenSSH】ソースをダウンロードします。
- 【OpenSSH】OpenSSHをソースからビルドします。
- システム全体の再起動を行います。(2回目)
- 【OpenSSH】バージョンアップを確認します。
※脆弱性対応のため、切り戻しは一切考慮しません。※
ロケール変更
- ロケール確認
localectl
System Locale: LANG=C.UTF-8
VC Keymap: (unset)
X11 Layout: us
X11 Model: pc105
- 使えるロケールを確認
localectl list-locales
C.UTF-8
en_US.UTF-8
→ 日本語がないので、追加することから確認します。
- 日本語を追加
sudo aptitude install language-pack-ja
- ロケール追加確認
localectl list-locales
C.UTF-8
en_US.UTF-8
ja_JP.UTF-8
追加を確認しました。
- 日本語ロケールに設定
sudo localectl set-locale LANG=ja_JP.UTF-8
これで各種メッセージが日本語で表示されるようになります。
必要なパッケージをインストールします。
sudo apt install aptitude
パッケージ管理はこちらが好みなので先にインストールします。
sudo aptitude install build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-dev libkrb5-dev checkinstall zlib1g-dev git
【OpenSSL】root昇格
ソースコードからコンパイルしてインストールするため、この作業は全て管理者権限で実行します。
sudo su -
【OpenSSL】ソースコード取得
- 作業用ディレクトリに移動
cd /hoge && pwd
任意のディレクトリ名を指定します。
- git clone
git clone https://github.com/openssl/openssl -b openssl-3.3.1
2024/09/01現在の最新版を指定します。
- ディレクトリ移動
cd openssl && pwd
【OpenSSL】ソースからインストール
- コンフィグ
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
- コンフィグ成功時の出力
Configuring OpenSSL version 3.3.1 for target linux-x86_64
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created Makefile.in
Created Makefile
Created include/openssl/configuration.h
**********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm --dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** 'Troubleshooting' section in the INSTALL.md file first) ***
*** ***
**********************************************************************
- make
make
時間がかかります。状況を時々見ながら待ちます。
- makeの整合性確認
make test
これも時間がかかります。
- インストール
make install
【OpenSSL】インストール後の設定
- 設定ファイル追記
cat <<- __EOF__ | tee -a /etc/ld.so.conf.d/openssl-3.3.1.conf
/usr/local/ssl/lib64
__EOF__
- 設定反映
ldconfig -v
- 既存プログラムの退避
mv /usr/bin/c_rehash /path/to/backup/c_rehash.$(date +%Y%m%d)
mv /usr/bin/openssl /path/to/backup/openssl.$(date +%Y%m%d)
それぞれ、任意のディレクトリを指定します。
- パスを通す
sudo sed -i 's|^PATH=.*|#&\nPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/ssl/bin"|' /etc/environment
- 通したパスの反映
source /etc/environment
- パスの反映
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/ssl/bin
と表示されるのを確認します。
【OpenSSL】バージョンアップ後の確認
openssl version -a
OpenSSL 3.3.1 4 Jun 2024 (Library: OpenSSL 3.3.1 4 Jun 2024)
built on: Sun Sep 1 05:14:25 2024 UTC
platform: linux-x86_64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0x9fb82203478bfffd:0x0
これで、バージョンが3.0.1から3.3.1に変わります。
【OpenSSL】自動アップグレード無効
その後のシステムアップグレードでパスなどが変わるのを防ぎます。
sudo apt-mark hold openssl
sudo aptitude hold openssl
【OpenSSL】システム全体の再起動(1回目)
reboot
再起動すると同時に、rootから抜けます。
【OpenSSH】ディレクトリ作成と設定
むしろここからが本番。CVE-2024-6378の致命的な脆弱性の対応を行います。
sudo mkdir /var/lib/sshd && sudo chmod -R 700 /var/lib/sshd/ && sudo chown -R root:sys /var/lib/sshd/
【OpenSSH】作業用ディレクトリに移動
cd /hoge && pwd
任意のディレクトリを指定します。
【OpenSSH】ソースのダウンロードと展開
- ソース取得
wget -c http://mirror.exonetric.net/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
- ソース展開
tar -xvzf openssh-9.8p1.tar.gz
- ディレクトリ移動
cd openssh && pwd
【OpenSSH】展開したソースコードをインストール
- OpenSSLの位置を確認
which openssl
/usr/local/ssl/bin/openssl
を確認
本手順でSSLのバージョンアップを行った場合の環境となります。
- コンフィグ
./configure --with-kerberos5 --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/ssl
--with-ssl-dir=/usr/local/ssl
は、opensslがあるディレクトリを指定します。
- make
make
- インストール
sudo make install
- インストール確認
ターミナルクライアントソフトは開いたまま、新たなウィンドウで開き、ログインできることを確認します。
- バージョンアップ確認
ssh -V
OpenSSH_9.8p1, OpenSSL 3.3.1 4 Jun 2024
これで、SSH接続の脆弱性に対応。一番の危険は去りました。