こんにちは、技術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