設計ポイント †
- 攻撃対象領域を最小限に抑える
- 本当に必要なものだけと公開・要求すべき
- コンシューマには、本当に必要なものを使うことだけを許可すべき
- セキュリティを確保するには、アクセス制御にどのデータが必要かを念頭に置いた上で、ユーザの視点に立ってAPIを設計しなければならない
- APIの設計者は、APIの設計を完全にセキュアな状態に保つために、APIのベースとなっているプロトコルやアーキテクチャに起因するデータ漏洩の可能性に注意を払わなければならない
アプリケーションのアクセス制御 †
エンドユーザのアクセス制御 †
センシティブな内容 †
センシティブなデータへの対処 †
- シーケンシャルなIDを返すことは止めた方が良い
- シーケンシャルなデータは他人のデータにアクセスを試みるために利用される可能性がある
センシティブなゴールへの対処 †
セキュアなエラーフィードバック †
- 403 Forbidden
- データへのアクセス不許可 → データが存在することを暗に認めていることになる
- 「404 Not Found」レスポンスに変えることも検討する
- 500 Internal Server Error
- APIのベースとなっている技術スタックに関する詳細情報が提供されないようにすること
- APIの内部で実際に稼働しているものの手がかりになるような情報を提供しないように注意する必要がある
ログ記録 †
- URLがログに記録される場合は、センシティブな情報が一切含まれないようにする
API呼び出しのステップ †
コンシューマの登録 †
APIを利用するためのクレデンシャルの取得 †
API呼び出しの作成 †
API攻撃 †
対策 †
- Webアプリ、モバイルアプリ、サードパーティパートナー、サプライヤー、関連会社それぞれを、外部トラフィック用の個別のAPIに分離する
- APIコールのレートを制限する
- ログファイルにAPIコール用のバケットを作成、APIダッシュボードや定期的なレポートを作り、セキュリティチームが異常や異常値を発見できるようにする
- 機械学習を活用して悪質なAPIコールのパターンや行動を特定する
WAF (Web Application FIrewall) †
WAAP (Web Application and API Protection) †
|