Alibaba Cloud Security Center #35 Ubuntu を20.04にしたらAgentが動かなくなった

先日、このブログを動かしている Alibaba Cloud Elastic Compute Service (以降、ECSと記載) の Linux インスタンスを Ubuntu 18.04 から 20.04 にバージョンアップしました(その話はこちら)。 バージョンアップ後、 Security Center で状態を確認すると複数のセキュリティ機能が動作しない状態となったことがわかりました。そのトラブルシューティングの記録を残します。 具体的には Ubuntu の Kernel をダウングレードします。

問題の状況

Alibaba Cloud の Security Center コンソールに移動します。

Security Center > Assets > Host > Details > Agent Staus 画面で見ると、Client Protection と Malicious Network Behavior Prevention と WebShell Prevention と Malicious Host Behavior Prevention の4つの防御機能が Protection Failed となっております。 つまり、防御機能が正常に働いていないということになります。

Protection Failed の理由の記載があります。 The kernel version is not supported. ということで Ubuntu 20.4 にバージョンアップした結果、Kernel version が 5.4.0-176-generic に更新され、このバージョンに Security Center が対応しないようです。

自分としては Ubuntu を 20.04 にバージョンアップする前に Alibaba Cloud のSecurity Center のマニュアルを読んで ubuntu 20.4 も対応していることを確認していたつもりでした。 再度、マニュアルを確認します。

昨日の確認時は以下の記載を見て Ubuntu 20.04 に対応していると判断していましたがこれが誤りでした。

右の5.x.x. series を展開するとサポートする Kernel version の詳細が展開されるのですが結果としてインストールされている バージョンの 5.4.0-176-generic は未対応でした。。。また上記は Security Center の複数あるセキュリティ機能の1つとなる AliSecGuard file の話で他にも複数ある機能それぞれで対応する Kernel version を確認する必要がありました。

再度調べなおします。2024年4月19日時点ですが Alibaba Cloud Security Center が対応する Ubuntu の Kernel Version は以下となります。

また Google Gemini にサポート有無のMatrixを作ってもらいました。 ただ、今回未サポートで困っている 5.4.0-176-generic がすべてサポートOKとなってしまったので一部手動で Alibaba cloud のマニュアル見て修正した結果が以下です。 

ファイル名サポートされるカーネルバージョン
5.4.0系
5.4.0-176-generic サポート
AliNet file5.4.0-146-generic 以下NG
AliSecGuard file5.4.0-137-generic 以下NG
AliHips file5.4.0-148-generic 以下NG
AliWebGuard file5.4.0-137-generic 以下NG

結論からいうと 今の 5.4.0-176 では4つの機能どれも未サポートなことがわかりました。 サポートするには 5.4.0-137 まで Kernel version を落とさないといけないことも。

Ubuntu は Kernel をダウングレード出来るのか

Ubuntu は仕事でも使ったことが無くこのブログのサーバの個人利用しかなく kernel をダウングレード出来るのか出来ないのか情報をもっていません。 ということでまずは調べてみます。 他の OS なら出来ることは知っていますが Ubuntu はどうでしょうか。

Google gemini に聞いてみます。

bigriver.jp
bigriver.jp

Ubunt 18.04 を 20.04にバージョンアップしました。 その結果、kernel version は5.4.0-176-genericになりました。 しかし、他のソフトウェアの動作に問題があるため kernel version を 5.4.0-137 に変更したいです。 それが可能かどうか、可能な場合は手順を教えてください。

Gemini
Gemini

Ubuntu 18.04 から 20.04 へバージョンアップ後、カーネルバージョンを 5.4.0-137 にダウングレードする方法


Ubuntu 18.04 を 20.04 にバージョンアップし、カーネルバージョンが 5.4.0-176-generic になったとのことですね。しかし、他のソフトウェアとの互換性問題のため、カーネルバージョンを 5.4.0-137 にダウングレードしたいとのこと、承知しました。

以下に、ダウングレードの手順を説明します。

重要事項:

・ダウングレードを実行する前に、必ずシステムの完全バックアップを取ってください。ダウングレード中に問題が発生すると、システムが起動できなくなる可能性があります。
・カーネルのダウングレードは、システムの安定性を損なう可能性があります。ダウングレードする前に、すべての潜在的なリスクを認識していることを確認してください。
一部のデバイスまたはソフトウェアは、古いカーネルバージョンでは動作しない場合があります。ダウングレードする前に、すべてのデバイスとソフトウェアが 5.4.0-137 カーネルと互換性があることを確認してください。


手順:

