目次

  1. 1.はじめに
  2. 2.Text Transformation とは
  3. 3.AWS WAF の Text Transformation 機能一覧
  4. 4.使い道
  5. 5.WafCharm と合わせた活用
  6. 6.おわりに

1. はじめに

2021年6月25日 PDT にて、AWS WAF の Text Transformation の変換パターンが大幅に増えました。
そもそも AWS WAF の Text Transformation とはどんな機能なのか、どのような使い道があるのか、
というところを合わせてご紹介しようと思います。

2. Text Transformation とは

Text Transformation とは WAF が文字列を検査する前に前処理を行う機能です。
例えばLinuxではディレクトリパスの区切り文字が”/”なのに対して、
Windows では “\”であるといった環境による差分や、
Base64 でエンコードされた入力とそうでない入力、といった入力のパターンに対して
同一のシグネチャで検査したいという状況において表現を統一的に扱えます。
表現が統一されれば、検査シグネチャも表現に合わせて複数用意する必要がなくなります。

auto

3. AWS WAF の Text Transformation 機能一覧

https://docs.aws.amazon.com/waf/latest/APIReference/API_TextTransformation.html

合計21種類の変換ルールから最大10個(2021/06/29 JPT 時点)まで同時に適用することができます。ただし、記載した変換処理が順番に全て行われるため、デコード処理によっては or 条件等でコンディションを分ける必要があります。

Type New? 説明
BASE64_DECODE New base64 をデコード
BASE64_DECODE_EXT New 無効な文字を無視するなど寛容な base64 をデコード
CMD_LINE コマンドラインに利用される入力パターンを正規化
COMPRESS_WHITE_SPACE 空白文字を正規化
CSS_DECODE New CSS 2.x の escape rule でエンコードされた文字列をデコード
ESCAPE_SEQ_DECODE New ANCI C の escape シーケンスをデコード
HEX_DECODE New 16進数表現をバイナリ表現に正規化
HTML_ENTITY_DECODE html 文字実体参照をデコード
JS_DECODE New Javascript の escape シーケンスをデコード
LOWERCASE 大文字を小文字に変換
MD5 New md5 でハッシュ化
NONE 何もしない。Text Transformation を利用しない際に利用する。
NORMALIZE_PATH New “//” や “../”といった特殊なディレクトリ表現を正規化
NORMALIZE_PATH_WIN New Windows のバックスラッシュ表現をスラッシュに変換したのちに NORMALIZE_PATH と同等の変換
REMOVE_NULLS New NULL を削除
REPLACE_COMMENTS New C 言語の “/* ... */” というコメントをスペースに置き換える。
REPLACE_NULLS New NULL を空白に置換
SQL_HEX_DECODE New SQL の 16進数表現をデコード
URL_DECODE URIエンコードされた表現をデコード
URL_DECODE_UNI New URL_DECODE と似た動きだが、マイクロソフトの %u エンコードをサポート
UTF8_TO_UNICODE New UTF-8 を Unicode に変換

4. 使い道

元々用意されていた URI_DECODE と LOWERCASE は非常に汎用的に利用することができます。シンプルなシグネチャの作成においても、URI エンコードや、大文字小文字を考慮する機会は多いでしょう。
今回新たに追加された中で言うと、NORMALIZE_PATH も利用できる機会はそれなりに多いのではないかと考えられます。
他は商用のルールで誤検知してしまう特殊な API を、ご自身で補完したいというパワーユーザー向けな印象を持ちます。
WAF のスペシャリストでない限りは特定の入力のみ通過させるような、ホワイトリスト運用専用ルールで活用できる場面があるかもしれません。

5. WafCharm と合わせた活用

WafCharm ユーザー様の方で、Text Transformation を併用することで WafCharm がより便利になるといったことは想定されません。
今後 WafCharm のルールが Text Transformation を利用して最適化されたり、
WafCharm サポートによるルールカスタマイズに利用される可能性はあります。

6. おわりに

今回追加された Text Transformation のパターンはオープンソースの WAF である ModSecurity (https://github.com/SpiderLabs/ModSecurity) に備わっている、高度な Text Transformation 機能から輸入されたようです。高度だから便利ということはなく、使う側のリテラシーが求められるので簡単に利用できるものではない印象です。
WafCharm のユーザー様であれば特に気にせず、
今まで通りシグネチャのカスタマイズや運用をお任せしていただければと思います。