ModSecurityのProcessing Phasesを紐解く

7月 4, 2010

ModSecurityの実行プロセスにおいて、phaseという概念がある。
Apacheのプロセスとも連動しているわけだが、ルールをどのphaseに適用させるかを
指定することができる。このphaseについてまとめてみたい。
リファレンスマニュアルから引用。なお現時点での最新版。)

phaseは以下のように指定する。

SecRule REQUEST_HEADERS:Host “!^$” “deny,phase:1″


ModSecurityではルールを以下の5つのフェーズにセットすることができる。

1.Request headers (REQUEST_HEADERS)

2.Request body (REQUEST_BODY)

3.Response headers (RESPONSE_HEADERS)

4.Response body (RESPONSE_BODY)

5.Logging (LOGGING)


順番に見ていってみよう。

Phase Request Headers
Apacheがリクエストヘッダーを読み取った後、ただちに処理されるフェーズとなる。
このポイントにおいては、リクエストボディはまだ読み込まれていない。
早い段階、つまりApacheがリクエストに対して処理を実行する前にルールを適用したい
場合、このフェーズを指定する。
リクエストボディをバッファリングするかどうか決定したり、リクエストボディがどのように
処理されるかを決める(XMLとして解析するのかそう出ないのか、等)

なお、このフェーズはApacheのスコープディレクティブ(Directory, Location, LocationMatch等)
には適用できない。
ModSecurityのルールをApacheのロケーションにて実行させたい場合、phase2を指定する。

Phase Request Body
汎用的な入力解析フェーズとなる。ほとんどのアプリケーション志向のルールはここに置かれる。
ここではリクエストの引数を受け取ることが保証される。
ModSecurityは以下3つのエンコーディングタイプをサポートしている。

* application/x-www-form-urlencoded フォームデータの転送に使用される
* multipart/form-data ファイル転送に使用される
* text/xml XMLデータを渡す


Phase Response Headers
このフェーズはクライアントにレスポンスヘッダーを返す直前に実行される。
404など一部のレスポンスステータスコードはApacheのプロセスサイクルにより
これより早い段階で処理されるため、予想通りに動かない可能性がある。
(すいません、この辺ちょっと怪しいです)

Phase Response Body
汎用的なアウトプット解析フェーズとなる。このポイントではレスポンスボディに
対してルールを適用することができる。エラーメッセージや失敗した認証の情報など、
HTMLアウトバウンドに関して検査したい場合に利用するフェーズとなる。

Phase Logging
ログが記録される直前に実行されるフェーズで、ロギングの処理に関してのみ影響がある。
このフェーズにおいてコネクションのブロックや拒否はできない。

・・・他にもいろいろ書いてあるのだが、これ以上怪しい訳を並べても仕方がないの
でやめておく。分かったことがあれば都度追記、ということで。

Posted by Le Blue | Categories: ModSecurity |

No Responses so far | Have Your Say!

Comments are closed.