新SELinux入門記事公開

新しめのSELinuxの情報源があまりない気がします。和書のSELinux書籍もすっか
り古くなってしまいました。
なんとかせねばと思っていたのですが、その一環として、
日経Linuxに連載した、「新SELinux入門」全12回が、ITProより公開されてい
ます。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280411/
比較的新しいSELinuxがベースなので、CentOS5やらRedhatEL5やらの
SELinuxに使えると思います。

「安全になった気がする」の提供

LWN.netより。オーストラリアのLinux conferenceで、セキュリティの話があっ
たらしい。
http://lwn.net/Articles/266358/

SELinuxについても、例として挙げられていた。

A system running SELinux may, in fact, be highly secure. But many
administrators still turn it off. SELinux does not make them feel secure
because they do not understand it, and they fear (rightly or wrongly)
that it will interfere with the proper operation of the system. But, by
turning it off, they undoubtedly expose themselves to a number of
attacks which SELinux would block.

SELinuxは、確かに安全性を高めるものであるにも関わらず、
オフにされていることについて、その理由の一つとして、
「ユーザーに安全になった気分を提供しないから」と書いてある気がする。
安全になった気分の提供は、確かに重要だ。
SEEditも、「設定を分かるようにする」という意味で、安全気分に貢献しそうな
ものだが、何かが足りない。

攻撃コードの検証

http://slashdot.jp/security/article.pl?sid=08/02/11/0012230
カーネルにrootに昇格できる穴が出たとのこと。
検証コードも公開されている。
http://www.milw0rm.com/exploits/5092
Fedora 8のSELinuxでどうなるか、調べてみた。

普通のtargetedポリシのログインユーザからのroot昇格

検証コードを実行したら、rootになれた。
で、id -Z
してみると。。
rootかつ、unconfined_tドメインなので、
王大人:「死亡確認」

ただ、これは想定内。
ログインユーザにはあえて甘い設定にしてあるのがtargetedポリシなのだから。

キオスクパソコンユーザでroot昇格

さて、こちらはどうか。
キオスクパソコンユーザとは、安全な一般ユーザを設定したもの。
ログインユーザは、SELinux的に「xguest_t」ドメインで動作する。
詳しくは、Dan Walsh氏のブログを参考のこと。
http://danwalsh.livejournal.com/

検証コードを実験したら。。。
そもそも実行ができない。理由は、xguest_tは、
ホームディレクトリの実行権限がないため。
これじゃつまらないので、設定を甘く。
setsebool allow_xguest_exec_content on
これで、ホームディレクトリを実行できる。
で、また検証コードを実行。お、rootになれたぞ。
しかし、、、
id -Zしてみると、SELinuxドメインはxguest_tのまま。
で、破壊活動もできず。
というわけで、キオスクユーザーならば
SELinuxは効果あり」
SELinuxのキオスク万歳!!

このような、カーネルのlocal exploitは結構見つかるので、
ログインユーザーもやっぱり、unconfined_tじゃなくて別のドメインで動かした
ほうがいいよなぁ。

SELinux無効化は可能か?

今回の検証コードは単にrootシェルを立ち上げるだけだった。
がんばってSELinuxを無効化することはできるんだろうか??
ちょっと試してみたけど、SELinuxの無効化はできなかった。
直接selinux_enforcing変数の上書きはできなかった。
/dev/kmemを開く手もあるようだが、これはキオスクユーザーの権限では開けない。
SELinux万歳!

と思ったが、もっと頑張れば、無効化できるかもしれない。。。
あまりやりすぎると、何かの法律に引っかかってしまうのかしら。

続:SELinux無効化

あっさり、できてしまった orz

ただし、デフォルトのSELinuxキオスクでは、
「そもそもホームディレクトリ上でプログラムの実行ができないから、攻撃コードを実行できない」
ので、SELinuxの意味はある。

実行を許す環境では、SELinuxを使おうが、死亡確認。
SELinuxのenforcing/permissiveモードの切り替えオプションを外して
コンパイルすれば、たぶん死亡しないと思う。