• 締切済み

RedHat9に標準搭載のapacheについて

タイトルの通りapacheについてなのですが、cgiの実行を許可して UNIXコマンド実行系のスクリプトを実行テストしてみたところ 殆どのコマンドが通ってしまい、ファイルの削除やファイルをcatしたり 色んな事が出来てしまってかなり冷や汗が出ました。 個人でweb領域をcgi許可で貸している方はこの場合の対策は どのようにしているのでしょうか? 他人に貸さずとも、安全な運営方法を実践したく思います。 (もし何かあった場合心配ですので) 私はまだ知識が半端で詳しい対処方法が思いつかなかったのですが、 他の方はどのようにしていらっしゃいますか?教えて頂きたく思います。 宜しくお願いいたします。

みんなの回答

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.7

> 今回たまたま実行して見つけてしまったこの脆弱性? だから,脆弱性でもなんでもないんですってば. ファイルリストの取得,ファイルの閲覧,ファイル操作,これらを全て禁止してしまっては,ごく普通の掲示板すら設置できなくなるでしょうから,CGI を許可すること自体が無意味になります. そういう意味で,CGIを許可するということは,シェルアカウントを発行するのに近いぐらい,そのユーザーへの信頼を与えているということで,「バランスが悪い」と再三申し上げているわけです.

全文を見る
すると、全ての回答が全文表示されます。
回答No.6

こんばんは。 > ルーターなどの最低の機器は揃えたいと思います。 余計なお世話かもしれませんが、「ルータ」、「Netfilter(iptables)」、「IDS(Snort,Tripwire)」を 採用することをおすすめします。 > また今回質問させて頂いた事でいえば、 > Code_Blue_Oceanさんのサーバもご回答頂いたような > 数々対策は幾重にもしているけど、 > このコマンド実行CGIは実行出来てしまうということですか? > (自分で実行しようとすればの話で) まあ、可能かどうかと聞かれれば可能です。 > 実行は出来てしまうけど、それを実行させないようには注意している。ということですね? それ「も」やっていますが、どちらかといえば「実行しても悪影響がないようにしている」といった方が 正確かもしれません。 最後に注意していただきたいことがあります。 私の書いた内容を鵜呑みにしないでください。 その理由は、おわかりいただけるかと思いますので、あえて何も申しません。 では。

参考URL:
http://www.snort.gr.jp/,http://www.snort.org/
全文を見る
すると、全ての回答が全文表示されます。
  • astronaut
  • ベストアンサー率58% (303/516)
回答No.5

>httpdが仮に乗っ取られた場合でも冷静に対処出来るようにしておきたいです。 だから、それとcgiの権限の話のバランスが悪いのですよ。 >>適切にシステムが管理されていれば >ここをどのようにされているか、参考に詳しくお聞きしたかったです。 httpd を乗っ取られるようなことが無いように管理するってことです。 乗っ取られたら、何をされているかわかったもんじゃないですから、再インストールです。

watanuki0001
質問者

お礼

お返事有り難う御座います。 下にも書かせて頂きましたが、まず乗っ取られないように注意をするという点に最も重点を置くべきだとは思っていますが、 今回たまたま実行して見つけてしまったこの脆弱性?もきになってしまったわけです(他にもコマンドが実行される危険性があることも分かりました)

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

