【2026年版】ZAP(旧称:OWASP ZAP)の使い方を徹底解説!

Zed Attack Proxy(ZAP)「旧称:OWASP ZAP」
- オープンソースのWebアプリケーション脆弱性診断ツール -

Webアプリケーション脆弱性診断の定番ツール〝ZAP by Checkmarx(旧称:OWASP ZAP)〟について、基礎から実践的な使い方まで体系的に解説します。

この記事を読んでわかること
  • ZAPとは何か
  • 「OWASP ZAP」と「ZAP by Checkmarx」の違い
  • ZAPのインストール方法
  • ZAPの使い方

本記事ではWindows環境に構築した検証環境を用いて、脆弱性診断の進め方をスクリーンショット付きで解説しているので、初めての方でも迷わずに進めることができます。

目次

Zed Attack Proxy(ZAP)「旧称:OWASP ZAP」とは

Zed Attack Proxy(以下、ZAP)は、Webアプリケーションの脆弱性診断に特化したオープンソースの診断ツールです。リクエスト/レスポンスの内容を可視化・改変可能な中間者プロキシとして機能し、GUIベースの操作性と高度な診断機能を兼ね備えているため、初心者から上級者まで幅広く利用されています。

元々はOWASP(Open Worldwide Application Security Project)によって開発・運用されていたものであり、〝OWASP ZAP〟という名称で長く親しまれてきました。現在は、セキュリティ企業「Checkmarx社」によってメンテナンス・管理されており、名称も〝ZAP by Checkmarx〟へと変わりました。

「ZAP」「Zed Attack Proxy」「ZAP by Checkmarx」「OWASP ZAP」「OWASP Zed Attack Proxy」「zaproxy」の名称の違い

名称の違いは歴史的経緯によるもので、いずれも同じプロダクトを指しています。

  • 2010年9月
    • OWASPプロジェクトとして、OWASP ZAP 1.0をリリース。
  • 2023年8月
    • OWASPプロジェクトから独立し、Software Security Project (SSP) に参加。
    • 公式名称から「OWASP」が外れ、シンプルな「ZAP」となりました。
  • 2024年9月
    • 開発・運営を米国Checkmarx社に移管。
    • 引き続き、オープンソース(Apache License 2.0)として、無料で提供されています。

OWASPプロジェクトが運営していた期間が長かったため、現在でも「OWASP ZAP」という名称が世界中に定着しています。

ZAPZed Attack Proxyの略称
※最も一般的な呼称で、単に「ZAP」と呼ぶのが一般的
Zed Attack Proxyツールの正式名称
ZAP by Checkmarx現在のブランド名
※2024年9月、OWASPからCheckmarx社に移管
OWASP ZAPOWASPプロジェクトが運営・管理していた時代の呼称
※歴史的に最もよく使われる呼称
OWASP Zed Attack ProxyOWASP ZAPの正式名称
zaproxyGitHubリポジトリ名やURL、コマンド名で使われる識別子

名称が変遷していても、ツールの中核的な機能や理念は変わらず継承されています。

対応OS

ZAPはJavaで実装されており、クロスプラットフォームで動作します。

主なサポートOS
  • Windows(64 / 32ビット)
  • macOS(Intel / Apple Silicon)
  • Linux(Ubuntu、Debian、RHEL系など主要ディストリビューション)

上記に加え、DockerイメージおよびCLI実行が公式にサポートされています。

検出できる脆弱性

OWASP Top 10に代表される主要な脆弱性の多くは、ZAPによって検出することができます。一方で、ビジネスロジックの欠陥や認可設計の不備については自動検出に限界があり、手動診断が必要です。

検出可能な脆弱性(一例)
  • SQLインジェクション
    入力値を通じて不正なSQLが実行され、情報漏えいやデータ改ざんにつながる可能性がある。
  • クロスサイトスクリプティング(XSS)
    悪意あるスクリプトがブラウザ上で実行され、Webサイトの改ざん、フィッシング、ユーザーのなりすまし等の危険がある。
  • サーバーサイド・リクエストフォージェリ(SSRF)
    サーバーを踏み台にして、本来外部からはアクセスできない内部ネットワークや外部システムへリクエストを送信させられる。
  • OSコマンドインジェクション
    サーバー上で任意のコマンドが実行される危険がある。
  • ディレクトリトラバーサル
    サーバー内の意図しないディレクトリやファイル(設定ファイルや個人情報など)を読み取られる。
  • XML外部実体参照(XXE:XML External Entity Attack)
    XMLパーサの設定不備により、サーバー内ファイルの読み取りやSSRFが可能になる。
  • サーバーサイド・テンプレートインジェクション(SSTI)
    Webアプリケーションのテンプレートエンジンに悪意のあるコードを挿入し、情報漏洩やリモートコード実行に至る可能性がある。

