ほぼ全てのApacheに重大な脆弱性が・・・!

ネット上で公開されているサーバーの大半で利用されているのがApache HTTP Server。

そのApacheに、重大な脆弱性が発見されたことから、少し前からネット上で騒ぎになっていますよね。

rangeヘッダーの処理の脆弱性をついたDoS攻撃を受けることで、CPU、メモリ等のシステムリソースが食い尽くされてしまい、サービス不能になる可能性があるとか。

現在、そのDoS攻撃を行うApache Killerというスクリプトが出回っていて、攻撃されると数分前後でサービス不能になるので、世界中で被害が拡大しているそうです。

未だに未対応のサーバーも結構あるようですし、自分用メモの為にも対応策を以下に掲載しておきます。

【根本的な対応方法】

最新版のApache2.2.20以上にアップグレードしてください。


Apacheのアップグレードが無理な場合は以下の対応方法もあります。


【対応策その1.Apache2.2系】
httpd.confに下記を追加。

# CVE-2011-3192
SetEnvIf Range (?:,.*?){5,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.
CustomLog logs/range-CVE-2011-3192.log common env=bad-range
CustomLog logs/range-CVE-2011-3192.log common env=bad-req-range



【対応策その1.Apache1.3系、2.0系】
httpd.confに下記を追加。


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


【対応策その2.リクエストフィールドの最大サイズを制限】
httpd.confに下記を追加。200は任意の数値に変更できます。

LimitRequestFieldSize 200


【対応策その3.mod_headersでRangeヘッダーを無効化】
httpd.confに下記を追加。

LoadModule headers_module /opt/WebOTX/WebServer22/modules/mod_headers.so
RequestHeader unset Range

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



以上です。

一番の対応策は、Apacheを2.2.20以上にアップグレードすることですね。
それが無理なら、通常は対応策その1を適用します。
対応策その2と、対応策その3は強力な有効策ですが、コンテンツによってはサービスが利用できなくなります。