おはようございます。 しつこいようですが、「補足」について私なりの考えを書かせて頂きます。 > ということは、一般ユーザーで実行出来るコマンドを制限する方がよりよい対策になりえるということでしょうか? それ「も」対策の1つかとおもいます。 ただ、一般ユーザと一括りにしてしまうと誤解がありそうですので「サーバの実行ユーザ」と言い換えさせて頂きます。 言い方はいろいろありますが、「権限最小の法則」などという話を昔聞いたことがあります。 簡単に言えば、「必要なところに必要なだけ与える」ということになります。 誤解のないようにして頂きたいのですが、 smtp サーバや pop3 サーバ、 DNS サーバなどでもその権限で「外部コマンドを実行」することは可能です。 それが簡単か難しいかの違いです。 (補足しますが、バッファオーバフローの脆弱性が存在した場合、そのサーバの実行権限を外部から乗っ取られる可能性があります。乗っ取られた場合は、そのサーバの権限で任意のコマンドが実行できてしまいます。) > telnetのポートを外部から塞いでいても、それ相応のことが出来てしまうのがかなり驚異です。 そうですね。 ただ、 telnet は「コマンドを実行する方法の1つ」にすぎないことを忘れないでください。 あるユーザの権限でコマンドを実行する方法ならいくらでもあります。 と、これだけだと情報量ゼロですので、私が行っている対策をご紹介します。 これを鵜呑みにしないでください。これが完璧ではありませんし、全てではありません。  ・ルータを導入する   → 初期設定でもそこそこのセキュリティは保てるそうです  ・Netfilter(iptables)を導入する   → 不要な接続はすべて拒否するよう設定します  ・IDS(Snort,Tripwire)を導入する   → 進入を「防ぐ」ことは不可能ですが、「検知」することは可能ですので、対策が立てやすくなります  ・最新のセキュリティパッチを「慎重に」適用する  ・不要なユーザやグループは削除する  ・suid された実行ファイルのうち、不要なものは削除するか、 suid ビットをはずす  ・不要なパッケージは削除する  ・不要なサービスは停止する  ・ログの監視は定期的に確実に行う  ・ディストリビューションだけではなく他のセキュリティ情報をこまめに入手する  ・信頼できるユーザには提供しない(責任を追及できないようなユーザには提供しない)  ・今の状態が「完成」だとは思わない とりあえず、簡単に述べることができるものとしては上記のようなものがあるかと思います。 では。

watanuki0001
質問者

お礼

詳しい対策の解説有り難う御座います。 ルーターなどの最低の機器は揃えたいと思います。 また今回質問させて頂いた事でいえは、Code_Blue_Oceanさんのサーバもご回答頂いたような 数々対策は幾重にもしているけど、このコマンド実行CGIは実行出来てしまうということですか? (自分で実行しようとすればの話で) 実行は出来てしまうけど、それを実行させないようには注意している。ということですね?

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

こんばんは。 私の回答が参考になるか分かりませんが、補足の内容について私なりの考えを書いてみたいと思います。 あまりうまくまとめられていません。ごめんなさい。 > ログインシェルを与えていなくてもコマンドの発行が可能でした。 「ログインシェルを指定する」ことと、「コマンドが実行できる」ことは関係ありませんよ。 ログインシェルを指定しない場合は、(大雑把に言えば)ただ「ログインができない」だけで、そのユーザの権限を使ってコマンドを実行することはできます。 > サーバのディレクトリリストを簡単に取得出来たり、rpm -qaコマンドなども実行出来 確かにこの点だけをみれば、「重大なセキュリティホール」になりかねませんね。 ただ、その前に大切なことを忘れていませんか? サーバを提供する前に貸す人を「信用」したうえで貸すのではないでしょうか。 あるいは何かあったときのために「身元をおさえる」ことをするのではないでしょうか。 どちらかといえば、 CGI がどうこう言うよりも、貸すまでの課程やその後の課程で対策をとるものではないかと思います。 > SuEXECを導入する場合は、既存のapacheに追加出来たりするのでしょうか? 大抵のディストリビューションに付属しているものは、SuEXEC は有効になっていないようです。 ですから、何らかの形で有効にする必要がありそうです。 (Red Hat 9 だと標準で使用可能になっているかもしれません) 参考 URL を1つ紹介致しますので参考になさってください。 導入方法が書いてあります。

参考URL:
http://bitarts.jp/tech/linux/suexec.html
watanuki0001
質問者

補足

お返事有り難う御座います。 >ただ「ログインができない」だけで、そのユーザの権限を使ってコマンドを実行することはできます。 ということは、一般ユーザーで実行出来るコマンドを制限する方がよりよい対策になりえるということでしょうか? ご紹介頂いたページはお返事を書く前に既に検索で見ておりました(T_T) どうやらSuEXECはデフォルトで有効になっているんですね。 telnetのポートを外部から塞いでいても、それ相応のことが出来てしまうのがかなり驚異です。

