自分用ですが、ちょっとメモがてら情報整理。
とある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分でサーバは応答不能状態に。。。(;´Д`)