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

AWS WAF でのテキスト変換の使用

このセクションでは、リクエストを検査する前に AWS WAF に適用する変換を提供する方法について説明します。

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

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

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

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

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

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

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

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

各変換リストには、コンソールと API の仕様が表示され、説明が続きます。

Base64 decode – BASE64_DECODE

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

Base64 decode extension – BASE64_DECODE_EXT

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

Command line – CMD_LINE

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

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

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

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

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

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

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

Compress whitespace – COMPRESS_WHITE_SPACE

AWS WAF は、複数のスペースを 1 つのスペースに置き換え、次の文字を空白文字 (ASCII 32) に置き換えることで空白を圧縮します:

  • フォームフィード (ASCII 12)

  • タブ (ASCII 9)

  • 改行 (ASCII 10)

  • キャリッジリターン (ASCII 13)

  • 垂直タブ (ASCII 11)

  • 改行なしスペース (ASCII 160)

CSS decode – CSS_DECODE

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

Escape sequences decode – ESCAPE_SEQ_DECODE

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

Hex decode – HEX_DECODE

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

HTML entity decode – HTML_ENTITY_DECODE

AWS WAF は、16 進数形式 &#xhhhh; または 10 進数形式 &#nnnn; で表される文字を対応する文字に置き換えます。

AWS WAF は、次の HTML でエンコードされた文字をエンコードされていない文字に置き換えます。このリストでは小文字の HTML エンコーディングを使用しますが、処理では大文字と小文字が区別されません。例えば、&QuOt;" は同じように扱われます。

HTML でエンコードされた文字

以下に置き換えます

"

"

&

&

<

<

&gt;

>

&nbsp;、または &NonBreakingSpace;

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

&NewLine;

\n、10 進数 10

&Tab;

\t、10 進数 9

&lcub;、または &lbrace;

{

&verbar;, &vert;, または &VerticalLine;

|

&rcub; 、、または &rbrace;

}

&excl;

!

&num;

#

&dollar;

$

&percent; 、、または &percnt;

%

&apos;

\

&lpar;

(

&rpar;

)

&ast; 、、または &midast;

*

&plus;

+

&comma;

,

&period;

.

&sol;

/

&colon;

:

&semi;

;

&equals;

=

&quest;

?

&tilde; 、、または &DiacriticalTilde;

~

&minus;

-

&lsqb; 、、または &lbrack;

[

&bsol;

\\

&rsqb; 、、または &rbrack;

]

&hat;

^

&lowbar; 、、または &underbar;

_

&grave; 、、または &DiacriticalGrave;

`

JS decode – JS_DECODE

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

Lowercase – LOWERCASE

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

MD5 – MD5

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

None – NONE

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

Normalize path – NORMALIZE_PATH

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

Normalize path Windows – NORMALIZE_PATH_WIN

AWS WAF はバックスラッシュ文字をスラッシュに変換して、NORMALIZE_PATH 変換を使用して結果の文字列を処理します。

Remove nulls – REMOVE_NULLS

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

Replace comments – REPLACE_COMMENTS

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

Replace nulls – REPLACE_NULLS

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

SQL hex decode – SQL_HEX_DECODE

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

URL decode – URL_DECODE

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

URL decode Unicode – URL_DECODE_UNI

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

UTF8 to Unicode – UTF8_TO_UNICODE

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