1. 古いカーネルパッケージをダウンロードします。
sudo apt-cache policy linux-image-unsigned
上記の コマンドを実行すると、利用可能な古いカーネルパッケージのリストが表示されます。ダウングレードしたいカーネルバージョン (5.4.0-137) を見つけて、以下のコマンドでダウンロードします。

sudo apt download linux-image-unsigned=5.4.0-137+hwe-18.04
2. ダウンロードしたカーネルパッケージをインストールします。
sudo dpkg -i linux-image-unsigned-5.4.0-137+hwe-18.04.deb
3. 古いカーネルブートオプションを設定します。
sudo update-grub
4. システムを再起動します。
再起動後、カーネルバージョンが 5.4.0-137 になっていることを確認してください。

uname -r


補足:

カーネルをダウングレードした後、問題が発生した場合は、以下のコマンドで簡単に最新バージョンにアップグレードできます。
sudo apt install linux-image-unsigned
カーネルのダウングレードに関する詳細情報については、以下のリソースを参照してください。
https://qiita.com/jiey@github/items/33894296d62b1a329665
https://server-cast.en.aptoide.com/app


注意事項:

上記の手順は、自己責任で実行してください。
問題が発生した場合は、専門家に助けを求めてください。
この情報がお役に立てば幸いです。

何かご不明な点がございましたら、お気軽にご連絡ください。

回答を見る限り出来そうです(後述しますがこのまま実行してもうまくはいかないですが)。 またPKG周りが正常に動作するかはやってみないとです(多分大丈夫だとは思うのと、全PKGの情報を調べる手間を考えると Kernel をダウングレードしてテストしてダメならバックアップから切り戻ししたほうが簡単)。

Kernel のダウングレード

まずは ECS インスタンスの Snapshot を取得します。 問題が起きた時に備えてのバックアップの取得となります。 手順はUbuntu 20.04 へのバージョンアップ時に残しているので今回は割愛。

あとは Gemini から教えてもらった手順を実行していきます。

# apt-cache policy linux-image-unsigned
⇒ Gemini 回答の上記コマンドは実行できずで以下を実行

# apt-cache policy linux-image-unsigned-5.4.0-137-generic
# apt-get install linux-image-unsigned-5.4.0-137-generic

# update-grub
# reboot

しかし、再起動後も起動する kernel はもとの 5.4.0-176のままです。

最終的には/etc/default/grub の GRUB_DEFAULTを以下の通りに書き換えて、update-grubを実行し、OSを再起動することで5.4.0-137 の Kernelで起動できました。

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT='gnulinux-advanced-18961251-d6ee-4d43-9dd2-73c08f484f99>gnulinux-5.4.0-137-generic-advanced-18961251-d6ee-4d43-9dd2-73c08f484f99'

上記の設定ですが、実は Google Gemini に教えてもらっています。 教えてもらう前は GRUB_DEFAULTの設定を”1>2″とか設定しても動かず試行錯誤していました。 Gemini には 以下の通り、/boot/gub/grub.cfg のmenuentry と submenuの情報を添えて(grep コマンドの実行結果をそのまま貼り付け)どうすればよいか聞きました。 そうするとGRUB_DEFAULTに何を設定すればよいか具体的に教えてくれました(太字部分)。 これは生成AI、すばらしい!と思いました。

bigriver.jp
bigriver.jp

現在の状態は以下。Ubuntu, with Linux 5.4.0-137-genericで起動するようにしたい


grep -e menuentry -e submeny /boot/grub/grub.cfg
if [ x”${feature_menuentry_id}” = xy ]; then
 menuentry_id_option=”–id”
 menuentry_id_option=””
