コンテンツにスキップ

ファイルアップロード制限ポリシー

無制限のリソース消費は、最も重大なAPIセキュリティリスクの一覧であるOWASP API Top 10 2023に含まれています。これはそれ自体が脅威(過負荷によるサービスの遅延や完全停止)であるだけでなく、列挙攻撃などさまざまな攻撃の土台にもなります。過大なファイルのアップロードを許容することは、こうしたリスクの一因です。この記事では、Wallarmでファイルアップロード制限を設定する方法を説明します。

設定方法として緩和コントロールを使用してファイルアップロード制限を構成すると、コントロール本来の目的(ダウンロードされるファイルの最大サイズの制限)に加えて、特定のリクエストパラメータのサイズを制限して攻撃面を縮小することにも利用できます。例えば、任意のヘッダーの最大サイズを制限するルールを設定できます。この場合、攻撃者がペイロードを押し込む、またはBufferOverflowの悪用を成立させる余地が少なくなります。

なお、ファイルサイズのアップロード制限は、Wallarmが提供する無制限のリソース消費を防止するための施策の唯一の手段ではありません。

設定方法

ご契約のサブスクリプションプランに応じて、ファイルアップロード制限の設定方法として次のいずれかが利用できます。

  • Mitigation controls(Advanced API Securityサブスクリプション)- 緩和コントロールを使用すると、リクエスト全体のサイズだけでなく、特定のパラメータにも上限を設定できます(ルールよりも精密な設定が可能です)。

  • Rules(Cloud Native WAAPサブスクリプション)

緩和コントロールベースの保護

Advanced API Securityサブスクリプションの一部として、WallarmはFile upload restriction policyという緩和コントロールを提供しています。

使用にはNGINX Node 6.3.0以上が必要で、現時点ではNative Nodeではサポートされていません。

この緩和コントロールにより、特定のパラメータのサイズに制限を設定できます(より精密な設定)。簡易に、リクエスト全体に対して設定することもできます。

特定のリクエストパラメータのサイズを制限すると、コントロール本来の目的(ダウンロードされるファイルの最大サイズの制限)に加えて、攻撃面を縮小できます。例えば、任意のヘッダーの最大サイズを制限するルールを設定できます。この場合、攻撃者がペイロードを押し込む、またはBufferOverflowの悪用を成立させる余地が少なくなります。

緩和コントロールの作成と適用

緩和コントロールの基本情報

作業を始める前に: Mitigation Controlsの記事を参照して、任意の緩和コントロールに対してScopeMitigation modeをどのように設定するかを確認してください。

ファイルアップロード制限ポリシーを設定するには:

  1. Wallarm Console → Mitigation Controlsに進みます。

  2. Add controlFile upload restriction policyを使用します。

  3. 緩和コントロールを適用するScopeを記述します。

  4. リクエスト全体または選択したポイントに対してSize restrictionsを設定します。

  5. Mitigation modeセクションで実行するアクションを設定します。

  6. Addをクリックします。

緩和コントロールの例

特定のリクエストフィールド経由のファイルアップロードサイズを制限

例えば、アプリケーションapplication-001/uploadアドレスに対し、POSTリクエストパラメータupfile経由でアップロードされるファイルのサイズを100KBに制限し、超過分はすべてブロックしたいとします。

そのためには、次のスクリーンショットのとおりFile upload restriction policyの緩和コントロールを設定します。

ファイルアップロード制限MC - 例

特定ポイントのサイズ指定によるPUTアップロード制限

例えば、アプリケーションの/put-uploadアドレスに対し、PUTメソッドでリクエストボディに100KBを超えるファイルを含めてアップロードしようとする試行を、ブロックせずに攻撃として記録したいとします。

そのためには、次のスクリーンショットのとおりFile upload restriction policyの緩和コントロールを設定します。

ファイルアップロード制限MC - 例

上記の例では、リクエストポイントの定義におけるpostは「リクエストボディ内」を意味するWallarmのタグです。

JSON Base64アップロードの制限

例えば、アプリケーションの/json-uploadアドレスを対象とする場合に限り、リクエストボディのJSONオブジェクト内に100KB以上のBase64エンコードされたファイル文字列をアップロードしようとする試行を、ブロックせずに攻撃として記録したいとします。

そのためには、次のスクリーンショットのとおりFile upload restriction policyの緩和コントロールを設定します。

ファイルアップロード制限MC - 例

上記の例では、リクエストポイントは次のWallarmのタグの並びで定義されます。

  • post - リクエストボディ内

  • json_doc - JSON形式のデータ

  • hash - 連想配列のキー用

  • file - このキーの値

マルチパートフォームデータのアップロード制限

例えば、アプリケーションの/multipart-uploadアドレスを対象とする場合に限り、ファイルアップロードフィールドを含むHTMLフォームで100KBを超えるファイルを送信しようとする試行を、ブロックせずに攻撃として記録したいとします。通常、この操作のContent-Typeはmultipart/form-dataになります。

そのため、この制限を適用するには、次のスクリーンショットのとおりFile upload restriction policyの緩和コントロールを設定します。

ファイルアップロード制限MC - 例

上記の例では、リクエストポイントは次のWallarmのタグの並びで定義されます。

  • post - リクエストボディ内

  • multipart - Content-Typeがmultipart/form-dataのデータ

  • file - フォームにより生成される混在コンテンツの「ファイル部分」

ルールベースの保護

Cloud Native WAAPサブスクリプションの一部として、WallarmはFile upload restriction policyルールを提供しています。

使用にはNGINX Node 6.3.0以上が必要で、現時点ではNative Nodeではサポートされていません。

ルールの作成と適用

  1. Proceed to Wallarm Console:

    • RulesAdd rule or your branch → Add rule.
    • Attacks / Incidents → attack/incident → hit → Rule.
    • API Discovery (if enabled) → your endpoint → Create rule.
  2. Mitigation controlsFile upload restriction policyを選択します。

  3. If request isで、このルールを適用する対象範囲を記述します。

  4. Size restrictionsでサイズ制限とModeを設定します。

  5. 必要に応じて、制限を適用するリクエストポイントを指定します(指定しない場合、制限はリクエスト全体のサイズに適用されます)。

    ファイルアップロード制限 - ルール

  6. ルールのコンパイルとフィルタリングノードへのアップロードが完了するまで待ちます。

検出された攻撃の表示

ファイルアップロード制限ポリシーの違反は、AttacksおよびAPI SessionsFile upload violation攻撃として表示されます。

ファイルアップロード制限 - 検出された攻撃

リクエスト詳細内のボタンでAttacksビューとAPI Sessionsビューを切り替えられます。この攻撃タイプの攻撃/セッションは、攻撃タイプフィルターをFile upload violationに設定すると見つけられます(また、Attacksではfile_upload_violationという検索タグも使用できます)。

無制限のリソース消費の防止に向けた他の手段との比較

ファイルアップロード制限ポリシーの設定に加えて、Wallarmは無制限のリソース消費を防止するための他の仕組みも提供しています。例えば次のとおりです。

  • ボットによる無制限のリソース消費の検知とブロック(WallarmのAPI Abuse Prevention。利用には設定が必要です)。

  • DoS protectionの緩和コントロール(利用にはAdvanced API Securityサブスクリプションが必要です)。

  • Advanced rate limiting