ファイルアップロード制限ポリシー¶
無制限のリソース消費は、最も重大な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の記事を参照して、任意の緩和コントロールに対してScopeやMitigation modeをどのように設定するかを確認してください。
ファイルアップロード制限ポリシーを設定するには:
-
Wallarm Console → Mitigation Controlsに進みます。
-
Add control → File upload restriction policyを使用します。
-
緩和コントロールを適用するScopeを記述します。
-
リクエスト全体または選択したポイントに対してSize restrictionsを設定します。
-
Mitigation modeセクションで実行するアクションを設定します。
-
Addをクリックします。
緩和コントロールの例¶
特定のリクエストフィールド経由のファイルアップロードサイズを制限¶
例えば、アプリケーションapplication-001
の/upload
アドレスに対し、POSTリクエストパラメータupfile
経由でアップロードされるファイルのサイズを100KBに制限し、超過分はすべてブロックしたいとします。
そのためには、次のスクリーンショットのとおりFile upload restriction policyの緩和コントロールを設定します。
特定ポイントのサイズ指定によるPUTアップロード制限¶
例えば、アプリケーションの/put-upload
アドレスに対し、PUTメソッドでリクエストボディに100KBを超えるファイルを含めてアップロードしようとする試行を、ブロックせずに攻撃として記録したいとします。
そのためには、次のスクリーンショットのとおりFile upload restriction policyの緩和コントロールを設定します。
上記の例では、リクエストポイントの定義におけるpost
は「リクエストボディ内」を意味するWallarmのタグです。
JSON Base64アップロードの制限¶
例えば、アプリケーションの/json-upload
アドレスを対象とする場合に限り、リクエストボディのJSONオブジェクト内に100KB以上のBase64エンコードされたファイル文字列をアップロードしようとする試行を、ブロックせずに攻撃として記録したいとします。
そのためには、次のスクリーンショットのとおりFile upload restriction policyの緩和コントロールを設定します。
上記の例では、リクエストポイントは次のWallarmのタグの並びで定義されます。
-
post
- リクエストボディ内 -
json_doc
- JSON形式のデータ -
hash
- 連想配列のキー用 -
file
- このキーの値
マルチパートフォームデータのアップロード制限¶
例えば、アプリケーションの/multipart-upload
アドレスを対象とする場合に限り、ファイルアップロードフィールドを含むHTMLフォームで100KBを超えるファイルを送信しようとする試行を、ブロックせずに攻撃として記録したいとします。通常、この操作のContent-Typeはmultipart/form-data
になります。
そのため、この制限を適用するには、次のスクリーンショットのとおりFile upload restriction policyの緩和コントロールを設定します。
上記の例では、リクエストポイントは次のWallarmのタグの並びで定義されます。
-
post
- リクエストボディ内 -
multipart
- Content-Typeがmultipart/form-data
のデータ -
file
- フォームにより生成される混在コンテンツの「ファイル部分」
ルールベースの保護¶
Cloud Native WAAPサブスクリプションの一部として、WallarmはFile upload restriction policyのルールを提供しています。
使用にはNGINX Node 6.3.0以上が必要で、現時点ではNative Nodeではサポートされていません。
ルールの作成と適用
-
Proceed to Wallarm Console:
- Rules → Add rule or your branch → Add rule.
- Attacks / Incidents → attack/incident → hit → Rule.
- API Discovery (if enabled) → your endpoint → Create rule.
-
Mitigation controls → File upload restriction policyを選択します。
-
If request isで、このルールを適用する対象範囲を記述します。
-
Size restrictionsでサイズ制限とModeを設定します。
-
必要に応じて、制限を適用するリクエストポイントを指定します(指定しない場合、制限はリクエスト全体のサイズに適用されます)。
検出された攻撃の表示¶
ファイルアップロード制限ポリシーの違反は、AttacksおよびAPI SessionsでFile upload violation攻撃として表示されます。
リクエスト詳細内のボタンでAttacksビューとAPI Sessionsビューを切り替えられます。この攻撃タイプの攻撃/セッションは、攻撃タイプフィルターをFile upload violationに設定すると見つけられます(また、Attacksではfile_upload_violation
という検索タグも使用できます)。
無制限のリソース消費の防止に向けた他の手段との比較¶
ファイルアップロード制限ポリシーの設定に加えて、Wallarmは無制限のリソース消費を防止するための他の仕組みも提供しています。例えば次のとおりです。
-
ボットによる無制限のリソース消費の検知とブロック(WallarmのAPI Abuse Prevention。利用には設定が必要です)。
-
DoS protectionの緩和コントロール(利用にはAdvanced API Securityサブスクリプションが必要です)。