パスワードを忘れた? アカウント作成
9424 story

PHPサーバーに感染するワームPhpInclude.Worm登場 40

ストーリー by koyhoge
allow_url_fopen=Offにしよう 部門より

lss 曰く、 " IT Proの記事によると、 PHP 4/5を利用しているWebサーバーに感染するワーム「PhpInclude.Worm(Santy.e)」が出現したという。 これは以前に報告されたphpBBのセキュリティ・ホールを突くものではなく、 PHPの一般的なプログラムミスを突いてサーバーに侵入するワームであるとのこと。

具体的には,PHPの関数「include()」や「require()」を不適切に使うことで発生する問題「File Inclusion Flaw」を悪用する。 PHPを利用するWebサーバーの管理者は注意が必要だ。"

WebアプリケーションにとってPOST/GET入力値のチェックは基本中の基本だが、その辺で手を抜いていると今回のようなトラブルに見舞われることになる。PHPには変数汚染の概念はないが、入力値のサニタイズはきっちりやることを心がけたい。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by elf2000 (3407) on 2005年01月02日 0時23分 (#673246) ホームページ 日記
    一応感染していないか,UNIX系だと/tmpなど(Windowsだとどこだろ)書き込みが簡単にできるディレクトリをチェックしておきましょうということらしいです
    --
    えりゅふ
    よくきたblog [blog.poyo.jp]
  • PukiWikiの場合 (スコア:3, 参考になる)

    by Anonymous Coward on 2005年01月02日 0時26分 (#673249)
  • by NAT33 (17123) on 2005年01月02日 0時22分 (#673244)
    「Anti-Santy-Worm」がバージョンアップしたら、これにも対応するんだろうか?

    http://www.itmedia.co.jp/news/articles/0501/01/news003.html

    というか、どういう意図で、このワームが配付されてたのか、よく分らん
  • by Anonymous Coward on 2005年01月02日 3時46分 (#673292)
    流石に
    include($_GET['page']);
    のようにあからさまなコードは見たことがありませんが、同じ問題に根ざした脆弱性は時々見かける事があります。
    変数汚染をかけてフラグをクリアしていく必要がある、加工後の値を予測して攻撃手段となる外部変数を組み立てる必要がある等攻撃方法がローカルになっているだけで、サイトやアプリケーション単位で個別に狙い打ちされるとあっさり落ちます。
    他人事とは思わず、心当たりは無いかこの際振り返って欲しい物です。

    やれフィッシングやワームやで騒いでも、その後ろで次の問題の種となる脆弱性をせっせと作り続けるプログラマやそれを看過する開発体制が変わらない事には内容を変えて問題が繰り返されるだけかと。

    ほら、あなたの使ってるそのコードにも新たなる次のワームが…
    • >ほら、あなたの使ってるそのコードにも新たなる次のワームが…

      作ったコードをオープンソースにすれば全て解決。

      #なんてこれっぽっちも思ってないのでAC
    • ろくに設定もしてなくて、某所の住人にいじられてるワンクリ請求業者系のサイトがワームの踏み台にされたりするのかな?

      hoge.hoge/?main.php=hogehoge
      のようなユニークIDを含んだURLを踏ませて、個体識別番号なるものを吐く様式が大部分になりつつあるし。
  • by Anonymous Coward on 2005年01月02日 19時59分 (#673413)
    いまだにNimdaやCodeRed, SQL Slammerに感染したまま放置している
    Windowsユーザはいなくならないわけですが、Windowsの脆弱性に対する修正パッチを
    当てないユーザと比べて、脆弱性を修正しないヘボ開発者とそのソフトを使い続ける
    ユーザはオープンソースならすぐいなくなるでしょうか?

    開発者が放置する可能性も高いわけで、オープンソースだから自分で修正すれば
    良いということになるとは思います。
    しかし、そもそも自分で問題を直せるスキルのある人は、そんなソフトは
    使わずに自分で作るか、もっとまともなソフトを使うでしょう。
    そうなるといつまでも脆弱性が修正されず、自力でも修正できない。
    できることは使用をやめるか、脆弱性を抱えたまま使用し続けるしかない、
    そういうユーザも多いはず。

    オープンソースのソフトウェアを採用するということは、そういうリスクを
    負うのだということをよく理解しておくべきかと思います。
    深く考えず「オープンソースソフトを採用すると何だか知らないが褒められるらしい」
    というだけで採用するようなところさえ少なからずあるような気がして、
    不安を感じていました。
    今回のワームはそのような危惧を具現化する岐路にあるものではないのかと
    個人的には特に心配しています。
    • >できることは使用をやめるか、脆弱性を抱えたまま使用し続けるしかない、
      >そういうユーザも多いはず。
      >
      >オープンソースのソフトウェアを採用するということは、そういうリスクを
      >負うのだということをよく理解しておくべきかと思います。

      オープンソースの比較対照としてクローズドソースを出しているようだが、クローズドソースでも「できることは使用をやめるか、脆弱性を抱えたまま使用し続けるしかない」のは一緒。
      ちなみに、ライブラリーとかまで自分で作らなければ、自作でも技量が無ければ脆弱性を修正できないことはあるよな。でも、クローズドソースは技量があっても手出し出来ない。

      ちなみに、今書いている端末MSのwinXPだけど、 http://support.microsoft.com/kb/886677/ のパッチ入れたらsjis文字化けしなくなった。
      MSがパッチ提供してくれなければ俺にはどうすることも出来なかっただろう。
      オープンソースだと技量が無くても「文字化けする」と叫んだり「誰かパッチ作ってくれ」と頼んだり出来る気がする。
      「そういうリスクを負う」のではなく、「リスクがヘッジされる」のでは?

      ちなみに、文字化けは http://nx.sakura.ne.jp/~chanbaba/bbs/t/t/test/112/xpnusg/xpnusg.html を表示して、「ctrl+更新」で出た。「更新」だと出ない。
      親コメント
    • 上段の問題と中段の問題がつながらない。

      > 脆弱性を修正しないヘボ開発者とそのソフトを使い続ける
      > ユーザはオープンソースならすぐいなくなるでしょうか?
      誰もそんな保証はしない。
      性格上そういう問題にうるさいのは多い。
      でも、実際に修正される、対処をする、というのは別の問題で、プロプラなソフトとほぼ変わらない。

      > 開発者が放置する可能性も高いわけで、オープンソースだから自分で修正すれば
      > 良いということになるとは思います。
      > しかし、そもそも自分で問題を直せるスキルのある人は、そんなソフトは
      > 使わずに自分で作るか、もっとまとも
    • 「Linux入れました。自宅Webサーバー立てたいと思います」
      みたいなおしえてくんが、むやみやたらにXOOPSやPukiWiki入れたりしてるので
      その心配はある。
      分からないなら使うな!くらいは言ってもバチはあたらないと思う。

      んが、
      >し
    • 元文は誤解されているようですが、主題はこんな感じかな。

      「オープンソースソフトウェアも開発停止になることはある。すると脆弱性の解決はユーザに委ねられる。そのときにユーザ側に対処できる人が居ない可能性まではあまり考慮されていないのではないか。」

      私にはもっともな話に思えます。ただし開発が停止すると手
  • by Anonymous Coward on 2005年01月02日 0時37分 (#673252)
    $var = $_POST['foo'];
    include($var);

    みたいなプログラムミスを狙うワームだと理解してOKですかね?
    こんな危ないプログラム書く人もそうそういなさそうな気がするけど・・
    • >register_globals is set to ON

      らしいんで、OFFだったら問題ないかと。
      • by Anonymous Coward on 2005年01月02日 1時50分 (#673271)
        可能性は少なくなりますが、問題はあると思います。

         紛らわしいのはPHPにおける*変数汚染*とは外部からの引数とスクリプト内部で使用する引数が混じって使われる状態(register_globals=ON)を指していたような気がするわけでして。

        例えば次のスクリプト admin.php が存在している場合。($adminは初期化されてないとすると)

        if( auth( $id, $pwd ) == true ){
          $admin = 1; //フラグを立てる
        }

        if( $admin ){
         // adminなコード
        }

        これは admin.php?id=hoge&pwd=hoge という利用を想定しているのですが、もしも悪意ある人間が admin.php?admin=1 といれると*フラグが立ったこと*になって、adminなコードが走っちゃうっていうのが、これまでの*PHPの変数汚染*だったような気がします。

        そこで、register_global=OFFって奴にすると、このような外部の引数と内部のフラグを分離できて

        if( auth( $_GET["id"], $_GET["pwd"] ) == true ){
          $admin = 1; //フラグを立てる
        }

        if( $admin ){
         // adminなコード
        }

        となるから、 admin.php?admin=1 とされても問題ないーっていう感じだと思います。

         で今回の変数汚染という考えは、これとは別でして。そもそも外部からの引数を渡すという点は(自動にしろ手動にしろ)製作者が意図した通りなのですが、その渡されるデータが必ずしも意図した値になるとは限らないから、注意しろっていう事だと思います。例えば引数を読み込んで実行する時に

          include_once( $_GET["page"] );

        で page.php?page=test.php なら test.php を読み込む。んで、page.php?page=/etc/passwd なら?? という状況を想定して対処しろみたいな感じだと思います。

         長文かつ、乱雑な点ご容赦ください。
         では失礼します。
        親コメント
      • by Anonymous Coward on 2005年01月02日 1時11分 (#673265)
        OFFでも同じ。
        親コメント
  • by Anonymous Coward on 2005年01月02日 0時41分 (#673254)
    変数汚染の概念がないとはどのような意味なのでしょうか?
    外部から与えられた変数をファイル関数に直接渡すと「エラー」が発生する機構がないという意味なのでしょうか?
    そうではなく、汚染された変数が存在しないという意味ならば、そもそも論理が成り立たないように思われます。

    って言ったみたけど、素人考え臭いのでヘタレ腰のAC
    • これは私が書いた部分に関するコメントなので回答します。
      PerlのTaintモードやRubyのように、外部から与えられたデータには「汚染フラグ」がついていて、特定の関数にそのまま渡すとエラーになる仕組みを言っています。
      PHPではそもそも、変数が汚染されているかどうかという区分を処理系が持っていないので、プログラム作成者にすべてがゆだねられています。「処理系としての汚染検出」とでも言えばよかったでしょうか。まぎらわしい言葉を使ってしまってごめんなさい。
      親コメント
  • by Anonymous Coward on 2005年01月02日 16時01分 (#673379)
    リリースage
  • by Anonymous Coward on 2005年01月03日 0時05分 (#673520)
    ご注文内容・お客様の情報は以下の内容で正しいですか?

            (/etc/passwd)
            〒-

    氏名欄が入力されていません。ブラウザの戻るボタンで戻って内容を訂正して下さい。
    郵便番号欄が入力されていません。ブラウザの戻るボタンで戻って内容を訂正して下さい。
    住所欄が入力されていません。ブラウザの戻るボタンで戻って内容を訂正して下さい。
    電話番号欄が入力されていません。ブラウザの戻るボタンで戻って内容を訂正して下さい。
    メールアドレス欄が入力されていません。ブラウザの戻るボタンで戻って内容を訂正して下さい。
    ご注文数量が入力されていません。ブラウザの戻るボタンで戻って内容を訂正して下さい。

    こんなのが表示されるんですけど、どうすればクラックできますか?
    • by Anonymous Coward
      ちゃんと必要事項を記入した上で、お父さんのクレジットカード番号もちゃんと入力して同じ商品をあと200個連続して買えばボーナスステージに入れるぞ。
    • by Anonymous Coward
      そういう難しい事はサポートセンターに聞いてください。
typodupeerror

開いた括弧は必ず閉じる -- あるプログラマー

読み込み中...