お疲れ様です。freemakeのweb担当です。
新人向けレクチャーの資料をブログに上げてみたら? ということでサーバメンテの話題を。
先日話題になったOpenSSHの脆弱性 CVE-2024-6387 については、その影響範囲の大きさと深刻さから一時Twitter(現:X)のトレンドにもあがっていたようです。
普通にクラウドサーバを建てていればOpenSSHを使ったsshdは管理に必須ですから、可及的速やかな対処が求められます。
今回はその流れを資料としてまとめておきました。
あ、新人氏にはわからない用語は調べる(そして、わからなければ人に聞く)ように気をつけて読んでみてくださいね。CVEとか。
注意
CVE-2024-6387 がなぜヤバいのか、一般的にどう対策すればよいかについては、こちらの記事にまとめられています。
https://zenn.dev/cloud_ace/articles/cve_2024-040
今回はこちらの記事を踏まえたうえで、最小限のダウンタイムで対象のパッケージにセキュリティパッチを当てることだけを目的とします。
もし可能なら、こちらにあるような根本的な各種の対策を行いましょう。
なお、弊社のサーバはUbuntuで管理されているものとします。
現在のバージョンの調査
このようなミドルウェアの脆弱性の場合、問題が含まれる(攻撃を受けうる対象の)バージョンには範囲があります。
今回はこちらのブログでリリース記事を日本語訳してくださってる方※がいらっしゃるので、引用させていただきましょう。
大雑把に「4.4p1(2006年9月7日リリース)より前、または8.5p1(2021年3月3日リリース)から9.8p1」が対象であることがわかります。
では、実際にサーバにインストールされているsshdのバージョンを確認してみましょう。
$ ssh -V
「8.35p1から9.8p1の間」だったので、どうやら対象のようです(※実際の表示はスクショ取り忘れ)。
パッケージ情報の確認
先程の記事によると、Ubuntuではすでに修正版である openssh 1:8.9p1-3ubuntu0.10 が公開されているようです。
つまり、このバージョンに更新することで脆弱性の影響を受けないようになります。
Ubuntu では apt と呼ばれるパッケージ管理システムを使ってミドルウェアの管理を行うのが一般的です。
まずは apt のパッケージ情報を公式リポジトリのものと同期し、最新情報を仕入れます。お約束ですね。
$ ssh apt update
そうしたら、対象のパッケージの情報を確認しましょう。 apt info を使います。
$ apt info ssh Package: ssh Version: 1:8.9p1-3ubuntu0.10 Priority: optional Section: net Source: openssh Origin: Ubuntu Maintainer: Ubuntu DevelopersOriginal-Maintainer: Debian OpenSSH Maintainers Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 134 kB Pre-Depends: dpkg (>= 1.17.5) Depends: openssh-client (>= 1:8.9p1-3ubuntu0.10), openssh-server (>= 1:8.9p1-3ubuntu0.10) Homepage: http://www.openssh.com/ Download-Size: 4850 B APT-Manual-Installed: yes APT-Sources: http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages Description: secure shell client and server (metapackage) This metapackage is a convenient way to install both the OpenSSH client and the OpenSSH server. It provides nothing in and of itself, so you may remove it if nothing depends on it. N: There is 1 additional record. Please use the '-a' switch to see it
修正版が降りてきているのをVersionで確認できますね。
そうしたら、このsshをインストールすることにしましょう。
修正バージョンのインストール……の前に
次の作業の前に、新人氏にはおさらいです。
サーバーと呼ばれるものは個人の扱うコンピュータとは違い、様々なサービスをその上で提供(ホスト)しているものです。
言い換えれば、ついうっかり止めてしまうと、それを利用している人たち(ときには社外のお客さん)に損害を与えます。
また、サーバーを構築しているアプリケーションには相性や互換性の問題があり、パソコンのソフトのように常に最新版が正しいとは限らない部分があります。
ミドルウェアという言葉自体がOSと実務アプリの間(ミドル)で動き補佐するものという意味合いなので、迂闊に構成を変えるとその上で動作するアプリに支障が出かねません。
セキュリティパッチを当てる場合にも、その結果としてサーバーの動作に問題が起こらないようにすることが必要です。
問題が起こらないように備えることはもちろん、もしも問題が起こってしまった場合にはすぐ戻せるようにバックアップや手順を準備しておく必要があります。
また社外向けのサーバーならお客様に事前にメンテナンスを告知したり、社内向けでも連絡をしたり、他の人が使わない時間帯に作業するなど、根回しも必要ですね。
弊社のサーバの多くは現在 Amazon Lightsailクラウドサーバーで管理されています。
Lightsailの特徴の一つとして、簡単にスナップショットが取れることが挙げられます。
万が一に備える意味で、このような作業を行う前にスナップショットを取っておくことは一つの賢明な選択肢になります(手順は割愛します)。
# 修正バージョンのインストール
それでは、aptを使ってsshの修正バージョンをインストールしましょう。
先述の通り、すべてのパッケージを一斉にインストールしたり、最新ではあっても互換性のないバージョンをインストールすることは避けるべきです。
今回は、さきほどの修正バージョンを指定してインストールすることにしてみましょう。
$ sudo apt install ssh=1:8.9p1-3ubuntu0.10
apt install (パッケージ名=バージョン)とすることで、指定したバージョン及びその動作に必要な依存関係をもつパッケージの更新が行えます。
ここで注意することは、対象のパッケージ(ここではssh)だけではなく、sshの最新版の動作に必要な別のパッケージも更新/インストールされうるということです。
想定外のパッケージが更新されるトラブルを未然に防ぎたい場合には、 –dry-run オプションを使うことでインストールの予行演習(シミュレーション)を行うこともできます。
$ sudo apt install --dry-run ssh=1:8.9p1-3ubuntu0.10
dry-run はファイルへの書き込みは行われない予行演習なので、どういったパッケージが更新されるのかを事前に確認することができます。
更新が終わったら、ミドルウェア類のサービスの再起動、またはシステム全体の再起動を行います。
今回の更新では関連するパッケージとしてLinuxカーネルの更新も行いましたので、システム全体を再起動することにしました。
$ sudo reboot
では、インストールされたバージョンを確認してみましょう。
ubuntu@ip-172-26-4-166:~$ ssh -V OpenSSH_8.9p1 Ubuntu-3ubuntu0.10, OpenSSL 3.0.2 15 Mar 2022
よさそうですので、あとはきっちりと動作確認をして終了となります。
万が一に異常があった場合には、ここから作業の切り戻しをしたりで復旧を行ってくださいね!
おわりに
今年に入ってから、特に各社でランサムウェアなどのセキュリティ問題が多発しています。
こうした問題を完全に防ぐのは社員一人ひとりの行動も関わってきますので、なかなか難しいところではあります……が、
少なくともサーバの脆弱性をそのままにしておくのは、社屋の外壁に風穴を開けたままにするようなものです。
セキュリティ関連のニュースには常に目を光らせ、脆弱性情報などにはすぐ対応できる/するように心構えておきましょう。