AWS WAF、AWS Firewall Manager、および AWS Shield アドバンスド
開発者ガイド (API バージョン 2015-08-24)

文字列一致条件の使用

ウェブリクエストに表示される文字列に基づいてリクエストを許可または拒否する場合は、文字列一致条件を作成します。文字列一致条件は、検索する文字列と、AWS WAF で文字列を検査する先のウェブリクエスト部分 (指定されたヘッダーやクエリ文字列など) を識別します。後でウェブ ACL を作成するときに、文字列を含むリクエストを許可するか拒否するかを指定します。

文字列一致条件の作成

文字列一致条件を作成するときに、検索する文字列と AWS WAF でその文字列を検査する先のウェブリクエスト部分 (URI やクエリ文字列など) を識別するフィルタを指定します。文字列一致条件には複数のフィルタを追加できます。文字列一致条件ごとに 1 つのフィルタを設定することもできます。2 つの設定間では AWS WAF の動作が以下のように異なります。

  • 文字列一致条件ごとに 1 つのフィルタ – 個別の文字列一致条件をルールに追加し、そのルールをウェブ ACL に追加すると、ウェブリクエストがすべての条件に該当した場合に限り、AWS WAF はこれらの条件に基づいてリクエストを許可または拒否します。

    たとえば、2 つの条件を作成するとします。1 つの条件は、BadBot ヘッダーに値 User-Agent が含まれているウェブリクエストに該当します。もう 1 つの条件は、クエリ文字列に値 BadParameter が含まれているウェブリクエストに該当します。両方の条件を同じルールに追加して、そのルールをウェブ ACL に追加すると、両方の条件に値が含まれている場合に限り、AWS WAF はリクエストを許可または拒否します。

  • 文字列一致条件ごとに複数のフィルタ – 複数のフィルタを含む文字列一致条件をルールに追加して、そのルールをウェブ ACL に追加すると、ウェブリクエストが文字列一致条件のいずれかのフィルタに該当するだけで、AWS WAF はその条件に基づいてリクエストを許可または拒否します。

    条件を 1 つだけ作成して、その条件に前の例と同じ 2 つのフィルタを含めたとします。この場合、リクエストの User-Agent ヘッダーに BadBot が含まれているか、またはクエリ文字列に BadParameter が含まれているかのいずれかであれば、AWS WAF はリクエストを許可または拒否します。

注記

文字列一致条件をルールに追加するときに、条件の値と一致しないウェブリクエストを許可または拒否するように AWS WAF を設定することもできます。

