Amazon Linux 2 用カーネルライブパッチの一般提供が開始しました!

記事タイトルとURLをコピーする

こんにちは、技術1課の小倉です。
2020/6/29にアップデートがあり、Amazon Linux 2 用カーネルライブパッチの一般提供が開始しました!

Amazon Linux 2 用カーネルライブパッチの一般提供が開始

EC2でサーバを起動させている場合、今まではパッチ適用などのあとは再起動をしなければ反映せずサービス停止が必要でしたが、本アップデートによりAmazon Linux 2で、カーネルライブパッチを利用できるようになりました。カーネルライブパッチは実行中のカーネルにパッチを適用し、再起動せずに反映させることができます。重大なセキュリティの脆弱性やバグなどのパッチがリリースされたときでもサービス停止の調整などせずに即時適用させることができます。

また、カーネルライブパッチはAmazon Linux 2を利用していれば無料で使うことができます。

カーネルライブパッチを利用する際の注意点です。

  • Amazon Linux 2でサポートされている64ビット(x86_64)アーキテクチャ
    • 64ビットARM(arm64)アーキテクチャはサポートされていません
  • カーネルバージョン4.14.165-131.185以降の Amazon Linux 2
  • Amazon Linux 2カーネルバージョンのカーネルライブパッチを、リリース後最大3か月間提供
    • 引き続きカーネルライブパッチを使う場合は、再起動をして新しいカーネルバージョンに更新する必要あり
    • 再起動のオペレーションがなくなるわけではなく、一時的なセキュリティ対策
  • カーネルライブパッチを適用している間、休止状態を実行したり、高度なデバッグツール(SystemTap、kprobes、eBPFベースのツールなど)を使用したり、カーネルライブパッチインフラストラクチャで使用されるftrace出力ファイルにアクセスしたりすることはできない

設定方法

AWS公式ドキュメントに手順が記載してあります。こちらの手順を参考に確認しています。
Kernel Live Patching on Amazon Linux 2

今回は7/6現在の最新のAmazon Linux 2を利用して確認をしています(AMI ID : ami-0a1c2ec61571737db)。

カーネルライブパッチの有効化

カーネルのバージョンを確認して、利用可能なバージョン(4.14.165-131.185以降)かを確認します。
もし利用可能なバージョンではない場合は、sudo yum install -y kernel sudo reboot を実行して、最新バージョンに更新します。

$ sudo yum list kernel
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
kernel.x86_64                 4.14.177-139.254.amzn2                  installed 
Available Packages
kernel.x86_64                 4.14.181-142.260.amzn2                  amzn2-core

カーネルライブパッチ用のyum プラグインをインストールします。

$ sudo yum install -y yum-plugin-kernel-livepatch
 (省略)
Installed:
  yum-plugin-kernel-livepatch.noarch 0:1.0-0.8.amzn2                            

Complete!

カーネルライブパッチ用のyum プラグインを有効にします。

$ sudo yum kernel-livepatch enable -y
 (省略)
Installed:
  kernel-livepatch-4.14.177-139.254.x86_64 0:1.0-0.amzn2                        

Complete!

カーネルライブパッチ用のyum プラグインが正常にインストールされたことを確認するために、次のコマンドを実行します。

$ rpm -qa | grep kernel-livepatch
kernel-livepatch-4.14.177-139.254-1.0-0.amzn2.x86_64
yum-plugin-kernel-livepatch-1.0-0.8.amzn2.noarch

kpatchサービスを更新して開始します。

$ sudo yum update kpatch-runtime
Loaded plugins: extras_suggestions, kernel-livepatch, langpacks, priorities,
              : update-motd
No packages marked for update
$sudo systemctl enable kpatch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kpatch.service to /usr/lib/systemd/system/kpatch.service.

カーネルライブパッチが含まれているAmazon Linux 2 カーネルライブパッチリポジトリを設定します。

$ sudo amazon-linux-extras enable livepatch
 (省略)
 43  livepatch=latest         enabled      [ =stable ]
 (省略)
利用可能なカーネルライブパッチの表示

すべての利用可能なカーネルライブパッチを一覧表示するには、次のコマンドを実行します。カーネルのライブパッチには ALAS2LIVEPATCH というプレフィックスがつきます。

