Ubuntu 16.04: Canonical Livepatch Serviceでカーネルライブパッチを適用する

Canonical Livepatch Serviceでカーネルライブパッチが提供されるようになりました。これはUbuntuを使用する大きなメリットのひとつとなります。

1 カーネルライブパッチとは

カーネルへのパッチをマシンの再起動無しで適用する仕組みです。

 

サーバマシンや仮想マシンのホストマシンの場合は、カーネルアップデートに伴う再起動がサービス停止や仮想マシン停止につながります。しかし、セキュリティアップデートは即座に適用する必要があります。カーネルライブパッチを使うことで、再起動せずにセキュリティアップデートを適用できるようになります。

 

カーネルライブパッチはローダブルモジュールとして提供されます。セキュリティに問題のある関数の先頭でFtraceが呼ばれ、Ftraceの延長でセキュリティ対策を施した関数が実行されます。セキュリティ対策済みの関数が完了すると、セキュリティに問題のある関数を飛ばして、セキュリティに問題のある関数の呼び出し元へ戻ります。よって、見かけ上はセキュリティに問題のある関数がセキュリティ対策を施した関数へ置き変わったようになります。

 

カーネルライブパッチは1年以上前にリリースされたLinux 4.0で導入されていて、パッチファイルからライブパッチのモジュールを生成するkpatchなどのツールも作られています。ですが、なかなかメジャーなディストリビューションに導入されてきませんでした(商用サポートを除く)。

 

今回、Canonical Livepatch Serviceにより、Ubuntuにカーネルライブパッチが提供されるようになります。これはUbuntuをサーバマシンに導入する大きなメリットとなるでしょう。

 

ただし、無償で提供されるのは仮想マシンと物理マシンを合わせて3台までです。それ以上の場合は商用サポートが必要となります。

 

またカーネルライブパッチのアンロードはサポートされません。これはカーネルの問題で、セキュリティ対策を施した関数が使用されているかどうかを判定する良い方法が決まっていない為です。

2 Canonical Livepatch Serviceの導入

Canonical Livepatch Serviceのページにアクセスします。

0001_Canonical-Livepath-Service.png

無償で使用するか、商用サポートで使用するかを決めます。無償の場合はUbuntu userを選択します。

0002_Select-support.png

Ubuntu Oneのアカウントでログインします。これはaskubuntu.comやlaunchpad.netで使用しているアカウントです。持っていない場合は新規に作成してください。

0003_Login-ubuntu-one.png

keyが発行されます。

0004_Publish-key.png

発行されたkeyでCanonical Livepatch Serviceを導入します。おそらく今まで一番人気となるsnap packageだと思います。

$ sudo snap install canonical-livepatch
$ sudo /snap/bin/canonical-livepatch enable <key>
Successfully enabled device. Using machine-token: <machine-token>

このmachine-tokenでCanonical Livepatch Serviceを提供するマシンが管理されます。

もしそのマシンで不要になった場合は、canonical-livepatch disableを実行します。

$ sudo /snap/bin/canonical-livepatch disable