SQL インジェクション一致条件の使用 - AWS WAF、 AWS Firewall Manager、および AWS Shield Advanced

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SQL インジェクション一致条件の使用

注記

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

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

攻撃者は、データベースからデータを取り出そうとしてウェブリクエスト内に悪意のある SQL コードを挿入する場合があります。悪意のある SQL コードが含まれている可能性があるウェブリクエストを許可またはブロックするには、SQL インジェクション一致条件を作成します。SQL インジェクション一致条件は、URI パスやクエリ文字列など、 AWS WAF Classic に検査させたいウェブリクエストの部分を特定します。後でウェブ ACL を作成するときに、悪意のある SQL コードが含まれている可能性があるリクエストを許可するかブロックするかを指定します。

SQL インジェクション一致条件の作成

SQL インジェクション一致条件を作成するときは、URI やクエリ文字列など、悪意のある SQL コードがないかどうかを AWS WAF Classic に検査させたいウェブリクエストの部分を示すフィルタを指定します。SQL インジェクション一致条件には複数のフィルターを追加できます。条件ごとに 1 つのフィルターを設定することもできます。各構成が AWS WAF Classic の動作にどのように影響するかを次に示します。

  • SQL インジェクション一致条件ごとに複数のフィルター (推奨) — 複数のフィルターを含む SQL インジェクション一致条件をルールに追加し、そのルールをウェブ ACL に追加する場合、ウェブリクエストは SQL インジェクション一致条件のフィルターの 1 つに一致するだけで、 AWS WAF クラシックはその条件に基づいてリクエストを許可または拒否できます。

    例えば、SQL インジェクション一致条件を 1 つ作成し、この条件に 2 つのフィルターを含めたとします。1 つのフィルターは URI に悪意のある SQL コードを検査するよう AWS WAF Classic に指示し、もう 1 つのフィルターはクエリ文字列を検査するよう AWS WAF Classic に指示します。 AWS WAF Classic は、URI またはクエリ文字列のいずれかに悪意のある SQL コードが含まれていると思われるリクエストを許可またはブロックします

  • SQL インジェクション一致条件ごとに 1 つのフィルタ — 個別の SQL インジェクション一致条件をルールに追加し、そのルールをウェブ ACL に追加する場合、ウェブリクエストはすべての条件に一致する必要があります。 AWS WAF Classic では、条件に基づいてリクエストを許可または拒否できます。

    2 つの条件を作成し、各条件に前の例で示した 2 つのフィルターの 1 つを別個に含めたとします。両方の条件を同じルールに追加し、そのルールをウェブ ACL に追加すると、 AWS WAF Classic は URI とクエリ文字列の両方に悪意のある SQL コードが含まれていると思われる場合にのみリクエストを許可または拒否します。

注記

SQL インジェクション一致条件をルールに追加すると、悪意のある SQL コードが含まれていないと思われるウェブリクエストを許可またはブロックするように AWS WAF Classic を構成することもできます。

ステップ 5: SQL インジェクション一致条件を作成するには
  1. AWS Management Console にサインインし、https://console.aws.amazon.com/wafv2/ AWS WAF のコンソールを開きます。

    ナビゲーションペインに [ AWS WAF クラシックに切り替え] が表示されている場合は、それを選択します。

  2. ナビゲーションペインで、[SQL injection] (SQL インジェクション) を選択します。

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

  4. 適用するフィルター設定を指定します。詳細については、「SQL インジェクション一致条件の作成時または編集時に指定する値」を参照してください。

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

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

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

SQL インジェクション一致条件の作成時または編集時に指定する値

SQL インジェクション一致条件を作成または更新するときに、次の値を指定します。

[Name] (名前)

SQL インジェクション一致条件の名前。

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

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

各ウェブリクエストの中で、 AWS WAF Classic で悪意のある SQL コードを検査させたい部分を選択します。

[Header] (ヘッダー)

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

[HTTP method] (HTTP メソッド)

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

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

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

注記

