OWASP ZAP REST APIを使って、Swagger REST APIをテストする(1)環境構築


本記事の経緯

Azure Pipelinesを使って、Swaggerで作成したREST APIのセキュリティテストをしたかったけど、OWASP ZAP周りの情報でズバリ欲しかったものが見当たらなかったので、まとめてみました。

本記事の概要

OWASP ZAP REST APIが使用できる環境の構築方法をまとめました。

使用ソフトウェア

  • Windows 10 + PowerShell 5
  • OWASP ZAP 2.7.0 + OpenAPI Support 12.0.0
  • Jenkinsは使わない
  • Dockerも使わない

OWASP ZAPを準備する

OWASP ZAPをインストールして、設定を行います。

  1. OWASP ZAPのサーバーを立てるマシンに、OWASP ZAPをインストールする。
  2. OWASP ZAPを起動する。
  3. Manage Add-onsのMarketplaceからOpenAPI Supportをインストールする。
  4. Optionsから以下を設定する。
    • API (ヘルプ
      • 有効: チェック
      • UI Enabled: チェック
      • API Key: これはREST API呼び出し時に必要なので控えておいてください
      • Report permission errors via API: チェック
      • API 経由でエラーの詳細をレポート: チェック
    • Connection (ヘルプ
      • Timeout in seconds: 600 (Spring Boot + Swaggerなどは初回呼び出し時が重いので多めに)
    • Language (ヘルプ
      • "English" (テスト時に日本語が化けるのを防げるらしい……?)
  5. File - Snapshot Session As...を選択し、"default"という名前でセッションを保存する。
  6. OWASP ZAPを終了する。

OWASP ZAPをデーモン起動する

以下のようなバッチを作ると便利です。これはOWASP ZAPをlocalhost:8888で起動します。

start-zap.cmd
@echo off
cd "C:\Program Files\OWASP\Zed Attack Proxy"
call "zap.bat" -daemon -port 8888 -session "<セッションを保存したフォルダ>\default.session"

zap.bat のオプションについては、以下のヘルプを参照してください。
Wiki HelpCmdline - zaproxy/zap-core-help - GitHub

OWASP ZAPをシャットダウンする

以下のようなバッチを作ると便利です。OWASP ZAPを正しくシャットダウンしないと、セッションが保存されないことがあります。

stop-zap.cmd
@echo off
powershell -File shutdown-zap.ps1
shutdown-zap.ps1
$zap_url = "http://localhost:8888/JSON/core/action/shutdown/?apikey=<API Key>"
Invoke-RestMethod -Method "GET" -Uri "${zap_url}"

OWASP ZAP REST APIのヘルプは、OWASP ZAPが起動している時に http://localhost:8888/UI にアクセスするとあります。でも正直、分かりにくいです……。

注意事項

OWASP ZAPを多重起動するのは、セッションの作成に失敗することがあるため、おすすめしません。GUI起動とデーモン起動でも多重起動になることに注意してください。

(次回 (2)使用方法 に続きます。)