Sequence mitigation では、認証済みクライアントが API と通信するときのリクエストパターンを強制できます。
シーケンスルールを使い、API クライアントの既知の挙動を確立したり、悪意のある挙動を検出して緩和したりできます。
たとえば、銀行の資金移動中に作られる API リクエストは、次の順序になることがあります。
| 順序 | メソッド | パス | 説明 |
|---|---|---|---|
| 1 | GET |
/api/v1/users/{user_id}/accounts |
user_id は現在のユーザーです。 |
| 2 | GET |
/api/v1/accounts/{account_id}/balance |
account_id は、そのユーザーの口座の 1 つです。 |
| 3 | GET |
/api/v1/accounts/{account_id}/balance |
account_id は、同じユーザーの別の口座です。 |
| 4 | POST |
/api/v1/transferFunds |
振替元口座、振替先口座、振替金額を含むリクエスト本文です。 |
API ユーザーが GET /api/v1/accounts/{account_id}/balance の前に GET /api/v1/users/{user_id}/accounts を要求し、POST /api/v1/transferFunds の前に GET /api/v1/accounts/{account_id}/balance を要求するように強制したい場合があります。
Sequence mitigation を使うと、新しいシーケンス緩和ルール 2 つで、このリクエストパターンを強制できます。
次の 2 つのアプローチのいずれかで、シーケンスルールを作成 し、時間経過に沿った API の挙動を強制できます。
ポジティブセキュリティモデルは、想定パターンの外で API リクエストを行うユーザーをブロックします。ネガティブセキュリティモデルは、既知の悪意ある API 呼び出しシーケンスを実行するユーザーをブロックします。
Cloudflare ダッシュボードで API Shield ルールとして作ったシーケンスルールは、ルックバックウィンドウを使ってシーケンス内のエンドポイントを照合します。両方のエンドポイントが、互いから 10 リクエスト 以内(Endpoint Management 内のエンドポイント向け)に見つかり、かつ互いから 10 分 以内に行われていれば、ルールは一致します。
複数のエンドポイントを追加し、ルックバックウィンドウを無視して時間ベースの制約を設定するには、Sequence mitigation のカスタムルール を参照してください。
銀行の資金移動の例では、POST /api/v1/transferFunds の前に GET /api/v1/accounts/{account_id}/balance を要求させることは、ポジティブセキュリティモデルです。ユーザーは口座残高を一覧表示したあとでのみ、資金移動できます。
アプリケーションの通常の範囲外の不正な挙動が見つかり、正しいポジティブセキュリティモデルを調べている間にリクエストを止めたい場合は、ネガティブセキュリティモデルが役立ちます。
たとえば、認可の不具合により、ユーザーが GET /api/v1/users/{var1}/profile 経由で口座番号を含む他ユーザーのプロフィールを反復でき、その後に不正な資金移動を試みる場合は、GET /api/v1/users/{var1}/profile から POST /api/v1/transferFunds へのシーケンスをブロックまたは記録するルールを作成できます。
API エンドポイント へのリクエストを追跡するには、Endpoint Management に追加する必要があります。エンドポイントは、API Discovery、スキーマ検証、または Cloudflare ダッシュボードからの 手動追加 で Endpoint Management に追加します。
API Shield は、設定した セッション識別子 でセッションを追跡します。Sequence mitigation が想定どおりに動くには、API のエンドユーザーごとに一意なセッション識別子を設定する必要があります。
デフォルトでは、API Shield は、セッション識別子で識別した個々の API ユーザーについて、現在と直前 9 件の要求エンドポイントを保存します。デフォルトのルックバックウィンドウでは足りない場合は、アカウントチームにお問い合わせください。
Sequence mitigation は、シーケンスを構築するとき、同じエンドポイントへのリクエストをさらに重複排除します。
上の シーケンスの例 では、Sequence mitigation は次のシーケンスを保存します。
GET /api/v1/users/{user_id}/accountsGET /api/v1/accounts/{account_id}/balancePOST /api/v1/transferFunds
Sequence mitigation は、GET /api/v1/accounts/{account_id}/balance への 2 件のリクエストを重複排除し、1 件のリクエストとして保存します。
シーケンス緩和ルールのルックバック期間は 10 分です。同じセッション識別子を使う 2 件のリクエストは、間隔が 10 分以内ならシーケンスを延長します。前のリクエストから 10 分を超えて行われたリクエストは、新しいシーケンスを開始します。
たとえば、あるエンドポイントを別のエンドポイントの前に要求するルールを作成し、2 件のリクエストの間隔が 10 分を超えると、ルールは一致しません。
Sequence mitigation は現在クローズドベータであり、Enterprise のお客様のみ利用できます。ベータへの参加をご希望の場合は、担当のアカウントチームにお問い合わせください。