2007年11月29日

[selinux-users:02072] Re: setrlimitを許可するようなタイプはありませんでしょうか。

07/11/28 に Tetsuo Handa<from-selinux-ml@xxxxx> さんは書きました:
>  熊猫です。
>
>
>
> > >>> chconでタイプを変更してもいいと思いますが、再起動したら、
> > >>> 元に戻ってしまうと思います。
> > >> えっ!そうだったんですか?

> > >> (再起動時にrestoreconが実行されるのかな)
> > >
> > > いえ、再起動しても SELinux のセキュリティコンテキストは
> > > 保持されますのでご安心を。
>
> でも、 /.autorelabel には要注意ですよ。
> このファイルを作成する許可があれば、 .fc ファイルの内容に従って勝手に変更されてしまいます。
> このファイルを作れるのは root ユーザだけなのでしょうが、油断大敵です。
> 悪意あるユーザが自力ではオープンできないセキュリティコンテキストが付いているファイルのハードリンクを作って
> システム管理者が /.autorelabel を作って再起動してくれるのを待っているかもしれませんからね。
>

なるほど、SELinuxはどう考えているんでしょうねぇ。
ちょっと私はわかりません。

>
> > > PHPからは system("/usr/local/bin/gpg-wrapper.sh 暗号化する文字列 メールアドレス"); という形で
> > > 実行できるでしょう。
> > >
> > > 但し、"unconfined" と付いているように、このドメインは非常に強い
> > > 権限を持っており、入力値の検査には注意するようにしてください。
> > > 例えば、暗号化する文字列に「a"; cat /etc/shadow; echo "abc」なんて
> > > 入っていたらとても悲しいことになります。
>
> これは簡単なコマンドインジェクションですね。
>
> TOMOYO Linux では、
> httpd から mod_php で実行されたスクリプトから system() を呼び出した場合は
> <kernel> /usr/sbin/httpd /bin/sh というドメインに、
> mod_php ではなくスタンドアロンの php で実行されたスクリプトから system() を呼び出した場合は
> <kernel> /usr/sbin/httpd /path/to/php-script /bin/sh というドメインに、
> suexec 経由で起動されたスタンドアロンの php で実行されたスクリプトから system() を呼び出した場合は
> <kernel> /usr/sbin/httpd /usr/sbin/suexec /path/to/php-script /bin/sh というドメインになります。
>
> それぞれのドメインに対して、コマンド1個/ファイル1個を単位としてアクセス許可を与えるので、
> system("echo 暗号化する文字列 | /usr/bin/gpg -a --batch --homedir /var/www/.gnupg -e --recipient メールアドレス")
> の中の「暗号化する文字列」や「メールアドレス」に変な値( /bin/cat など)が入っていたとしても、
> /usr/bin/gpg だけしか実行できませんし、その /usr/bin/gpg は(上記の3ケースの内の最初のケースの場合)
> <kernel> /usr/sbin/httpd /bin/sh /usr/bin/gpg という専用のドメインで動作します。
>
> 仮に /bin/cat と /usr/bin/md5sum が同じラベル( bin_t ?)を持っていたとしても、 /bin/cat の実行許可を与えない限り
> 「ファイルのダイジェスト値だけを出力したかったのに(コマンドインジェクションにより /bin/cat が実行されて)
> ファイルの内容を丸ごと出力してしまった」とかいう事件も起こりようがありません。
>
> こういうのは、 bin_t のようなラベルを使ってグループ化しないことの利点ですね。

たしかに、変なグルーピングしちゃう可能性はありますね。


上記問題は、SELinuxというより、php固有の問題であると思われます。
system関数に渡すユーザが入力した値は、 phpでは、escapeshellcmdでくくるのが正しいと思われます。
system関数を呼び出す場合とは例えば、ImageMagickを使って画像をユーザの指定通りにウニウにさせる場合なんかです。

TOMOYOは強制的にチェックしてくれますが、SELinuxはそこまでしませんので、きちんとしておくことは普通に必要ですね。
上記で問題になっている ; や、" が対になっている場合もエスケープしてくれます。

http://search.net-newbie.com/php/function.escapeshellcmd.html


>


--
Shintaro Fujiwara
segatex project (SELinux policy tool)
http://sourceforge.net/projects/segatex/
Home page
http://intrajp.no-ip.com/
Blog
http://intrajp.no-ip.com/nucleus/
CMS
http://intrajp.no-ip.com/xoops/
Wiki
http://intrajp.no-ip.com/pukiwiki/

投稿者 xml-rpc : 2007年11月29日 00:10
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/66951
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。