ModSecurityの基本アクションを読み解く

7月 1, 2010

前回のオペレータに引き続き、今度はModSecurityのアクションも読み解いてみようと思う。
前回同様、オフィシャルハンドブックとリファレンスマニュアルからの引用である。
↓ ↓ ↓
ModSecurity® Reference Manual
※現時点での最新版である。

現時点では正直意味不明な点がかなりあるが、いつか「あ、こういうことか」となる時が
くることを期待しつつ。。

ModSecurityのアクションは、以下のようにいくつかのパターンに分類される。
それぞれのアクションの概念も理解しておきたいところ。

Disruptive actions
Flow actions
Metadata actions
Variable actions
Special actions
Miscellaneous Actions

Disruptive Actions
第一の基本となるアクションで、allow,pass等の例外はあるが、基本はパターンに
マッチした場合に何らかのブロックを行うアクション、となる。
ちなみに単語”disruptive”自体は「破壊的な」という意味だが、ここではどう
訳していいかわからない。。以下リファレンスマニュアルより抜粋。

Disruptive Actions
Cause ModSecurity to do something. In many cases something means block transaction, but not in all. For example, the allow action is classified as a disruptive action, but it does the opposite of blocking. There can only be one disruptive action per rule (if there are multiple disruptive actions present, or inherited, only the last one will take effect), or rule chain (in a chain, a disruptive action can only appear in the first rule).


allow パターンにマッチしたらルール処理をストップし、トランザクションの処理を許可する
block ブロックを指示
deny ルールの処理をストップし、トランザクションをブロックする
drop ネットワークコネクションを閉じる
pass パターンにマッチした場合でもブロックせず、次のルールへ進む
proxy リクエストをバックエンドのWebサーバへプロキシする
redirect リクエストを他のWebサーバへリダイレクトする


“block”はリファレンスマニュアルにゴチャゴチャ書いてあるが、よくわからん。
今度暇があったらちゃんと読んで追記する。

Flow Actions
Flow Actionsは、ひとつのフェーズにおいてルールの処理方法を変更する。

chain ひとつの論理ルールにおいて、2つもしくはそれ以上のルールをつなげる。
skip ひとつもしくはそれ以上のルールをスキップする。
skipAfter 提供されたIDとともにルールもしくはマーカーを
スキップする。


Metadata Actions
ルールに関する追加情報を付与する。ログに記録されるので、問題が発見しやすくなる。

id ルールにユニークなIDを与える。
phase フェーズを定義する。
msg メッセージ文学列を与える。
rev リビジョンナンバー。
severity 深刻度を定義。
tag タグを付与。audit_logのHパートに記録される


“phase”は5段階あるのだが、それぞれの定義がよくわからない。
どこかに書いてあるのかもしれないが、見つからない〜・・・
→リファレンスマニュアルの”Processing Phases”の章に説明がありました。

適切にフェーズを指定しないと悪意のあるデータを見逃してしまうため注意、とのこと。
詳しくはリファレンスマニュアルで。

Variable Actions
Variable Actionsは変数のセット、変更、削除等を指示する。

capture 結果をひとつまたはそれ以上の変数に捕獲する
deprecatevar 時間とともに数値変数を減少させる
expirevar 期間を過ぎたら変数を削除する
initcol persistent collectionを初期化または新たに作成する
setenv 環境変数をセットまたは削除する
setvar 変数の値をセット、削除、インクリメント、デクリメントする
setuid 現在のトランザクションをユーザID(username)と関連付ける
setsid 現在のトランザクションをセッションIDと関連付ける

“initcol”の内容や”persistent collection”は正直何のことか分からないが、
以下を読むと何となく意味は分かるような、、、分からないような。

Initialises a named persistent collection, either by loading data from storage or by creating a new collection in memory.


以下の例はIPアドレスのトラッキングを初期化する

SecAction phase:1,initcol:ip=%{REMOTE_ADDR},nolog


多分誤訳だらけ(汗)。残りは次回に。

Categories: ModSecurity

No Responses so far | Have Your Say!

Comments are closed.