API GatewayでのセキュアなAPI
Zeping Bai
November 4, 2022
はじめに
2021年6月、LinkedInユーザーのデータのほぼ92%が、セキュリティコントロールが欠如した公開APIによって漏洩しました。闇市場で公開されたデータには、7億人のユーザー名、個人データ、メールアドレス、電話番号、その他の詳細が含まれていました。LinkedInはこの事件を違法なアクセスではなく、公開データのクロールとして見ていますが、それでもAPIセキュリティ対策の重要性を浮き彫りにしています。
アプリケーションがサービスを提供するための外部インターフェースとして、APIは常に外部トラフィックにさらされ、サービス拒否、インジェクション、既知の脆弱性を利用した攻撃を行う敵対的な攻撃者に遭遇します。例えば、攻撃者は2020年12月にlog4j 2の欠陥を利用して、APIに対して未設定の攻撃を行いました。したがって、これらの悪意のある攻撃者を防ぐためにAPIの能力を強化する必要があります。しかし、APIを保護するための対策を講じる前に、まずAPIとは何かを理解しましょう。
APIとは何か?
従来のAPI(Application Programming Interface)は、ソフトウェアの静的または動的リンクライブラリを呼び出してその機能を利用することを意味します。開発者は、オペレーティングシステムが提供するTCP/IPなどのAPIを呼び出すことで、既存のソフトウェアが提供する機能を再利用できます。
ソフトウェアシステムとネットワークの進化に伴い、「API」という用語は、ネットワークを介してアクセスされるシステムインターフェースを指すようになりました。クライアントは、HTTPなどのプロトコルを使用してこれらのインターフェースを呼び出し、天気情報を取得するためにWeather APIをクエリするなどのクライアント機能を実行します。
本来の意味では、APIはソフトウェアシステムが他のサービスに提供するチャネルを指し、さまざまなサブシステム間の相互運用の仕様を定義します。例えば、認証サービスは、ユーザーログイン、登録、ユーザー情報の取得のためのインターフェースを提供します。他のサービスはこれらの呼び出しインターフェースを使用して、ユーザー認証の機能を完了できます。同様に、APIを通じて、サブシステムはアプリケーション全体のタスクを達成するために協力できます。
APIセキュリティとは何か?
APIの概要を説明した後、APIセキュリティについて紹介します。 APIセキュリティには、主に3つの視点があります:
情報セキュリティ(InfoSec): 情報の観点から、情報が生成、伝送、保存、破棄のライフサイクル全体を通じて保護されていることを保証します。
ネットワークセキュリティ(NetSec): ネットワークの観点から、ネットワーク上で伝送されるデータが盗聴や改ざんされず、許可されていない個人がネットワークにアクセスできないことを保証します。
アプリケーションセキュリティ(AppSec): アプリケーションシステムの観点から、開発されたアプリケーションが悪意のある攻撃を防ぐことができることを保証します。
APIセキュリティはこれら3つの側面の交差点であり、APIセキュリティをしっかりと行うためには、これら3つの側面が不可欠です。
一般的なAPIセキュリティ攻撃
OWASP(Open Web Application Security Project)は、一般的なAPIセキュリティ問題のリストを公開しています OWASP API Security Project | OWASP Foundation。
これには以下の問題が含まれます:
Broken Object Level Authorization: ユーザーがアクセス権のないデータオブジェクトにアクセスする。
Broken User Authentication: 認証サービスの実装エラーにより、ユーザーが認証メカニズムをバイパスしてAPIに不正にアクセスする。
Excessive Data Exposure: ユーザーが過剰な機密データを取得することを許可する。これは本来禁止されるべきです。
Lack of Resources & Rate Limiting: 顧客の要求を満たすために必要なリソースの数や現実的なリクエスト量に対する制限が欠如している。
Broken Function Level Authorization: ユーザーがアクセス権のない機能APIにアクセスする。
Mass Assignment: ユーザーが誤って開発されたインターフェースを通じて、編集権限のないデータを変更する。
Security Misconfiguration: APIに対するセキュリティ対策が不適切に設定されている。
Injection: 信頼できないデータ入力がSQL、コマンドインジェクション、予期しないコマンド実行、またはデータアクセスを引き起こす。
Improper Assets Management: テスト環境用のAPIや以前の誤ったオフラインAPIバージョンをリリースするなど、APIリソースを不適切に管理する。
Insufficient Logging & Monitoring: APIアクセスのロギングと監視ツールが欠如しているため、監査方法を使用してセキュリティ異常を特定することが困難。
APIセキュリティに関連する一般的な問題に気づいた後、APIを保護するために何を実施すべきでしょうか?
APIを保護する方法
APIを保護するためには、3つの視点から対策を講じることが可能です:
InfoSec: 法的ポリシーとセキュリティ要件に準拠した情報の機密性システムを構築し、個人情報の漏洩を防ぎます。
NetSec: データ伝送の暗号化と検証が必要です。
AppSec: アプリケーションのセキュリティを強化する必要があります。
以下は、APIセキュリティのための追加の実践です。
常時暗号化: フルフローのTLS設定により、管理されていないネットワークによるデータ盗聴やデータ改ざんを防ぐことができます。さらに、クライアント側の正当性を検証するためにmTLSを有効にし、不正アクセスを防ぐことも必要です。
トークンの慎重な使用: JWTを使用する際には注意が必要です。クライアントがJWTをデコードできるため、誤って使用すると機密情報が漏洩する可能性があります。また、特定のログインセッションを無効にする際に、その制限により無効化手順が複雑になるため、困難が生じます。
小さな権限粒度: APIとデータアクセスに最小限の権限を割り当て、不正アクセスの可能性を回避します。
入力検証: クライアントの入力値を信頼しないでください。クライアントの入力値がセキュリティ要件を満たしていることを確認するために、入力値を検証する必要があります。
レート制限: APIアクセスの速度を制限します。この対策により、システムが一度に処理できない大量のリクエストによって引き起こされるサービス拒否攻撃を防ぎます。
ロギングと監視: システムに適切なロギングと監視メカニズムを設計することで、セキュリティイベントを迅速に特定し、適切な対応を取ることができます。また、情報セキュリティイベントが発生した後、影響を受けたシステムとデータを特定し、潜在的なデータ漏洩の範囲を判断するために過去に遡ることができます。
上記の対策は、アプリケーションシステムに個々のコンポーネントを処理することで特定の変更を加える必要があり、非常にコストがかかるだけでなく、さらなる問題を引き起こす可能性があります。
アプリケーションサービスを危険にさらすことなく、セキュリティ対策をどのように実施できるでしょうか?
APIゲートウェイ
APIゲートウェイは、システム変更の外側に新しい道を提供し、変更コストを大幅に削減し、集中化された統一されたイングレストラフィック管理を提供します。APIゲートウェイは豊富なセキュリティ機能も提供し、不正な訪問を禁止し記録することができます。
Apache APISIXを例として、以下のセクションでは、APIを保護するためのAPIゲートウェイのいくつかのアプリケーションシナリオを説明します。
暗号化(TLS/mTLS)
APIに対してTLSを有効にしてHTTPSアクセスを提供するだけでなく、mTLSを有効にしてクライアントの身元を検証することもできます。もちろん、内部ネットワークを通過するトラフィックの安全性を保証するために、上流サービスに対してTLS/mTLSを有効にすることも可能です。必要な機能を有効にするには、mTLSマニュアルを参照してください。
身元検証
すべての接続を暗号化できますが、これだけではAPIの安全性は保証されません。そのため、実際のビジネス環境では、認証に関連するコンポーネントを含める必要があります。この問題に対処するために、APISIXは、外部認証サービスに簡単に接続できる、またはゲートウェイを介して直接認証を行うためのさまざまなプラグインを提供します。これらのプラグインは、Basic Auth、Key Auth、JWT Auth、Forward Authなどのより複雑なものから、LDAP、OpenID Connect、Open Policy Agentなどのよりシンプルなものまで多岐にわたります。
レート制限
リソース不足とレート制限は、2つの一般的な攻撃です。これらの状況に対処するために、ゲートウェイには通常、レート制限に関連するプラグインが含まれています。Apache APISIXも同様で、limit-count、limit-req、limit-connの3つのプラグインを提供し、APIリクエスト速度、リクエスト測定、接続制限機能を提供します。これにより、APIアクセスの圧力を効果的に制御し、システムが管理不能な量のリクエストで過負荷になるのを防ぐことができます。
セキュリティ制限
APISIXは、APIに対してクロスドメインおよびクロスサイトリクエストフォージェリ保護を提供するCORSおよびCSRFプラグインを提供し、そのセキュリティを保護する能力をさらに強化します。さらに、その制限プラグインは、IP、UA、Referer、URIをブロックする機能を有効にし、ほとんどのAPI攻撃に対抗できます。
入力検証
APISIXは、request-validationプラグインを提供し、APIプロバイダーがjsonschemaを使用してユーザー入力を検証できるようにします。構造化データと検証ルール記述言語は、データ検証に適しています。
可観測性
上記の方法はすべてAPIを保護するためのものです。しかし、完全に安全なシステムはありません。システムが攻撃された場合、攻撃の原因を迅速に特定し、攻撃によるさらなる損害を防ぐ必要があります。そのため、APISIXは、Kafka、Clickhouse、Google Cloud、Splunkなどのクラウドプロバイダーが提供するロギングサービスなど、さまざまな宛先にログを送信できる幅広いロギングプラグインを提供します。
さらに、APISIXは、Skywalking、OpenTelemetryなどのトレーシングプログラムに接続するリンクトラッキング機能を提供します。
また、APISIXは、Prometheusプラグインを提供し、APIリクエストに関連するメトリクスを計算してPrometheus監視サービスにエクスポートし、パフォーマンス問題を特定し、システムサービスの中断を防ぐのに役立ちます。
システムを十分に可観測にすることで、潜在的なセキュリティインシデントをタイムリーに特定できます。
プログラミング能力
最後に、APISIXは、0-day脆弱性に対処するためにserverlessプラグインも提供し、リクエストが来たときにLuaコードを使用していくつかのロジックを実行できます。この機能を利用して、0-day脆弱性が発生したときに一時的にブロックすることができます。
結論
APIセキュリティはサービスプロバイダーにとって重要であるため、開発者はそれを最新の状態に保つ努力をしなければなりません。この記事では、Apache APISIXを例として、APIゲートウェイがさまざまなアプリケーション設定でどのように使用できるかを示し、システム変更とは異なる新しい戦略を紹介しました。これにより、開発者はセキュリティ問題のコストを削減するのに役立ちます。