正規表現一致条件の使用 - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

正規表現一致条件の使用

警告

AWS WAF Classic へのサポートは 2025 年 9 月 30 日に終了します。

注記

これは AWS WAF Classic ドキュメントです。2019 年 11 月より前に AWS WAF でルールやウェブ ACL などの AWS WAF リソースを作成し、それらをまだ最新バージョンに移行していない場合にのみ、このバージョンを使用する必要があります。Web ACL を移行するには、AWS WAF Classic リソースを AWS WAF に移行する を参照してください。

最新バージョンの AWS WAF については、AWS WAF」を参照してください。

リクエストに含まれる正規表現パターンと一致する文字列に基づいてウェブリクエストを許可またはブロックする場合は、1 つ以上の正規表現一致条件を作成します。正規表現一致条件は文字列一致条件の一種であり、検索する文字列パターンと、AWS WAF Classic によってそのパターンが検査されるウェブリクエストの部分 (特定のヘッダーやクエリ文字列など) を識別します。後でウェブ ACL を作成するときに、そのパターンを含むリクエストを許可するかブロックするかを指定します。

正規表現一致条件の作成

正規表現一致条件を作成するときは、検索する文字列 (正規表現を使用) を識別するパターンセットを指定します。それらのパターンセットを、AWS WAF Classic によってパターンセットが検査されるウェブリクエストの部分 (URI やクエリ文字列) を指定するフィルターに追加します。

1 つのパターンセットに複数の正規表現を追加できます。その場合、それらの表現は OR を使用して結合します。つまり、リクエストの該当する部分が、指定した式のいずれかと一致する場合、ウェブリクエストはパターンセットと一致することになります。

正規表現一致条件をルールに追加するときに、条件の値と一致しないウェブリクエストを許可またはブロックするように AWS WAF Classic を設定することもできます。

AWS WAF Classic は、ほとんどの標準 Perl 互換正規表現 (PCRE) をサポートしています。ただし、次はサポートしていません。

  • 後方参照と部分式取得

  • 任意のゼロ幅アサーション

  • サブルーチン参照と再帰パターン

  • 条件付きパターン

  • バックトラック制御動詞

  • \C シングルバイトディレクティブ

  • \R 改行一致ディレクティブ

  • \K 一致開始位置リセットディレクティブ

  • コールアウトと埋め込みコード

  • アトミックグループと所有格量指定子

正規表現一致条件を作成するには
  1. AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/) を開きます。

    ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。

  2. ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。

  3. [Create condition] (条件を作成) を選択します。

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

  5. [Create pattern set and add filter] (パターンセットを作成してフィルターを追加) を選択するか (新しいパターンセットを作成した場合)、[Add filter] (フィルターを追加) を選択します (既存のパターンセットを使用した場合)。

  6. [Create] (作成) を選択します。

正規表現一致条件の作成時または編集時に指定する値

正規表現一致条件を作成または更新するときに、次の値を指定します。

[Name] (名前)

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

[Type] (タイプ)

[Regex match] (正規表現の一致) を選択します。

[Part of the request to filter on] (フィルタリングするリクエストの一部)

[Value to match] (一致する値) で指定したパターンが AWS WAF Classic によって検査される各ウェブリクエスト内の部分を選択します。

[Header] (ヘッダー)

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

[HTTP method] (HTTP メソッド)

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

[Query string] (クエリ文字列)

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

[URI]

リクエストの URI パス。リソースを識別します (例: /images/daily-ad.jpg)。これには、URI のクエリ文字列またはフラグメントコンポーネントは含まれません。詳細については、「Uniform Resource Identifier (URI): 一般的な構文」を参照してください。

[Transformation] (変換) が指定されていない場合、URI は正規化されず、AWS がリクエストの一部としてクライアントから受信するときに検査します。[Transformation] (変換) が指定されている場合、URI はその指定に従って形式が再設定されます。

[Body] (本文)

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

注記

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

[Single query parameter (value only)] (単一クエリパラメータ (値のみ))

クエリ文字列の一部として定義されているすべてのパラメータです。例えば、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] (クエリパラメータ名) として指定すると、usernameUsERName など UserName のすべてのバリエーションに一致します。

[All query parameters (values only)] (すべてのクエリパラメータ (値のみ))

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

