20110829 Apache HTTPD サーバにサービス運用妨害 (DoS) の脆弱性

スポンサーリンク

 

Apacheに脆弱性が見つかった。

対象バージョンは2.xのApacheだ。1.3は対象となっていない。

Webアクセス時に接続元からサーバーに送られるリクエストヘッダーの中に、「Rangeヘッダー」というものがあるが、
このヘッダーを不正に指定しアクセスを行うと、アクセスされたWebサーバーはメモリ使用量とCPU使用率が上昇し、
最終的にサービス不安定Webサーバダウンをもたらす。

以下URLより対象のDoSを行えるスクリプトにたどり着くことができるが、決して悪用ではなく対策を考えるために参考にしてもらえたらと思う。

Full Disclosure: Apache Killer

ちなみに契約しているServersMan@VPSにIPアドレスを指定してアクセスを試みたが、見事にアクセスはできなかった。サーバープロバイダ側での対応だろか。詳細はわからない。しかし、localhost指定でサーバー内で実行したら見事にLAが急上昇した。

現時点でApacheから正式に公開されているパッチは無く、攻撃を緩和する方法が紹介されている。
こんな時にCloudFlare使っててよかったと思う。

以下、

Apacheが現時点で公開している緩和方法

参考:http://mail-archives.apache.org/mod_mbox/httpd-announce/201108.mbox/raw/%3C20110826103531.998348F82@minotaur.apache.org%3E/

方法1:SetEnvIf または mod_rewriteモジュールを用いてRangeヘッダの数をカウントし、Rangeヘッダーを無視するかまたはアクセス自体を拒否(Forbidden)する

その1:Aapche2.x向け設定 – SetEnvIfで判断

# Drop the Range header when more than 5 ranges.
# CVE-2011-3192
SetEnvIf Range (,.*?){5,} bad-range=1
RequestHeader unset Range env=bad-range

# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
RequestHeader unset Request-Range

# optional logging.
# 実際に条件に合致したものをログると後で楽しいかも。あ、アタックあった♪ってw
CustomLog logs/range.log common env=bad-range

mod_cacheモジュールを使用している場合は、上記の方法では対応できません。
理由は、ヘッダをunsetする前にキャッシュしに走る空です。

その2:Apache1.3/2.x向け設定 – mod_rewriteでForbidden

# Reject request when more than 5 ranges in the Range: header.
# CVE-2011-3192
#
RewriteEngine on
RewriteCond %{HTTP:range} !(^bytes=[^,]+(,[^,]+){0,4}$|^$)
RewriteRule .* - [F]

# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
RequestHeader unset Request-Range

 

上記に関して、それぞれ「5つ」という条件。その数を増やしたい場合、例えば動画ストリーミングやPDFファイルの公開などをしている場合、10や20に設定しても問題ないと思う。数を変更する場合は、上記赤字の数字を「その1」の場合はその数だけ、「その2」の場合は「その数 – 1」にしてください。

方法2: リクエストヘッダーのサイズ(バイト数)を制限する

LimitRequestFieldSize 200

この方法も有効ではありますが、必要としているヘッダーが200バイトを超えてしまうと正しいアクセスも制限がされてしまいますので、おすすめはできません。

方法3: リクエストヘッダー内で「Range」の使用を無効にする

RequestHeader unset Range

ご自身の環境が100%Rangeヘッダーを必要としない場合は、このように無効にすることをおすすめします。

 

上記以外にも、Apacheのソースを変更し再構築することでRangeヘッダーが10を超える場合は拒否などの処理が行えるようになるようだが、個人的にはApacheが示す対策を行い、Apacheからのパッチ配布またはバージョンアップを期待する。

なお、私はApacheが対策を公開するまでは方法1の「その1」の設定で様子を見ます。CentOSなので、ApacheがIncludeする/etc/httpd/conf.d/CVE-2011-3192.conf とでもして保存しApacheを再起動したいと思います。

以上

不明点あればコンタクトme

コメント

  1. trippyboy より:

    0831に2.2.20が出ました。
    今度下記ます!

タイトルとURLをコピーしました