文字列一致条件を作成するには

  1. AWS マネジメントコンソールにサインインし、AWS WAF コンソール(https://console.aws.amazon.com/wafv2/)を開きます。

  2. ナビゲーションペインで、[String and regex matching] を選択します。

  3. [Create condition] を選択します。

  4. 適用するフィルタ設定を指定します。詳細については、「文字列一致条件の作成時または編集時に指定する値」を参照してください。

  5. [Add filter] を選択します。

  6. 別のフィルタを追加する場合は、ステップ 4〜5 を繰り返します。

  7. フィルタの追加が終了したら、[Create] を選択します。

文字列一致条件の作成時または編集時に指定する値

文字列一致条件を作成または更新するときに、以下の値を指定します。

名前

文字列一致条件の名前を入力します。名前に使用できるのは英数字 (A~Z、a~z、0~9) または次の特殊文字 _-!"#`+*},./ です。一度作成した条件の名前は変更できません。

タイプ

[String match] を選択します。

Part of the request to filter on

[Value to match (一致する値)] で指定した文字列を AWS WAF で検査する各ウェブリクエスト内の部分を選択します。

ヘッダー

指定したリクエストヘッダー (User-AgentReferer など)。[Header] を選択した場合は、[Header] フィールドにヘッダー名を指定します。

HTTP method

リクエストでオリジンに要求しているオペレーションのタイプを示す HTTP メソッド。CloudFront がサポートしているメソッドは、DELETEGETHEADOPTIONSPATCHPOST および PUT です。

クエリ文字列

URL 内で ? 文字の後に続く部分 (ある場合)。

URI

URL 内でリソースを識別する部分 (/images/daily-ad.jpg など)。[Transformation (変換)] が指定されていない場合、URI は正規化されず、AWS がリクエストの一部としてクライアントから受信するときに検査します。[Transformation] (変換) が指定されている場合、URI はその指定に従って形式が再設定されます。

本文

リクエスト内で、HTTP リクエストの本文としてウェブサーバーに送信する追加データ (フォームのデータなど) を含む部分。

注記

[Part of the request to filter on (リクエストの一部としてフィルタリングする)] の値として [Body (本文)] を選択した場合、AWS WAF によって最初の 8192 バイト (8 KB) のみが検査されます。本文が 8192 バイトより長いリクエストを許可または拒否するには、サイズ制約条件を作成します。(AWS WAF によってリクエストヘッダーから本文の長さが取得されます。) 詳細については、「サイズ制約条件の使用」を参照してください。

単一クエリパラメータ (値のみ)

クエリ文字列の一部として定義されているすべてのパラメータです。たとえば、URL が「www.xyz.com?UserName=abc&SalesRegion=seattle」である場合、UserName または SalesRegion パラメータにフィルタを追加できます。

重複したパラメータがクエリ文字列に記述される場合、値は「OR」として評価されます。 つまり、いずれかの値によって一致がトリガーされます。たとえば、「www.xyz.com?SalesRegion=boston&SalesRegion=seattle」という URL では、[Value to match (一致する値)] に「boston」または「seattle」を指定すると、一致がトリガーされます。

[Single query parameter (value only) (単一クエリパラメータ (値のみ))] を選択する場合は、[Query parameter name (クエリパラメータ名)] も指定します。これは検査するクエリ文字列のパラメータです (UserNameSalesRegion など)。[Query parameter name (クエリパラメータ名)] の最大長は 30 文字です。[Query parameter name (クエリパラメータ名)] では、大文字と小文字は区別されません。たとえば、「UserName」を [Query parameter name (クエリパラメータ名)] として指定すると、「username」や「UsERName」など「UserName」のすべてのバリエーションに一致します。

すべてのクエリパラメータ (値のみ)

[Single query parameter (value only) (単一クエリパラメータ (値のみ))] に似ていますが、単一のパラメータの値を検査するのではなく、クエリ文字列内のすべてのパラメータの値が AWS WAF によって [Value to match (一致する値)] を検査されます。たとえば、URL が「www.xyz.com?UserName=abc&SalesRegion=seattle」の場合、[All query parameters (values only) (すべてのクエリパラメータ (値のみ))] を選択すると、UserName または SalesRegion のいずれかの値が [Value to match (一致する値)] として指定されると AWS WAF によって一致がトリガーされます。

Header ([Part of the request to filter on] が [Header] である場合のみ)

[Part of the request to filter on (リクエストの一部としてフィルタリングする)] に対して [Header (ヘッダー)] を選択した場合は、一般的なヘッダーのリストからヘッダーを選択するか、AWS WAF で悪意のあるスクリプトを検査するヘッダー名を入力します。

Match type

AWS WAF で検査するリクエスト部分で、このフィルタに該当する [Value to match (一致する値)] の文字列が表示される箇所を選択します。

Contains

文字列は、指定したリクエスト部分内の任意の場所に表示されます。

Contains word

指定したウェブリクエスト部分には [Value to match] が含まれていること、[Value to match] には英数字または下線 (A〜Z、a〜z、0〜9、_) のみが含まれていることが必要です。さらに、[Value to match] は単語であること、つまり、以下のいずれかであることが必要です。

  • [Value to match] は、指定したウェブリクエスト部分 (ヘッダーの値など) の値と正確に一致する。

  • [Value to match] は、指定したウェブリクエスト部分の先頭にあり、英数字または下線 (_) 以外の文字が続く (例: BadBot;)。

  • [Value to match] は、指定したウェブリクエスト部分の末尾にあり、英数字または下線 (_) 以外の文字が続く (例: ;BadBot)。

  • [Value to match] は、指定したウェブリクエスト部分の中央にあり、英数字または下線 (_) 以外の文字が前後にある (例: -BadBot;)。

Exactly matches

文字列と指定したリクエスト部分の値が正確に一致します。

Starts with

文字列は指定したリクエスト部分の先頭にあります。

Ends with

文字列は指定したリクエスト部分の末尾にあります。

Transformation

変換では、AWS WAF によってリクエストが検査される前に、ウェブリクエストを再フォーマットします。これにより、攻撃者が AWS WAF をバイパスしようとしてウェブリクエスト内で使用する通常と異なるフォーマットの一部が排除されます。

1 種類のテキスト変換しか指定できません。

変換では以下の操作を実行できます。

なし

AWS WAF は、[Value to match (一致する値)] の文字列を検査する前にウェブリクエストのテキスト変換を行いません。

Convert to lowercase

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

HTML decode

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

  • "& に置き換えます。

  •   を改行なしスペースに置き換えます。

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

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

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

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

Normalize whitespace

AWS WAF は、以下の文字を空白文字 (10 進数 32) に置き換えます。

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

  • \t、タブ、10 進数 9

  • \n、改行、10 進数 10

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

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

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

さらに、このオプションでは複数のスペースを 1 つのスペースに置き換えます。

Simplify command line

攻撃者がオペレーティングシステムのコマンドラインのコマンドを挿入し、通常と異なるフォーマットを使用してコマンドの一部または全部を偽装するおそれがある場合は、このオプションを使用して以下の変換を行います。

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

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

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

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

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

URL decode

URL エンコードされたリクエストをデコードします。

Value is base64 encoded

[Value to match] の値が base64 でエンコードされている場合は、このチェックボックスをオンにします。Base64 エンコーディングを使用して、攻撃者がリクエストに含める表示不可能な文字 (タブや改行など) を指定します。

Value to match

AWS WAF がウェブリクエスト内で検索する値を指定します。最大長は 50 バイトです値を Base 64 でエンコードする場合は、エンコードする前の値に 50 バイトの制限が適用されます。

文字列一致条件のフィルタの追加と削除

文字列一致条件のフィルタを追加または削除できます。フィルタを変更するには、新しいフィルタを追加して古いフィルタを削除します。

文字列一致条件のフィルタを追加または削除するには

  1. AWS マネジメントコンソールにサインインし、AWS WAF コンソール(https://console.aws.amazon.com/wafv2/)を開きます。

  2. ナビゲーションペインで、[String and regex matching] を選択します。

  3. フィルタを追加または削除する対象の条件を選択します。

  4. フィルタを追加するには、以下のステップを実行します。

    1. [Add filter] を選択します。

    2. 適用するフィルタ設定を指定します。詳細については、「文字列一致条件の作成時または編集時に指定する値」を参照してください。

    3. [Add] を選択します。

  5. フィルタを削除するには、以下のステップを実行します。

    1. 削除するフィルタを選択します。

    2. [Delete Filter] を選択します。

文字列一致条件の削除

文字列一致条件を削除するには、最初にその条件からすべてのフィルタを削除し、その条件を使用しているすべてのルールから条件自体を削除します。以下に手順を示します。

文字列一致条件を削除するには

  1. AWS マネジメントコンソールにサインインし、AWS WAF コンソール(https://console.aws.amazon.com/wafv2/)を開きます。

  2. 文字列一致条件を使用しているルールからその条件を削除します。

    1. ナビゲーションペインで [Rules] を選択します。

    2. 削除する文字列一致条件を使用しているルールの名前を選択します。

    3. 右側のペインで、[Edit rule] を選択します。

    4. 削除する条件の横にある [X] を選択します。

    5. [Update] を選択します。

    6. 削除する文字列一致条件を使用している残りのすべてのルールに対してこの同じ手順を繰り返します。

  3. 削除する条件からフィルタを削除します。

    1. ナビゲーションペインで、[String and regex matching] を選択します。

    2. 削除する文字列一致条件の名前を選択します。

    3. 右側のペインで、[Filter] の横にあるチェックボックスをオンにして、すべてのフィルタを選択します。

    4. [Delete filter] を選択します。

  4. ナビゲーションペインで、[String and regex matching] を選択します。

  5. [String and regex match conditions] ペインで、削除する文字列一致条件を選択します。

  6. [Delete] を選択して、選択した条件を削除します。