Shikata Ga Nai

Private? There is no such things.

APIセキュリティテスト入門

Hello there, ('ω')ノ

✅ APIとは?

API(Application Programming Interface)とは、アプリケーション同士が通信・データ連携を行うための仕組みです。 Webアプリケーションでは、ユーザインターフェース(フロントエンド)の裏側でAPIが重要な役割を果たしています。

たとえば:

GET /api/books

このようなリクエストで、APIはデータベースから本の情報を取得してフロントエンドに返します。


🔍 APIのテストが重要な理由

APIの脆弱性は、Webサイトの機密性・完全性・可用性を破壊する可能性があります。

  • フロントに出ていないAPIにも攻撃対象がある
  • 内部用APIにもSQLインジェクションや認証回避のリスク
  • 通常のWeb脆弱性(XSS, CSRF, IDORなど)もAPIに対して適用可能

🔰 まずは「APIリコン(情報収集)」から

手順1:APIエンドポイントを見つける

APIエンドポイントとは、特定の機能にアクセスするためのURLのことです。 例:

GET /api/books
GET /api/books/mystery
POST /api/users/login

これらのパスが、APIにデータを要求または送信する「入口」となります。


手順2:どのようにAPIとやり取りできるかを調査

確認すべきポイント:

項目 目的
パラメータ 必須/任意の入力情報
HTTPメソッド GET / POST / PUT / DELETE など
メディアタイプ JSON, XML, Form-Encoded など
認証方式 APIキー、トークン、JWT、セッションなど
レート制限 一定時間内の許可リクエスト数の制限

📄 APIドキュメントの活用

多くのAPIには、開発者向けに用意されたドキュメント(仕様書)が存在します。

ドキュメントの種類:

タイプ 内容
人間向け 説明文、使用例、パラメータ説明(HTMLやMarkdown)
機械向け 自動ツールで読み込める形式(例:Swagger/OpenAPI JSON)

🔍 APIドキュメントの見つけ方

たとえ明示的に公開されていなくても、以下の手法で見つけられることがあります:

方法 探すべきパス例
手動調査(Burp等で) /api/swagger/index.html/openapi.json
機械的なパス推測(Intruderなど) /api/swagger/v1/api/swagger/api など順に調べる

🧪 テスト対象として重要なAPIの特徴

  1. フロントエンドからは直接使われていない隠れたAPI
  2. 高権限ユーザ向けのエンドポイント
  3. パラメータを受け取って動作を変えるAPI
  4. レスポンスに個人情報や認証情報が含まれるもの

⚠️ 狙いやすい脆弱性例

脆弱性 内容
認証回避 認証トークンなしで操作可能なエンドポイントが存在
パラメータ汚染(SSPP) サーバ側でのパラメータ処理が誤動作する
IDOR 他人のIDやリソースにアクセスできてしまう
過剰情報の開示 デバッグ情報、スタックトレース、環境変数などが漏洩

✅ ツールの活用例(Burp Suite)

機能 活用方法
Burp Scanner 自動でAPIエンドポイントとパラメータを収集
Burp Intruder パスの推測や大量のテストパターン送信
Burp Repeater API動作を1つずつ手動で検証
Target タブ API構造のマッピングと階層整理

🔚 まとめ

APIはWebアプリの“中核”であり、攻撃対象にもなり得る重要な構成要素です。

攻撃を防ぐには、次のことが不可欠です:

  1. リコンによって攻撃対象(API)を正確に把握
  2. ドキュメントを最大限に活用して理解を深める
  3. 実際にリクエストを送って応答を確認する

Best regards, (^^ゞ