SQL インジェクションの一致条件については、[Part of the request to filter on] (フィルタリングするリクエストの一部) に [Query string] (クエリ文字列) ではなく、[All query parameters (values only)] (すべてのクエリパラメータ (値のみ)) を選択することをお勧めします。

[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」の場合、またはパラメータにフィルタを追加できます。UserNameSalesRegion

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

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

単一クエリパラメーター (値のみ) と似ていますが、 AWS WAF Classic は 1 つのパラメーターの値を検査するのではなく、クエリ文字列内のすべてのパラメーターの値を検査して、悪意のある SQL コードがないかを調べます。たとえば、URL が「www.xyz.com? UserName =abc& SalesRegion =seattle」で、「すべてのクエリパラメーター (値のみ)」を選択した場合、 AWS WAF Classic は、いずれかの値が一致するか、悪意のある SQL コードが含まれている可能性がある場合に一致をトリガーします。UserNameSalesRegion

[Header] (ヘッダー)

フィルターするリクエストの一部に [ヘッダー] を選択した場合は、一般的なヘッダーのリストからヘッダーを選択するか、 AWS WAF Classic に悪意のある SQL コードがないか検査させたいヘッダーの名前を入力します。

[Transformation] (変換)

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

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

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

なし

AWS WAF Classic は、Value の文字列が一致するかどうかを調べるまで、ウェブリクエストのテキスト変換を一切行いません。

[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 エンコードされたリクエストをデコードします。

SQL インジェクション一致条件のフィルターの追加と削除

SQL インジェクション一致条件のフィルターを追加または削除できます。フィルターを変更するには、新しいフィルターを追加して古いフィルターを削除します。

SQL インジェクション一致条件のフィルターを追加または削除するには
  1. AWS Management Console にサインインし、https://console.aws.amazon.com/wafv2/ AWS WAF のコンソールを開きます。

    ナビゲーションペインに [ AWS WAF クラシックに切り替え] が表示されている場合は、それを選択します。

  2. ナビゲーションペインで、[SQL injection] (SQL インジェクション) を選択します。

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

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

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

    2. 適用するフィルター設定を指定します。詳細については、「SQL インジェクション一致条件の作成時または編集時に指定する値」を参照してください。

    3. [Add] (追加) を選択します。

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

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

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

SQL インジェクション一致条件の削除

SQL インジェクション一致条件を削除するには、最初にその条件からすべてのフィルターを削除し、その条件を使用しているすべてのルールから条件自体を削除します。次に手順を示します。

SQL インジェクション一致条件を削除するには
  1. AWS Management Console にサインインし、https://console.aws.amazon.com/wafv2/ AWS WAF にあるコンソールを開きます。

    ナビゲーションペインに [ AWS WAF クラシックに切り替え] が表示されている場合は、それを選択します。

  2. ナビゲーションペインで、[SQL injection] (SQL インジェクション) を選択します。

  3. [SQL injection match conditions] (SQL インジェクション一致条件) ペインで、削除する SQL インジェクション一致条件を選択します。

  4. 右ペインで、[Associated rules] (関連付けられたルール) タブを選択します。

    この SQL インジェクション一致条件を使用しているルールのリストが空の場合は、ステップ 6 に進みます。リストにルールが含まれている場合は、ルールを書き留めて、ステップ 5 に進みます。

  5. SQL インジェクション一致条件を使用しているルールから、この条件を削除するには、次のステップを実行します。

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

    2. 削除する SQL インジェクション一致条件を使用しているルールの名前を選択します。

    3. 右ペインで、ルールから削除する SQL インジェクション一致条件を選択し、[Remove selected condition] (選択した条件を削除) を選択します。

    4. 削除する SQL インジェクション一致条件を使用しているすべての残りのルールに対してステップ b とステップ c を繰り返します。

    5. ナビゲーションペインで、[SQL injection] (SQL インジェクション) を選択します。

    6. [SQL injection match conditions] (SQL インジェクション一致条件) ペインで、削除する SQL インジェクション一致条件を選択します。

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