「社長が現れて無限ループから救い出してくれた」でこちらへ来られた方へ:元ネタを知りたい場合は AQUA 第1巻の第4話 「猫の王国」をご覧ください。・・・最初は頭の中でぐるぐる回るほうの無限ループかと思って、まぁ社長が悩めるアリスちゃんを救う話ってどんなんだったっけ?と考えてしまいました。(笑)
ということで(?)本文。
カーネル 2.6.23 以前および 2.6.30 以降において、一部のインタプリタ(例えば /lib/ld-linux.so.2 )のパーミッションがチェックされていなかったのを修正しました。
TOMOYO 2.x および AKARI では全てのインタプリタのパーミッションが security_bprm_check() でチェックされているものと思っていました。しかし、実際には open_exec() を呼び出すハンドラの内、一部しか search_binary_handler() を呼び出していませんでした。そのため、 security_bprm_check() ではなく security_dentry_open() でインタプリタのパーミッションをチェックしてやらないと漏れが発生することが判明しました。
TOMOYO および AKARI では、プログラムの実行( execve() )要求に対しては execute 権限を、インタプリタや共有ライブラリなどの利用( open() )要求に対しては read 権限をチェックするという、普通とは違う判断基準を採用しています。
例えばシェルの場合、「バイナリプログラムとしての /bin/bash の execute 権限をチェックしておこう」という主張は納得できます。しかし、「 /bin/bash が必要とする共有ライブラリはプログラムとして解釈されるのだから共有ライブラリに対しても execute 権限をチェックしておこう」という主張には納得できません。その主張を認めるのなら「シェルに入力される文字列はプログラムとして解釈されるのだから標準入力である /dev/tty に対しても execute 権限をチェックしておこう」「シェルから読み込まれる設定ファイルに含まれる文字列はプログラムとして解釈されるのだから ~/.bashrc に対しても execute 権限をチェックしておこう」という調子で、全てのファイルの execute 権限をチェックすることになるでしょう。つまり、 execute 権限をチェックする価値が消滅してしまうと思うのです。プログラムとして実行されるかどうかはファイルを読み込むプログラムの内容に依存しているため、プログラムとして実行されるかどうかをカーネル側で判断する術はありません。そのため、カーネル側に於いて、プログラムとして解釈される共有ライブラリについては execute 権限をチェックするけれども、プログラムとして解釈される標準入力や設定ファイルについては execute 権限をチェックしないというのは、不釣り合いに思えるのです。
そこで、 TOMOYO および AKARI ではプログラムの実行要求に渡されたパス名を読み込みモードでオープンする場合には execute 権限を、それ以外に渡されたパス名を読み込みモードでオープンする場合には read 権限をチェックするようになっています。前者は呼び出し側が制御権を譲渡するという明確な意思表示であるのに対し、後者はそうではないからです。
さらに、 TOMOYO および AKARI では要求された側のプログラムが必要とするインタプリタや共有ライブラリのパーミッションは、プログラムの実行( execve() )を要求した側ではなく、要求された側の権限でチェックされています。これは、インタプリタや共有ライブラリが必要になるのは(要求する側の事情ではなく)要求される側の事情であるから、要求される側でチェックを行うほうが自然であるという考え方に基づいています。しかし、カーネル 2.6.29 以降、プログラムの制御権が譲渡されることが確定するまでは要求された側の権限で動作することが許されなくなってしまったので、 search_binary_handler() でのチェックは可能でも security_dentry_open() でのチェックは不可能なのです。
このような普通とは異なる処理を行うために、 TOMOYO 1.x および AKARI ではプロセス単位の変数を用いて状態を管理しています。しかし、 TOMOYO 2.x ではプロセス単位の変数を用いる許可をまだ貰えていません。そのため、現時点では TOMOYO 1.x や AKARI と同じ解決策を使えません。
さてさて、どうやってこの問題を解決しようか・・・頭の中で無限ループ?
posted by 熊猫さくら at 20:41|
Comment(0)
|
TrackBack(0)
|
AKARI