Hello there, ('ω')ノ
🎯 1. API診断の目的とは?
API(Application Programming Interface) は、クライアント(ブラウザ・アプリ)とサーバ間の通信に使われるインターフェースです。 APIのセキュリティ診断は、ブラウザの見た目に出てこない裏側の処理を対象とし、次のような脆弱性を見つけることを目的とします:
| 対象 | 例 |
|---|---|
| 認可の欠如 | 他人のデータを取得・変更できる |
| データ検証の不備 | SQLi, XSS, コマンドインジェクションなど |
| 情報漏洩 | 内部データ、構成、トークンなどの露出 |
| 論理バグ | 制限回避、繰り返しアクセス、重複処理など |
🧭 2. チェックすべきAPIの種類・パターン
| 種類 | 説明 |
|---|---|
| REST API | 一般的な形式。JSONでやりとりされる。エンドポイント:/api/user/1など |
| GraphQL API | リクエストボディで取得項目を柔軟に指定 |
| gRPC / SOAP | バイナリやXML形式のAPI。診断難度が高め |
🔍 3. 基本的な診断項目(REST APIベース)
| テスト項目 | チェック内容 | 例 |
|---|---|---|
| 🔐 認証なしアクセス | トークンなしでアクセスできないか | GET /api/user/1 |
| 🔑 不正な認可 | 他人のIDを指定して操作できないか | user_id=2 で他人の情報取得 |
| 🧼 入力バリデーション不足 | XSS, SQLiが入るか | name: "<script>" |
| 📤 過剰な情報開示 | 不要なフィールドが返っていないか | password_hash, debug, admin_flag |
| 🔁 論理バイパス | ステータス変更などの不整合を起こせるか | POST /api/order/submit を何度も実行 |
🧪 4. よく使う診断テクニック
🔍 IDOR(不適切なオブジェクト参照)
GET /api/user/1000
→ 自分以外のユーザ情報が取得できる → ❌
🔁 Rate Limit / 論理バグ
POST /api/coupon/apply
→ クーポン適用を何度も送信 → 重複適用される? → ❌
📤 情報漏洩チェック(JSONレスポンス)
{ "id": 1, "name": "Alice", "password_hash": "$2y$10$...", "token": "abc.def.ghi" }
→ 本来返すべきでないフィールド → ❌
🛠️ 5. 診断手順
フロントエンドからAPIリクエストを観察
- DevTools の Networkタブ
- モバイルアプリは Burp Suite で中間プロキシ観察
- Burp Suite / Postmanで再送信してパラメータを変更
- ID、ロール、入力値を少しずつ改変して挙動を確認
- レスポンスとステータスコードを比較
- 同じリクエストを他ユーザ・無認証・改変ありで試す
🧾 6. テスト対象によくあるフィールド
| フィールド | 意味 |
|---|---|
id, user_id, account_id |
IDORで狙うポイント |
is_admin, role, permission |
権限昇格できないか確認 |
token, session_id |
不正使用・漏洩のリスク |
price, discount, amount |
金額関連のバグチェック |
⚠️ 7. 注意点・ベストプラクティス
| 内容 | 説明 |
|---|---|
| 無認証APIには要注意 | 意図せず公開状態になっていないか |
| レスポンスの内容を精査 | 表示されないだけで漏洩していることもある |
| ステータスコードに注目 | 403, 401, 200, 500… 意味のある差を記録 |
| メソッドの意図確認 | GET, POST, PUT, DELETEの使い方が正しいか |
| ペイロード再利用 | 送信済リクエストの使い回しで不正処理できるか(リプレイ攻撃) |
🧰 8. 補助ツール
- Burp Suite:リクエスト保存・送信・比較・Intruder
- Postman / Insomnia:手動送信・トークン管理しやすい
- AuthMatrix(Burp拡張):権限操作の確認に便利
- OWASP ZAP:無料の代替診断ツール
📌 9. チェックしやすいAPIエンドポイント名
/api/user/{id}
/api/admin/
/api/order/submit
/api/profile
/api/login
/api/upload
/api/setting
Best regards, (^^ゞ