ApacheKiller のアドバイザイリをちゃんと解釈してみる。

ApacheKiller 対策をしていて、公式のセキュリティアドバイザリをそのまま貼付けるのもコピペプログラマみたいで芸がないので、ちゃんと解釈してみる。

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

リクエストの属性に基づいて環境変数を設定する

HTTPリクエストヘッダフィールド(Range) が正規表現にマッチした場合に環境変数 bad-range=1 をセット。
http://httpd.apache.org/docs/2.0/ja/mod/mod_setenvif.html#setenvif

正規表現
『(?: ... )』 拡張正規表現 後方参照しない
『,.*?』の5回(以上)の繰り返しにマッチ

RequestHeader unset Range env=bad-range

RequestHeader リクエストヘッダディレクティブ
bad-range 環境変数がセットされている時に、RequestHeader から Range 属性を削除

http://httpd.apache.org/docs/2.2/ja/mod/mod_headers.html#requestheader

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

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

環境変数 bad-range、bad-req-range が指定されている時に、カスタムログ出力
ファイル指定(ServerRootからの相対パス)、ログのフォーマットは common(通常)
http://httpd.apache.org/docs/current/ja/mod/mod_log_config.html#customlog



まとめ。

  • 「1. 攻撃っぽかったら 2. ヘッダーだけ捨てて 3. ログを取る」の流れ。
  • 拡張正規表現とか、急に出てくると思い出せない。
  • 「{5,5}」が地味に冗長
  • ログの出力先を変更しているサーバーは、ちゃんと設定しよう。
  • 最後の「env=bad-req-range」って不要なんじゃ ...
  • アドバイザリにも書いてあるけれど、 Apache2.2 以上の設定です。