プロフィール

ミアミン
ホワイトハッカーを夢みて、セキュリティアカデミーでお勉強中のミーアキャット。心配性でやさしい性格で、「みんな無事ミア?」「危険はないミア?」が口癖。ちょっとしたことですぐに「キャッ!」と動揺しがち。

羽鳥 拓也
開発エンジニアとして社会人としてのキャリアを始め、情報処理安全確保支援士合格後、サイバーセキュリティの道に。母国語はRubyと日本語。
現代のWebシステムには欠かせないAPI

羽鳥さんこんにちは!今日のテーマは「API」ですね。ときどき聞く言葉だけど、実はよくわかってないミア……。

羽鳥さん
API(Application Programming Interface)は現代のWebシステムの中で欠かせない存在ですから、会議などで耳にすることも多いでしょう。実はAPIにもセキュリティ対策が必要なんです。

キャッ!知らないと大変なことになりそうミア!

羽鳥さん
そうですね。今回は、APIとは何か、どこで使われているのか、そしてAPI脆弱性診断をスムーズに進めるために事前に準備をしておくべき3つのポイントについて解説します。
APIとは何か?

羽鳥さん
API(Application Programming Interface)は、異なるソフトウェア、システムが相互に通信するためのインターフェースです。APIは、特定の機能やデータにアクセスするためのプロトコルを提供し、ソフトウェア間の連携を容易にします。

むむ、ちょっと難しいミア……異なるソフトウェア、システムが相互に通信するとどんなことができるミア?

羽鳥さん
Webサイトの中に、SNSの投稿や地図が表示されているのを見たことはないですか?あれはAPIによって、WebサイトがSNSや地図サービスと通信することで表示されるんです。

おぉ!それなら見たことあるミア。たしかに異なるソフトウェア、システム同士ミア!

羽鳥さん
そう。APIを使用することで、開発者は異なるソフトウェアやシステム、アプリケーションの機能を活用し、効率的かつ迅速に開発を進められるんですよ。
APIの基本的な仕組み

羽鳥さん
APIは、サーバーに対するリクエストと、リクエスト元へのレスポンスの形式で動作します。クライアント(要求を出す側)はサーバー(要求を処理する側)に対して特定のリクエストを送り、サーバーはそのリクエストに基づいて適切なレスポンスを返します。これにより、クライアントはAPIが提供するデータや機能を利用できます。

ふむふむ、なんとなくイメージがわいてきたミア。

羽鳥さん
例えば、WebブラウザがWebページを表示する際、Webブラウザはサーバーに対してHTTPリクエストを送信し、サーバーはHTML、CSS、JavaScriptなどのリソースをレスポンスとして返します。APIも同様に、WebブラウザからAPIエンドポイントにリクエストを送信し、サーバーがJSONやXML形式のデータを返すことが一般的です。
APIの種類

ところで、APIにもいろいろ種類があるミア?

羽鳥さん
APIにはいくつかの種類があり、それぞれの用途に応じて異なる仕様が採用されています。では、主要なAPIの種類を見ていきましょう。
- REST API
REST(Representational State Transfer)は、最も一般的なAPIの一つです。リソース(データ)はURLで識別され、GET、POST、PUT、DELETEなどのHTTPメソッドを通じて操作されます。REST APIはシンプルなつくりのため、多くのWebサービスで広く利用されています。 - SOAP API
SOAP(Simple Object Access Protocol)は、XMLを利用してメッセージを交換するプロトコルです。XML形式を使用して情報を送受信します。 - GraphQL
Meta社が開発しているGraphQLは、クライアントが必要とするデータの構造を定義し、定義したデータ構造に応じたレスポンスを取得できるようにするクエリ言語です。これにより、必要なデータだけを取得できるため、APIの効率性が向上します。 - gRPC
Googleが開発したgRPCは、プロトコルバッファを使用してデータを交換する高性能なRPC(Remote Procedure Call)フレームワークです。レスポンスの遅延が起こりにくく、単位時間当たりの処理できる量を増やすことができ、マイクロサービス間の通信に適しています。