[Header] (ヘッダー) ([Part of the request to filter on] (フィルタリングするリクエストの一部) が [Header] (ヘッダー) の場合のみ)

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

[Transformation] (変換)

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

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

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

[None] (なし)

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

[Convert to lowercase] (小文字に変換)

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

[HTML decode] (HTML デコード)

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

  • "& に置き換えます。

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

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

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

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

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

[Normalize white space] (空白の正規化)

AWS WAF Classic は、次の文字を空白文字 (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 デコード)

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

[Regex pattern to match to request] (リクエストに一致する正規表現パターン)

既存のパターンセットを選択するか、新しいパターンセットを作成できます。新しいパターンセットを作成する場合は、次のように指定します。

New pattern set name (新しいパターンセット名)

名前を入力し、AWS WAF Classic によって検索される正規表現パターンを指定します。

パターンセットに複数の正規表現を追加すると、それらの表現は OR を使用して結合されます。つまり、リクエストの該当する部分が、指定した式のいずれかと一致する場合、ウェブリクエストはパターンセットと一致することになります。

[Value to match] (一致する値) は最大 70 文字です。

正規表現一致条件の編集

既存の正規表現一致条件に次の変更を加えることができます。

  • 既存のパターンセットからパターンを削除する

  • 既存のパターンセットにパターンを追加する

  • 既存正規表現一致条件からフィルターを削除する

  • 既存の正規表現一致条件にフィルターを追加する (正規表現一致条件には 1 つのフィルターのみを含めることができます。したがって、フィルターを追加するには、まず既存のフィルターを削除する必要があります。)

  • 既存の正規表現一致条件を削除する

注記

既存のフィルターに対してパターンセットを追加したり削除したりはできません。パターンセットを編集するか、または、フィルターを削除して新しいパターンセットで新しいフィルターを作成する必要があります。

既存のパターンセットからパターンを削除するには
  1. AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/) を開きます。

    ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。

  2. ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。

  3. [View regex pattern sets] (正規表現パターンセットを表示) を選択します。

  4. 編集するパターンセットの名前を選択します。

  5. [Edit] (編集) を選択します。

  6. 削除するパターンの横にある [X] を選択します。

  7. [Save] (保存) を選択します。

既存のパターンセットにパターンを追加するには
  1. AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/) を開きます。

    ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。

  2. ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。

  3. [View regex pattern sets] (正規表現パターンセットを表示) を選択します。

  4. 編集するパターンセットの名前を選択します。

  5. [Edit] (編集) を選択します。

  6. 新しい正規表現パターンを入力します。

  7. 新しいパターンの横にある [+] を選択します。

  8. [Save] (保存) を選択します。

既存の正規表現一致条件からフィルターを削除するには
  1. AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/) を開きます。

    ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。

  2. ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。

  3. 削除するフィルターを含む条件の名前を選択します。

  4. 削除するフィルターの横にあるボックスを選択します。

  5. [Delete filter] (フィルターを削除) を選択します。

正規表現一致条件を削除するには
  1. AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/) を開きます。

    ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。

  2. 正規表現条件からフィルターを削除します。その手順については、「既存の正規表現一致条件からフィルターを削除するには」を参照してください。

  3. 正規表現一致条件を使用しているルールから条件自体を削除します。

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

    2. 削除する正規表現一致条件を使用しているルールの名前を選択します。

    3. 右側のペインで、[Edit rule] (ルールを編集) を選択します。

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

    5. [Update] (更新) を選択します。

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

  4. ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。

  5. 削除する条件の横にあるボタンを選択します。

  6. [Delete] (削除) を選択します。

既存の正規表現一致条件に対してフィルターを追加または変更するには

正規表現一致条件には 1 つのフィルターのみ含めることができます。フィルターを追加または変更するには、まず既存のフィルターを削除する必要があります。

  1. AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/) を開きます。

    ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。

  2. 変更する正規表現条件からフィルターを削除します。その手順については、「既存の正規表現一致条件からフィルターを削除するには」を参照してください。

  3. ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。

  4. 変更する条件の名前を選択します。

  5. [Add filter] (フィルターを追加) を選択します。

  6. 新しいフィルターに適切な値を入力し、[Add] (追加) を選択します。