全文を見る
すると、全ての回答が全文表示されます。
  • astronaut
  • ベストアンサー率58% (303/516)
回答No.2

RedHat-9のapacheでは,デフォルトで,一般ユーザーがcgiを設置できるようにはなっていないはず. 一般ユーザーに cgi 設置許可を与えるという時点で,ユーザーをある程度信頼していることになりますし,適切にシステムが管理されていれば,一般ユーザー権限で行えることがセキュリティ上の問題になることは無いでしょう. cgi プロセスからコマンドを発行できることを問題視するのはバランスを欠いていませんか? ちなみに,RedHat-9ではデフォルトで suexec が有効になっています.

watanuki0001
質問者

補足

お返事有り難う御座います。 私の場合では貸していることはないのですが、 他の自宅サーバーで運営されている方で、CGIつきでレンタルされている方がいらっしゃるのですが その場合はどのような対策を取っているのか?ということもお聞きしたかったのです。 外に貸さないにせよ、同じ対策をしておくことで(または知っておくことで) httpdが仮に乗っ取られた場合でも冷静に対処出来るようにしておきたいです。 >適切にシステムが管理されていれば ここをどのようにされているか、参考に詳しくお聞きしたかったです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

こんばんは。 大抵は Apache の権限を不必要に与えないことでコントロールしているのではないでしょうか。 例えば、実行権限を nobody にしたりして、適切なパーミッションを設定すれば、さほど問題にはならないと思います。 別な方法としては、 SuEXEC を使って所有者の権限で CGI を走らせたりするなんてのもありますね。 ちなみに、ただ単に「ファイルの削除ができる」というだけでは驚異にはならないのではないでしょうか? CGI の中で一時ファイルを作成したり、データファイルを読み込んだりなんて処理は一般的に行いますよね。 では。

watanuki0001
質問者

補足

