[tomoyo-users 58] TOMOYO Linux の開発状況

Back to archive index

Tetsuo Handa from-****@i-lov*****
2006年 3月 27日 (月) 20:15:05 JST


 バージョン 1.1 の内容が確定したのでお知らせします。



 バージョン 1.1 では以下の機能が強化されました。

 バージョン 1.0.2 までは write 権限により可能になる操作の種別を
区別できませんでした。
バージョン 1.1 では write 権限は
 open(O_WRONLY)
 open(O_RDWR の WR 部分) 
 sysctl(WRITE)
だけを指すようにして、新規に
 allow_mkdir
 allow_rmdir
 allow_unlink
 allow_mksock
 allow_mkfifo
 allow_mkchar
 allow_mkblock
 allow_link
 allow_symlink
 allow_rename
 allow_create
 allow_truncate
という(細分化された書き込み)権限が導入されます。
これにより、「通常のファイルを削除して同名のデバイスファイルを作成する」といった
攻撃が困難になります。

 また、バージョン 1.0.2 までは自プロセスに関する情報にアクセスするためには
「/proc/\$/」というパターンで始まるアクセス許可を与える必要がありました。
これは、「/proc/self」が「/proc/自プロセスのプロセスID/」への
シンボリックリンクとして実現されているためです。
そのため、自プロセスに関する情報にだけアクセスできれば良い場合であっても
他のプロセスに関する情報にもアクセスできるようなアクセス許可が与えられていました。
バージョン 1.1 では、自プロセスに関する情報にアクセスする場合は
「/proc/self/」というパターンで始まるアクセス許可を指定できるようになります。
これにより、必要が無ければ自分以外のプロセスに関する情報へのアクセスを
禁止することが可能になります。
また、 allow_read で /proc/self/ ディレクトリ以下のファイルを指定することで、
/proc/mounts 等へのアクセスを学習しきれなかったことが原因によるエラーを回避できます。



 バージョン 1.1 では以下の不具合が修正されました。

・「\*」が「次の / までまたは末尾までの0文字以上」に
 対応するワイルドカードであるため、
 PathMatchesToPattern("/tmp/", "/tmp/\*") が true に
 なっていました。しかし、ディレクトリと非ディレクトリの
 比較であるため、( \* が末尾までの0文字に対応しているけれども)
 この比較は一致すべきではないと判断し、修正しました。

 修正前の PathMatchesToPattern() では以下の誤動作が発生します。

 「2 /tmp/\*」というアクセス許可が与えられている場合、
 「mkdir /tmp/」および「rmdir /tmp/」が許可されてしまいます。

 「file_pattern /tmp/\*」というパターンが与えられていた場合、
 「mkdir /tmp/」または「rmdir /tmp/」に対して
 「2 /tmp/\*」というアクセス許可が学習されてしまいます。

・GetAbsolutePath() の中で vfsmount_lock を掛け忘れていました。

 カーネル 2.6 系で SMP マシンで動作させる場合のみ影響があります。

・Shared Subtree 用のマウントオプションを認識できるようにしました。

 カーネル 2.6.15 では Shared Subtree という機能が追加されましたが、
 CheckMountPermission() が Shared Subtree 用のマウントオプションを
 認識できませんでした。

・アドレス種別をチェックした上でポート番号のチェックを行うようにしました。

 与えられたアドレスの種別が AF_INET または AF_INET6 の場合のみ
 CheckBindEntry() および CheckConnectEntry() で
 ポート番号をチェックするようにしました。
 アドレス種別として例えば AF_UNSPEC が与えられた場合、
 ポート番号をチェックするのは正しくありません。



tomoyo-users メーリングリストの案内
Back to archive index