アプリケーション・プログラミング・インターフェース(API)とは、通常はインターネット経由で、2つのアプリケーションがどのように連携できるかを定める一連のルールと仕様です。APIは、アプリケーションの「玄関」とも呼ばれます。ゼロから始めるのではなく、既存のプラットフォーム上に構築しやすくすることで、開発エコシステムを強化します。
例えば、旅行アプリを開発するデベロッパーは、独自に気象データ機能を開発する代わりに、API機能を使って天気アプリからデータを呼び出せます。また、ホテルや航空会社から料金情報や空き状況を取り込むこともできます。
企業が最善のソフトウェアコンポーネントを組み合わせ、顧客により優れたユーザー体験を提供しようとする中で、APIの人気はますます高まっています。しかし、この人気の高まりによって、APIはサイバー犯罪者にとって格好の標的にもなっています。
本ガイドでは、最も重大なAPIセキュリティ脆弱性を取り上げ、企業がAPIを保護するための12の方法を紹介します。
こちらもお読みください:現代のクラウド環境でAPIスプロールに立ち向かう
APIセキュリティの重要性
APIセキュリティは、APIが異なるシステムを接続し、データを共有するために使われることが多いため、企業にとって不可欠です。このデータには、財務データ、個人情報、医療記録などの機密情報が含まれる場合があります。その結果、APIセキュリティの脆弱性は、データ侵害、顧客情報の窃取、企業の評判の失墜につながる可能性があります。
APIセキュリティが重要であるもう1つの理由は、APIが社内システムやデータを外部のデベロッパーに公開するために使われることが多い点です。これは、パートナーとの統合を可能にしたり、サードパーティーのデベロッパーが既存のプラットフォーム上に新機能を構築できるようにしたりするために行われます。
しかし、社内システムやデータを外部のデベロッパーに公開することには、リスクも伴います。例えば、APIが適切に保護されていなければ、機密データへの不正アクセスを許してしまう可能性があります。さらに、サイバー犯罪者はAPIセキュリティの脆弱性を悪用してサービス拒否(DoS)攻撃を仕掛けたり、アカウントを乗っ取ったりすることもできます。
最も重大なAPIセキュリティ脆弱性
オブジェクトレベル認可の不備(BOLA)
BOLAは、APIベースのアプリケーションに影響を及ぼす一般的な脆弱性です。オブジェクト内の機密フィールドが不適切に公開されることで発生します。
典型的な例は、ユーザーの個人情報が、ブラウザーやモバイルデバイスに送信されるAPIレスポンス内で安全に保管されていないケースです。その結果、攻撃者はその情報を悪用して本物のユーザーになりすまし、アカウントにアクセスできます。
ユーザー認証の不備
APIリクエストにシステムの認証情報が必要ない場合、ユーザー認証が破綻している可能性が高いといえます。この脆弱性が重大なのは、認証手順の実装を誤ると、重要な情報やシステムへの不正アクセスを許してしまう可能性があるためです。
リソース不足とレート制限の不備
APIサーバーは、利用可能なリソースをすべて消費させる悪意のあるリクエストによって過負荷状態になる可能性があります。これにより、正規ユーザーがサービスを利用できなくなることがあります。APIのレート制限は、APIサーバーが処理できるトラフィック量を制御する手法です。DoS攻撃からの保護に役立ち、正規ユーザーがAPIを利用できる状態を確保します。
不適切なアセット管理
APIリクエストの認証には、APIキーやシークレットがよく使われます。これらのAPIキーやシークレットが適切に管理されていないと、漏えいして攻撃者に悪用され、APIリソースへの不正アクセスを許してしまう可能性があります。
過剰なデータ露出
APIレスポンスには、ユーザー情報、財務データ、医療記録などの機密データが含まれることがよくあります。機密データを返すAPIエンドポイントが多すぎると、そのデータが漏えいする可能性が高まります。
大量割り当て
大量割り当てとは、APIエンドポイントがパラメーターを過剰に含むリクエストを受け付けてしまう脆弱性です。攻撃者はこれを悪用して、本来アクセス権のないデータを変更できます。
機能レベル認可の不備
APIエンドポイントには、ユーザーの役割に応じて異なるアクセスレベルが設定されていることがよくあります。例えば、管理者はすべてのAPIエンドポイントにアクセスできる一方、一般ユーザーは一部にしかアクセスできない場合があります。APIエンドポイントがユーザーの権限を正しく確認しないと、不正アクセスを許してしまう可能性があります。
インジェクション
APIエンドポイントは、SQLインジェクションやスクリプトインジェクション攻撃に対して脆弱なことがよくあります。犯罪者はこれらの攻撃を使って機密データにアクセスしたり、サーバー上で悪意のあるコードを実行したりできます。
APIを保護する12のベストプラクティス
リスクがあるとはいえ、企業がAPIを保護するために実行できる対策はあります。
- OAuthによる認証と認可を実装する:API認証とは、APIリクエストを行うユーザーが認証済みであることを確認するプロセスであり、認可とは、APIリクエストが適切な権限で行われていることを確認するプロセスです。この2つのプロセスはOAuthで実装でき、リソースへの不正アクセスを防止できます。
- 暗号化:機密データの漏えいを防ぐため、APIリクエストとレスポンスを暗号化できます。SSL/TLS暗号化を使えば、APIのトラフィックだけでなくAPIキーも暗号化し、漏えいを防止できます。
- 最小権限の原則:最小権限の原則とは、ユーザーには業務の遂行に必要なリソースへのアクセスだけを許可すべきだという考え方です。各APIエンドポイントに必要最小限のアクセス権だけを設定することで、エンドポイントにも適用できます。
- データ露出を制限する:APIレスポンスは必要なデータだけを返すべきです。機密データを返すAPIエンドポイントへのアクセスは、認可されたユーザーに限定する必要があります。
- レート制限を適用する:APIのレート制限は、APIサーバーが処理できるトラフィック量を制御する手法です。DoS攻撃からの保護に役立ち、正規ユーザーがAPIを利用できる状態を確保します。
- API入力を検証する:API入力の検証では、APIリクエストに有効なデータが含まれていることを確認します。これにより、悪意のあるリクエストがサーバーで処理されるのを防げます。
- APIキーとシークレットを適切に管理する:APIキーは本質的にはユーザーIDであり、APIシークレットはそのIDを検証するための「パスワード」またはコードです。APIキーとシークレットは、認可されたユーザーとのみ共有すべきです。
- APIトラフィックを監視する:APIトラフィックの監視とは、悪意のある活動を検知するためにAPIリクエストを監視するプロセスです。
- APIアクティビティをログに記録する:APIアクティビティのログ記録とは、APIリクエストとレスポンスを記録するプロセスです。これにより、悪意のある活動の検知や問題の診断に役立ちます。
- APIを定期的に更新する:セキュリティ脆弱性に対処するため、APIソフトウェアを最新の状態に保つことが不可欠です。
- ゼロトラストの理念を採用する:ゼロトラストでは、すべてのAPIリクエストを信頼できないものとして扱います。すべてのAPIリクエストに対して認証と認可を実装することで、この原則を適用できます。
- API管理ソリューションを利用する:API管理ツールとプラットフォームは、安全な環境で認証、認可、レート制限、トラフィック監視を提供することで、APIの保護に役立ちます。さらに、これらのツールは企業とデベロッパーの間のインターフェースとして機能します。クライアントがアクセスできる対象を決定し、APIごとに利用制限を設定し、誰が最も頻繁に、どのように利用しているかを監視し、OAuthやIP制限などのセキュリティ対策を管理できます。
今後の展望
マイクロサービスの急速な普及、より速いアプリケーション開発を求めるデベロッパーへのプレッシャー、そしてIoTデバイスの普及が進む中、APIは今後も成長を続け、それに伴ってAPIセキュリティへの懸念も高まっていくでしょう。
API管理ソリューションはさらに高度化し、使いやすくなって、より広く導入されるようになります。新たな脅威が登場するにつれ、APIセキュリティのベストプラクティスも進化し続けるでしょう。そのため企業は、アプリケーションを安全に保つため、APIセキュリティに関する最新のニュースやトレンドを常に把握する必要があります。