📝

OWASP ZAPをAzure VM上で利用してみた

に公開

ゴール

Azure 上でDASTの代表的なOSSであるOWASP ZAPをGUI/コンテナ起動し、サンプルアプリのスキャンをします。

  • OWASP ZAPをインストールしてGUIを起動する(Windows)
  • OWASP ZAPをインストールしてデーモン起動する(RHEL9)
  • クライアント(WS2025)→ ZAPサーバ(RHEL9) → WEBサーバ(RHEL9)の構成においてZAPサーバからWEBサーバに対して、クライアントからREST APIベースでのスキャン指示を実行する。
  • 実行結果をHTMLで出力する。

全てAzure上のVMで構成しています。

OWASP ZAPをインストールしてGUIを起動する(Windows)

前提としてJAVAが必要になります。インストールをしてください。OWASP ZAPもインストールはGUIから起動するだけです。

OWASP ZAPをインストールしてデーモン起動する(RHEL9)

  • ZAPのdocker はWindows版のイメージが存在しません。
  • BシリーズのWS2025だとWSLが起動できません(全部のBシリーズではないかもしれませんが、仮想化の入れ子がダメっぽい?)。
  • 公式の簡易な手順は以下にあります。

https://www.zaproxy.org/docs/docker/about/#accessing-the-api-from-outside-of-the-docker-container

  • root ユーザじゃないと失敗します。
  • ZAP Headlessに従って起動するとデーモンモードで外部からの受付が可能になります。
  • コンテナ起動コマンドは以下の通りです。
    podman run -d --name zape -p 8090:8090 ghcr.io/zaproxy/zaproxy:stable zap.sh -daemon -port 8090 -host 0.0.0.0 -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config api.disablekey=true
  • sudo ss -tlnp | grep 8090で起動状態を確認できます。公開ポートを8090から変更する場合はコマンドも変更。

スキャン指示を実行

  • curl "http://<RHELホストIP>:8090/JSON/core/view/version/" でバージョン情報がかえってくれば疎通OKです。

疎通確認が取れたら、いくつかの簡単なスキャンを実施してみます。

スパイダー開始(クローリング)

  • curl "http://<ZAP_IP>:8090/JSON/spider/action/scan/?url=http://<WEBサーバのプライベートIPアドレス>:8080"でスキャン指示を出します。
  • 戻り値の例として{"scan":"0"}といった結果が返ってきます。

スパイダーの進行状況を確認

  • curl "http://<ZAP_IP>:8090/JSON/spider/view/status/?scanId=0"のように実行します。scanIDには先ほどの戻り値を入れます。
  • {"status":"45"}といった戻り値が返ってきます。100になるまで確認を繰り返し、100になればスキャンは完了です。

アクティブスキャン開始

  • スパイダーで対象URLを収集した後に脆弱性検査を実行します。
  • curl "http://<ZAP_IP>:8090/JSON/ascan/action/scan/?url=http://<WEBサーバのプライベートIPアドレス>:8080"
  • 戻り値の例として{"scan":"0"}といった結果が返ってきます。

アクティブスキャンの進行状況を確認

  • curl "http://<ZAP_IP>:8090/JSON/ascan/view/status/?scanId=0"のように実行します。scanIDには先ほどの戻り値を入れます。
  • こちらも、{"status":"100"}になっていれば完了です。

実行結果のレポート出力

  • クライアント端末から、curl "http://<ZAP_IP>:8090/OTHER/core/other/htmlreport/" -o zap_report.htmlを実行し、ZAPサーバにあるレポートをクライアント端末のカレントディレクトリに出力します。html名は自由に変更してください。

おわりに

簡単な検証でした。GUIは比較的画面に従った直観的な操作が可能なため、インストールまでにしています。現場においてはCI/CDからDASTサーバに対してスキャン実行を呼び出すことも多いと考え、サーバベース(Docker)でのOWASP ZAPの起動や簡易スキャンを実施しました。
何かのお役に立てば幸いです。

Discussion