自分用 Apache の脆弱性(CVE-2011-3192) Q&A集(8/30現在)

自分用 Apache の脆弱性(CVE-2011-3192) Q&A集(8/30現在) はてなブックマーク - 自分用 Apache の脆弱性(CVE-2011-3192) Q&A集(8/30現在)


自分用ですが、ちょっとメモがてら情報整理。
とあるPoC (proof of concept)で検証してみました。
違っている所とかありましたら、ご指摘ください。

Q1. 脆弱性の情報はどこにあるの?

Apache HTTPD Security ADVISORY UPDATE 2 (8/26公開)
http://mail-archives.apache.org/mod_mbox/httpd-announce/201108.mbox/browser

Q2. どんな脆弱性なの?

Apache のデフォルト設定のままで、Dos(サービス拒否)攻撃を受ける場合がある。
極端なメモリ量の使用や、CPU 使用率上昇が発生。

今の所、サーバへのリモートアクセス(不正侵入)を許すような報告はされていないが、
サービス継続性に対する脅威が存在している。

Q3. 脆弱性によって、どんな影響があるの?

公開されている攻撃用ツールを用いることで、
特定条件下においてサーバを停止状態に陥らせることが出来る。

具体的には Apache の httpd の CPU 率上昇(iowait)や、
メモリ使用量の上昇により、スワップメモリが発生し、oom-killer も発生する。
Load Average は上昇しつづけ、最終的にサーバが応答しなくなる。

/var/log/messages の状態
Aug 30 11:33:03 node3 kernel: automount invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0
Aug 30 11:33:12 node3 kernel:
Aug 30 11:33:35 node3 kernel: Call Trace:
Aug 30 11:35:38 node3 kernel:  [<ffffffff800c3a49>] out_of_memory+0x8e/0x2f3
(略)
Aug 30 11:36:06 node3 kernel:  [<ffffffff8005dde9>] error_exit+0x0/0x84

Q4. どのバージョンの Apache が対象なの?

Apache 1.3.x 系、Apache 2.x 系すべての Apache が影響を受ける。

Q5. パッチとか提供されてるの?

Apache 開発サイドでは、現在提供されていない。議論・調整中の模様。

Q6. ディストリビューション毎の対応情報は?

[SECURITY] [DSA 2298-1] apache2 security update
http://lists.debian.org/debian-security-announce/2011/msg00172.html

access.redhat.com | CVE-2011-3192
https://www.redhat.com/security/data/cve/CVE-2011-3192.html

Q7. どんな対策をしたらいいの?

パッチや修正版の Apache が公開されるまでは、
Apache の httpd.conf に記述を追記して設定を反映する。
または、.htaccess が使える環境であれば、記述を追記する必要がある。

対策法は Q1 の URL に記載。

– Apache 2.2 系以上

SetEnvIf Range (?:,.*?){5,5} bad-range=1
RequestHeader unset Range env=bad-range
RequestHeader unset Request-Range
# ログ保存用
# CustomLog logs/range-CVE-2011-3192.log common env=bad-range
# CustomLog logs/range-CVE-2011-3192.log common env=bad-req-range
(Rangeを許容しつつ制限する手法1)

または、

LimitRequestFieldSize 200
(Rangeを許容しつつ制限する手法2)

または、

RequestHeader unset Range
RequestHeader unset Request-Range
(Rangeを許容しない)

– Apache 2.0 系

RewriteEngine on
RewriteCond %{HTTP:range} !(bytes=[^,]+(,[^,]+){0,4}$|^$)
RewriteRule .* – [F]
RequestHeader unset Request-Range
(Rangeを許容しつつ制限する)

または

RequestHeader unset Range
RequestHeader unset Request-Range
(Rangeを許容しない)

– Apache 1.3.x 系

RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(range|request-range)
RewriteRule .* – [F]
(Rangeを許容しない)

※ Q1 の URL に記載されている mod_rewrite のレシピでは、
攻撃を回避できない。

Q8. 公開されている攻撃ツールって、危険なの?

そのままでも、サイトによっては影響を受ける場合がある。ない場合もある。
ただし、そのツールを悪意を持って改造することにより、汎用的な攻撃ツールになり得る。
しかし、Q6 の対策を施しておけば、脅威ではない。

Q9. 攻撃ツールが「脆弱性は無い」と表示されていば安全なの?

安全ではない。攻撃ツールは特定条件を判別しているだけであり、
Apache の脆弱性判定は行っていないため。
将来的に、新しい攻撃手法なりツールが公開される恐れもあり、安全ではない。

Q10. 対策は取るべき?

サーバが停止状態に陥る可能性が高いため、
出来るだけ早急に対応を行うのが望ましいと思われる。

その他、小枝

– <VirtualHost> ディレクティブが複数ある場合は、
ディレクティブ外に RequestHeader や mod_rewrite のレシピを書けば OK。
mod_ssl の場合も同様。

– コード実行時の vmstat

$ vmstat 10
procs ———–memory———- —swap– —–io—- –system– —–cpu——
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
11  0  70908 369028   5532 241004    0    0     0    18 13101   60 99  1  0  0  0
18  0  70908 172536   5568 241008    0    0     0    30 7053   68 99  1  0  0  0
0 15 284080   9284   1188   7992 1424 22164  2082 22270 1341  383 24  8  0 68  0
0 12 547152   9892   1192   6200 1567 26307  1824 26310 1193  334  1  4  0 95  0
0 12 751064   8096    300   6600 1785 20744  2007 20750 1272  397  1  4  0 95  0
0  4 909132  10472    308   6380 8007 15814  8023 15820 1549 1410  4  4  6 85  0

top で見ていると、まず CPU(user)が跳ね上がる

Cpu(s):100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

物理メモリを使い切った瞬間、処理は io wait に移る

Cpu(s):  0.2%us,  0.7%sy,  0.0%ni,  0.0%id, 98.2%wa,  0.2%hi,  0.8%si,  0.0%st

約2分でサーバは応答不能状態に。。。(;´Д`)