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値を表示させた例を次に示します。
MD5値を計算するコマンド部分だけを抜き出すと次のようになります。
/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にはシステム起動後に新しく作られたカーネルが配置されていることがわかります。つまり、次のような仕組みになっていることになります。
- /bsdでシステムを起動
- /bsdを/bsd.bootedへコピー
- /bsdを新しく作成
カーネルの既知の構造を利用することでセキュリティ脆弱性を突くといった攻撃が行われますが、このようにカーネルの構造が個々にユニークになっているとそういった攻撃が実施しにくくなります。
この機能がOpenBSD以外のオペレーティングシステムでも取り込まれていくのかは今の段階だとわかりません。今後の展開が注目されるところです。
FreeBSD勉強会
12月7日(木)19:00~ 第68回 内容検討中(ヴァル研 セミナールーム)
内容は検討中です。参加登録はこちらから。
FreeBSD勉強会 発表者募集
FreeBSD勉強会では発表者を募集しています。FreeBSDに関して発表を行いたい場合、@daichigotoまでメッセージをお願いします。30分~1時間ほどの発表資料を作成していただき発表をお願いできればと思います。