主な特徴

Webアプリケーション脆弱性診断ツール

ZAPは、インターセプト型プロキシ機能を備えたWebアプリケーション脆弱性診断ツールです。リクエストとレスポンスをインターセプトし、診断対象のアプリケーションの挙動を動的に観察することで、SQLインジェクションやXSS、CSRFなどの脆弱性を検出します。

動的アプリケーションセキュリティテスト(DAST)

ZAPはDASTに分類されるセキュリティテストツールで、実行中のWebアプリケーションに対して診断用リクエストを送信し、脆弱性を検出します。

DAST:Dynamic Application Security Testing(動的アプリケーションセキュリティテスト)

例えば、入力フォームに診断用の文字列(ペイロード)を送信し、SQLインジェクションやXSSといった脆弱性が存在しないかチェックします。

OWASP Top10に準拠した診断が可能

OWASP Top10で定義される代表的なカテゴリ(例:Broken Access Control、Security Misconfiguration、Injectionなど)に対応したスキャンルールを標準で備えています。

検出結果は、リスクレベル(High / Medium / Low / Informational)で分類され、再現性のあるリクエスト例とともに提示されます。

自動診断・手動診断の両方に対応

クロールから脆弱性検出までを一括で行う自動診断と、エンジニアが通信内容を確認・改変しながら検証する手動診断の両方に対応しています。

自動診断では数百〜数千リクエスト規模のテストを短時間で実行でき、手動診断ではロジック欠陥や業務要件に依存する問題を重点的に確認可能です。

用途に応じて使い分けることで、セキュリティ診断の網羅性と精度を両立できます。

直感的なGUI(CLIにも対応)

GUIは初心者でも直感的に操作できる構成となっており、スキャン対象の設定から結果のレビュー、レポート出力までを一貫して実施できます。

コマンドラインインターフェース(CLI)にも対応しており、スクリプトやCI/CDツールとの連携にも適しています。

クロスプラットフォーム対応

Windows、macOS、Linuxなど、主要なOSに対応しています。Dockerイメージも公式に提供されており、docker pull ghcr.io/zaproxy/zaproxy:stableで簡単に導入できます。

Javaで実装

Javaプログラミング言語で開発されているため、Javaの実行環境が必要です。

macOS用インストーラーにはJavaが含まれていますが、Windows、Linux、およびクロスプラットフォーム版ではJava 17以上を別途インストールする必要があります。(Docker版では、Javaをインストールする必要はありません。)

オープンソース・無償

Apache License 2.0ライセンスのもと、オープンソースとして公開されており、商用・非商用を問わず誰でも無料で利用できます。ライセンスコストをかけずに本格的なDASTを導入できるため、学習用途だけでなく、PoCや中小規模プロジェクトの診断にも適しています。

日本語対応

GUIは日本語表示に対応しており、主要なメニューやアラート内容を日本語で確認できます。英語が苦手な初学者でも操作しやすく、効率的に脆弱性診断の学習を進められます。

加えて、日本国内のセキュリティイベントやコミュニティでもZAPの活用事例が多く紹介されており、日本語での情報交換も活発です。

主な機能

インターセプト型プロキシ

ZAPはインターセプト型プロキシとして動作し、ブラウザとWebアプリケーション間のHTTP/HTTPS通信を可視化できます。

リクエスト/レスポンスのヘッダー、パラメータ、Cookie、ボディをリアルタイムで確認・編集できる点が最大の特長です。

アクティブスキャン(動的スキャン)

アクティブスキャンは、脆弱性診断用のリクエストを送信してWebアプリケーションの反応を解析し、脆弱性を検出する診断機能です。SQLインジェクション、XSS、OSコマンドインジェクションなど、入力値に対するサーバ側の検証不備を洗い出すことができます。

なお、アクティブスキャンはシステム負荷やデータ破壊リスクを伴うため、本番環境では実行せず、検証環境での利用が推奨されます。

パッシブスキャン(静的スキャン)

