他の大規模なソフトウェアと同様に、Linuxは複雑で、外部の人間には理解しにくいものです。だからこそ、9年前のLinuxカーネルの脆弱性「Dirty COW」が、わずか数日前の10月20日まで修正されなかったことは、それほど驚くべきことではありません。
まず最初に、Linuxとは何かを簡単におさらいしましょう。Linuxはカーネルであり、GNU/Linux OSに含まれるソフトウェアの一つです。GNUツールスイートがベースOSの大部分を占めています。とはいえ、カーネルはOSの鍵となる部分の一つであり、ソフトウェアとハードウェアの連携を可能にします。Linuxはサーバーやインフラにとって重要なため、常に多くの人がカーネルを監視しています。その中には、IBMやRed Hatといった企業でフルタイムで開発に携わる社員もいます。無料で配布されているソフトウェアとしては、これはかなり印象的です。
それでも、カーネル内のバグは見過ごされる可能性があります。そして、Dirty COWが実証したように、適切な条件下では、そのバグの中には非常に深刻なものになるものもあります。
将来の攻撃から Linux PC を保護するための方法をいくつか紹介します。
カーネルを確認し、必要に応じて更新してください
Dirty COWバグは9年間未解決のままでしたが、発見後すぐに修正されました。わずか7行のコードで修正されたこのパッチは、新しいカーネルのリリースを促しました。10月21日以降にカーネルをアップグレードした方は、おそらく保護されているでしょう。

uname -rを実行すると、 実行中のカーネルが表示されます。このPCはDirty COWパッチが適用されたカーネル4.8.4を実行しています。
実行しているカーネルがわからない場合は、uname -r
ターミナルウィンドウに入力してください。末尾の「ARCH」や「ubuntu」といった単語は、カーネルがどのディストリビューション向けにビルドされたかを示すだけなので、気にする必要はありません。
問題は、ユーザーによってはアプリケーションや好みに応じて異なるカーネルバージョンを使用していることです。使用しているカーネルバージョンに応じて、以下のカーネルのいずれか、またはそれ以降のバージョンがインストールされていることを確認してください。古い番号は長期サポート(LTS)バージョンです。
- 4.8(安定版): 4.8.3
- 4.4 (LTS): 4.4.26
- 4.1 (LTS): 4.1.35
- 3.18 (LTS): 3.18.44
- 3.16 (LTS): 3.16.38
- 3.12 (LTS): 3.12.66
- 3.10 (LTS): 3.10.104
- 3.2 (LTS): 3.2.83
なお、この記事の執筆時点では、カーネル v3.4 にはまだパッチが適用されていません。(最後のコミットは 4 月でした。)
カーネルのアップグレード
カーネルのアップグレードは簡単です。Ubuntu Desktopは、特にセキュリティアップデートが保留中の場合、自動的にアップデートを促すメッセージを表示します。ただし、手動でアップデートする方法はいくつかあり、ディストリビューションごとに異なります。
Ubuntu/Ubuntu GNOME/Kubuntu/Linux Mint
カーネルをアップグレードする主な方法は、システムをアップグレードすることです。
$ sudo apt-get update
$ sudo apt-get dist-upgrade
2番目のコマンドは、apt-get upgrade
他のパッケージをアップデートする際に使用するコマンドとは異なることに注意してください。Ubuntuはこのコマンドでカーネルパッケージをアップグレードしません。
レッドハット/フェドラ/CentOS
カーネルをアップグレードするには、以下を使用するだけですyum
。
$ sudo yum -y カーネルを更新
あるいは、次のコマンドを使用してシステムyum
を更新することもできます。
$ sudo yum アップデート
アーチ/マンジャロ
Arch でカーネルをアップデートするのは簡単ですpacman
:
$ sudo pacman -Sy linux linux-firmware
完全なシステム アップデートでこれを実現することもできます。
$ sudo pacman -Syu
カーネルの更新が完了したら、再起動して実行し、uname -r
更新されたバージョンが実行されていることを確認します。
アップデートについてもう少し
他のOSと同様に、定期的にアップデートをインストールすることで脆弱性を軽減できます。Linuxの優れた点の一つは、ユーザーが指示しない限りアップデートが適用されないことです。(スクリプトやcronタスクを作成してアップデートを自動的に適用することもできますが、それらのスクリプトやcronジョブはユーザーが作成する必要があります。)
カーネルのアップデート時期を知りたいのに、OSからのリマインダーが使えない、あるいはリマインダーを送りたくない場合は、私が作成したようなシンプルなIFTTTレシピを使うことができます。Kernel.orgは、新しいカーネルがリリースされるたびに更新されるRSSフィードを公開しています。このフィードはすべてのカーネルに対応しているので、お使いのバージョンを検索してください。
このアプローチの欠点は、パッチが適用されていないLinuxカーネルを実行しているデバイスがあちこちに散らばってしまうことです。ルーターもLinuxを実行している可能性が高いでしょう。DD-WRTのようなツールを使っていない限り、アップデートが提供されるかどうかは分かりませんが、アップデートが提供されるまでにしばらく待たされる可能性があります。サーモスタットのようなインターネット接続型デバイスは、ユーザーにとってアップデートが非常に困難です。これらのデバイスの場合、パッチ適用済みのソフトウェアの提供はメーカーにほぼ依存せざるを得ません。