API6:2023 機微なビジネスフローへの無制限アクセス(Unrestricted Access to Sensitive Business Flows)
| Threat agents / Attack vectors(脅威エージェント/攻撃ベクター) | Security Weakness(セキュリティの弱点) | Impacts(影響) |
|---|---|---|
| API 固有:悪用難易度(Exploitability) 容易 悪用は通常、API が支える ビジネスモデルの理解、機微なビジネスフローの発見、そしてそれらへの 自動化されたアクセス によって事業に損害を与える形で行われます。 |
蔓延度(Prevalence) 広範 : 検出可能性(Detectability) 平均 ビジネス要件を十分に支えるための API 全体像の欠如 が、この問題の蔓延に寄与します。攻撃者は手動で、対象ワークフローに関与する リソース(エンドポイント等) とその連携を特定します。緩和策があっても、それを 回避 する方法を見つけようとします。 |
技術的影響(Technical) 中程度 : ビジネス影響(Business) ケース依存 一般に 技術的被害は想定されません。しかし、正当なユーザーの購入妨害や、ゲーム内経済の インフレ など、事業上の損害 を引き起こし得ます。 |
API は脆弱か?
API エンドポイントを作成する際は、それが どのビジネスフローを公開しているか を理解することが重要です。中には 過剰アクセス により事業に害を与え得る、より機微なフローがあります。
機微なビジネスフローと、それに対する過剰アクセスの一般的な例:
- 商品の購入フロー — 需要の高い商品の在庫を一度に買い占め、転売で高値を付ける(スカルピング)
- コメント/投稿作成フロー — スクリプトで スパム を大量投稿
- 予約作成 — すべての空き枠を予約して、他ユーザーの利用を妨害
過剰アクセスのリスクは 業界や事業によって異なる 場合があります。例えば、スクリプトによる投稿作成は、ある SNS ではスパムリスクと見なされても、別の SNS では 奨励 されることがあります。
機微なビジネスフロー を公開しながら、適切なアクセス制限 を設けていない API エンドポイントは 脆弱 です。
攻撃シナリオ例
シナリオ #1
あるテック企業が感謝祭に新型ゲーム機を発売すると発表。需要が非常に高く在庫は限定的。攻撃者は新製品を 自動購入 して決済まで完了させるコードを書く。
発売当日、攻撃者はコードを 複数の IP/地域 に分散して実行。API に適切な防御がなく、攻撃者は正規ユーザーに先んじて 在庫の大半を購入。その後、他プラットフォームで 高値転売 する。
シナリオ #2
ある航空会社は キャンセル料なし のオンライン購入を提供。悪意あるユーザーが、ある便の 90% の座席を予約。
出発数日前、当該ユーザーが 一斉キャンセル したため、航空会社は座席を埋めるべく 値下げ を余儀なくされる。そこでユーザーは 当初より安価 なチケットを 1 枚だけ購入する。
シナリオ #3
ライドシェアアプリは 紹介プログラム を提供。ユーザーは友人を招待し、参加ごとに クレジット を獲得し、乗車代として利用可能。
攻撃者は 登録自動化スクリプト でこのフローを悪用し、ユーザーを量産して ウォレットに過剰なクレジット を貯める。その後、無料乗車 を享受したり、クレジット過多のアカウントを 現金化 する。
防止方法(How To Prevent)
緩和策の計画は 二層 で行います:
- ビジネス層 — 過剰利用で事業に害 を与え得るビジネスフローを特定する。
- エンジニアリング層 — 事業リスクを緩和する 適切な保護機構 を選定する。
自動化された脅威を 減速 させる代表的手段(容易なものから実装が難しいものまで):
- デバイスフィンガープリンティング:想定外のクライアント(例:ヘッドレスブラウザ)を拒否し、攻撃者に より高コストな手段 を強いる。
- ヒト検知:CAPTCHA または 生体的特徴(例:タイピングパターン)を用いる。
- 非人間的パターン検知:ユーザーフローを分析し、人間ではあり得ない挙動を検出(例:「カート投入」から「購入完了」まで 1 秒未満)。
- Tor 退出ノード/著名プロキシのブロック を検討する。
マシンが直接消費する API(開発者向け・B2B API) へのアクセスは 保護と制限 を行う。これらは 必要な防御が不十分 なことが多く、攻撃者の 格好の標的 になりやすい。