AWS WAF によってブロックされているファイルをアップロードするにはどうすればよいですか?

所要時間3分
0

AWS WAF によってブロックされている拡張子を使用するファイルをアップロード (POST) する必要があります。

簡単な説明

AWS WAF が POST リクエストをブロックする理由を理解するには、以下の点に留意してください。

  • AWS WAF BODY フィルターは、悪意のあるスクリプトについて、POST リクエストのペイロードの最初の 8,192 バイトのみを検査します。
  • SQL インジェクションルールとクロスサイトスクリプティング (XSS) ルールは、メタデータにランダムな文字が含まれるファイルを敏感に検知します。これらのランダムな文字は実際の XSS または SQL インジェクション署名と類似していることから、AWS WAF のウェブ ACL ルールが呼び出される可能性があります。

AWS WAF では、特定のファイルタイプのフィルタリングがサポートされていません。ファイルや画像のアップロードによる誤検出を排除するには、他の方法を使用する必要があります。

まず、ファイルのアップロードをブロックする可能性がある共通ルールを確認します。共通ルールがアップロードをブロックしていない場合は、ブロックされたファイルを許可する追加のオプションを検討します。

一般的に、ファイルのアップロードは以下のルールによってブロックされます。

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • WindowsShellCommands_BODY
  • GenericLFI_BODY
  • SizeRestrictions_BODY

解決方法

SQLi_BODY ルールと CrossSiteScripting_BODY ルールによってブロックされたファイルのアップロード

ルール情報について、AWS WAF の包括的なログにある terminatingRuleMatchDetails フィールドを確認します。

注意: terminatingRuleMatchDetails フィールドに入力されるのは、SQLi_BODY および CrossSiteScripting_BODY 攻撃に関する情報のみです。

CrossSiteScripting_BODYmatchedData の例を次に示します。

