APIセキュリティとリクエストフィルタリング
1)なぜそれを必要とします
API-外部および内部プラットフォームの境界。認証、承認、検証、または要求の正規化におけるエラーは、脆弱性(BOLA/IDOR、インジェクション、SSRF、大規模な列挙、リソース枯渇)の悪用に変わります。目的:測定可能なSLOとリスクコントロールを使用して、境界からビジネスルールまでの詳細な防衛を作成します。
2) APIインベントリと分類
APIディレクトリ:すべてのサービス/エンドポイント、所有者、バージョン、クライアントタイプ(ウェブ、モバイル、パートナー)、モード(パブリック/パートナー/内部)、PII/財務データの登録。
Criticality:高(金融取引/認可)、中(プロファイル読み取り)、低(パブリックディレクトリ)。
攻撃面:REST、 GraphQL、 gRPC、 WebSocket、 Webhook。
ステータス:prod/staging/experimental、 deprecate policy、 token/key lifetime。
Shadow/abandoned API: ingrest logsによる検出、eBPF/Service Meshテレメトリー、ディレクトリとの比較。
3)脅威モデル(簡潔な)
識別:トークンハイジャック、セッションコミット、MitM、リプレイ。
認可:BOLA/IDOR、水平/垂直エスカレーション。
入力:注入(SQL/NoSQL/LDAP)、テンプレート/シリアル化、パスのトラバーサル、ヘッダー。
交通:DDoS/L7洪水、遅い要求、ファントムリトレイ。
統合:安全でないwebhook、 URLパラメータによるSSRF、ファイル/スキャンダウンロード。
論理:ボーナスの乱用、レース、idempotenceの矛盾。
4)基本的な安全基準(最低)
1.TLS 1。どこでも2+;HSTS;弱い暗号は無効です。
2.認証:クライアント、mTLS/またはHMACのOAuth2/OIDC-サービス・ツー・サービス。
3.認可:中央集権PDP (RBAC/ABAC)、オブジェクトレベル検査(BOLA)。
4.検証:strict scheme (OpenAPI/JSON Schema/Protobuf)、 extraフィールドの失敗。
5.制限:rate/quotas+burst、 per-client/per-IP/per-token。
6.書き込み操作のIdemotence、繰り返し/人種に対する保護。
7.WAF/gateway filtering: path/header normalization、 deny list、 payload-anti-patterns block。
8.秘密:KMS/Vaultのキー/証明書回転、漏出制御。
9.オブザビリティ:トレース、セキュリティ監査ログ(who/what/when/result)、アラート。
10.手順:Playbookインシデント、テストケース、通常のペンテスト/DAST。
5)認証とトークン管理
OAuth2/OIDC:短命のアクセストークンは、OIDCに従って厳しく更新します;オーディエンス/発行者/expはゲートウェイでチェックされます。
JWT: RS256/ES256;アサリの最小セット。'nbf/exp/aud'が必要です。PIIストレージの禁止。JWKSによるキー回転。
DPoP/PoP:トークンをクライアントキーにバインドして、リプレイ/ハイジャックのリスクを低減します。
社内システムおよび信頼できるパートナー向けのmTLS (CN/SAN認定、CRL/OCSP)。
HMAC(署名):決定論的正規化(method+path+timestamp+nonce+body-hash);有効なタイムウィンドウ(± 30代)。
ブラウザセッション:SameSite=strict/lax、 HttpOnly、 Secure;CSRF保護(double submit/state token)。
クライアントストレージ:モバイル上-セキュアストレージ(キーチェーン/キーストア)、デバッグ保護、ピン留め証明書。
6)承認(BOLA-first)
オブジェクトレベル:各オペレーションは、特定のリソース(リソースの所有者/スコープ/属性)に対する権利をチェックします。
RBAC/ABAC: 役割+属性(国、セグメント、リスク制限、KYCレベル)
ポリシー:deny-by-default;明示的な許可;負のケースのためのポリシーのバージョン管理テスト。
意思決定キャッシュ:役割/セグメントの変更における適応型TTL+障害。
7)要求のフィルタリングと正規化(ゲートウェイ/WAF)
正規化:繰り返しスラッシュの圧縮、禁止'。。/'、デコード、スペース/ゼロバイトのトリミング。
ヘッダー:allow-list ('Host'、 'Content-Type'、 'Accept'、 'Authorization'、 'Date'、 'Idempotency-Key'、必要なトレースヘッダー)。
メソッド:'GET/HEAD'ボディなし;'POST/PUT/PATCH'-タイプ'application/json'または厳密に許可されています。
次元:max-body、 max-headers、 max-path;early-reject 413/431。
ファイル:MIMEバリデータ、ウイルス対策/サンドボックス、アクティブコンテンツ禁止、画像リサイクル/消毒。
URL リダイレクト/fetchi: SSRFブロック(プライベート範囲/メタデータIP、スキーマ'https'のみ、allow-listドメインを拒否)。
SQL/NoSQLパターン:クエリのWAFルールセット+サーバーパラメータ化によるインジェクション署名。
ヘッダーポリシーの例(擬似フォーマット)
deny_headers: ["X-Forwarded-Proto","X-Original-URL","Proxy-Connection","Destination"]
require_headers: ["Authorization" (для protected), "Content-Type" (для write)]
strip_duplicates: true max_header_count: 32 max_header_size: 16KB
8)限界、クォータおよび抗体保護
料金制限:token-bucket/leaky-bucket;レベル-IPごと、APIキーごと、ユーザーごと、組織ごとに。
クォータ:毎日/毎月、書き込み/広範な方法のために別々。
適応:異常(突然のバースト/資格情報の詰め込み)の下で動的締め付け。
Slow-loris/slow-POST: read/keep-aliveタイムアウト、同時接続制限。
Antibot:デバイス指紋、行動標識、リスク増加のためのプルーフオブワーク/キャプチャ、トーラス/プロキシネットワークのリスト。
IPコントロール:geo/ASNフィルタ、「dirty」サブネットのリストを拒否、パートナー/管理パネルのリストを許可します。
9)入力データと回路の検証
フェイルクローズ:スキームに失敗したものはすべて400です。追加フィールド-拒否します。
タイプ/範囲:数値、日付(UTC/ISO-8601)、列挙値、行長、正規表現。
JSON品質:max-nesting、大きな配列/キーの禁止、正規順序(オプション)。
ビジネス検証:「Idempotency-Key」によるidempotency;不正防止ルール(動作周波数制限、量キャップ)。
GraphQL: depth/complexity limits、 allow-listedクエリ、authorization per field。
gRPC:厳格なProtobufスキーム、必須フィールド、メッセージサイズ制限。
10) Webhookおよび外部通話
署名:タイムスタンプ/ノンスを持つHMAC;処理前の検証。ウィンドウ+/-5分。
配達: 指数的な一時停止およびジッタが付いているRetrai;max-attempts;イベントID重複除外
ベンダーIP allow -list別々のサブドメイン/パス;最小限のホスティングスタック。
答え:2xxは成功した内部録音の後にだけ;それ以外の場合はクリアコードで4xx/5xx。
送信SSRFコントロール:コールバックURL-allow-listの場合、プライベートアドレスを拒否します。
11)暗号化と秘密管理
チャンネルで:TLS 1。2+/1.3、ピン留め、厳格な暗号ポリシー。
単独で:DB/オブジェクトストレージ暗号化、PII/財務データ用の個別のキー。
KMS/Vault:秘密の集中保管、短いTTL、自動回転。
キーおよび証明書:環境のために分けて下さい;問題の監査;ログへの出力を禁止します。
Token-introspection:オフライン失効リスト、短い'exp'。
12)観察可能性、監査および応答
セキュリティログ:認証の試行/成功、承認の失敗、レートリミットイベント、ロール/リミットの変更。
トレース:相関IDエンドツーエンド;外部コールトレーシング。
メトリクス:RPS、 P95/P99遅延、コードによるエラー率、401/403/429の共有、ヒットレート制限、異常。
アラート:401/403/429スパイク、5xx成長、頻繁なidempotency競合、QL複雑度グラフの鋭い偏差。
Playbooks:キー/トークンをブロックし、ルールをすばやくロールバックし、拒否リストをウォームアップし、サービス所有者に通知します。
フォレンジック:物議を醸すペイロードの保存(安全なPII編集)、孤立したスタンドでの再生。
13)クライアントへのエラーと回答
均一なエラーフォーマット(コード、メッセージ、トレースID、カテゴリ)。
リークなし:SQL、テーブル名、内部IDを開示しないでください。「なぜ」ではなく403。
コード:400(検証)、401(認証なし)、403(権利なし)、404(マスクの存在)、405/406、413/429、500/503。
Retry-Hints: 429-'Retry-After';idempotencyのために-同じキーでの繰り返しに関するアドバイス。
14)建築パターン
ゼロトラスト:mTLS、すべてのサービス間の明示的な承認、最小限の権限。
APIゲートウェイ+WAF+サービスメッシュ:職務の分離-境界、L7ポリシー、内部認証。
カナリア/ブルーグリーン:監督と段階的に新しい濾過ルールをロールアウトします。
フェイルクローズ:クリティカルな書き込みの場合、誤った操作を許可するよりも安全に拒否することをお勧めします。
Backpressure:キュー/バッファ、サーキットブレーカ、タイムアウト/予算。
15)実用的なルールの例(擬似設定)
15.1パスとメソッドの制限
/api/v1/payments:
allow_methods: [POST, GET]
auth: oauth2_required body:
content_type: application/json max_size: 256KB
15.2 Idempotency
require_header: Idempotency-Key (UUIDv4)
store: redis:ttl=24h on_duplicate: return_previous_result
15.3リクエスト署名(HMAC)
signature:
scheme: "HMAC-SHA256"
required_headers: ["X-Signature","X-Timestamp","X-Nonce"]
allowed_drift: 300s string_to_sign: METHOD + "\n" + PATH + "\n" + SHA256(body) + "\n" + X-Timestamp + "\n" + X-Nonce
15.4 SSRF保護
outbound_http:
allowlist_domains: ["kyc. partner. com","psp. example. net"]
block_private_ip: true require_https: true
15.5 GraphQL制限
graphql:
max_depth: 8 max_complexity: 500 allowlisted_operations_only: true
16) iGaming/Financeの詳細
セグメント制限:CCM/国/リスクプロファイルに応じて。
時間ウィンドウ:入出金周波数ルール、トランザクション間の「クールダウン」。
ボーナス乱用防止:アカウント/デバイス/IP/支払いツールの一貫したロック。
規制要件の監査:アクションと意思決定のログ(KYC/AML)の保存、保持期間、変更されないログ。
17) Prod Readyチェックリスト
- 完全なAPIディレクトリとデータフローマップ(PII/財務タグ付き)。
- CIにおけるOpenAPI/Protobufスキーマ、検証テストおよび契約。
- 設定されたmTLS/HMAC/OAuth2;短いTTLトークン;キーの回転。
- BOLAテストおよび否定的な承認の場合;一元化されたPDP。
- 限界/クォータ/アンチボット、スローロリスに対する保護。IPフィルタ。
- WAF/ゲートウェイ正規化ルール、アンチインジェクション署名。
- 書き込み操作のIdempotency;再生に対する保護。
- Webhook署名とallow-list;絶縁されたエンドポイント。
- KMS/Vaultの秘密;暗号化されたストレージ;異常を警告します。
- ダッシュボード、アラート、監査ログ;プレイブックのインシデントをしていました。
- 通常のpentest/DAST/SAST、脆弱性トラックおよびパッチダウンロード。
18) Antipatterns(不可能です)
トラスト'X-Forwarded-'その周囲に硬質TLSなし。
任意の"Content-Type"と"soft' JSONスキームを受け入れます。
リコール/回転のない長寿命のJWT。
一元化されたポリシーを使用せずに、ロールとビジネスルールをコードにミックスします。
秘密/PIIのログ。詳細な500メッセージが外側に表示されます。
「一時的な」オープンエンドポイントの制限と承認なし。
19)バージョン管理とDeprekate
path/headerのバージョン;サポートポリシー(例:N-2)。
お知らせ:非推奨の締め切り、古いバージョンの使用の監視、制御されたシャットダウン。
互換性:顧客/パートナー契約とテスト行列。
20)安全テスト
スキーム/ポリシー、ファジング入力、ネガティブ認証の契約テスト。
限界/クォータ、保護テスト(カオストラフィック)を備えたパフォーマンスプロファイル。
Red-team/bug-bounty: BOLAスクリプト、SSRF、署名/リプレイ、GraphQL-complexity。
TL;DR(ドクター)
1.APIディレクトリ+厳密なスキーム。
2.クライアントのためのOAuth2/OIDC、内部mTLS/HMAC。
3.資源ごとのBOLAの周囲(ABAC/RBAC)。
4.フィルタリング:パス/ヘッダー、制限、WAFルールの正規化。
5.Idempotence、署名、再生/SSRF保護。
6.KMS/Vaultとシークレットローテーション。
7.観測性、アラート、プレイブック。