AWS WAF でウェブリクエスト本文を検査する際に、サイズ制限を管理したいです。
簡単な説明
ウェブリクエスト本文が本文検査のサイズ制限よりも大きい場合、基盤ホストサービスは制限内のコンテンツのみを AWS WAF に転送します。AWS WAF は、制限を超えるウェブリクエスト本文に対しては、クロスサイトスクリプティング (XSS) 攻撃や SQL インジェクションパターンを検出しません。
注: AWS WAF は、本文検査のサイズ制限内で攻撃パターンが見つかったかどうかにかかわらず、ウェブリクエスト本文の内容を記録しません。
サイズ超過リクエストにおける、本文検査のサイズ制限内には表示されない攻撃パターンを防ぐには、サイズを超過したリクエストをすべてブロックするルールを設定します。次に、正当なサイズ超過リクエストを明示的に許可するルールを作成します。カスタムルールを作成するか、コアルールセット (CRS) マネージドルールグループを使用します。
解決策
CRS マネージドルールを使用する
CRS マネージドルールグループを使用するには、SizeRestrictions_Body ルールを有効にして 8 KB (8,192 バイト) を超えるリクエストをブロックします。次に、正当なサイズ超過リクエストを許可するルールを作成します。
SizeRestrictions_Body ルールを有効にする
次の手順を実行します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインの [AWS WAF] で [ウェブ ACL] を選択します。
- [リージョン] でウェブアクセスコントロールリスト (ウェブ ACL) を作成した AWS リージョンを選択します。
注: Amazon CloudFront でウェブ ACL を設定した場合は、[グローバル] を選択します。
- 該当するウェブ ACL を選択します。
- [ルール] で [ルールを追加] を選択します。
- ドロップダウンリストで [マネージドルールグループの追加] を選択します。
- [マネージドルールグループの追加] で [AWS マネージドルールグループ] を選択します。
- [フリールールグループ] で [コアルールセット] を選択します。
- [ウェブ ACL に追加] を有効にしてから、[編集] を選択します。
- 8 KB を超えるウェブリクエスト本文を検査してブロックするには、SizeRestrictions_BODY ルールを Block に設定します。
- [ルールを保存] を選択します。
誤検出を削減するには、SizeRestrictions_Body ルールのみを使用し、他のルールを全て上書きして Count 設定します。
正当なリクエストを許可するルールを作成する
SizeRestrictions_Body ルールは、8 KB を超える正当なリクエストがブロックする場合があります。サイズ超過であっても正当なリクエストを許可するには、SizeRestrictions_BODY ルールを Count に設定します。次に、AWS WAF が追加したラベルを後続のルール評価に使用します。
次の手順を実行します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインの [AWS WAF] で [ウェブ ACL] を選択します。
- [リージョン] でウェブ ACL を作成したリージョンを選択します。
注: CloudFront にウェブ ACL を設定した場合は、[グローバル] を選択します。
- 該当するウェブ ACL を選択します。
- [ルール] で AWS-AWSManagedRulesCommonRuleSet を選択します。
- [編集] を選択します。
- SizeRestrictions_BODY ルールで [カウントにオーバーライド] を選択します。
- [ルールを保存] を選択します。
- [ルール] で [ルールを追加] を選択し、[独自のルールとルールグループを追加] を選択します。
- [名前] にルール名を入力し、[標準ルール] を選択します。
- [リクエストが次の場合] で [すべてのステートメントに一致 (AND)] を選択します。
- [ステートメント 1] に次の情報を入力します。
[検査] で [ラベルあり] を選択します。
[一致の範囲] で [ラベル] を選択します。
[一致するキー] にラベル awswaf:managed:aws:core-rule-set:SizeRestrictions_Body を入力します。
- [ステートメント 2] に次の情報を入力します。
[ステートメント結果を無効にする] を選択します。
[検査] で [URI パス] を選択します。
**[マッチタイプ]には[完全に一致する文字列]**を選択します。
[照合する文字列] に /upload と入力します。
注: /upload は、リクエストを行う際の URI パスに置き換えてください。
- (オプション) [テキスト変換] でテキスト変換または [なし] を選択します。
- [アクション] で [ブロック] を選択します。
- [ルールを追加] を選択します。
- [ルール優先度の設定] で優先度を更新し、ルールを CRS マネージドルールグループの後に配置します。完了すると、CRS の SizeRestrictions_Body ルールはラベルを追加できるようになり、AWS WAF はそのラベルを後続のルールで使用できます。
- [ルールを保存] を選択します。
注: 非本番環境で [アクション] を Count に設定し、ルールをテストすることをおすすめします。ルールを評価するには、Amazon CloudWatch メトリクスを AWS WAF サンプリングリクエストまたは AWS WAF ログと併用します。
カスタム本文検査ルールを作成する
ルールでのサイズ超過リクエスト処理アクションを設定する
カスタム本文検査ルールを設定する際に、サイズ超過リクエスト処理アクションを選択できます。サイズ超過処理は、リクエスト本文がサイズ制限を超えている場合のウェブリクエストの処理方法を AWS WAF に指示します。サイズ超過コンポーネントの処理オプションには、Continue、Match、No match があります。これらいずれかのオプションを AWS WAF コンソールで選択する必要があります。コンソールの外部では、デフォルトオプションは Continue に設定されています。サイズ超過リクエストをブロックするには、サイズ超過リクエスト処理アクションを使用するカスタムルールを作成します。
正当なリクエストを許可するルールを作成する
サイズ超過であっても正当なリクエストを許可するには、正当なホストからのリクエストを明示的に許可するルールを作成します。次に、ルールの優先度を更新し、そのルールをリクエストをブロックするルールの優先度よりも高く設定します。
関連情報
AWS WAF により、正当なアップロードリクエストがブロックされる原因を教えてください