パッシブスキャンは、プロキシとして動作するZAPを通過する通信を解析し、通信内容から潜在的な問題点を検出する診断機能です。

アクティブスキャンとの違い
  • 診断用に改変されたリクエストは送信しない。
  • ローカルプロキシ機能で取得した通信内容から脆弱性を判断する。

アクティブスキャンのように診断用に改変したリクエストを送信しないため、システムへの負荷やデータ破壊のリスクを低減できます。ただし、パラメータに特定の値を入力しなければ検出できない脆弱性(インジェクション系など)は検出できないという制約があります。

自動クロール

自動クロールは、診断対象のWebアプリケーションをZAPが機械的に巡回し、URL・パラメータを収集する機能です。脆弱性診断の品質は「どれだけ網羅的に攻撃対象を把握できたか」に大きく依存するため、自動クロールはアクティブスキャン前の重要な前処理と位置づけられます。

  • スパイダー
    • HTMLを解析してリンクを巡回する従来型のクローラー
    • 静的なコンテンツやサーバーサイドレンダリング(SSR)のWebサイトが得意
    • JavaScriptで生成されるリンクには対応できない
  • AJAXスパイダー
    • Crawljaxを使用して、JavaScriptを実行しながらクロールする
    • JavaScriptで動的に生成されるリンクもクロール可能
    • SPA(Single Page Application)にも対応
  • クライアントスパイダー
    • 2025年1月11日リリースのZAP 2.16で導入されたクローラー
    • AJAXスパイダーと同様、JavaScriptによる動的URLやSPAのサイトが得意
    • AJAXスパイダーはCrawljaxを使用しているが、クライアントスパイダーはクライアントサイド統合アドオンで対応

認証・セッション管理

ログインが必要なWebアプリケーションの診断にも対応しています。

対応している認証方式
  • フォームベース認証
  • HTTP/NTLM認証
  • 手動認証
  • スクリプトベース認証
  • JSONベース認証
  • ブラウザベース認証
  • クライアントスクリプト認証

認証済みのセッションを維持したままスキャンを実行できるため、アクセス制限のある管理画面やユーザー限定ページに対しても診断が可能です。

レポート出力

スキャン結果をHTML、PDF、XML、JSON、Markdownの形式で出力可能です。

レポートに含まれる内容
  • 検出された脆弱性の概要
  • 該当URL・パラメータ
  • 診断コード
  • 推奨される解決策
  • 参考情報(URL)
  • CWE(共通脆弱性タイプ一覧)番号
  • WASC ID  など

注意事項

ZAPは強力な診断機能を持ちますが、その特性上、以下の点に留意して使用する必要があります。

同意のない第三者のWebサイトへのスキャンは禁止

ZAPを利用した脆弱性診断は、対象システムの所有者から正式な許可を得ている場合にのみ実施してください。たとえ善意の脆弱性診断であっても、許可を得ずに実行するとサイバー攻撃とみなされる可能性があります。許可を得ていない環境では、絶対に使用しないでください。

学習目的の場合は、意図的に脆弱性が用意されたやられアプリを利用しましょう。(本記事では、やられアプリを利用して、ZAPの使い方を解説しています。)

本番環境での使用には慎重を期すこと

アクティブスキャンは、システムへの負荷やデータ破壊のリスクを伴うため、本番環境での実行は避け、検証環境での利用を推奨します。

診断結果の過信は禁物

ZAPは多くの脆弱性を検出できますが、すべてのリスクを網羅するわけではありません。必要に応じて他のツールや手動診断と組み合わせることが重要です。

自動診断と手動診断の違い

ZAPには、「完全自動診断」「自動診断」「手動診断」の3つの診断方法があります。

完全自動診断

完全自動診断(クイックスタート/自動スキャン)は、ZAPに搭載されているスパイダーとアクティブスキャンを組み合わせた最も簡易的な診断手法です。ユーザーが診断対象のURLを入力するだけで、ZAPが自動的に以下の手順で脆弱性診断を実行します。

  1. スパイダーによる自動クロール
    • リンクやフォームを自動でたどり、URL・パラメータを収集。
    • AJAXスパイダーを使用することで、JavaScriptによって動的に生成されるリンクもクロール可能。
  2. アクティブスキャンの実行
    • 収集したHTTPリクエスト(URL、パラメータ)に対し、SQLインジェクションやXSSなどのペイロードを送信。
  3. 脆弱性評価
    • レスポンスを分析し、脆弱性の有無を検証。

