テキスト変換 - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

テキスト変換

パターンを探すステートメント、または制約を設定するステートメントで、リクエストを検査する前に AWS WAF が適用する変換を指定できます。変換では、AWS WAF をバイパスするために攻撃者が使用する異常なフォーマットの一部を削除するために、ウェブリクエストが再フォーマットされます。

これを JSON 本文リクエストコンポーネントの選択で使用する場合、AWS WAF は JSON から検査する要素を解析および抽出した後、変換を適用します。詳細については、前のセクションの「JSON 本文」を参照してください。

複数の変換が指定された場合、AWS WAF は変換の適用順序も設定します。

WCU - テキスト変換ごとには 10 個の WCU。

AWS WAF コンソールと API のドキュメントには、次の場所でのこれらの設定に関するガイダンスも記載されています。

  • コンソールのルールビルダー - [Text transformation] (テキスト変換)。このオプションは、リクエストコンポーネントの使用時に選択できます。

  • API ステートメントのコンテンツTextTransformations

テキスト変換のオプション

Base64 デコード

AWS WAF は、Base64 でエンコードされた文字列をデコードします。

Base64 デコードテキスト

AWS WAF は Base64 でエンコードされた文字列をデコードしますが、無効な文字を無視する寛容な実装を使用します。

コマンドライン

このオプションは、攻撃者がオペレーティングシステムのコマンドラインコマンドを挿入し、異常なフォーマットを使用して、コマンドの一部またはすべてを偽装する状況を緩和します。

このオプションを使用して、次の変換を実行します。

  • 次の文字を削除します: \ " ' ^

  • 次の文字の前にあるスペースを削除します: / (

  • 次の文字をスペースに置き換えます: , ;

  • 複数のスペースを 1 つのスペースに置き換えます。

  • 大文字 A-Z を小文字 a-z に変換します。

空白を圧縮する

AWS WAF は、複数のスペースを 1 つのスペースに置き換え、次の文字を空白文字 (10 進数の 32) に置き換えます。

  • \f、フォームフィード、10 進数の 12

  • \t、タブ、10 進数の 9

  • \n、改行、10 進数の 10

  • \r、キャリッジリターン、10 進数の 13

  • \v、垂直タブ、10 進数の 11

  • 改行なしスペース、10 進数 160

CSS デコード

AWS WAF は、CSS 2.x エスケープルール syndata.html#characters を使用してエンコードされた文字をデコードします。この関数は、デコード処理で最大 2 バイトを使用するため、通常はエンコードされない CSS エンコーディングを使用してエンコードされた ASCII 文字を発見するのに役立ちます。また、バックスラッシュと 16 進数以外の文字の組み合わせである回避対策にも役立ちます。例えば、javascript の場合は ja\vascript とします。

エスケープシーケンスデコード

AWS WAF は、次の ANSI C エスケープシーケンスをデコードします: \a, \b, \f, \n, \r, \t, \v, \\, \?, \', \", \xHH (hexadecimal), \0OOO (octal)。有効でないエンコーディングは出力に残ります。

16 進数のデコード

AWS WAF は、16 進数の文字列をバイナリにデコードします。

HTML エンティティのデコード

AWS WAF は、HTML エンコードされた文字をエンコードされていない文字に置き換えます。

  • "" に置き換えます。

  •   を改行なしスペース、10 進数 160 に置き換えます

  • &lt;< に置き換えます。

  • &gt;> に置き換えます。

  • 16 進数形式の文字 (&#xhhhh;) を対応する文字に置き換えます。

  • 10 進数形式の文字 (&#nnnn;) を対応する文字に置き換えます。

JS デコード

AWS WAF は、JavaScript のエスケープシーケンスをデコードします。\uHHHH コードが FF01-FF5E の全角 ASCII コード範囲内にある場合、高位バイトを使用して下位バイトが検出され、調整されます。そうでない場合は、下位バイトのみが使用され、上位バイトはゼロになり、情報が失われる可能性があります。

小文字

AWS WAF は、大文字 (A〜Z) を小文字 (a〜z) に変換します。

MD5

AWS WAF は、入力内のデータから MD5 ハッシュを計算します。計算されたハッシュは生のバイナリ形式です。

[None] (なし)

AWS WAF は、テキスト変換なしで、受信したとおりにウェブリクエストを検査します。

正規化パス

AWS WAF は、入力文字列から、入力の先頭にない複数のスラッシュ、ディレクトリ自己参照、およびディレクトリバックリファレンスを削除します。

正規化パス win

AWS WAF はこれを NORMALIZE_PATH のように処理しますが、最初にバックスラッシュ文字をフォワードスラッシュに変換します。

null を削除する

AWS WAF は入力からすべての NULL バイトを削除します。

コメントを置換する

AWS WAF は、C スタイルのコメント (/* ... */) の各出現を 1 つのスペースに置き換えます。コメントが複数連続しているときは、圧縮しません。コメントの終端がないときもスペース (ASCII 0x20) に置き換えられます。コメントの終端 (*/) のみがあるときは変更されません。

null を置換する

AWS WAF は入力の NULL バイトをスペース文字 (ASCII 0x20) に置き換えます。

SQL 16 進数デコード

AWS WAF は、SQL 16 進数のデータをデコードします。例えば、(0x414243) は (ABC) にデコードされます。

[URL decode] (URL デコード)

AWS WAF は、URL でエンコードされた値をデコードします。

URL デコード Uni

URL_DECODE と同様ですが、Microsoft 固有の %u エンコーディングをサポートしています。コードが FF01-FF5E の全角 ASCII コード範囲内にある場合、高位バイトを使用して下位バイトが検出され、調整されます。それ以外の場合は、下位バイトのみが使用され、高位バイトはゼロになります。

Unicode への UTF8

AWS WAF は、すべての UTF-8 文字シーケンスを Unicode に変換します。これは、英語以外の言語の入力正規化や、偽陽性および偽陰性を最小限に抑えるのに役立ちます。