返信有り難う御座います。apacheの実行権限をnobodyにしても apacheの実行アカウントにログインシェルを与えていなくてもコマンドの発行が可能でした。 サーバのディレクトリリストを簡単に取得出来たり、rpm -qaコマンドなども実行出来、 簡単にどのパッケージが組み込まれているかがばれてしまいます。 重大なセキュリティホールになりえません。 SuEXECを導入する場合は、既存のapacheに追加出来たりするのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Windows+Apache2.2で別ユーザー実行

    こんにちは。 Windows2000+Apache2.2でCGIを動かしています。 CGIの言語にはActivePerlを使っています。 CGIが実行される際のファイルやディレクトリのアクセスに制限をかけたいのですが、方法がわかりません。 CGIが実行されるユーザーを指定する方法としては、suExecというのがそれっぽい感じなのですが、Windowsでの使用方法がよくわかりませんでした。これはunix系の環境でしか使えないのでしょうか? 他の方法でも構いません。最終的にアクセス制限ができれば十分です。 なにか方法はないものでしょうか?

    • 締切済み
    • CGI
  • redhat 7.0 でApacheでCGI

    今、ApacheでWEBサーバーつくったのはいいでんすが、なぜかどのCGIも動きません。Internal Server Eroor がでます。 おそらくhttpd.confの設定だろうと思うのですが、どうやってもうまくいきません。 ちなみにCGIの中身はちゃんとチェック済みです(フリーのCGIスクリプトを3っつくらいためしました)あと、パーミッション設定もチェック済みで、テキストをただ表示させるだけのCGIすら動きません。 よければどなたかhttpd.confの中身のせときます。 どなたかアドバイスと、くわしくhttpd.confの設定がのってるサイトを教えていただけないでしょうか? あと、できればWebminでの設定方法を知っている方おしえていただけないでしょうか? http://ks-pro.dns2go.com/httpd.conf.txt

  • Webからアクセスし、画面のボタンを押すとサーバーで任意のスクリプトが起動するというようなことはできるのでしょうか。

    RHL9.0でApache2.0を使用しています。 サーバーに今test.shというシェルスクリプトがあります。これは例えばあるファイルをあるディレクトリ以下に作成してパーミッションや所有者を変更したりできるものです。 taroさんがブラウザから/cgi-bin/change.cgiというページにアクセスして、自分のアカウントをテキストボックスに入れて実行のボタンを押すと、上記のスクリプトが実行され、所有者がtaroさんになるというようなことは可能でしょうか。 要するにcgiでUNIXのコマンドやスクリプトを実行させたいと言うことなのですが。単にcgiスクリプトの中に system("/…/test.sh 引数");と書いても実行してくれませんでした。 あと、テキストボックスに入力したテキストをtest.shの引数とすることも可能でしょうか。

    • ベストアンサー
    • CGI
  • Apacheでhtdocsフォルダを書き込み可に

    Apacheでhtdocsフォルダを書き込み可にする方法がわかりません 今CGIをつくっているのですが、localhostで試したときにcgiページを開こうとすると、 そのcgiファイルの内容がテキストとしてIEに表示されるだけで、正しく表示されません。 いろいろ調べてみて、Apacheは初期設定だと書き込みが不可になっているから 正しく表示されないのかも、と思い、書き込み可に変更できる方法を探していました。 何個かそれらしいページを見つけたのですが(コマンドプロンプトで変更するもの)、結構古い情報のせいなのかうまく動きません。 「’#’は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません」 と出てしまいます。 それで、Apacheでhtdocsフォルダを書き込み可にする方法を教えて頂きたいのです>< また、localhost設定のフォルダをhtdocsから変更する方法もあれば教えて頂きたいです。

    • ベストアンサー
    • CGI
  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。

  • Apacheでcgi-binを隠すには

    Apacheの設定でcgiの実行ディレクトリをcgi-binに限定(DocumentRootでのcgi実行は不可)した場合、 アドレスはhttp://hoge.hoge/cgi-bin/となりますが、 これをhttp://hoge.hoge/で実行しているかのように隠蔽(偽装)する方法はないでしょうか?

  • アパッチでcgi-binフォルダ内のファイルにアクセスできるようにする方法

    アパッチでcgi-binフォルダ内のファイルにアクセスできるようにする方法 VineLinuxの標準状態でcgi-binフォルダ内の スクリプトではないファイルにアクセス可能なようにするには どの様に設定したらよいのでしょうか? 読み込みたいファイルは html jpg 等です。 Apache version 1.3.27 Vine Linux 2.6 です。

  • Apache2 - CGIで出力されたファイルの所有者を変更するには?

    Gentoo LinuxでApache2を動かしています。 Apache2の質問です。 UserDirで実行された(mod_userdirで処理される)CGIまたはPHPスクリプトが出力するファイル/ディレクトリの所有者を、リクエストされたユーザディレクトリのuid, gid へ自動的に変更する方法を教えてください。 レンタルサーバーではこのような動作を見掛けるし一般的だと思うのですが設定方法がわかりません。 よろしくお願いします。

  • CGIを使用するためのApacheの設定

    今HPを作っています。 そこでカウンターを作ろうと思ってPerlを勉強したのですが、 Apacheでファイルを送り、 CGIを実行しようとすると、 「ファイルのダウンロード」 とでて「実行」を押すとメモ帳でそのCGIファイルが開かれてしまいます。 これはApacheの設定(httpd.conf)が関係してるんじゃないかと思うんですが、 設定の仕方がよくわかりません。 教えてください。 OSはWinXPでバージョンは2.0.55.0です。

  • Achachとシェル

    Apacheで動かすCGIからcatなどが実行できます。 シェルが実行できるということですよね? CGIでそれらを不可能にさせることはできませんか?

このQ&Aのポイント
  • EP-713Aで操作中に室内ブレーカーがトリップしてしまいました。エラーコード名はEPSON DEVICE RECOVERY MODE UPDATE FIRMWAREです。
  • EP-713Aの操作中に発生したエラーで、室内ブレーカーがトリップしました。エラーコード名はEPSON DEVICE RECOVERY MODE UPDATE FIRMWAREです。
  • EPSON製品のEP-713Aで操作中に室内ブレーカーがトリップしてしまった際のエラーコード名はEPSON DEVICE RECOVERY MODE UPDATE FIRMWAREです。
回答を見る