はじめに
この記事では、OWASP ZAPとPostmanを組み合わせてAPIのペネトレーションテストを実施する方法を解説します。
OWASP ZAPはWebアプリケーションのセキュリティテストを目的としたオープンソースツールで、APIのペネトレーションテストにも活用できます。
この記事では、OWASP ZAPをプロキシサーバーとして構成し、Postman経由で送信したAPIリクエストをキャプチャ、そのリクエストをもとにペネトレーションテストを実行するまでの流れを解説します。
作業は以下の順で進めます。
- アタック用APIの準備
- PostmanコレクションへのAPIリクエスト登録
- OWASP ZAPのプロキシ設定
- Postmanのプロキシ設定
- OWASP ZAPによるAPIリクエストのキャプチャ
- OWASP ZAPによるペネトレーションテストの実行
1. アタック用APIの準備
テスト対象として使用するのは、crAPI(Completely Ridiculous API)です。これはAPIセキュリティテスト専用に設計された、意図的に脆弱なAPIです。
以下のコマンドでローカル環境にcrAPIを起動します。
curl -L -o /tmp/crapi.zip https://github.com/OWASP/crAPI/archive/refs/heads/main.zip
unzip /tmp/crapi.zip
cd crAPI-main/deploy/docker
docker compose -f docker-compose.yml --compatibility up -d
2. PostmanコレクションへのAPIリクエスト登録
起動したcrAPIへリクエストを送るため、PostmanコレクションにAPIリクエストを用意します。crAPIのGitHubリポジトリには、Postman用のコレクションファイルと環境ファイルがあらかじめ含まれているので、それをPostmanにインポートして使います。
インポート後、Postmanの環境設定でcrAPIを選択すれば、各リクエストが先ほど起動したcrAPIへ向けて送信されるようになります。
3. OWASP ZAPのプロキシ設定
続いて、OWASP ZAPをプロキシサーバーとして機能させるための設定を行います。これにより、Postmanから送信されるAPIリクエストをZAPがキャプチャできるようになります。
設定手順は以下のとおりです。
- OWASP ZAPを起動する
- メニューバーから「Tools」→「Options」を開く
- 「Network - Local Servers / Proxies」を選択し、プロキシの設定を確認する
- デフォルトのアドレスは
http://localhost:8080 - 今回は別プロセスがポート8080を使用していたため、
http://localhost:18080に変更
- デフォルトのアドレスは
- 設定を保存し、OWASP ZAPを再起動する
4. Postmanのプロキシ設定
次に、Postmanが送信するリクエストをOWASP ZAP経由でルーティングするよう、プロキシ設定を変更します。
「App Settings(※)」→「Proxy」→「Use Custom Proxy Configuration」から以下の値を設定します。
- Proxy Server:
localhost - Port:
18080(OWASP ZAPの設定に合わせる)
※ Postman v12以前では「App Settings」は「Settings」という名称です。
5. OWASP ZAPによるAPIリクエストのキャプチャ
Postmanのプロキシ設定が完了したら、実際にリクエストを送信してみましょう。
インポート済みのPostmanコレクションをコレクションランナーでまとめて実行します。crAPI用コレクションを選択し、「⋯」メニューから「Run」を選択してコレクションランナーを起動、環境に「crAPI」を選んで「Run」ボタンをクリックすればすべてのリクエストが一括で実行されます。
実行後、OWASP ZAPの「Sites」タブを開き、送信したリクエストが正しくキャプチャされていることを確認します。
6. OWASP ZAPによるペネトレーションテストの実行
OWASP ZAPでは、テスト対象のURLやその関連設定を「コンテキスト」という単位で管理します。ステップ5でキャプチャしたサイトをコンテキストに追加することで、そのサイトへのリクエストがペネトレーションテストの対象となります。
- キャプチャしたサイト(
http://localhost:30080)を右クリック - 「Include in Context」→「Default Context」を選択
コンテキストへの追加が済んだら、いよいよアクティブスキャン(Active Scan)を実行します。
- 同じサイトを右クリック
- 「Attack」→「Active Scan」を選択
- 設定画面で必要に応じてスキャン設定を調整し、「Start Scan」をクリックしてスキャンを開始
スキャンが完了すると、「Alerts」タブに検出された脆弱性の一覧が表示されます。各アラートをクリックすれば、脆弱性の概要・影響範囲・修正方法といった詳細情報を確認できます。
あとは、必要に応じて、「Report」→「Generate Report」の流れで検知された脆弱性についてのレポートを作成できます。
おわりに
本記事では、PostmanでAPIリクエストを送信し、OWASP ZAPでキャプチャしてペネトレーションテストを実行する一連の流れを紹介しました。
今回はPostmanをリクエスト送信ツールとして活用しましたが、PostmanはもともとAPIの機能テスト、シナリオテスト、パフォーマンステストなど、幅広い検証に対応しています。一方、セキュリティテストに関してはOWASP ZAPのほうが専門性が高く、豊富な機能を備えています。
両者はそれぞれ得意とする領域が異なります。Postmanは機能テストや非機能テストに、OWASP ZAPはセキュリティテストに特化したツールです。用途に応じて使い分け、組み合わせることで、APIの品質とセキュリティをより網羅的に評価できます。
ぜひ一度、手を動かして試してみてください








