よ〜んです。

AL2023 Deep Dive シリーズの一環…なんですが、今回はちょっと毛色を変えて Kernel Live Patching の話です。Amazon Linux 2023 そのものの深掘りというより、Amazon Linux 2023でも使えるLinuxカーネルのお話になります。

最近クリティカルな CVE が多いですね。カーネルの更新となると再起動を伴うわけですが、本番で動いてるサーバーを気軽に再起動できるわけもなく、かといってセキュリティパッチを放置するのも気持ち悪い。

そんなときに使えるのが Kernel Live Patching ですね。

Kernel Live Patching

一言でいうと、動いてるカーネルに対して、再起動なしでパッチを当てる仕組みです。

Linux カーネル 4.0 から入った livepatch という機能がベースになっていて、内部的には functoin tracer(ftrace) を使ってカーネル関数の呼び出し先を差し替えます。

つまり、脆弱性のある関数が呼ばれたとき、ftrace が「いや、こっちの修正済み関数を使ってね」と差し替えてくれるわけですね、素晴らしい

パッチ適用後、当該環境は不安定にならないのか。

Kernel Live Patchingはあくまで「再起動までの繋ぎ」

パッチが蓄積していくとカーネル内部の関数リダイレクトが増えていくので、長期間再起動なしで運用し続けるのは推奨されていません。

AWS は、AL2023 カーネルバージョンのリリースから 3 か月間、カーネルライブパッチを提供します。その後、カーネルライブパッチを引き続き入手するには、新しいカーネルバージョンに更新する必要があります。 Kernel Live Patching on AL2023 - Amazon Linux 2023 より

とあるので、「3 ヶ月目安でカーネルを更新してね」というサイクル推奨しているように見えます。

AL2023 での Live Patching

AL2023 でも Kernel Live Patching が公式にサポートされています。

対応環境

  • アーキテクチャ: x86_64 / ARM64
  • 動作環境: EC2、オンプレミスの VM
  • コスト: 追加料金なし(ここ大事)

ちなみに他の OS だとライブパッチは有料だったりします。Ubuntu は Livepatch が Ubuntu Pro(商用利用は有料)の一部の機能だったりします、AL2023 なら追加料金なしで使えるのはありがたいですね。

有効化の手順

# kpatch のインストール
sudo dnf install -y kpatch-runtime

# kpatch サービスの有効化
sudo systemctl enable --now kpatch.service

# 利用可能なライブパッチの確認
sudo dnf list available kernel-livepatch*

# ライブパッチの適用
sudo dnf install -y kernel-livepatch-<version>

# 適用状況の確認
kpatch list

Systems Manager を使えば、複数インスタンスにまとめて適用することもできます。パッチベースラインに組み込めるのは運用的にめちゃくちゃ助かりますね。

メリット

  • ダウンタイムなし: 再起動不要なので、サービスを止めずにパッチが当たる
  • 追加コストなし: AL2023 を使っていれば無料
  • SSM 連携: Systems Manager でフリート管理できる
  • 即時適用: メンテナンスウィンドウを待たずに緊急パッチを当てられる

デメリット

正直なところ、万能ではないです。

  • パッチ提供期間は 3 ヶ月
    • カーネルバージョンのリリースから 3 ヶ月間だけ。それ以降は新しいカーネルに上げる必要がある
  • すべての修正がライブパッチで提供されるわけではない
    • 技術的制約で対応できない修正は通常のカーネルアップデート + 再起動が必要
  • ハイバネーション不可
    • ライブパッチ適用中は EC2 のハイバネーション(RAM の内容を EBS に退避してインスタンスを停止する機能)が使えない

まとめ

セキュリティパッチの即時適用にはめちゃくちゃ便利ですが、パッチ提供期間は 3 ヶ月で、eBPFとの共存もできない。あくまで「再起動までの繋ぎ」として運用に組み込むのが正しい立ち位置かなと思います。

ではでは〜