In this article
APIセキュリティテスト:APIのセキュリティをテストする方法
APIセキュリティをテストする際に押さえておきたいポイント
APIセキュリティテストとは?
APIセキュリティテストとは、ツールや自動化、手動のプロセスを組み合わせて、APIのエンドポイントが企業のセキュリティおよび信頼性の基準を満たしているかをテストすることです。
APIセキュリティとは?
APIセキュリティとは、APIへの悪意ある攻撃や不正利用を防ぐためのプロセス、プラクティス、製品の総称です。
この10年間で、APIは現代のソフトウェア開発だけでなく、ソフトウェア企業にとっても不可欠なものとなりました。多くのアプリケーションでは、ソーシャルログインなどの機能の中核をAPIが担っています。ソーシャルログインでは、ソーシャルネットワークが提供する認証APIを使用します。通信サービス企業のTwilioや決済処理サービスのStripeのように、企業全体が実質的にサービスとしてのAPIを提供しているケースもあります。
よくあるAPIセキュリティ侵害の例4つ
APIが魅力的で、ますます広く利用されている理由は、APIセキュリティが重要である理由と同じです。APIを使うことで、バックエンドのデータやプロセスにシームレスにアクセスし、利用できるようになります。安全なAPIは大きなビジネス価値を生み出す一方、安全でないAPIはその価値を損なうリスクを招きます。
安全でないAPIを標的とする攻撃には、次のようなものがあります。
中間者攻撃:攻撃者がAPIクライアントとサーバー間の通信を傍受・改ざんすると、中間者攻撃が発生します。適切な暗号化や認証がなければ、攻撃者は通信を盗み見たり、転送中のデータを改ざんしたり、悪意あるペイロードを挿入したりできます。その結果、データ窃取、セッションハイジャック、金銭詐欺などにつながるおそれがあります。
インジェクション攻撃:APIがユーザー入力を適切に検証・サニタイズできていないと、攻撃者がバックエンドシステムに悪意あるコードを挿入できる脆弱性が生じます。代表的なものにSQLインジェクション、コマンドインジェクション、NoSQLインジェクションがあり、いずれも入力処理の不備を悪用してデータベースクエリやシステムコマンドを操作します。攻撃が実行されると、データの窃取や破損、システム全体の侵害につながる可能性があります。インジェクションのリスクを軽減するには、パラメーター、ヘッダー、ペイロードなど、すべての入力を厳格に検証・サニタイズする必要があります。また、データベースとのやり取りにはプレースホルダー付きクエリやプリペアドステートメントを使用し、JSONやXMLの入力には厳格なスキーマ検証を適用しましょう。CI/CDパイプラインに自動セキュリティテストツールを組み込めば、デプロイ前にインジェクションの脆弱性を検出できます。
分散型サービス拒否(DDoS)攻撃:DoS攻撃では、攻撃者がAPIに過剰なリクエストを送りつけてシステムリソースを消費させ、正規ユーザーのサービス品質を低下させたり、サービスを完全に停止させたりします。DDoS攻撃では、数千ものクライアントやボットが連携して悪意あるトラフィックを増幅させることがあります。適切なレート制限、スロットリング、クォータ管理がないAPIは、特に攻撃を受けやすくなります。効果的な対策には、レート制御や異常検知機能を備えたAPIゲートウェイやロードバランサーの利用が必要です。
ブルートフォース攻撃:ブルートフォース攻撃とは、パスワード、APIキー、トークンなどの認証情報を体系的かつ自動的に推測し、不正アクセスを試みる攻撃です。攻撃者はスクリプトやボットネットを使って試行を自動化し、多数のアカウントやエンドポイントに対して認証情報の推測を高速で行うことがあります。
想定される攻撃が数多くあるため、APIセキュリティにはさまざまな対策を組み合わせる必要があります。なかでも特に重要なのが、APIセキュリティテストです。
APIセキュリティテストを実施する際に押さえておきたい6つのポイント
ほかのセキュリティ手法と同様に、APIセキュリティテストも、表面的に行う場合と効果的に行う場合では大きな差が生じます。次の6つのポイントを押さえることで、APIセキュリティテストの効果を最大限に高められます。
デプロイ:テストをどのようにデプロイしていますか?CI/CDパイプラインで実行されていますか?
構成:テストではHTMLスパイダーを使用していますか?それとも、アプリケーションをクロールしてAPIルートを特定していますか?
サポート:運用しているAPIは、採用したテストスイートでサポートされていますか?
精度:テストで実際の脆弱性を検出できていますか?誤検知を最小限に抑えられていますか?
カスタマイズ:ユースケースや、時間の経過とともに生じる状況に合わせてテストをカスタマイズできますか?
開発者エクスペリエンス:テストは使いやすく、既存の開発ワークフローにうまく適合していますか?
こうした問いを指針にすることで、APIセキュリティテストのプロセスを効果的かつ直感的なものにできます。
APIセキュリティテストが重要な理由
APIセキュリティテストが重要なのは、テストの頻度と質を高めるほど、APIを狙った攻撃を防げる可能性が高まるためです。APIは機密性の高いデータへの大きなアクセス権限を付与することが多く、正規ユーザーには有益である一方、悪意あるユーザーにとっては危険なものとなるため、こうした攻撃は特に深刻です。
定期的なAPIテストは、OWASP API Security Top 10、PCI DSS、GDPRなどのフレームワークへの準拠を支援するだけでなく、開発からデプロイまでのサイクルを通じてAPIの機密性、完全性、可用性を維持し、組織全体のセキュリティ体制を強化します。
APIセキュリティテストとDevSecOps
効果的なAPIセキュリティテストは、一度きりの取り組みではありません。APIのライフサイクル全体に組み込む継続的なプラクティスです。自動テスト、手動の侵入テスト、継続的なモニタリングをDevSecOpsのワークフローに統合すれば、一貫したセキュリティ基準を適用し、脆弱性を迅速に修正して、APIのリスクを可視化できます。この継続的なアプローチにより、APIが進化しても、開発、デプロイ、運用ガバナンスのすべてにセキュリティを不可欠な要素として組み込めます。攻撃対象領域を縮小しながら、迅速なイノベーションを支援します。
APIセキュリティテストの種類
APIセキュリティテストにはさまざまな形式があり、それぞれ適した状況やセキュリティリスクの種類が異なります。
動的APIセキュリティテスト(DAST):動的APIセキュリティテストでは、稼働中のAPIを調べ、セキュリティの脆弱性や悪用可能なバグを検出します。DASTは、悪意ある攻撃者が行う攻撃をシミュレーションする「外部から内部へ」のアプローチを取ります。アプリケーションのソースコードにアクセスする必要がないため、ブラックボックステストの手法です。
静的APIセキュリティテスト(SAST):静的APIセキュリティテストではソースコードを調べ、安全でないコーディングパターンの発見を支援します。
APIファジング:このセキュリティテストでは、ランダムなデータや無効なデータ、予期しないデータを自動生成してAPIに入力します。これにより、APIがクラッシュするか、バグが発生するかを確認できます。
ペネトレーションテスト:APIに対する内部または外部からの攻撃をシミュレーションし、脆弱性の悪用を試みることで、セキュリティチームはAPIの潜在的な脆弱性を特定し、軽減できます。
APIパフォーマンステスト:さまざまな負荷やストレス条件下でAPIの動作を測定し、スケーラビリティ、同時実行性、可用性の問題への対応を確認します。セキュリティチームは、ピーク時のトラフィックに対応できるだけのセキュリティをAPIが維持し、指定されたパフォーマンス要件を満たしているか確認できます。
RASP:ランタイムアプリケーション自己保護(RASP)はテストツールではありませんが、実行中のAPIの挙動を分析し、不審なリクエストをブロックすることで、リアルタイムの攻撃検知を支援します。
WAF:Webアプリケーションファイアウォール(WAF)も、悪意あるWebトラフィックがAPIサーバーに到達する前にブロックし、APIセキュリティを強化するツールです。
APIセキュリティテストツールは数多くあり、その多くがオープンソースです。代表的なオープンソースツールには、負荷テストやパフォーマンステストに使えるApache JMeter、APIテストを簡単に作成できるAstra、APIエンドポイントへの呼び出しをスクリプト化できるKarateがあります。
SAST、DAST、手動のペネトレーションテストを組み合わせることで、コードレベルのセキュリティとAPIの実行時の挙動を包括的にテストする、多層的なアプローチを実現できます。この複合的な手法により、悪用可能な脆弱性が本番環境に入り込む可能性を低減し、組織のAPIセキュリティ体制の継続的な改善を支援します。
さらに、ファズテストを使用して、不正な入力やランダムな入力に対する予期しない挙動を検出します。一般的な攻撃手法であるインジェクション、リプレイ、パラメーター改ざんを防ぐため、レート制限、暗号化の適用、スキーマ準拠の検証なども行います。
よくあるAPIセキュリティリスク4つ
優れたAPIセキュリティテストの体制であっても万全ではありませんが、効果的なテストによって、次のようなさまざまな攻撃を防止、または少なくとも発生の可能性を低減できます。
不正アクセス:APIセキュリティテストによって、許可されたユーザーだけがAPIにアクセスできるようにします。そのための方法として、ロールベースのアクセス制御、リソースベースのアクセス制御、フィールドレベルのアクセス制御があります。
データ漏えい:APIセキュリティテストによって、悪意ある攻撃者がアクセスすべきでないAPIにアクセスできないようにしたり、意図しない方法でAPIを利用できないようにしたりすることで、機密データの漏えいを防ぎます。
インジェクションの脆弱性:APIセキュリティテストによって、SQLインジェクション、OSコマンドインジェクション、XMLインジェクションなど、さまざまなインジェクションの脆弱性を防げます。インジェクションでは、ユーザーデータに見せかけた操作コマンドが送信されます。
パラメーター改ざん:APIセキュリティテストによって、APIリクエストを使ってバックエンドの検証エラーを悪用する攻撃である、パラメーター改ざんを防げます。
ここで挙げたものはすべてではありません。OWASPのAPIセキュリティプロジェクトなど、追加のリソースもぜひご確認ください。
APIセキュリティテストのメリット
APIセキュリティテストは、脆弱性のプロアクティブな検出、コンプライアンスの強化、信頼性の向上につながります。開発ライフサイクルにセキュリティテストを組み込むことで、脆弱性が本番環境に到達する前に特定・修正し、コストのかかる侵害のリスクを低減できます。APIセキュリティテストを徹底することで、規制要件への準拠、機密データの保護、アプリケーションに対する顧客の信頼向上にも役立ちます。
APIセキュリティテストのベストプラクティス5選
セキュリティテストは、プロアクティブかつ継続的、そして包括的に行うことで最も効果を発揮します。次のベストプラクティスを活用すれば、コードレベルの脆弱性から現実世界の脅威シナリオまで、APIテスト戦略で幅広く対応できます。
1. セキュリティテストを早期かつ継続的に統合する(「シフトレフト」)
セキュリティは開発パイプラインに組み込むべきものであり、後から付け加えるものではありません。静的(SAST)および動的(DAST)セキュリティテストツールをCI/CDワークフローに統合すれば、APIのリリース前に設定ミス、安全でない依存関係、ロジックの欠陥を検出できます。この「シフトレフト」アプローチにより、修正コストを削減し、開発サイクルを短縮するとともに、すべてのビルドが組織のセキュリティ基準に照らして検証されます。
2. ビジネスロジックと認可の欠陥をテストする
自動スキャナーは技術的な脆弱性の検出に優れていますが、アクセス制御の不備、ロールの混同、複数の手順を経た権限昇格など、文脈に依存する問題やビジネスロジックの問題を見逃すことがあります。手動の探索的テストやシナリオベースの評価を実施し、APIが認可やロールベースの制限を適切に適用しているか確認しましょう。
ユーザーロールをアクセス範囲に対応付け、各エンドポイントが適切に分離されていることを確認するのは、オブジェクトレベルの認可不備(BOLA)や関連するOWASP API Top 10のリスクを防ぐうえで重要です。
3. 現実世界の攻撃シナリオをシミュレーションする
APIテストには、実際の攻撃状況を再現するファジングテストやペネトレーションテストを含める必要があります。ファジングでは、不正なデータやランダムなデータをエンドポイントに送信して、予期しないクラッシュやセキュリティ例外を検出します。一方、ペネトレーションテストでは攻撃者の行動を再現し、連鎖する脆弱性を特定します。これらのテストによって、負荷がかかったときのAPIの挙動を把握し、レート制限、認証、入力処理の仕組みが実際の悪用に耐えられることを検証できます。
4. 認証とセッション管理を検証する
認証とセッション管理は、API攻撃の標的となることが特に多い要素です。セキュリティテストでは、トークンベース認証(OAuth 2.0、JWTなど)の堅牢性、セッションの有効期限ポリシー、無効化の仕組みを検証する必要があります。また、認証情報がURL、ログ、レスポンスヘッダーに露出していないことや、nonce値またはタイムスタンプを使ってリプレイ攻撃を防いでいることも確認します。厳格なセッション管理を徹底すれば、認証情報が侵害された場合でも不正アクセスを防止できます。
5. 継続的に監視し、変更後に再テストする
APIは、新バージョンやインテグレーション、依存関係の追加によって絶えず変化し、新たな脆弱性が生じる可能性があります。APIのセキュリティ状況を把握し続けるには、継続的な監視とデプロイ後のテストが不可欠です。ランタイムアプリケーション自己保護(RASP)やAPIセキュリティゲートウェイを導入して本番トラフィックの異常を検知し、主要なコード変更や構成変更のたびに再テストしましょう。「一度テストし、常に監視する」という姿勢があれば、現代のAPI開発のスピードに合わせてセキュリティを維持できます。
APIセキュリティとアプリケーションセキュリティ
以前は、APIセキュリティテストはツールを使いつつも、主に手作業で行う一連のプロセスでした。セキュリティチームがペネトレーションテストを実施したり、APIを手作業でスキャンして脆弱性を探したりしていました。その後、セキュリティチームが発見した脆弱性を開発チームに引き継ぎ、修正してもらうことができるようになります。このプロセスは時間がかかり、エラーも起きやすいものでした。セキュリティにおいて、企業がこうした欠点を許容すべきではありません。
DevSecOpsの普及などを背景に、APIセキュリティテストを開発・運用パイプラインに組み込む企業が増えています。他のセキュリティプロセスと同様に、ソフトウェア開発ライフサイクルの早い段階で脆弱性をテストし、潜在的なセキュリティ問題を早期に発見する「シフトレフト」が進んでいます。問題を早く発見できれば、より早く修正でき、侵害のリスクを抑え、修正コストも削減できます。
APIセキュリティテストにはさまざまなテストがありますが、基本的な目的はAPIを調査し、既知の脆弱性と照合することです。対象となるのは、安全でないことが知られているコーディング手法や、既知の脆弱性を持つ依存関係です。
APIセキュリティが従来のアプリケーションセキュリティと異なる理由
APIは、システム、プラットフォーム、サードパーティサービスをまたいで重要なデータや機能を公開するため、従来のアプリケーションよりも広範で変化の激しい攻撃対象領域を生み出します。Webインターフェースとは異なり、APIは機械で処理できるため、ブルートフォース攻撃、ファジング、インジェクションなどの自動化された攻撃の格好の標的になります。
現代のAPIは、複数のマイクロサービスやAI駆動型コンポーネントを連携させることが多く、単一の脆弱性による影響が拡大する可能性があります。ビジネスロジック、認可、データ処理の不備はシステム全体に波及し、機密性の高いAIモデル、学習データセット、自動化されたワークフローを侵害するおそれがあります。そのため、急速に進化するインテリジェントなアプリケーション環境でAPIの完全性を維持し、悪用を防ぐには、継続的なテスト、リアルタイム監視、AIを活用した脅威検知が不可欠です。
APIセキュリティの現状
SpaceX Inc.とAlphabetのCEOであるSundar Pichaiに共通することは何でしょうか。ほかの2億人とともに、2人のデータもソーシャルメディア企業Twitterからの大規模なデータ漏洩で収集され、販売されました。Twitterは現在、アイルランドのプライバシー規制当局による調査の対象となっているほか、APIセキュリティの最新事例にもなっています。被害を受けたのはTwitterだけではありません。米国上院・下院議員やほかの17万人も、最近発生したDC Health Linkへのハッキングの影響を受けました。
こうした大規模な情報漏洩が発生しているにもかかわらず、APIセキュリティの問題は珍しくなく、APIセキュリティテストは業界全体の弱点となっているようです。Salt Securityの調査では、次のような懸念すべき結果が明らかになっています。
本番環境のAPIでセキュリティ問題を経験した企業は94%。
本番環境のAPIで脆弱性を発見した企業は47%。
悪意のあるAPI攻撃トラフィックは、昨年(2021年7月から2022年7月)に117%増加し、月間平均の悪意ある呼び出し数は1,222万件から2,646万件に達しました。
さらに深刻なことに、APIセキュリティテストやその実践の不備が原因でデータ侵害を経験した企業は、ほぼ5社に1社にのぼります。
企業は、基本からベストプラクティスまで、APIセキュリティを見直す必要があります。Snykのアプリケーションセキュリティソリューションなら、脆弱性スキャンと継続的な監視でAPIをテストし、安心を確保できます。
SnykのAPIセキュリティテストツールとソリューション
APIセキュリティの欠陥が広く問題視されているにもかかわらず増加している主な理由の一つは、多くの企業が自社のAPIをどのチームが担当しているのか把握できていないことです。APIは企業活動の中核に位置するため、多数のチームが関わる境界領域にあり、チームによる利用方法の変化に伴って、急速に改変される傾向があります。
その結果、企業やチームが最善を尽くしていても、APIが安全でない状態のまま残ることがあります。先進的な企業は、開発者がアプリケーションのセキュリティに責任を持てるようにすることで、この問題に対処しています。開発者を第一に考えたアプローチに、開発者向けのツールやガイダンスを組み合わせることが、より安全なAPIの構築には欠かせません。
Snykは、企業が開発者の力を引き出すためのツールを構築し、開発者がそのツールを最大限に活用できるよう支援することを目指しています。Snykを使えば、開発者はセキュリティ自動化機能を各自のワークフローに合わせて調整し、次の項目全体で一貫性を確保できます。
APIセキュリティに関するSnykの製品ビジョンやSnykプラットフォームのメリットについて詳しくは、拡張性とSnyk APIをご覧ください。