列挙攻撃の保護
¶
Wallarmは、攻撃者にとって高い価値を持つ情報の漏えいを防ぐため、APIを列挙攻撃から保護します。攻撃者は有効なユーザー名やメールアドレス、システムリソースを特定することで、後続攻撃の焦点を大幅に絞り込めます。この偵察フェーズにより、攻撃者は対象システムの理解を深め、脆弱性を発見し、より巧妙で標的化された攻撃を計画できる可能性が高まり、最終的に侵害成功の確率が上がってしまいます。
NGINX Node 6.0.1またはNative Node 0.14.1以上が必要です。
緩和コントロール¶
Wallarmは、列挙からの保護を構成するための複数の緩和コントロールを提供します。どのコントロールを使用するか選択する際は、次を考慮してください。
コントロール | 特記事項 | 列挙対象 | 攻撃 |
---|---|---|---|
Brute force protection | 指定した時間枠内に各パラメータで観測されたユニーク値の数をカウントします。 | password | Brute force |
BOLA protection | object ID , user ID | BOLA | |
Enumeration attack protection | 任意のパラメータ | Enum | |
Forced browsing protection | 設定した時間枠内にアクセスされたユニークなエンドポイント数をカウントします。 | URL s | Forced browsing |
したがって:
-
非公開URLの列挙を防ぎたい場合は、Forced browsing protectionコントロールを使用します。
-
任意のパラメータの列挙を防ぎたい場合は、Enumeration attack protectionコントロールを使用できます(オールインワンの解決策です)。
-
さまざまな候補を試して有効なパスワードを得ようとする試行を強調表示したい場合は、Brute force protectionコントロールを使用します。
-
有効なユーザーIDやオブジェクトIDの列挙を特に強調表示したい場合は、BOLA protectionコントロールを使用します。
従来の機能
緩和コントロールは、Advanced API Securityサブスクリプションで利用できる高度なツールです。Cloud Native WAAPサブスクリプションでは、brute force protection、forced browsing protection、およびBOLA protectionはトリガーで構成します。
デフォルト保護¶
Wallarmは、列挙保護のためのデフォルトの緩和コントロールを提供します。デフォルトコントロールは複製・編集、または無効化できます。
Subject to change
The list of default mitigation controls is subject to change:
- New controls may be introduced over time.
- If a mitigation control is disabled, Wallarm may still update its parameters to improve quality and performance.
Brute force¶
Brute force protectionのデフォルト緩和コントロールは、パスワード、OTP、認証コードの列挙の試行を検知するための汎用的な構成を提供し、すべてのトラフィックに対してMonitoring
modeで有効化されています。
Brute forceのデフォルトコントロールを確認するには、Wallarm Console → Security Controls → Mitigation ControlsのBrute force protectionセクションで、Default
ラベルの付いたコントロールを確認します。
編集により、アプリケーションの特性、トラフィックパターン、ビジネス状況に合わせてデフォルトコントロールをカスタマイズできます。たとえば、しきい値を調整できます。
BOLA¶
BOLA protectionのデフォルト緩和コントロールは、ユーザーID、オブジェクトID、ファイル名の列挙の試行を検知するための汎用的な構成を提供し、すべてのトラフィックに対してMonitoring
modeで有効化されています。
BOLAのデフォルトコントロールを確認するには、Wallarm Console → Security Controls → Mitigation ControlsのBOLA protectionセクションで、Default
ラベルの付いたコントロールを確認します。
編集により、アプリケーションの特性、トラフィックパターン、ビジネス状況に合わせてデフォルトコントロールをカスタマイズできます。たとえば、しきい値や列挙対象として追跡するパラメータを調整できます。
汎用の列挙¶
Enumeration attack protectionのデフォルト緩和コントロールは、次の列挙の試行を検知するための汎用的な構成を提供します。
-
ユーザー/メールアドレスの列挙
-
SSRF(Server-Side Request Forgery)の列挙
-
User-Agentのローテーション
これは、すべてのトラフィックに対してMonitoring
modeで有効化されています。
汎用の列挙に関するデフォルトコントロールを確認するには、Wallarm Console → Security Controls → Mitigation ControlsのEnumeration attack protectionセクションで、Default
ラベルの付いたコントロールを確認します。
編集により、アプリケーションの特性、トラフィックパターン、ビジネス状況に合わせてデフォルトコントロールをカスタマイズできます。たとえば、しきい値や列挙対象として追跡するパラメータを調整できます。
Forced browsing¶
Forced browsing protectionのデフォルト緩和コントロールは、非公開URLの列挙の試行を検知するための汎用的な構成を提供し、すべてのトラフィックに対してMonitoring
modeで有効化されています。
Forced browsingのデフォルトコントロールを確認するには、Wallarm Console → Security Controls → Mitigation ControlsのForced browsing protectionセクションで、Default
ラベルの付いたコントロールを確認します。
編集により、アプリケーションの特性、トラフィックパターン、ビジネス状況に合わせてデフォルトコントロールをカスタマイズできます。たとえば、しきい値やScopeを調整できます。
構成¶
次の手順で列挙からの保護を構成します。
-
コントロールを適用するScope(エンドポイント、特定のリクエストのみ)を定義します。
-
列挙の試行を追跡する対象としてEnumerated parametersを選択します。
-
Enumeration thresholdを設定します(しきい値を超えるとコントロールが動作します)。
-
Scopeでニーズをすべて満たせない場合は、Scope filtersを設定します。
-
Mitigation modeでアクションを設定します。
スコープや詳細条件の設定、列挙対象パラメータの選択には、正規表現を使用できます。
Scope¶
Scopeは、どのリクエストにコントロールを適用するか(URIやその他のパラメータに基づく)を定義します。ルールにおけるリクエスト条件と同じ要領で構成します。詳細はこちらをご覧ください。
Scopeセクションを空のままにすると、緩和コントロールはすべてのトラフィックおよびすべてのアプリケーションに適用され、そのようなコントロールはすべてのbranchesに継承されます。
Scope filters¶
Scopeだけでは要件を満たせない場合、保護メカニズムの対象となるリクエストが満たすべき追加条件を定義できます。
条件として、次の値や値パターンを使用できます。
-
リクエストの組み込みパラメータ(Wallarmフィルタリングノードが処理する各リクエストに含まれるメタ情報の要素)
-
Session context parameters(API Sessionsで重要として定義されたパラメータを一覧からすばやく選択)— このセクションのAdd customオプションを使用して、現在API Sessionsに存在しないパラメータをフィルターとして追加できます。その場合、これらのパラメータはAPI Sessionsのコンテキストパラメータにも追加されます(非表示。つまり、リクエストに含まれていればセッション詳細で確認できますが、API Sessionのcontext parameter configurationには表示されません)。
パフォーマンスに関する注意
Scopeの設定はパフォーマンス面で負荷が小さいため、目的を満たせる場合はScopeを優先して使用し、複雑な条件付けが必要な場合のみScope filtersを使用することを推奨します。
Enumerated parameters¶
Enumerated parametersセクションでは、列挙を監視するパラメータを選択します。正確一致またはregexによる一致のいずれかで監視対象のパラメータ群を選択します(1つの緩和コントロール内ではどちらか一方のみ使用できます)。
正確一致の場合、Add customオプションを使用して、現在API Sessionsに存在しないパラメータを列挙対象として追加できます。その場合、これらのパラメータはAPI Sessionsのコンテキストパラメータにも追加されます(非表示。つまり、リクエストに含まれていればセッション詳細で確認できますが、API Sessionのcontext parameter configurationには表示されません)。
regexでFilter by parameter nameとFilter by parameter valueの両方を指定した場合、それらは組み合わされます(AND
演算子)。例えば、nameに(?i)id
、valueに\d*
を指定するとuserId
パラメータに一致しますが、パラメータ値が数字の組み合わせであるリクエストのみをカウントします。
リクエストがScopeとScope filtersを満たし、かつ列挙監視対象パラメータに対してユニーク値を含む場合、そのパラメータのカウンタは+1
されます。
Enumeration threshold¶
Brute force, BOLAおよび汎用の列挙保護
これらの保護は、指定した時間枠(秒)内に各列挙パラメータで観測されたユニーク値の数をカウントします。Enumerated parametersに列挙された各パラメータは独立して追跡されます。
いずれかのパラメータでしきい値に達すると、WallarmはMitigation modeに従ってアクションを実行します。
Forced browsing protection
この保護は、設定した時間枠(秒)内にアクセスされたユニークなエンドポイント数をカウントします。しきい値に達すると、WallarmはMitigation modeに従ってアクションを実行します。
Mitigation mode¶
いずれかのカウンタがしきい値を超えた場合、選択したアクションが実行されます。
-
Monitoring — 攻撃として記録され、この攻撃に属するリクエストはAPI Sessionsで
Brute force
、Forced browsing
、BOLA
、または汎用のEnum
攻撃に属するとマークされますが、リクエストはブロックされません。 -
Blocking → Block IP address — 攻撃として記録され、この攻撃に属するリクエストはAPI Sessionsで該当攻撃に属するとマークされます。これらのリクエストの送信元IPは、選択した期間、denylistに追加されます。
正規表現¶
ScopeセクションではPIRE正規表現ライブラリを使用し、詳細条件ではPCREを使用します。正規表現を使用する際は、次の演算子を使用します。
Operator | 説明 |
---|---|
~ (Aa) | 大文字小文字を区別しない正規表現で一致を検索します。 |
!~ (Aa) | 大文字小文字を区別しない正規表現で一致を除外します。 |
~ | 大文字小文字を区別する正規表現で一致を検索します。 |
!~ | 大文字小文字を区別する正規表現で一致を除外します。 |
例¶
例えば、eコマースのE-APPC
アプリケーションでは、各ユーザーの注文情報を/users/*/orders
に保存しているとします。攻撃者は数字のさまざまな組み合わせを試すスクリプトで、注文IDの一覧を取得できる可能性があります。これを防ぐには、各ユーザーアカウント配下に注文を保存するルートに対して、in minute
にmore than 2 unique values
というカウンタを設定します。これを超えた場合、その活動をオブジェクト(ユーザーの注文)のIDを列挙しようとする試み(BOLA攻撃)としてマークし、送信元IPを1時間ブロックします。
そのためには、次のスクリーンショットのようにBOLA protectionの緩和コントロールを構成します。
この例では、パラメータ値のregex\d*
は「0個以上の数字」を表し、数字で構成されたオブジェクトIDの列挙を試みていることを示します。
検出された攻撃の表示¶
列挙攻撃がMitigation modeに従って検出またはブロックされると、API Sessionsセクションに表示されます。
該当する攻撃タイプのセッションはAttackフィルターで検索できます。必要に応じて、セッション詳細内でもフィルタリングして、列挙攻撃に関連するリクエストのみを表示できます。