Meta社やGoogleが開発しているAPIもあるミア!
APIの利用例

羽鳥さん
先ほど「APIはSNSや地図サービスなどで使われている」と説明しましたが、他にもさまざまなものに利用されているんですよ。もう少し詳しく見てみましょう。
- ソーシャルメディア/SNS
SNSにおいて、APIを使用すると、他のアプリケーションやWebサイトから、ユーザーのSNSアカウントにアクセスし、投稿したデータやアカウントデータなどを取得・操作できます。 - 地図サービス
地図サービスのAPIを使用すると、開発者は自分のアプリケーションに地図機能を組み込むことができます。これにより、ユーザーは地図の表示や経路検索、場所の検索などが可能になります。 - 金融サービス
金融機関のAPIを使用すると、Webサイトやアプリケーションに決済機能を統合できます。これにより、安全かつ迅速なオンライン取引が可能になります。 - IoT(Internet of Things)
IoTデバイスはAPIを通じてデータを送受信し、他のデバイスやクラウドサービスと連携します。例えば、スマートホームデバイスはAPIを使用して制御され、ユーザーはリモートでデバイスを操作することができます。
APIを利用する背景

オンラインのクレジットカード決済もスマートホームデバイスもよく利用しているミア。こんなに身近なところでたくさん利用されているものだったなんて……!

羽鳥さん
APIがこれほど利用されるようになった背景としては、Webサービスが複雑化し、システムに求められる機能が多くなったことが挙げられますね。
具体的には、一つのWebサービスにおいて、「SNSのデータを流用したい」「自社のWebサービス上でも他の企業が提供しているデータと同じデータを提供したい」といった要望が増えたり、小規模なサービス同士を組み合わせて連携させることで、一つの大きなアプリケーションとして構築する手法が増えたりしたことが背景として考えられます。

そうした中で、なぜAPIが活用されるようになったミア?

羽鳥さん
APIには次のようなメリットがあるからです。
- 再利用性の向上
一度開発したAPIは、他のアプリケーションやサービスでも再利用できます。これにより、開発コストと時間を削減できます。 - システムの拡張
APIを使用することで、新しい機能を追加する際に既存のシステムに大きな変更を加える必要がなくなります。そのためAPIを介して新しいサービスや機能を簡単に統合できます。 - インターフェースの標準化
APIは標準化されたインターフェースを提供するため、異なるシステム間の互換性が向上し、異なる開発チームが共同で作業しやすくなります。
このように適切に利活用することで、Webサービスの多機能化や開発の高速化が期待できるAPIですが、その一方で、セキュリティ対策を怠るとインシデントの原因となる可能性も……。

キャッ!APIの知識に気を取られて、すっかり忘れてた……ここは「セキュリティアカデミー」だったミア。
なぜAPIに対する脆弱性診断が必要?

羽鳥さん
そう、ここからが本題です(笑)。APIのセキュリティを検査し、潜在的な脆弱性を検出する「API脆弱性診断」について説明しましょう。
APIは異なるソフトウェアシステムが相互に通信するためのインターフェースを提供していますから、APIが脆弱であれば、不正アクセスやデータ漏えいのリスクが高まります。そのため、APIによる提供サービスのセキュリティ品質を担保するためには、APIの脆弱性を事前に把握しておくことが欠かせないのです。

なるほど、たしかに重要ミア。具体的にどんな検査をするミア?

