パスワードを忘れた? アカウント作成
111844 story
セキュリティ

Apacheに新たな脆弱性発見 39

ストーリー by hylom
Slowlorisはワシントン条約で保護されている小型のサルだそうで 部門より

あるAnonymous Coward 曰く、

Apacheに、DoS攻撃に繋がる脆弱性が新たに見つかったそうだ(本家/.記事より)

この脆弱性は、これを利用したHTTP DoSツール「Slowloris」がリリースされたことから明らかになったとのこと。この攻撃ツールはApacheに不完全なリクエストヘッダーを送り続けるもので、Apacheが最後のヘッダが送られてくるのを待つ間、偽のヘッダを送ることで接続をオープンにし続け、Apacheのプロセスを一杯にさせるものだという。

脆弱性はApache 1.x、 2.x、 dhttpd、 GoAhead WebServer、そしてSquidにて確認されているが、IIS6.0、 IIS7.0、およびlighttpdでは確認されていないとのこと。

SANSでは詳細のレポートが挙がっており、TimeOutディレクティブでタイムアウト値の設定を変えることでこの攻撃を軽減することが可能とのことで、今のところ対策はこれくらいしかないそうだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2009年06月23日 17時13分 (#1592259)

    けっこう強力ですね。
    デフォルトのconfのapache2.2.11にslowlorisでDDoSをかけてみましたが、ものの数秒でプロセスがパンクしました。
    servser-statusをみると

    RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
    ("R" Reading Request)

    で埋め尽くされて、アタックを中断しても

    _______________________________________________________
    ("_" Waiting for Connection)

    と待ちうけ中になってしまうので、apacheを再起動するか、タイムアウトするまで気長に待つかしないと正常な状態に戻らないみたいです。
    KeepAliveTimeout 5 にしてみましたが、ほとんど効果はありませんでした。
    ためしに、mod_evasiveでブロックを試みてみましたが、こちらもまったくスルーされてしまいました。

    • by Tsukitomo (22680) on 2009年06月23日 18時43分 (#1592323) 日記

      > KeepAliveTimeout 5 にしてみましたが、ほとんど効果はありませんでした。

      KeepAliveTimeoutではなくてTimeoutディレクティブなんでは?

      --
      Your 金銭的 potential. Our passion - Micro$oft

      Tsukitomo(月友)
      親コメント
    • by Anonymous Coward on 2009年06月24日 10時54分 (#1592674)

      (適当に試してみただけですが、) Apache 単体は即無応答になりましたが、
      リバースプロキシとして Pound を間に挟むと快適に動作するようでした。
      現在運用中のサイトは Pound 使ってるので、なんとかなる予感。よかったよかった。

      親コメント
    • by Anonymous Coward

      するとapacheでならmod_limitipconとかでIPアドレスごとの接続数を絞るしかない?
      DDoSされたらだめか。

    • by Anonymous Coward
      結構強力、、、、わかりやすくいえば田代砲の強化版
    • by Anonymous Coward

      全くの素人なんですが、プロセスの最大数を制限するってのはダメなんですか?
      MaxSpareServers とかで。

      • by Anonymous Coward
        逆ですよ?遅いクライアントによって同時接続可能数を使い尽くす、ってことです。

        [error] server reached MaxClients setting, consider raising the MaxClients setting

        接続数が多くなってきたらLRUっぽく接続の長いものを切ってしまうようにすべきかな、という気がします。

  • 楯と矛 (スコア:4, おもしろおかしい)

    by Anonymous Coward on 2009年06月23日 22時42分 (#1592475)

    そのDoSツールの配布してるサイトはヘッダ見る限りApacheなのですが、そこにAttackするとどうなるでしょうね?
    もう対策済み?

  • 防御方法は? (スコア:3, 参考になる)

    by fireboat (36349) on 2009年06月23日 20時41分 (#1592403) 日記
    Apacheのメーリングリストで「Mitigating the Slowloris DoS attack」というタイトルでproof-of-conceptなパッチが投稿されているのを見つけました。根本対処ではないみたいですが。パッチはこれ↓

    http://synflood.at/tmp/anti-slowloris.diff

    負荷に応じてタイムアウト時間を自動調整、みたいな感じでしょうか。IISとかはどういう防御しているんですかね?
    • Re:防御方法は? (スコア:3, 参考になる)

      by Anonymous Coward on 2009年06月23日 22時34分 (#1592472)
      IISは、たぶん、防御が必要ないと思う。

      今回の問題は、クライアントごとにプロセスをforkする、というunixの流儀が問題なので、
      Windowsの流儀、すなわち、1プロセスで多数のクライアントの相手をし、I/O完了ポートとワーカースレッドのプーリングのしくみを使ってスレッド数をCPUコア数に沿った数に抑えるという流儀では、
      今回のような悪意あるクライアントによって消費させられるリソースは、問題になりにくいのだと思う。
      親コメント
      • > 今回の問題は、クライアントごとにプロセスをforkする、というunixの流儀が問題なので、

        たぶん、違うと思います。
        Apache MPM って御存じないですか? worker MPM とか、prefork MPM とか。

            http://httpd.apache.org/docs/2.2/ja/mod/worker.html [apache.org]
            http://httpd.apache.org/docs/2.2/ja/mod/repfork.html [apache.org]

        「クライアントごとにプロセスを fork」って、別に UNIX の流儀じゃないし。
        そういったデーモンが多いのは事実ですけどね。

        親コメント
        • by elderwand (34630) on 2009年06月24日 13時41分 (#1592808) 日記

          元々、apache は prefork しかなかったはず。記憶に間違いが無ければ、Apache 2.0 から、MPM を選択できるようになったが、*nix 系では、prefork がデフォルトになる。configure 時に --with-mpm={beos|event|worker|prefork|mpmt_os2} が選べる(実際に自分の OS で使えるかどうかは不明)ので、試しに worker で作って slowloris.pl で遊んでみたが、少なくとも prefork よりは強そうだった。

          ただ、MPMの説明 [apache.org]にもあるように、安定性や古いソフトウェアとの互換性を 必要とするサイトでは prefork でないとまずい場合もあるかもしれない。

          親コメント
        • by Anonymous Coward
          MPMを使ったとしても、接続しているクライアントの数に比例して、プロセスやスレッドの消費が増えることには、変りがないと思う。
          MPMによって許容量は増えるけど、そうやって増えたキャパシティはすでに通常稼働で使ってしまっていると思う。

          自分が新人だった頃、
          1スレッドで可能なのだから、安易にスレッドを作るな、ましてや子プロセスなんてもってのほか
          って叩き込まれました。
          • > MPMを使ったとしても、接続しているクライアントの数に比例して、プロセスやスレッドの消費が増えることには、変りがないと思う。

            そりゃあ当たり前です。

            > MPMによって許容量は増えるけど、そうやって増えたキャパシティはすでに通常稼働で使ってしまっていると思う。

            今回の脆弱性の原因(あるいは要因)って、キャパシティの問題だったんですか?!
            で、IIS はキャパシティが大きいから大丈夫ってこと?

            違うんじゃないの?
            本当の原因を調べてないので実際のところは知らないですが、
            「IIS はクライアントごとに fork しないから大丈夫」ってのは違うんじゃないかと思うのですが。

            親コメント
            • by Anonymous Coward
              > 今回の脆弱性の原因(あるいは要因)って、キャパシティの問題だったんですか?!

              そうです。

              > で、IIS はキャパシティが大きいから大丈夫ってこと?

              違います。

              同時に接続しているクライアントの数が増えても、プロセスやスレッドは増えません。
              ゆえに、プロセス数やスレッド数の上限に達してしまう、というようなことは発生しません。

              もちろん、クライアント数が増えて行けば、ソケットやメモリという別の資源が足りなくなります。
              そういう点では、Apacheよりキャパシティが大きいとは言えますが。
            • by Anonymous Coward
              今回の問題は、クライアントからヘッダが送られてくるのを、スレッドの実行を止めて待つ、というのが原因でしょう。
              クライアントと一対一でスレッドが対話するというのは、クライアントごとにプロセスをforkするスタイルの、プロセスをスレッドに変えたものですね。

              プロセスやスレッドを無制限に作っても問題がなければ、こういうやり方でも構わないでしょうが、
              しかし、現実はそうではないので、設定ファイルに上限値を書くところがあったりするのです。

              一方、IISはどうかというと、クライアントと一対一で対話するスレッドを使うスタイルをとっていないと思います。
              おそらくメッセージ・ドリブンのような方式になっているのでしょう。
              クライアントから何か受信した後にワーカースレッドに渡されるのであれば、ワーカースレッドはクライアントからの受信を待たないので、そこがボトルネックにならないのでしょう。
  • by Anonymous Coward on 2009年06月23日 16時26分 (#1592217)
    Timeoutを減らすには注意が必要です。
    CGI処理に掛かる時間も含まれているので、5秒にしてしまったら、
    検索などの負荷がかかるCGIがエラーで中断されてしまいます。
    • by develop (22404) on 2009年06月23日 17時01分 (#1592244)
      apache1.3系~2.2系のドキュメントすべてに書かれてるのですが・・・

      http://httpd.apache.org/docs/2.2/ja/mod/core.html#timeout [apache.org]

      将来には別々の設定をすることが可能にできるよう考慮中です。
      Apache 1.2 以前はタイマーは 1200 がデフォルトでしたが、 300 に下げられました。
      300 でもほとんどの場合は十分すぎる値です。
      コード中の変な場所にまだパケットを送る際にタイマをリセットしない 場所があるかもしれないので、デフォルトをより小さい値にはしていません。

      親コメント
  • Apache砦の攻防 (スコア:2, おもしろおかしい)

    by Anonymous Coward on 2009年06月23日 21時19分 (#1592426)
    Webサーバのクラック戦争で指揮官として失速したIISは大佐に階級を下げられ、クラッカーとの紛争の絶えなかったFort Apacheの守備隊の司令官に任命された。彼は各種モジュールを伴い赴任する。WireWall大佐は無骨一点ばりの人間で、Fort Apache守備隊に古くからいるNCSA大尉や、Microsoft大尉とも、しばしば意見を衝突させた。大佐はこの地方の脅威Apache Cracker族を平定して武名をあげ、1日も早く将軍に復位することを夢見ていた。だからCrackの情勢に詳しいMicrosoft大尉の計画に反対し、プログラマたちに毎日激しいデスマーチを課すのだった。部隊の古参軍曹の伜であるLinus中尉は若く凛々しかったのだが、少し腹が出ていて近視だったが、いつしかApacheのモジュールと愛し合うようになっていた。FireWall大佐は互いの家柄がちがいすぎると娘に警告を与えるが、Linus夫人の努力により大佐の心も解け、2人の結婚式が賑やかに行なわれた。NCSA大尉はクラッカーたちと講和を提案するが、折からソースコードのライセンス文書がクラッカーに襲撃されたため、大佐は一挙にクラッカーたちの本拠を殲滅するべく出動を命じる。クラッキングの戦法を知る大尉の計画を無視して、大佐は操典どおりのパッチを当てるが、反対に部隊はクラッカーたちの包陣攻撃を受ける。大佐をはじめ古強者は相ついでDoS攻撃と脆弱性攻撃で戦死を遂げ、大尉はいったん後退を命じ、コードの見直しを命ずるほかなかった。大尉はFireWall大佐の勇戦を上司に報告し、再び整備された部隊を率い、大佐の葬い合戦にのぼるのだった。

    ちょっと細かいところがいい加減だが、こんなものか。と。

    ここから:
    ttp://movie.goo.ne.jp/movies/PMVWKPD412/story.html
  • TimeOut ディレクティブ (スコア:1, すばらしい洞察)

    by Anonymous Coward on 2009年06月23日 15時49分 (#1592173)
    初心者サーバ管理者で申し訳ないんですが、具体的には TimeOut をデフォルトの 300 秒よりも多めにしたらいいのでしょうか?それとも少なめにするのがいいのでしょうか?

    教えてエライ人!
    • by pochita (38342) on 2009年06月23日 16時09分 (#1592196) ホームページ

      短くするようですよ。
      SANSの詳細レポートに詳しく書いてあります。

      通常の運用で影響が出たりしないのか等、
      きっちりテストして慎重に設定しろと書いてありました。
      参考値として5秒と言うのが提示されてましたが・・・

      とりあえず、本運用前に自分で最適だと思う値を試せってことなんでしょうね。

      #何ら根本的な解決にならないあたりが何ともいえない。

      --
      おぱんつ!!
      親コメント
    • by Anonymous Coward on 2009年06月23日 15時58分 (#1592185)

      リンク先斜め読みした感じでは、300秒を5秒にしているようです。

      #まぁパッチ待ちかな…

      親コメント
    • by anjinho (29436) on 2009年06月23日 16時12分 (#1592199)
      たぶん,ApacheがTimeOutまでコネクションをキープするのを利用して,コネクション数を食いつぶす類のDoSでしょう.
      なので,コネクション数を食いつぶされる前にtimeOutになるよう,短めにすれば?ってことだと思う.
      リンク先では5秒に設定しているみたいだけど,それだと2MB/分のトラフィックが必要になるとのことです.
      親コメント
    • by Anonymous Coward

      > 偽のヘッダを送ることで接続をオープンにし続け、Apacheのプロセスを一杯にさせるものだという。
      からタイムアウトを大きくすればいいのか小さくすればいいのか論理的に導けないなら今すぐ管理者止めたほうがいいよ、マジな話。

      • by Anonymous Coward

        >論理的に導けないなら

        「接続をし続け」から持続性が想像できれば、「TimeOut」って英語の意味から直感でも推測可能だね。
        本当にそんな事が解らなかったのだろうか、そんな答えが欲しかったのだろうか。

        おそらく、「(今の設定値は3000なんですがこれより)高くしたらいいのか低くしたら良いのか」
        という風に聞いていたら、本来欲しかった答えが得られたかもしれない。

        あるいは、「(今の設定値は3000なんですが)環境による最適値ってどう出せば良いでしょうか」
        という方向なら、もうちょっと幅の広い答えが期待できるかもしれない。

        デカルト曰く「最も重要なのは、正しい答えを見つけることではなく正しい質問を見つけることである」

        • by Anonymous Coward

          >風に聞いていたら、本来欲しかった答えが得られたかもしれない。

          同じだよぉ

          不完全なヘッダーで処理を待たせておいて不正な情報を送りつけてパンクさせるって部分で
          早めに破棄するようにしないと駄目だと、読んだ流れで普通に理解するだろ

          素人ならまだしも、嘘でも管理してんだろ
          解らにゃあかんって(苦笑)

          新人プログラマのような事を言う奴に
          サーバーの管理なんてして欲しくないね迷惑だよ

    • Re: (スコア:0, フレームのもと)

      by Anonymous Coward

      遅い回線を仕方なく使っている人もいます。
      3600秒くらいにしておくのが礼儀でしょう。

    • by Anonymous Coward
      この手の荒っぽい明確な攻撃は誰彼構わずぶっ放す訳ではないので、問題が出るまで放置でOK。
  • by Anonymous Coward on 2009年06月24日 17時12分 (#1592980)

    サルの仲間なんですね。リスかと思ってました。

    • by Anonymous Coward
      スローロリスがサルの仲間だと見ただけでわからないのなら即刻管理者を辞めるべき!
typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...