- PR -

どういった対策をとるべきでしょうか?

投稿者投稿内容
drufyi
大ベテラン
会議室デビュー日: 2005/06/20
投稿数: 148
投稿日時: 2005-08-18 17:35
こんにちは。
いつもお世話になっております。

現在絡んでいる仕事に無料のホスティングサービスがあり、実際に運営されています。
(現在は規模はすごく小さく、会員数も少数)

無料ホスティングで、CGIが使えるのが売りみたいです。

仕組みは登録ページ上から登録をすれば、スクリプトにより、
サーバ上にユーザが作成され、その中にpublic_html、の中にindex.html(デフォルトページ)が
作成され、Apacheのユーザディレクトリで公開できるようになっています。
http://xxx.xxx/~userid/

テストアカウントで、
サーバ上のファイルを見れるPHPと、コマンドを実行できるPHPを
書いて試してみました・・・・。
内容はあえて伏せますが、PHPをちょっと書ける方ならわかると思います。

すると、/etc/passwd も見れる、すべて見れる。。。
コマンド実行もできてしまうという欠点がでました。

今のところ使用者にはそのようなことをやっている方はいませんが、
早急に対応しなければいけない状態です。

suEXECというのがそれらしとは思ったのですが、まだはっきりわかっておらず。。。

ホスティングや、このような経験がなく、ぜひ方法などご教授頂ければ幸いです。

その他必要情報があれば記載いたしますので、よろしくお願い致します。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-08-18 18:47
こんにちは。
引用:
すると、/etc/passwd も見れる、すべて見れる。。。
コマンド実行もできてしまうという欠点がでました。


うーん…。それは仕方が無いことだと思います。CGIを使用許可にしている以上。

どうしても制限がかけたいのなら、chroot jail に閉じ込めるか、usermode linux のように仮想的な環境をユーザ毎に与える、等のやり方は考えられますが、手間に見合うかどうか。

できる対処としては、
・suEXEC等の機構で、各ユーザの CGI の実行権限を明確に分離する。(これは必須)
・local exploit からセキュリティが破られないよう、無駄なパッケージは削る、かつ、脆弱性が出たら即座に更新する。
・共用のファイルも含めて、パーミッションを厳しくする。

…なのですが、どれくらい手間をかけられるかという問題は切り離せません。
ユーザ独自のCGI経由で被害が出た場合にどうするか、ですね。

・元から保証しない(被害が出ることをユーザは覚悟せよ…ベストエフォートとも言う??)
・保険をかけておく(被害が出たら補償する)
・原因を作ったユーザに被らせる(ユーザに被害請求…これは無茶か??)

…等々。
以上、ご参考まで。

[ メッセージ編集済み 編集者: angel 編集日時 2005-08-18 19:04 ]
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-08-18 20:31
逆に質問してみたいのですが、
「/etc/passwd が見れてコマンドが発行出来るような」現在の状態で、
drufyiさんはサーバの重要な設定を変更したりサーバを乗っ取ったり出来るのですか?
drufyi
大ベテラン
会議室デビュー日: 2005/06/20
投稿数: 148
投稿日時: 2005-08-18 22:35
angel様、冬寂様ありがとうございました。

引用:

逆に質問してみたいのですが、
「/etc/passwd が見れてコマンドが発行出来るような」現在の状態で、
drufyiさんはサーバの重要な設定を変更したりサーバを乗っ取ったり出来るのですか?



PHPで作成したページよりwhoamiを実行すると、apacheと返ってきます。
CGIやPHPを実行するときにはapacheで行われているからでしょうが、

ということは、apache権限でできることは全てできるのではないでしょうか?

削除・改竄などなど。

angel様のご指摘どおり、まずはsuEXECをしっかり調べ適用したいと思います。

その他、ご指摘ありましたらよろしくお願いします。
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2005-08-19 09:42
CGIならsuExecでユーザー権限を分離、
sboxchroot jailに閉じこめ、
cgiが暴走したときに備えてRLimitCPU/MEM/NProcも設定、
CGIからIP経由で悪さできないようにパケットフィルタ(Linuxならiptablesやipchains)を
かけても良いかも。
CGIからsendmailなどのコマンドを使わせるなら、使わせたいコマンドだけをいれた
ディレクトリを用意して、mound -o bindでそのディレクトリだけをchroot jail内に
マウント。busyboxも併用するとちょっと楽。

PHPをApache moduleで動かしている場合は判りません。CGIとして動かしているなら
同じく上記の対策で行けますが。

これ以上のことをやるなら、個々のユーザごとにusermode linuxを用意した方が楽かも
しれません。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-08-19 09:48
おはようございます。
引用:
PHPをApache moduleで動かしている場合は判りません。CGIとして動かしているなら
同じく上記の対策で行けますが。


個人的に手がけている環境では、IPアドレス共有の名前ベースの仮想ホストを処理する Apache と、CGI/PHP等を実行する Apache のプロセスを分けて運用しています。
両者の連携は mod_proxy で。( つまり前者の Apache はリバースプロキシ )

…パフォーマンス的にどうかは分かりませんが。

追記:
そういえば、PHPモジュールを使った場合、suexec による実行権限の制御はできなかったように思いますね。mod_userdir + PHP の場合どうしたものでしょう??


[ メッセージ編集済み 編集者: angel 編集日時 2005-08-19 13:07 ]
drufyi
大ベテラン
会議室デビュー日: 2005/06/20
投稿数: 148
投稿日時: 2005-08-20 01:11
引用:

追記:
そういえば、PHPモジュールを使った場合、suexec による実行権限の制御はできなかったように思いますね。mod_userdir + PHP の場合どうしたものでしょう??



その通りだと思います。

本日suEXECの適用をし、全サーバの動作確認をしまして、
CGI、SSIに関しては制御をかけました。

PHPに関しては調べた結果、
<Directory /home/*/public_html>
</Directory>内に
php_admin_value open_basedir .:/home/*/public_html:/usr/share/pear
の記述をし、/etc/php.iniのsafe_mode=off を確認し、
/etc/passwd内の
/home/hogehoge から
/home/hogehoge/./ にして、対処しました。

しかしこのままでもPHP上でコマンドを実行できてしまったので、
それに関しては協議していかなければいけないのですが、
とりあえず案としては、binなどのパーミッションを設定することで
対処しようかと思っています。

これは検証機レベルでは確認済みになります。

ご指摘などありましたらよろしくお願いします。

[ メッセージ編集済み 編集者: drufyi 編集日時 2005-08-20 01:11 ]
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-08-20 09:38
始めの書き込みの時から思っていたのだけど、自分の所のサーバが・・・でなくて他人の所のアドバイザみたいな感じの仕事してるんだよね?
無料掲示板で「ご指摘などありましたらよろしくお願いします。」って、お金貰って仕事しているって意識持ってるの?
引用:

しかしこのままでもPHP上でコマンドを実行できてしまったので、
それに関しては協議していかなければいけないのですが、
とりあえず案としては、binなどのパーミッションを設定することで
対処しようかと思っています。


とりあえず、PHPのマニュアルでも読んでおく事をお奨めします。
(プログラム実行関数のあたり)

※技術屋である限り、少なくとも「自分の技術で食っていける」というプライドをもつべき。
 自分の技術を高める「実験中」にこういう疑問があって質問する、というのならいいけど。
 少なくとも自分に関する限り、必要な知識や資料は自分で調べ上げてて質問というのは一度もした事が無い。

スキルアップ/キャリアアップ(JOB@IT)