SyntaxHighlighter

2011年9月18日日曜日

脆弱性を検証してみよう - Apache Killer(CVE-2011-3192)その2

前回のエントリで脆弱性を検証しました。今回は対策が有効であることを検証します。

2.2系に関しては対策版が正式にリリースされているので、まずはそちらから試します。 CentOS5.4 + Apache2.2.3 の環境を Apache 2.2.21 にアップグレードして検証しました。

# ./bin/httpd -v
Server version: Apache/2.2.21 (Unix)
Server built:   Sep 18 2011 10:12:52

検証方法は前回のエントリを参照してください。
vmstat 1 の結果です。

idle が 97 になっているところが攻撃された瞬間です。 前回と全く同じ攻撃条件でしたが一瞬で処理が終わりました。 サーバ側には何の影響もありません。対策がきちんと行われていることが確認できました。

具体的にどのようなレスポンスが返されているのか見てみましょう。

206 ではなく 200 が返ってきています。ちなみに正常なレンジ(例えば Range: bytes=0-100)のリクエストであれば 206 を返してきます。

次は、Solaris10 + Apache 2.0.64 の環境を使って、回避策を試してみます。

http://httpd.apache.org/security/CVE-2011-3192.txt

私の環境では mod_rewrite は組み込まれていますが mod_header は無いので(勿論リコンパイルすればいいのですが面倒くさいので・・・)、Mitigation の 1) の Option 2 をベースに、Request-Range ヘッダも Range ヘッダと同様に処理することにします。
以下の記述を httpd.conf に追記して Apache を restart 。

RewriteEngine on
RewriteCond %{HTTP:range} !(^bytes=[^,]+(,[^,]+){0,4}$|^$) [NC]
RewriteRule .* - [F]
RewriteCond %{HTTP:request-range} !(^bytes=[^,]+(,[^,]+){0,4}$|^$) [NC]
RewriteRule .* - [F]

攻撃してみます。
以下は vmstat 1 の結果です。

idle が 90 になっているところが攻撃した瞬間です。 こちらもすぐに処理が完了してサーバに影響はありません。 回避策も有効であることが確認できました。ちなみにこちらのレスポンスは mod_rewrite のルール通り 403 になります。

0 件のコメント:

コメントを投稿