羽鳥さん
API脆弱性診断では、以下の点に注目してセキュリティ評価を行います。
■APIが適切に認証および認可を行っているかを確認
OAuthやAPIキーなどの認証・認可に関わる部分が正しく実装されているかを検査し、認証・認可されたユーザーのみが適切な操作を行えることを保証します。
- 認証
アクセストークン、JWT(JSON Web Token)などの技術を使用して、アクセス要求の正当性を確認します。これにより、APIにアクセスできるのは正規のユーザー、アプリケーションに限定されます。 - 認可
ユーザーやアプリケーションが実行できる操作を制御します。例えば、読み取り専用の権限しか持たないユーザーがデータを変更できないように設定します。
■予期しないエラーや攻撃に対してAPIがどのように応答するかを検査
エラーメッセージに機密情報が含まれていないこと、適切なエラーレスポンスが返されることを確認します。これにより、システムの脆弱性を悪用されるリスクを軽減できます。
■システム特性、ロジックを踏まえた診断の実施
APIで取り扱う情報が画面構成などを含まないデータそのものなので、システム特性やロジックを踏まえたAPI特有のセキュリティリスクの検査が必要です。例えばAPIでデータを取得し、画面で描画に必要なデータのみを表示している場合でも、実際にAPIのレスポンス上では機微情報が含まれている場合などが挙げられます。
APIに対して、脆弱性診断を継続的に実施することで、セキュリティレベルを維持し、不正アクセスやデータ漏えいのリスクを最小限に抑え、システムの安全性を確保できるんですよ。
API脆弱性診断の実施までに準備しておくべき、3つのポイント

なるほど~。事前の準備も必要ミア?

羽鳥さん
いいところに気付きましたね。APIの診断の特徴として、Web画面の診断とは異なり、画面という情報が存在せず、仕様やリクエストの構成などを把握しづらい点があります。下記の3つのポイントを事前に準備することで、スムーズな診断を実施できますよ。
- API仕様書の用意
API仕様書とは、一般的にはAPIの要件や機能の説明、APIを実行するために必要なリクエストヘッダやパラメータが定義されているような定義書のことを指します。Web画面が存在する場合は、診断実施者が画面を操作してシステムの仕様を把握できるのに対して、APIは診断URLなどの情報しか存在せず、APIの仕様を把握する術がありません。このことからAPIを診断する際は、診断会社が確認できるAPI仕様書が事前に準備されていると、診断実施時にAPIの仕様を正確に把握できます。 - サンプルリクエストとサンプルレスポンスの用意
基本的にはAPI仕様書があれば、それを基にAPIの要件や機能および、APIを実行する際に必要なパラメータなども把握できます。しかし場合によっては、API仕様書のみだと診断するAPIの正しいリクエスト構成を把握することが難しいこともあります。そうなると、リクエストを組み立てるまでに時間を要してしまい、APIの診断実施時間が減ってしまう可能性も出てきます。そこで、あらかじめAPIのサンプルリクエストとサンプルレスポンスの準備をしておくと、診断を実施する際に診断対象のAPIの挙動をスムーズに確かめられます。 - 認証方法について確認し、必要な作業をしておく
APIの中には、ユーザーやユーザーに割り当てられた権限ごとに実行の可否が決められているものがあります。その場合、APIを実行する前に、ユーザーごとに払い出されたCookie値やアクセストークンが付与され、付与された値をサーバー側で検証し、APIを実行可能なユーザーであるか、権限が不足していないかの確認が行われます。もし診断対象のAPIが、事前にユーザーの認証などを必要とする場合は、事前にユーザー情報の作成や、ユーザーへの権限の付与、Cookieもしくはアクセストークンの払い出し方法などを準備しておくと、診断作業を滞りなく実施できます。

「診断するAPIについてスムーズに把握してもらえるようにしておく」ことや、「下準備となる作業を事前に済ませておく」ことが重要ミア!今日はいろいろ教えてくれてありがとミア!

羽鳥さん
そうです!事前にしっかり準備しておくと、スムーズに診断を進められますからね。
ユービーセキュアでは、セキュリティに関する無料相談会を実施していて、専門のセキュリティコンサルタントが、セキュリティに関する疑問や課題にお答えし、最適なセキュリティ対策を提案しています。そちらでもぜひAPIの脆弱性診断について相談してみてくださいね。