export menuentry_id_option
menuentry ‘Ubuntu’ –class ubuntu –class gnu-linux –class gnu –class os $menuentry_id_option ‘gnulinux-simple-18961251-d6ee-4d43-9dd2-73c08f484f99’ {
submenu ‘Advanced options for Ubuntu’ $menuentry_id_option ‘gnulinux-advanced-18961251-d6ee-4d43-9dd2-73c08f484f99’ {
    menuentry ‘Ubuntu, with Linux 5.4.0-176-generic’ –class ubuntu –class gnu-linux –class gnu –class os $menuentry_id_option ‘gnulinux-5.4.0-176-generic-advanced-18961251-d6ee-4d43-9dd2-73c08f484f99’ {
    menuentry ‘Ubuntu, with Linux 5.4.0-176-generic (recovery mode)’ –class ubuntu –class gnu-linux –class gnu –class os $menuentry_id_option ‘gnulinux-5.4.0-176-generic-recovery-18961251-d6ee-4d43-9dd2-73c08f484f99’ {
    menuentry ‘Ubuntu, with Linux 5.4.0-137-generic’ –class ubuntu –class gnu-linux –class gnu –class os $menuentry_id_option ‘gnulinux-5.4.0-137-generic-advanced-18961251-d6ee-4d43-9dd2-73c08f484f99’ {
    menuentry ‘Ubuntu, with Linux 5.4.0-137-generic (recovery mode)’ –class ubuntu –class gnu-linux –class gnu –class os $menuentry_id_option ‘gnulinux-5.4.0-137-generic-recovery-18961251-d6ee-4d43-9dd2-73c08f484f99’ {
    menuentry ‘Ubuntu, with Linux 4.15.0-171-generic’ –class ubuntu –class gnu-linux –class gnu –class os $menuentry_id_option ‘gnulinux-4.15.0-171-generic-advanced-18961251-d6ee-4d43-9dd2-73c08f484f99’ {
    menuentry ‘Ubuntu, with Linux 4.15.0-171-generic (recovery mode)’ –class ubuntu –class gnu-linux –class gnu –class os $menuentry_id_option ‘gnulinux-4.15.0-171-generic-recovery-18961251-d6ee-4d43-9dd2-73c08f484f99’ {

Gemini
Gemini

現在Ubuntu 5.4.0-176-genericで起動している状態から、5.4.0-137-genericで起動するように設定を変更したいですね。方法がわかりましたので、以下に手順をご説明します。

手順

  1. GRUB 設定ファイルの編集:
  • /etc/default/grub ファイルを編集します:
    • Bash
    • sudo nano /etc/default/grub
  • GRUB_DEFAULT 行を探します。この行は、デフォルトのブートエントリを指定しています。
  • 以下の形式で、この行を編集します:
    • GRUB_DEFAULT='gnulinux-advanced-18961251-d6ee-4d43-9dd2-73c08f484f99>gnulinux-5.4.0-137-generic-advanced-18961251-d6ee-4d43-9dd2-73c08f484f99'
    • この設定により、 Advanced options for Ubuntu サブメニュー内の Ubuntu, with Linux 5.4.0-137-generic がデフォルトで選択されるようになります。
  1. GRUB 設定の更新:
  • ファイルを保存して閉じます。
  • 次のコマンドでGRUB設定を更新します:
    • Bash
    • sudo update-grub

解説

  • /boot/grub/grub.cfg の出力から判断すると、各カーネルの起動エントリには、ユニークなIDが振られています。
  • これを利用して、GRUB_DEFAULTにサブメニューIDとカーネルエントリIDを指定することで、より正確に設定できます。
  • >は、サブメニュー内のエントリを指定するために使います。

再起動後、Ubuntu 5.4.0-137-genericで起動するようになっているはずです。

ご不明な点がありましたら、お気軽におたずねください!

Kernel をダウングレードした後も WordPress は問題なく動作しています。

また、元々、ダウングレードしようと思った理由は Alibaba Cloud の Security Center にKernelが対応しなかったことを解消するためでした。 Security Center を確認します。

Alibaba Cloud Security Center の確認

結果は以下のスクリーンショットですが、残念なことに Protection Failed の状況は解消されていません。。。

(Client Protection だけ”The kernel version is not supported の表示がありませんが、元々は表示されていました。 試しにスライドバースイッチでOFF⇒ONをしてみたところメッセージが消えてしまっただけ)

Alibaba Cloud のサポートにチケットをあげることも考えていますがもう少しトラブルシューティングを頑張ってみます。

まず Security Center からKernel versiong がどう見えているか。

Agent Status は Online で Kernel version は 5.4.0-137-generic になっています。 もともとは 5.4.0-176-generic でこれが未サポートのため 5.4.0-137-generic にダウングレードしているのでここだけ見れば Security Center は正しく Kernel version を認識しているように見えます。

この手の問題は新しい状態をクラウド側で認識するまでに時間がかかることがあります。 あとはサービスのON/OFFやエージェントソフトウェアの再起動などで切り分けていくとか。

と、書いているうちに先ほど1つだけコンソール上で OFF ⇒ ON した Client Protection の状態が Failed から Protected に復旧しています。

この感じですと残り3つの機能も OFF ⇒ ON で復旧しそうなのでやってみます。 それぞれ OFF ⇒ ON の操作を行い少し待ちます。5分ほど待ってコンソールの画面を更新すると残り3つの機能の状態も Protected に復旧しました。

以上