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