"terminatingRuleMatchDetails": [{
        "conditionType": "XSS",
        "location": "BODY",
        "matchedData": [
            "<?",
            "`"
        ]

SQLi_BODYmatchedData の例を次に示します。

"terminatingRuleMatchDetails": [{
        "conditionType": "SQL_INJECTION",
        "location": "BODY",
        "matchedData": [
            ")",
            "*",
            "(",
            "0"
        ]

SQLi_BODY または CrossSiteScripting_BODY によってブロックされたアップロードに対処するには、次のオプションのいずれかを選択します。

オプション 1

アプリケーションにアクセスする IP アドレス範囲を把握している場合は、IP 一致条件が設定されたセーフリストルールに周知の IP アドレスを追加します。手順については、「IP 一致条件の使用」を参照してください。

オプション 2

文字列または正規表現 (regex) 一致条件が設定されたセーフリストを使用して、リクエストを許可します。セーフリストは、URI、HTTP ヘッダー、または AWS WAF ファイルの BODY に関連付けられたフレーズに基づいて作成できます。

セーフリストを作成するには、一致するデータに基づく例外条件を使用して XSS または SQLi ベクトルをブロックする新しいカスタムルールを作成します。誤検出の原因となっている特定のルールのアクションをオーバーライドするようにしてください。

このカスタムルールを作成するには、以下の手順を実行します。

1.    AWS WAF コンソールを開きます。

2.    ナビゲーションペインの [AWS WAF] 下で、[Web ACLs] (ウェブ ACL) を選択します。

3.    [Region] (リージョン) には、ウェブ ACL を作成した AWS リージョンを選択します。
**注意:**ウェブ ACL が Amazon CloudFront 用に設定されている場合は、[Global] (グローバル) を選択してください。

4.    ウェブ ACL を選択します。

5.    ウェブ ACL の [Rules] (ルール) タブで、[Rules] (ルール) を選択します。

6.    [Add Rules] (ルールを追加) を選択してから、[Add my own rules and rule groups] (独自のルールとルールグループを追加) を選択します。

7.    [Name] (名前) に rule name と入力してから、[Regular Rule] (通常のルール) を選択します。

8.    [If a request] (リクエストが次の場合) には、[matches all the statements (AND)] (すべてのステートメントに一致する (および)) を選択します。

9.    以下のフィールドがある [Statement 1] (ステートメント 1) を完成させます。
[Inspect] (検査) には [Has a label] (ラベルがある) を選択します。
[Match scope] (一致スコープ) には [Label] (ラベル) を選択します。
[Match key]] (一致キー) には、誤検出を発生させているルールのラベルを入力します。例えば、CrossSiteScripting_Body ルールが誤検出を発生させている場合は、awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body を入力します。

10.    以下のフィールドがある [Statement 2] (ステートメント 2) を完成させます。
[Negate statement results] (ステートメント結果を否定する) のチェックボックスをオンにします。
[Inspect] (検査) には [Header] (ヘッダー) を選択します。
[Match type] (一致タイプ) には [Contains string] (文字列が含まれる) を選択します。
[String to match] (一致させる文字列) には、ルールに照合する値を入力します。

11.    (オプション) [Text transformation] (テキスト変換) で、[Text transformation] (テキスト変換) または [None] (なし) を選択します。

12.    [Action] (アクション) で [Block] (ブロック) を選択します。

13.    [Add rule] (ルールを追加) をクリックします。

14.    [Set rule priority] (ルールの優先度を設定) で、リクエストをブロックしていたマネージドルールの下にルールを移動させます。

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

重要: ルールをテストするためのベストプラクティスは、[Action] (アクション) を [Count] (カウント) に設定した非本番環境で実行することです。AWS WAF サンプルリクエスト、または AWS WAF ログと Amazon CloudWatch メトリクスの組み合わせを使用して、ルールを評価します。ルールが期待どおりに動作したら、[Action] (アクション) を [Block] (ブロック) に変更します。

WindowsShellCommands_BODY、GenericLFI_BODY、または SizeRestrictions_BODY ルールによってブロックされたファイルのアップロード

ファイルのアップロード中に HTTP Archive (HAR) ファイルを取得して、WindowsShellCommands_BODYGenericLFI_BODY、または SizeRestrictions_BODY ルールについてファイルを確認します。手順については、「AWS サポートケース用にブラウザから HAR ファイルを作成する方法を教えてください」を参照してください。

WindowsShellCommands_BODYGenericLFI_BODY、または SizeRestrictions_BODY の誤検出を許可するには、まず対応するルールを [Count] (カウント) モードに設定します。手順については、「ルールグループの評価結果を Count にオーバーライド」を参照してください。

次に、ラベルを使用する例外条件で、誤検出を発生させている特定のマネージドルールのカスタムルールを作成します。

1.    AWS WAF コンソールを開きます。

2.    ナビゲーションペインの [AWS WAF] 下で、[Web ACLs] (ウェブ ACL) を選択します。

3.    [Region] (リージョン) には、ウェブ ACL を作成した AWS リージョンを選択します。
**注意:**ウェブ ACL が Amazon CloudFront 用に設定されている場合は、[Global] (グローバル) を選択してください。

4.    ウェブ ACL を選択します。

5.    ウェブ ACL の [Rules] (ルール) タブで、[Rules] (ルール) を選択します。

6.    [Add Rules] (ルールを追加) を選択してから、[Add my own rules and rule groups] (独自のルールとルールグループを追加) を選択します。

7.    [Name] (名前) に rule name と入力してから、[Regular Rule] (通常のルール) を選択します。

8.    [If a request] (リクエストが次の場合) には、[matches all the statements (AND)] (すべてのステートメントに一致する (および)) を選択します。

9.    以下のフィールドがある [Statement 1] (ステートメント 1) を完成させます。
[Inspect] (検査) には [Has a label] (ラベルがある) を選択します。
[Match scope] (一致スコープ) には [Label] (ラベル) を選択します。
[Match key]] (一致キー) には、誤検出を発生させているルールのラベルを入力します。例えば、WindowsShellCommands_BODY ルールが誤検出を発生させている場合は、awswaf:managed:aws:windows-os:WindowsShellCommands_Body を入力します。

10.    以下のフィールドがある [Statement 2] (ステートメント 2) を完成させます。
[Negate statement results] (ステートメント結果を否定する) のチェックボックスをオンにします。
[Inspect] (検査) には [URI path] (URI パス) を選択します。
[Match type] (一致タイプ) には [Exactly matches string] (文字列に完全に一致) を選択します。
[String to match] (一致させる文字列) には、リクエストが行われている場所の URI パスを入力します。

11.    (オプション) [Text transformation] (テキスト変換) で、[Text transformation] (テキスト変換) または [None] (なし) を選択します。

12.    [Action] (アクション) で [Block] (ブロック) を選択します。

13.    [Add rule] (ルールを追加) をクリックします。

14.    [Set rule priority] (ルールの優先度を設定) で、リクエストをブロックしていたマネージドルールの下にルールを移動させます。

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

重要: ルールをテストするためのベストプラクティスは、[Action] (アクション) を [Count] (カウント) に設定した非本番環境で実行することです。AWS WAF サンプルリクエスト、または AWS WAF ログと CloudWatch メトリクスの組み合わせを使用して、ルールを評価します。ルールが期待どおりに動作したら、[Action] (アクション) を [Block] (ブロック) に変更します。

ブロックされたファイルを許可するための追加のオプション

注意: ルールは、ウェブ ACL にリストされている順序で処理されます。次の推奨事項については、必要に応じてルールの優先順位を並べ替えるようにしてください。

ユースケースに最適な方法を選択します。

  • 文字列一致ルールステートメント (AWS WAF)、または文字列一致条件 (AWS WAF Classic) を使用して、選択的な除外を適用します。ファイルの BODY に関連付けられている特定のフレーズをセーフリストに追加します。特定の URI パスで誤検出が発生する場合は、そのパスをセーフリストに追加してください。
  • ファイルのアップロードに別個のドメインを使用します。これがユースケースにとってコスト効率性のよいオプションであるかどうかを検討するようにしてください。
  • 埋め込まれたコードとデータについてファイルと画像をスキャン (スクラブ) します。このアクションは、ファイルをアップロードする前にクライアント側で実行できます。除外ルールを作成する場合は、ファイルのアップロード後にバックエンドでこのアクションを実行できます。
  • アップロードする前にファイルを圧縮します。
    注意: 悪意のあるファイルを圧縮しないようにしてください。
  • さまざまな既知の IP アドレスからアップロードが行われる場合は、これらの IP アドレスをセーフリストに追加します。
  • base64 エンコーディングを使用してすべての画像データをエンコードし、AWS WAF が画像に対して XSS や SQLi を呼び出さないようにします。
    注意: 悪意のある画像をエンコードしないようにしてください。
  • チャンクの削除やビットのランダム化などの画像最適化手法を実装します。

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