ZAP (Zed Attack Proxy) - Webアプリケーションセキュリティスキャナーチートシート
ZAP (Zed Attack Proxy、Checkmarx管理、旧OWASP旗艦プロジェクト)は、無料のオープンソース動的アプリケーションセキュリティテスト (DAST) ツールです。ブラウザとターゲット間のインターセプトプロキシとして機能し、WebアプリケーションおよびAPIをパッシブおよびアクティブにスキャンして脆弱性を検出します。スパイダー/クローラー、ファザー、アクティブスキャナー、WebSocketサポート、REST/GraphQL/SOAP APIスキャン機能を備えており、GUIを使用してインタラクティブに、またはCLIおよびAPIを使用してヘッドレスで利用できます。
インストール
| プラットフォーム | コマンド |
|---|
| Docker (CI推奨) | docker pull zaproxy/zap-stable |
| Debian/Ubuntu | ZAPサイトからインストーラーをダウンロード |
| macOS (Homebrew) | brew install --cask zap |
| クロスプラットフォーム | クロスプラットフォームパッケージをダウンロード (Javaが必要) |
| 確認 | zap.sh -version (Windowsでは zap.bat) |
実行モード
| コマンド | 説明 |
|---|
zap.sh | デスクトップGUIを起動 |
zap.sh -daemon -host 0.0.0.0 -port 8080 | APIを備えたヘッドレスデーモン |
zap.sh -cmd -quickurl https://target -quickout report.html | ワンショットクイックスキャン |
docker run -t zaproxy/zap-stable zap-baseline.py -t https://target | Docker内のベースライン (パッシブ) スキャン |
オートメーションフレームワーク (スクリプト済みスキャン)
ZAPのパッケージスキャンスクリプトは、CI統合への最速のパスです。
| スクリプト | 目的 |
|---|
zap-baseline.py -t URL | パッシブスキャン + スパイダリング (高速、CI安全) |
zap-full-scan.py -t URL | ベースライン + アクティブアタックスキャン |
zap-api-scan.py -t openapi.json -f openapi | OpenAPI/SOAP/GraphQL定義からAPIをスキャン |
-r report.html | HTMLレポートを作成 |
-J report.json | JSONレポートを作成 |
-c config.conf | アラートフィルター / ルール設定 |
# CI対応ベースラインスキャン、検出時にビルドを失敗
docker run -t zaproxy/zap-stable zap-baseline.py \
-t https://staging.example.com -r zap-report.html
コアコンポーネント
| コンポーネント | 役割 |
|---|
| Proxy | HTTP(S)トラフィックをインターセプト/検査/修正 |
| Spider | アプリケーションをクロールしてURLを検出 |
| Ajax Spider | JavaScriptが多いアプリケーションを実ブラウザ経由でクロール |
| Passive Scan | 観測されたトラフィックから問題を検出 (攻撃なし) |
| Active Scan | 脆弱性を検出するために攻撃ペイロードを送信 |
| Fuzzer | リクエストにペイロードリストを注入 |
プロキシ設定
| ステップ | 方法 |
|---|
| ブラウザプロキシを設定 | ブラウザを localhost:8080 にポイント |
| ZAP CAルート証明書をインストール | HTTPS をインターセプトするためにZAPのルート証明書をインポート |
| 手動で探索 | アプリケーションをブラウズ、ZAPがトラフィックを記録 |
| その後スキャン | 検出されたツリーに対してスパイダー + アクティブスキャン |
API (オートメーション)
デーモンが実行中の場合、HTTP経由でZAPを制御します。
| エンドポイント | アクション |
|---|
/JSON/spider/action/scan/?url=... | スパイダーを開始 |
/JSON/ascan/action/scan/?url=... | アクティブスキャンを開始 |
/JSON/core/view/alerts/ | 検出結果を取得 |
/OTHER/core/other/htmlreport/ | HTMLレポートを生成 |
| API key | リクエストで apikey=... を渡す |
認証とコンテキスト
| 概念 | 用途 |
|---|
| Context | ターゲットスコープと認証を定義 |
| Session mgmt | Cookie/HTTP/スクリプトベースのセッション |
| Authentication | Form、JSON、HTTP、またはスクリプト認証 |
| Users | 認証されたユーザーとしてテスト |
一般的なワークフロー
# ステージングに対する高速パッシブベースラインをCI内で実行
zap-baseline.py -t https://staging.example.com -r report.html
# OpenAPI仕様からREST APIをスキャン
zap-api-scan.py -t https://api.example.com/openapi.json -f openapi -J out.json
# フルアクティブスキャン (認可されたターゲットのみ)
zap-full-scan.py -t https://target.example.com -r full.html
ZAPと他のDASTツール
| 側面 | ZAP | Nuclei | Burp Suite | Nikto |
|---|
| モデル | プロキシ + クロール + アクティブDASTテスト | テンプレートベースCVEスキャナー | プロキシ + 手動 + スキャナー | サーバー設定ミススキャナー |
| コスト | 無料/オープンソース | 無料/オープンソース | 無料 + 有料Pro | 無料 |
| API/CI | 強力 (API + スクリプト) | 強力 | Pro拡張 | CLI |
| 最適用途 | フルアプリDASTテスト、CI | 既知CVEの高速チェック | 手動ペネトレーションテスト | クイックサーバーチェック |
一般的なペアリング: Nuclei は既知CVE検出の高速化、ZAPはアプリケーションレベルのDASTテスト用クロール。
リソース