Shikata Ga Nai

Private? There is no such things.

APIセキュリティ診断マニュアル(API Testing)

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. 診断手順

  1. フロントエンドからAPIリクエストを観察

    • DevTools の Networkタブ
    • モバイルアプリは Burp Suite で中間プロキシ観察
  2. Burp Suite / Postmanで再送信してパラメータを変更
  3. ID、ロール、入力値を少しずつ改変して挙動を確認
  4. レスポンスとステータスコードを比較
  5. 同じリクエストを他ユーザ・無認証・改変ありで試す

🧾 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, (^^ゞ