完全自動診断は手軽に利用できる反面、診断範囲や精度に制約がある点を考慮する必要があります。

  • 認証が必要なURLにアクセスできない
    自動ログインに対応していないため、ログイン認証が必要なWebアプリケーションの場合、未ログイン状態でアクセス可能なURLのみが収集対象となります。
  • 業務フローを理解できない
    例:「商品選択 → カート → 確認 → 決済」といった遷移。
  • 網羅性に欠ける
    スパイダー(AJAXスパイダー含む)が自動でたどれるURLに限りがあるため、診断範囲が限定されます。

以上のことから、完全自動診断は「簡易的な初期スクリーニング」には適していますが、本格的な脆弱性診断には不十分です。

自動診断

自動診断では、診断者がブラウザ操作を通じてWebアプリケーションを手動でクロール(巡回)し、その後スパイダー、およびアクティブスキャンを実行します。

  1. 手動クロール
    • 診断者が実際にアプリケーションを操作し、ZAPはその通信内容(リクエスト、レスポンス)を記録します。
  2. 自動クロール
    • スパイダー、AJAXスパイダーを用いて網羅的にクロールし、手動クロールで漏れたURLを補完します。
  3. アクティブスキャンの実行
    • 手動、自動クロールで収集したHTTPリクエスト(URL、パラメータ)に対し、SQLインジェクションやXSSなどのペイロードを送信。
  4. 脆弱性評価
    • レスポンスを分析し、脆弱性の有無を検証。

この方法は、ログイン後の画面遷移やJavaScriptで制御されたUIに対応可能であり、完全自動診断に比べてより広範かつ実戦的な診断が可能です。

手動診断

手動診断は、ZAPのインターセプトプロキシやリクエスト編集機能を活用し、診断者が個別にリクエストを作成・変更し、脆弱性の有無を精査する手法です。

「業務ロジックに起因する脆弱性を発見しやすい」「自動診断では検出できない設計不備を洗い出せる」という特徴がある反面、「高度な知識と経験が必要」「工数が大きく、属人化しやすい」といった課題もあります。

  1. 完全自動診断で全体把握
  2. 自動診断で網羅性を確保
  3. 手動診断で重要箇所を深掘り

という段階的アプローチを取ることで、効率と品質の両立が可能になります。

ZAPのインストール

ZAPの公式サイトでは、対応するOSごとにインストーラーが提供されています。

ZAPインストーラーのダウンロード画面

ZAP公式サイトのダウンロードページ:https://www.zaproxy.org/download/

利用環境に応じたインストーラーをダウンロードし、ウィザードの指示に従ってインストールして下さい。

ここでは、脆弱性診断やペネトレーションテストの学習・実務を想定し、Kali Linux環境にZAPをインストールする手順について解説します。

使用するKali Linuxのバージョン

Kali Linux 2025.4

前提条件

ZAPは Javaで実装されたWebアプリケーション脆弱性診断ツールであり、実行にはJava 17以上のランタイム環境が必須です。

Kali Linux 2025.4の場合、OpenJDK 21が標準でインストールされているため、別途インストールは必要ありません。

$ java --version
openjdk 21.0.9 2025-10-21
OpenJDK Runtime Environment (build 21.0.9+10-Debian-1)
OpenJDK 64-Bit Server VM (build 21.0.9+10-Debian-1, mixed mode, sharing)
Memo
  • macOS版のZAPインストーラーにはJavaが同梱されているため、別途Javaをインストールする必要はありません。
  • Docker版のZAPについても、実行に必要なJava環境はDockerイメージに含まれており、追加のインストールは不要です。

Kali LinuxにZAPをインストール

Kali Linuxでは、ZAP(zaproxy)が 公式のAPTリポジトリに含まれており、追加リポジトリの設定なしでインストール可能です。

STEP

パッケージリストの更新

$ sudo apt update

利用可能なパッケージの最新情報をリポジトリから取得します。

STEP

パッケージ情報の確認

$ apt list | grep -i zap
〜 省略 〜
zaproxy/kali-rolling 2.17.0-0kali1 all

ZAPのパッケージ名は、zaproxyです。

STEP

パッケージ情報の確認

