サイトのAPI図鑑B版
掲載情報が正確でない可能性があります。
セキュリティ・コンプライアンス

APIペネトレーションテストの方法【OWASP ZAP・Burp Suite・手動テスト】

APIのセキュリティを強化するためのペネトレーションテスト(ペンテスト)の方法をOWASP ZAP・Burp Suite・手動テストを使って解説します。脆弱性の発見から修正確認まで網羅します。

#ペネトレーションテスト#OWASP ZAP#Burp Suite#脆弱性診断

APIペネトレーションテストの概要

APIのセキュリティを確保するためには、実装後のテストが不可欠です。ペネトレーションテスト(ペンテスト)は実際の攻撃者の視点でAPIの脆弱性を発見するプロセスです。OWASP ZAP・Burp Suiteなどのツールと手動テストを組み合わせて包括的な評価を行います。

テストの準備

  • スコープ定義:テスト対象のAPIエンドポイント・環境を明確にする
  • 許可の取得:APIオーナーから書面での許可を得る
  • API仕様書の取得:OpenAPI/Swagger仕様書を入手する
  • テストアカウントの用意:複数の権限レベルのテストアカウントを準備

OWASP ZAPを使った自動スキャン

# OWASP ZAPのAPIスキャン(Dockerで実行)
docker run -v $(pwd):/zap/wrk/:rw   -t ghcr.io/zaproxy/zaproxy:stable   zap-api-scan.py   -t http://staging-api.example.com/api/v1/openapi.json   -f openapi   -r api-scan-report.html   -J api-scan-report.json

Burp Suiteを使った手動テスト

Burp SuiteのProxy機能でAPIトラフィックをインターセプトし、リクエストを改ざんして脆弱性を確認します。

BOLAテスト(他ユーザーのリソースアクセス)

# 自分のIDで正常にアクセス
GET /api/orders/order-123
Authorization: Bearer USER_A_TOKEN

# 他のユーザーのIDを指定(BOLAの確認)
GET /api/orders/order-456  // order-456はユーザーBのもの
Authorization: Bearer USER_A_TOKEN
# 200が返ってきたらBOLAの脆弱性あり → 404が正しい

認可バイパスのテスト

# 管理者専用エンドポイントを一般ユーザーで呼ぶ
GET /api/admin/users
Authorization: Bearer REGULAR_USER_TOKEN
# 200が返ってきたら認可の不備あり → 403が正しい

# JWTの改ざんテスト(alg: noneに変更)
# 署名検証が適切に実装されているか確認

主要なテスト項目チェックリスト

  • ☐ 全エンドポイントで認証なし/無効トークンで401が返るか
  • ☐ 他ユーザーのリソースにアクセスできないか(BOLA)
  • ☐ 権限のない操作が403になるか(Broken Function Level Authorization)
  • ☐ SQLインジェクション・NoSQLインジェクションが防止されているか
  • ☐ レート制限が機能しているか(ブルートフォース対策)
  • ☐ エラーメッセージにスタックトレースが含まれていないか
  • ☐ 更新APIでMass Assignmentが防止されているか
  • ☐ SSRFが防止されているか
  • ☐ ファイルアップロードAPIに型・サイズ制限があるか

CI/CDへのセキュリティテストの組み込み

# GitHub ActionsにOWASP ZAPスキャンを組み込む
- name: OWASP ZAP API Scan
  uses: zaproxy/action-api-scan@v0.9.0
  with:
    target: 'http://staging-api.example.com/api/v1/openapi.json'
    format: openapi
    fail_action: true  # 高重大度の脆弱性が見つかったらCI失敗

まとめ

APIのペネトレーションテストは定期的に実施することが重要です。OWASP ZAPによる自動スキャンをCI/CDに組み込み、リリースのたびに基本的な脆弱性チェックを行いましょう。年に1〜2回は外部の専門家によるペンテストを実施してより深い評価を行うことを推奨します。

よくある質問

Q.APIペネトレーションテストと脆弱性スキャンの違いは何ですか?

脆弱性スキャンは自動ツールによる既知脆弱性の検出です。ペネトレーションテストは脆弱性スキャンに加えて、人間がビジネスロジック・認証フロー・権限エスカレーションなどをテストする包括的な評価です。ペンテストの方がより深い問題を発見できます。

Q.本番環境のAPIをペンテストしても良いですか?

原則として本番環境のAPIのペンテストは本番データへの影響リスクがあります。ステージング・テスト環境で実施することが推奨されます。本番APIをペンテストする場合は必ずサービスオーナーの許可を得て、トラフィックが少ない時間帯に行い、万一の場合のロールバック計画を準備してください。

Q.ペンテストの結果はどのように管理しますか?

発見された脆弱性は重大度(Critical・High・Medium・Low)で分類し、脆弱性の内容・影響・再現手順・推奨対策をレポートにまとめます。CriticalとHighは優先して修正し、修正後に再テスト(リテスト)を行って確認します。

関連記事