BSD界隈四方山話

第122回OpenBSD新セキュリティ機能KARL

KARL - Kernel Address Randomized Link

先日公開されたOpenBSD 6.2には「Kernel Address Randomized Link (KARL)」と呼ばれるセキュリティ機能が取り込まれました。これはシステムを起動するごとにユニークなカーネルが利用されるというもので、OpenBSD 6.2以降は世界中のカーネルが常にそれぞれにユニークなものになることになります。

カーネルをカスタマイズでもしない限り、同じバージョンのカーネルを使っている場合にはまったく同じバイナリのカーネルが使われるのが一般的です。OpenBSDではこの部分に手を加え、システムを起動するごとにカーネルの.oファイルをランダムにリンクすることで個々にユニークなカーネルを構築するという方式を導入しました。

このため、OpenBSD 6.2以降はのOpenBSDカーネルである/bsdがシステムを起動したあとに毎回作り替えれることになります。この機能は今のところOpenBSDにユニークなセキュリティ機能です。実際にOpenBSDを再起動するごとにOpenBSDカーネルのMD5値を表示させた例を次に示します。

 OpenBSD 6.2起動1回目
図 OpenBSD 6.2起動1回目
 OpenBSD 6.2起動2回目
図 OpenBSD 6.2起動2回目
 OpenBSD 6.2起動3回目
図 OpenBSD 6.2起動3回目

MD5値を計算するコマンド部分だけを抜き出すと次のようになります。

 起動1回目: OpenBSDカーネルMD5値
# md5 /bsd*
MD5 (/bsd) = 5aec90fab1f4352e94e961a85942898b
MD5 (/bsd.booted) = c1af99919102f1dd627744c56021b9d9
MD5 (/bsd.rd) = fe86956a02fc295e841f1bee9c659538
#
 起動2回目: OpenBSDカーネルMD5値
# md5 /bsd*
MD5 (/bsd) = c540b73e3f101dc92cbfea4ceb6629e0
MD5 (/bsd.booted) = 5aec90fab1f4352e94e961a85942898b
MD5 (/bsd.rd) = fe86956a02fc295e841f1bee9c659538
#
 起動3回目: OpenBSDカーネルMD5値
# md5 /bsd*
MD5 (/bsd) = 0ce1648364b54216bb4a1ea6a31908bb
MD5 (/bsd.booted) = c540b73e3f101dc92cbfea4ceb6629e0
MD5 (/bsd.rd) = fe86956a02fc295e841f1bee9c659538
#

/bsdと/bsd.bootedのMD5値が起動するごとに変わっていることがわかります。/bsd.rdは特にインストール時に使われるカーネルですが、こちらは常に同じ値になっています。作り替えが行われているのは/bsdと/bsd.bootedということになります。/bsdと/bsd.bootedのMD5値をにまとめると次のようになります。

 /bsdカーネルのMD5値の変化
回数/bsdのMD5値
1回目5aec90fab1f4352e94e961a85942898b
2回目c540b73e3f101dc92cbfea4ceb6629e0
3回目0ce1648364b54216bb4a1ea6a31908bb
 /bsd.bootedカーネルのMD5値の変化
回数/bsd.bootedのMD5値
1回目c1af99919102f1dd627744c56021b9d9
2回目5aec90fab1f4352e94e961a85942898b
3回目fe86956a02fc295e841f1bee9c659538

/bsd.bootedにはその時起動に使われたカーネルが配置され、/bsdにはシステム起動後に新しく作られたカーネルが配置されていることがわかります。つまり、次のような仕組みになっていることになります。

  1. /bsdでシステムを起動
  2. /bsdを/bsd.bootedへコピー
  3. /bsdを新しく作成

カーネルの既知の構造を利用することでセキュリティ脆弱性を突くといった攻撃が行われますが、このようにカーネルの構造が個々にユニークになっているとそういった攻撃が実施しにくくなります。

この機能がOpenBSD以外のオペレーティングシステムでも取り込まれていくのかは今の段階だとわかりません。今後の展開が注目されるところです。

FreeBSD勉強会

12月7日(木)19:00~ 第68回 内容検討中(ヴァル研 セミナールーム)

内容は検討中です。参加登録はこちらから。

FreeBSD勉強会 発表者募集

FreeBSD勉強会では発表者を募集しています。FreeBSDに関して発表を行いたい場合、@daichigotoまでメッセージをお願いします。30分~1時間ほどの発表資料を作成していただき発表をお願いできればと思います。

おすすめ記事

記事・ニュース一覧