Tetsuo Handa
from-****@i-lov*****
2009年 7月 7日 (火) 11:17:08 JST
熊猫です。 Hiroshi Shinji さんは書きました: > どの程度、チェックに処理コストがかかるのかによりますが、 > パフォーマンス優先などで、チェックを省略させたい場合はあると思います。 > では、 MAC_FOR_ARGV0 と allow_argv0 は残したまま、 alias 構文だけを廃止して、 学習モードでは allow_execute パーミッションのチェックと遷移先ドメインを計算するのに利用するパス名(シンボリックリンク可) だけを学習し、必要に応じて手作業で exec.realpath="シンボリックリンク解決後の絶対パス名" exec.argv[0]="最初の引数" を追加することで allow_execute シンボリックリンクのパス名 if exec.realpath="シンボリックリンク解決後の絶対パス名" exec.argv[0]="最初の引数" のような形でのチェックもできるようにする、 というのはどうでしょう? alias 構文が登場した当時( TOMOYO 1.1.3 でサポート)はシンボリックリンクの 作成時にリンク先を制限する機能( TOMOYO 1.6.8 でサポート)がまだ無かったので、 シンボリックリンクとそのリンク先をセットにして実行許可をチェックしないと 許可されていないプログラムの実行を認めてしまう危険性が非常に高かったです。 しかし、 allow_argv0 構文( TOMOYO 1.2 でサポート)が追加され、 exec.argv[0] 構文と execute_handler 機能(どちらも TOMOYO 1.6.0 でサポート)も 追加された現在( TOMOYO 1.6.8 )では、 「実行が許可されていないプログラムへのシンボリックリンクを作成すること」も 「許可されていない argv[0] の内容で実行が許可されているプログラムを実行する こと」も非常に困難になっています。 つまり、そろそろ「 alias で明示された場合のみシンボリックリンクのパス名を 用いて実行許可をチェックする」という制約を廃止しても差し支えない状況に なってきたのではないかと思います。 ( MAC_FOR_FILE=enforcing にしない限り自由にシンボリックリンクを作成して 実行することが許可されてしまうため、 MAC_FOR_FILE=enforcing ではない場合には 対処できません。) 簡単なチェックを行いたい場合には allow_argv0 構文を、厳密なチェックを行いたい 場合には if exec.argv[0]= 構文を、 if exec.argv[0]= 構文では処理しきれない ような複雑なチェックを行いたい場合には execute_handler 機能を使います。 まだ「 exec.realpath="実体のパス名" 」の部分を実装していませんが、それ以外は branches/ccs-patch/ の rev 2738 以降で機能するかと思います。 ccs-patch-\*.diff は TOMOYO 1.6.8 用のをそのまま使えますが、 コンパイル前にカーネルコンフィグの更新が必要です。 > 学習時に省略した形式でのポリシー生成が出きるようなオプションがあれば > うれしいのですがどうでしょう? > (省略した形式で使いたい場合、修正にかかる作業量がとても多そう…) > 機械的に exec.realpath= な部分を削っていけば済むのでそんなに大変な作業では 無いと思いますが・・・。まぁ、最初から if 節が付くと初心者には鬱陶しいかも しれないのでデフォルトは if 節無しですかねぇ。