$ apt show zaproxy
Package: zaproxy
Version: 2.17.0-0kali1
Priority: optional
Section: utils
Maintainer: Kali Developers <devel@kali.org>
Installed-Size: 280 MB
Depends: default-jre
Breaks: kali-menu (<< 1.371.1)
Homepage: https://github.com/zaproxy/zaproxy
Download-Size: 222 MB
APT-Sources: http://http.kali.org/kali kali-rolling/main amd64 Packages
Description: Testing tool for finding vulnerabilities in web applications
 The OWASP Zed Attack Proxy (ZAP) is an easy to use
 integrated penetration testing tool for finding
 vulnerabilities in web applications.
 .
 It is designed to be used by people with a wide range of
 security experience and as such is ideal for developers and
 functional testers who are new to penetration testing as
 well as being a useful addition to an experienced pen
 testers toolbox.
STEP

インストール状況の確認

$ apt list --installed | grep zaproxy
〜 出力なし 〜

インストールされていないことを確認し、次のインストールに進みます。

STEP

ZAPのインストール

$ sudo apt install zaproxy
STEP

インストール後の確認

$ which zaproxy
/usr/bin/zaproxy

$ which owasp-zap
/usr/bin/owasp-zap

ZAPの起動スクリプトが/usr/bin配下にインストールされます。

ZAPの起動

APTでインストールしたZAPは、Kali Linuxのアプリケーションメニューから起動できるほか、ターミナルからもコマンドで起動することが可能です。

STEP

ZAPの起動

APTを利用してインストールしたZAPは、アプリケーションメニューに登録されます。

アプリケーションメニューからZAPを起動する

アプリケーションメニューに加え、コマンドラインからも起動可能です。

$ zaproxy
または
$ owasp-zap

どちらも同一のZAP本体をGUI起動します。

ZAP起動中のダイアログ
ZAP起動中
STEP

ZAPセッションの管理

ZAPの起動が完了すると、最初にセッションの保持方法を選択するダイアログが表示されます。

ZAPセッション管理のダイアログ
ZAPセッションとは

簡単に言うと、「ZAPで行った作業内容を保存したプロジェクトファイル」です。スキャン対象のURL、リクエスト・レスポンスの履歴、発見された脆弱性、設定情報などが含まれます。

  • 現在のタイムスタンプでファイル名を付けてセッションを保存
    • ZAPが自動的に「20260109-231156.session」のような日時ベースの名前を付け、デフォルトフォルダに保存します。
  • 保存先のパスとファイル名を指定してセッションを保存
    • 保存場所とファイル名を自分で指定します。
  • 今はこのセッションを保存しない
    • セッションは保存されません。現在の作業内容は一時的に保持されますが、ZAPを終了すると消えます。
    • あとから「やっぱり保存したい」と思った場合は、メニューから保存に切り替えることも可能です。

「選択を記憶して、次回から表示しない」にチェックを入れると、以降の起動時にこのダイアログは表示されません。この設定は、ZAPのメニュー(ツール>オプション>データベース)からいつでも変更可能です。

STEP

アドオンの更新

ZAPの初回起動時には、アドオンの更新画面が表示されます。

ZAPのアドオン更新画面

ZAPは多数のアドオンで構成されており、最新の脆弱性への対応やクロール機能の改善、認証方式の追加など、重要な更新が含まれています。診断結果の精度はZAP本体およびアドオンの更新状況に大きく左右されるため、定期的な更新を推奨します。

アドオン更新画面の表示方法

メニューバー:ヘルプ > 更新を確認

デスクトップUI

ZAPのデスクトップUIは視認性と操作性に優れており、脆弱性診断をスムーズに行えるよう設計されています。ここでは、ZAPのデスクトップUIを構成する主要な要素について解説します。

ZAPのデスクトップUI
メニューバー診断作業に必要なあらゆる機能へのエントリーポイント。
ツールバーメニューバーの下に設置されているツールバーには、頻繁に利用する機能がまとめられており、ワンクリックで実行できます。
ツリーZAPが検出したドメイン、サイトパスが階層構造で表示されます。各ノードを右クリックすることで、コンテキストや認証情報の設定、スキャンの実行などが可能です。
ワークスペース画面中央に位置するワークスペースでは、ZAPを通過したリクエスト、およびレスポンスの内容を確認することができます。
インフォメーション通信履歴やスキャン状況がリアルタイムで確認でき、検出された脆弱性情報はリスクレベル(High / Medium / Low / Informational)ごとに表示されます。
フッターUIの最下部にあるフッターでは、アラート件数、プロキシ設定、アクティブスキャンなどのステータス情報を確認できます。

