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 進数以外の文字の組み合わせである回避対策にも役立ちます。たとえば、javascript
のja\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 でエンコードされた文字
以下に置き換えます
"
"
&
&
<
<
>
>
、または 
改行なしスペース、10 進数 160


\n
、10 進数 10	
\t
、10 進数 9{
、または{
{
|
,|
, または|
|
}
、、または}
}
!
!
#
#
$
$
&percent;
、、または%
%
'
\
(
(
)
)
*
、、または*
*
+
+
,
,
.
.
/
/
:
:
;
;
=
=
?
?
˜
、、または˜
~
−
-
[
、、または[
[
\
\\
]
、、または]
]
&hat;
^
_
、、または&underbar;
_
`
、、または`
`
- 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 に変換します。これは、入力を正規化し、非英語の言語における誤検知(偽陽性や偽陰性)を最小限に抑えるのに役立ちます。