$ yum updateinfo list
 (省略)
ALAS2LIVEPATCH-2020-017 important/Sec. kernel-livepatch-4.14.177-139.254-1.0-2.amzn2.x86_64
ALAS2LIVEPATCH-2020-024 important/Sec. kernel-livepatch-4.14.177-139.254-1.0-3.amzn2.x86_64
 (省略)

CVEのすべての利用可能なカーネルライブパッチを一覧表示するには、次のコマンドを実行します。

$ yum updateinfo list cves
 (省略)
 CVE-2019-19319 important/Sec. kernel-livepatch-4.14.177-139.254-1.0-2.amzn2.x86_64
 CVE-2020-1749  important/Sec. kernel-livepatch-4.14.177-139.254-1.0-3.amzn2.x86_64
 (省略)
カーネルライブパッチの適用

カーネルライブパッチは、定期的な更新と同じ方法で、yumを使用して適用します。今回は先の手順で出力された2つを適用します。

$ sudo yum install -y kernel-livepatch-4.14.177-139.254-1.0-2.amzn2.x86_64
$ sudo yum install -y kernel-livepatch-4.14.177-139.254-1.0-3.amzn2.x86_64
適用されたカーネルライブパッチを表示

適用されたカーネルライブパッチを表示するには、次のコマンドを実行します。

$ kpatch list
Loaded patch modules:
livepatch_CVE_2019_19319 [enabled]
livepatch_CVE_2020_1749 [enabled]

Installed patch modules:
livepatch_CVE_2019_19319 (4.14.177-139.254.amzn2.x86_64)
livepatch_CVE_2020_1749 (4.14.177-139.254.amzn2.x86_64)

Loaded patch modules に表示されているパッチが適用されているパッチです。
ここまでがカーネルライブパッチの適用手順でした。

カーネルのバージョンアップ手順

各カーネルバージョンでカーネルライブパッチのリリースは3か月間しか行われませんので、定期的にカーネルをバージョンアップする必要があります。
次のコマンドで現在のカーネルバージョンのカーネルライブパッチがいつまでサポートされているかを確認できます。

$ uname -r
4.14.177-139.254.amzn2.x86_64

$ yum kernel-livepatch supported
Loaded plugins: extras_suggestions, kernel-livepatch, langpacks, priorities,
              : update-motd
The current version of the Linux kernel you are running will no longer receive live patches after 2020-08-07.
kernel-livepatch supported done

この場合、カーネルバージョン 4.14.177-139.254 は、2020/8/7までサポートするとなっていますので、カーネルライブパッチを使い続けるのであれば、2020/8/7までにカーネルのバージョンアップが必要です。

カーネルのバージョンアップは、 sudo yum update や sudo yum update --security を実行して、 sudo reboot で再起動するだけです。
今回は、sudo yum update --security にて実施しました。

$ sudo yum update --security
 (省略)
$ sudo reboot

再起動後にログインして次のコマンドを実行します。

$ uname -r
4.14.181-142.260.amzn2.x86_64

$ yum kernel-livepatch supported
Loaded plugins: extras_suggestions, kernel-livepatch, langpacks, priorities,
              : update-motd
The current version of the Linux kernel you are running will no longer receive live patches after 2020-09-24.
kernel-livepatch supported done

カーネルのバージョンアップが行われ、カーネルライブパッチのサポート期限が、 2020/9/24 までに更新されています。

まとめ

Amazon Linux 2 用カーネルライブパッチの一般提供が開始しました。サーバを停止せずにパッチ適用ができるようになっていますので、脆弱性の対応などが今までよりも早くできるようになりました。ぜひ使ってみてはいかがでしょうか。
ただ、カーネルライブパッチは一時的な対応となり定期的な再起動は必要ですので、この点はご注意ください。

また、本ブログの内容は2020/7/8(水) 18:00にYouTubeで配信される「30分でわかる AWS UPDATE!」でも取り上げる予定ですので、ぜひご覧ください!

小倉 大(記事一覧)

アプリケーションサービス部ラーニングエクスペリエンス課 札幌在住

AWSトレーニングの講師をしています。

最近は5歳の息子と遊ぶのが楽しいです!

Twitter: @MasaruOgura