脆弱性診断前の事前準備

診断モードの選択

ZAPには、診断対象への影響度を制御するためのモードが用意されています。起動直後や診断開始前に、必ず適切なモードを選択してください。

ZAPの診断モード
  • セーフモード:アクティブスキャンを実行しない(主な用途:リクエスト、レスポンスの確認)
  • プロテクトモード:許可した範囲(スコープ)内のみ、アクティブスキャンを実行
  • 標準モード:特に制限なし(スコープ外であっても、アクティブスキャン可能)
  • 攻撃モード:特に制限なし(スコープ外であっても、アクティブスキャン可能)※標準モードとの違いは、新しいURLを見つけると、即座にアクティブスキャンが実行される

誤って第三者のサイトにスキャンを行うと、不正アクセス禁止法などの法律に抵触する可能性があるため、プロテクトモードを推奨します。

Httpセッションの設定

対象アプリケーションが使用しているセッションIDのCookie名(例:JSESSIONIDPHPSESSID など)を設定することで、セッションを維持した状態で脆弱性診断を行うことができます。

メニュー:ツール>オプション>Httpセッション

ZAPのHttpセッションの設定画面

一般的なWebアプリケーションで広く使用されているCookie名は、初期設定されています。

既定値
  • asp.net_sessionid
  • aspsessionid
  • cfid
  • cftoken
  • jsessionid
  • phpsessid
  • sessid
  • sid
  • siteserver
  • viewstate
  • zenid

各アプリケーションで独自に定義しているCookieが存在する場合は、対象リストに追加して下さい。

なお、現時点でCookie名が把握できない場合でも問題ありません。その場合は、後続のクロール工程においてSet-Cookieヘッダやレスポンス内容を確認し、判明した時点で追加して下さい。

CSRF対策トークンの設定

Httpセッションに続いて、CSRF対策トークンを設定します。

メニュー:ツール>オプション>Anti-CSRFトークン

ZAPのCSRF対策トークンの設定画面

代表的なCSRF対策トークン名は、初期設定されています。

既定値
  • __csrf_magic
  • __RequestVerificationToken
  • _csrf
  • _csrf_token
  • _csrfSecret
  • _csrfToken
  • _token
  • anoncsrf
  • anticsrf
  • authenticity_token
  • CSRF
  • csrf_token
  • csrfmiddlewaretoken
  • CSRFToken
  • OWASP_CSRFTOKEN

各アプリケーションで独自にトークン名を定義している場合は、対象リストに追加して下さい。

なお、現時点で把握できない場合でも問題ありません。その場合は、後続のクロール工程において、判明した時点で追加して下さい。

ZAPを使って脆弱性診断を実施

このセクションでは、Windowsマシン上に構築した検証環境(仮想環境)を用いて、ZAPの使い方を解説します。

主な流れ

診断対象の設定 → ログイン情報の設定 → 手動クロール → 自動クロール → アクティブスキャン → 脆弱性評価

診断対象マシンには、OWASP BWAにプリインストールされているbWAPP(やられアプリ)を使用します。

検証環境の構成

ZAP実行マシンKali Linux 2025.4
ZAP 2.17
診断対象マシンOWASP BWA 1.2(bWAPP)
http://192.168.10.105/bWAPP/
ログインID:bee
パスワード:bug
STEP

