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の特徴
- フロントエンドからは直接使われていない隠れたAPI
- 高権限ユーザ向けのエンドポイント
- パラメータを受け取って動作を変えるAPI
- レスポンスに個人情報や認証情報が含まれるもの
⚠️ 狙いやすい脆弱性例
| 脆弱性 | 内容 |
|---|---|
| 認証回避 | 認証トークンなしで操作可能なエンドポイントが存在 |
| パラメータ汚染(SSPP) | サーバ側でのパラメータ処理が誤動作する |
| IDOR | 他人のIDやリソースにアクセスできてしまう |
| 過剰情報の開示 | デバッグ情報、スタックトレース、環境変数などが漏洩 |
✅ ツールの活用例(Burp Suite)
| 機能 | 活用方法 |
|---|---|
| Burp Scanner | 自動でAPIエンドポイントとパラメータを収集 |
| Burp Intruder | パスの推測や大量のテストパターン送信 |
| Burp Repeater | API動作を1つずつ手動で検証 |
| Target タブ | API構造のマッピングと階層整理 |
🔚 まとめ
APIはWebアプリの“中核”であり、攻撃対象にもなり得る重要な構成要素です。
攻撃を防ぐには、次のことが不可欠です:
- リコンによって攻撃対象(API)を正確に把握
- ドキュメントを最大限に活用して理解を深める
- 実際にリクエストを送って応答を確認する
Best regards, (^^ゞ