ModSecurityのTransformation functionsを読み解く
ModSecurityにおけるTransformation functionsは重要な概念らしいので、まとめておく。
例のごとくオフィシャルハンドブックとリファレンスマニュアルを参考にしている。
Transformation functionsはマッチングを行う前に対象のパラメータに対して変更を加えるが、
元のデータは決して変更されない。ModSecurityがリクエスト/レスポンスを受け取るとメモリ
にそのデータがコピーされ、Transformation functionsはそのメモリ上において実行されるのである。
以下の例はマッチングの前にリクエストのパラメータを小文字に変換させる(lowercase)指示となる。
SecRule ARGS “xp_cmdshell” “t:lowercase”
ひとつのルールに複数のTransformation functionsを使用することが可能。
ハンドブックでは、SecDefaultActionにTransformation functionsをリストにして
使用することは推奨していない。Transformation functionsは特定のルールにおいて
使用することが望ましく、またリストは常に”t:none”から始めるべきらしい。
(カレントルールのTransformation functionsからの引継ぎをさせないようにする)
Transformation functionsには以下がある。
ほとんど直訳(誤訳もあり・・・)だが一応説明を書いておく。
base64Decode Base64-encoded ストリングをデコードする。
base64Encode 入力データをBase64-encodedでエンコードする。
compressWhitespace 空白キャラクタを圧縮する。
cssDecode CSS 2.x エスケープルールでエンコーディングされたキャラクタをデコードする。
escapeSeqDecode ANSI C エスケープシーケンスをデコードする。
hexEncode (おそらくバイナリキャラクタが含まれる)文字列を16進数キャラクタにエンコードする。
hexDecode hexEncodeと同じアルゴリズムでエンコードされた文字列をデコードする。
htmlEntityDecode HTMLエンティティでエンコードされたキャラクタをデコードする。
jsDecode JavaScriptエスケープシーケンスをデコードする。
length 入力文学列の数値を返す。例えば文字列ABCDEに対しては5を返す。
lowercase Cロケールを使用してキャラクタを小文字に変換する。
md5 入力データからMD5ハッシュを計算する。
none カレントルールのTransformation functionsをクリアする。
normalisePath 入力文字列からスラッシュを削除する。
normalisePathWin normalisePathと同様だが、最初にバックスラッシュキャラクタをフォワードスラッシュ(通常のスラッシュ)に変換する。
removeNulls 入力データから全てのヌルバイトを削除する。
removeWhitespace 入力データの全ての空白キャラクタを削除する。
replaceComments Cスタイルコメント(/*…. */)をスペース(ASCII 0X20)に置換する。
replaceNulls ヌルバイトをスペース(ASCII 0X20)に置換する。
urlDecode URLエンコードされた文字列をデコードする。
urlDecodeUni urlDecodeと似ているが、Microsoft-specific %uエンコーディングをサポートする。
urlEncode URLエンコーディングにより入力データをエンコードする。
sha1 入力データからSHA1ハッシュを計算する。
trimLeft 入力文字列から左側の空白を削除する。
trimRight 入力文字列から右側の空白を削除する。
trim 入力文字列から左右両方の空白を削除する。
上記の他に、parityEven7bit、parityOdd7bit、parityZero7bitなんてのもあるのだが、
どう訳していいのか「?」だし当面使うこともなさそうなのでスキップ(汗)
あぁ、ドイツ対アルゼンチン戦も観ないでよく書いたよ・・・