事前準備

  • 診断モードの選択(推奨モード:プロテクトモード
  • Httpセッションの設定
  • CSRF対策トークンの設定

詳細は、前述の「脆弱性診断前の事前準備」をご覧ください。

STEP

ブラウザの起動

ワークスペースのクイックスタートタブからブラウザを起動します。この方法でブラウザを起動すると、ZAP連携が自動で行われ、ZAPを通じて全通信がインターセプトされます。

ZAP連携とは
  • ZAPをローカルプロキシとして設定したブラウザが起動する。
  • すべてのHTTP/HTTPS通信がZAPを経由する。
  • リクエスト/レスポンスがリアルタイムに記録される。

ブラウザをZAPから起動しない場合(ブラウザを直接起動する場合)、ブラウザとZAPの連携は自動で行われないため、ローカルプロキシ、およびCA証明書の設定が別途必要です。

STEP
ワークスペースのクイックスタートタブを選択し、手動探索をクリック
クイックスタートタブから手動探索を選択
STEP
探索対象URLに診断対象のWebアプリケーションのURLを入力、使用するブラウザ(例.FireFox)を選択し、ブラウザを起動をクリック
診断対象URLを入力して、ブラウザを起動
STEP
ZAPと自動連携したブラウザが起動する
ZAPと自動連携したブラウザが起動する

ZAPと連携したブラウザが起動し、探索対象URLに指定したURLが開きます。表示されたURLは、ZAPのサイトツリーおよびインフォメーションの履歴タブに反映されます。

STEP

診断サイトの設定

診断サイトのURLをコンテキストに含めます。

コンテキストとは

診断対象となるサイトの範囲や条件を設定する単位

STEP
サイトツリー(またはインフォメーションの履歴タブ)から対象サイトを選択し、右クリック:コンテキストに含める>新規コンテキスト
サイトツリー(またはインフォメーションの履歴タブ)から新規コンテキストを選択
STEP
対象サイトのURLが正規表現で入力されていることを確認し、OKボタンを押下
対象サイトのURLが入力されていることを確認し、OKボタンを押下

コンテキストの設定内容は、メニュー:ファイル>セッションプロパティで確認できます。

新規作成したコンテキストは、自動的にスコープに含まれます。

コンテキストはスコープに含まれている
STEP

ログイン情報の設定

ログイン認証が必要なWebアプリケーションに対して脆弱性診断を行う場合、ZAPにログイン情報を設定します。

業務システムでは、未ログイン状態でアクセス可能な画面は限定的で、認証後の画面や機能を診断できなければ、網羅性が大きく損なわれます。

以下では、フォーム認証(ID/パスワード)を前提とした一般的な設定手順を解説します。

STEP
ログイン操作

まず、ZAPと連携済みのブラウザを使って、診断対象サイトにログインします。

診断対象サイトにログイン
STEP
認証リクエストの指定

履歴タブ(またはサイトツリー)から、ログイン時に送信されたPOSTリクエストを特定します。(リクエストタブを選択すると、送信したリクエスト内容を確認できます。)

履歴タブ(またはサイトツリー)から、ログイン時に送信されたPOSTリクエストを選択する

該当リクエストを右クリックし、コンテキストとしてフラグ付け>【コンテキスト名】:フォームベース認証ログインリクエストを選択すると、セッションプロパティの認証パネルが表示されます。

フォームベース認証ログインリクエストを選択

この操作により、ZAPは「このリクエストが認証処理である」と認識し、以降の設定を行えるようになります。

STEP
認証方式の設定
セッションプロパティの認証タブ
  • コンテキストで現在選択されている認証方式
  • ログインフォーム送信先URL
  • GETログインページのURL
  • ログインリクエストのPOSTデータ

に自動入力されていることを確認し、

  • ユーザー名パラメーター
  • パスワードパラメーター

を設定し、OKボタンを押下します。

STEP
ログイン成功を判断する基準

ログインが成功したかどうかをZAPが判断できるように、ログイン状態(またはログアウト状態)を判定する条件を設定します。

認証後のHTTPレスポンスの中から、ログインが成功した時のみに出力される部分を選択し、右クリック(例.ログアウトボタン、ログインユーザー名 など)

ログインが成功した時のみに出力される部分を選択し、右クリック

コンテキストとしてフラグ付け>【コンテキスト名】:認証ログイン済み指標を選択

認証ログイン済み指標を選択

セッションプロパティの認証パネルが表示され、ログイン済みメッセージを識別する正規表現パターンに自動入力されていることを確認し、OKボタンを押下

「ログイン済みメッセージを識別する正規表現パターン」を確認し、OKボタンを押下

ログイン状態を識別できる部分がない場合、ログアウト状態を識別できる部分を指定します。その場合、【コンテキスト名】:認証ログアウト済み指標を設定します。

STEP
ログインユーザーの設定

メニュー:ファイル>セッションプロパティから、セッションプロパティを開く

セッションプロパティを開く

対象コンテキストのユーザーパネルを選択し、追加ボタンを押下

対象コンテキストのユーザーパネルを選択し、追加ボタンを押下

診断時に使用するログインユーザーを追加する

診断時に使用するログインユーザーを追加する

有効にチェックが入っていることを確認し、OKボタンを押下

有効にチェックが入っていることを確認し、OKボタンを押下
STEP

診断サイトをクロールする

クロールは「診断対象のURL・パラメータをZAPに認識させる工程」です。クロールの網羅性は、そのまま脆弱性検出率に直結します。

手動クロール

手動クロールは、人間が実際にブラウザを操作(画面遷移、検索、登録など)しながら診断対象のWebサイトを巡回する手法です。ZAPはこの操作中に通過したリクエストをインターセプトし、対象サイトのURLやパラメータを記憶します。

操作に使用するブラウザは、ZAPの「クイックスタート」から起動したブラウザ、またはZAPのプロキシ設定を反映させたブラウザを使用します。

手動クロールでは、JavaScriptで動的に生成されるコンテンツや、SPA(Single Page Application)のルーティング情報など、自動クロールで検出しにくい要素も取得可能です。画面遷移の違いによってパラメータが変化する場合、すべての画面遷移を漏れなくクロールすることで、診断の網羅性を高めることができます。

手動クロール中は、バッググラウンドでパッシブスキャンが実行され、検出された脆弱性はアラートタブで確認できます。

検出された脆弱性がアラートタブに表示される

自動クロール

前述の通り、ZAPには3種類の自動クロール機能が搭載されています。

メニューからスパイダーを起動する

診断対象のURLを右クリック:攻撃 > スパイダー

スパイダー起動画面

診断対象のURLを右クリック:攻撃 > AJAXスパイダー

AJAXスパイダー起動画面

診断対象のURLを右クリック:攻撃 > クライアントスパイダー

クライアントスパイダー起動画面
  • 開始位置
  • コンテキスト
  • ユーザー

など、使用するクローラーの必要項目を入力し、スキャン開始をクリックします。

STEP

アクティブスキャンの実行

アクティブスキャンは、実際に診断用リクエストを送信してWebアプリケーションの脆弱性を動的に検出する機能です。

STEP
サイトツリー(または履歴タブ)で対象サイトを右クリックし、攻撃>アクティブスキャン
対象サイトを選択し、アクティブスキャンをクリック

※特定のURLを指定することも可能

STEP
必要事項を設定し、スキャン開始を押下
アクティブスキャンを開始する

スキャンポリシーの詳細は、メニュー:分析>スキャンポリシー管理で確認できます。オリジナルのスキャンポリシーを作成することもできます。

ポリシー一覧

ポリシー名概要
APIAPIに影響しやすい脆弱性に焦点を当てたポリシー
Default Policyデフォルトのポリシー(すべてのアクティブスキャンルールが有効
Dev CICD【開発者向け】CI/CD用ポリシー
Dev Full【開発者向け】包括的ポリシー(Dev Standardの上位版)
Dev Standard【開発者向け】標準ポリシー
Pen Testペネトレーションテスト向け
QA CICD【QA/ステージング環境向け】CI/CD用ポリシー
QA Full【QA/ステージング環境向け】包括的ポリシー(QA Standardの上位版)
QA Standard【QA/ステージング環境向け】標準ポリシー
STEP

スキャンの進行状況を確認

アクティブスキャンの実行中、送信されたリクエストやスキャンの進捗率がリアルタイムで表示されます。

アクティブスキャンの進捗率(全体)

また、詳細アイコン(進捗率の左のアイコン)をクリックすると、スキャンの進行状況の詳細を確認できます。

アクティブスキャンの進捗率(詳細)
STEP

スキャン結果の確認

スキャンで検出されたアラートは、アラートタブで確認できます。

アラートタブを表示

アラートはツリー形式で分類され、各アラートをクリックすると、以下の詳細情報が表示されます。

項目説明
アラート名検出された脆弱性の種別(例:SQLインジェクション、XSSなど)
URL脆弱性が確認されたエンドポイント
リスク脆弱性の危険度(High、Medium、Low、Informational)
パラメータ問題があったリクエストパラメータ
攻撃脆弱性の検出に使用された診断コード
説明脆弱性の概要
その他の情報再現手順など
解決策脆弱性の修正方法に関するアドバイス
参照脆弱性の参考URL

特に注目すべきは、各アラートに対してCWE(共通脆弱性タイプ一覧)番号やWASC IDが付記されている点です。これにより、脆弱性の業界標準に基づく識別と対応策の調査が容易になります。

ZAPで検出されたアラートは、すべてが脆弱性であるとは限りません。誤検知の可能性があるため、手動で再現確認を行ってください。

検出されたアラートが脆弱性か誤検知かを、手動で確認する
STEP

レポート出力

最後に診断結果をレポートとして出力します。

メニュー:レポート>レポートを生成する

診断結果のレポートを出力する
デフォラボ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次