read/write再チェックの意義

OSCで、PANDAさんに色々教えてもらった。
SELinuxは、
ファイルopen -> read/write
というときに、open, read,write両方の時にパーミッションチェックを行う。
TOMOYO Linuxとかはopen時にしかチェックを行わない。

SELinuxのようにread/write時にもチェックを行うのは意味がある。
open後に、ポリシが変更になって、アクセス拒否になった場合など。
http://d.hatena.ne.jp/himainu/20070830#1188480411
↑で扱ったネタ。

ただ、これでも、まだ抜けがあるとのこと。

  • 1)mmapした場合

read/write使わずに、ファイルアクセスできてしまうので、ポリシが変更になってもそれが反映されない

  • 2)メモリ上に読み込んだデータについて

たとえば、
hoge_tドメインのプロセスが、/etc/shadowをopenして、
buf[100000]に読み込んだとする。
この後、ポリシが変わって、hoge_tが/etc/shadowにアクセスできなくなった場合、
なおもhoge_tは、buf[10000]を読むことで /etc/shadowの内容を知れてしまう。