mcpField
I
integrating-dast-with-owasp-zap-in-pipeline

integrating-dast-with-owasp-zap-in-pipeline

github.com/mukul975セキュリティ35.2k155 回インストール8 週間前に更新
リポジトリ

integrating-dast-with-owasp-zap-in-pipeline について

CI/CD パイプラインに OWASP ZAP による DAST を組み込む方法を説明するスキルです。リリース前に稼働中の Web アプリや API を検査するチーム向けに、スキャン種別、ルール設定、デプロイ判定を扱います。

主な機能

  1. 01ZAP ベースラインスキャンの設定
  2. 02包括的なアクティブスキャン
  3. 03OpenAPI 仕様による API スキャン
  4. 04ルールの動作としきい値の設定
  5. 05Docker Compose によるローカルテスト

活用シーン

  1. 01ステージング配置後のパッシブスキャン
  2. 02仕様に基づく API エンドポイント検査
  3. 03検出結果に応じた本番リリース判定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill integrating-dast-with-owasp-zap-in-pipeline

インストール後、Claude Code で/integrating-dast-with-owasp-zap-in-pipelineを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

詳細

パイプラインでの OWASP ZAP による DAST の統合

使用するタイミング

  • 実行中のウェブアプリケーションをテストし、XSS、SQLi、CSRF、設定ミスなどの脆弱性を検出するとき
  • SAST だけでは不十分で、実行時の動作テストが必要なとき
  • 本番環境へのリリース前に、ウェブアプリケーションの動的セキュリティテストがコンプライアンスで義務付けられているとき
  • API(REST/GraphQL)の認証、認可、インジェクションの脆弱性をテストするとき
  • 本番環境へのデプロイ前に、ステージング環境で継続的な DAST スキャンを確立するとき

ソースコードのスキャン(SAST を使用)、依存関係のスキャン(SCA を使用)、インフラストラクチャ設定のスキャン(IaC スキャンツールを使用)には使用しないでください。

前提条件

  • OWASP ZAP の Docker イメージ、またはローカルにインストールされた ZAP(zaproxy/zap-stable または zaproxy/action-*)
  • CI/CD ランナーからアクセスできる実行中の対象アプリケーション(ステージング URL または Docker サービス)
  • ZAP スキャンルールの設定(任意、調整用)
  • API スキャン用の OpenAPI/Swagger 仕様(任意)

ワークフロー

ステップ 1:GitHub Actions で ZAP ベースラインスキャンを設定する
# .github/workflows/dast-scan.yml
name: DAST Security Scan

on:
  deployment_status:
  workflow_dispatch:
    inputs:
      target_url:
        description: 'Target URL to scan'
        required: true

jobs:
  zap-baseline:
    name: ZAP Baseline Scan
    runs-on: ubuntu-latest
    services:
      webapp:
        image: ${{ github.repository }}:${{ github.sha }}
        ports:
          - 8080:8080
        options: --health-cmd="curl -f http://localhost:8080/health" --health-interval=10s --health-timeout=5s --health-retries=5

    steps:
      - uses: actions/checkout@v4

      - name: ZAP Baseline Scan
        uses: zaproxy/[email protected]
        with:
          target: 'http://webapp:8080'
          rules_file_name: '.zap/rules.tsv'
          cmd_options: '-a -j'
          allow_issue_writing: false

      - name: Upload ZAP Report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: zap-baseline-report
          path: report_html.html
ステップ 2:包括的なテスト用に ZAP フルスキャンを設定する
  zap-full-scan:
    name: ZAP Full Scan
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: ZAP Full Scan
        uses: zaproxy/[email protected]
        with:
          target: ${{ github.event.inputs.target_url || 'https://staging.example.com' }}
          rules_file_name: '.zap/rules.tsv'
          cmd_options: '-a -j -T 60'

      - name: Upload Reports
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: zap-full-report
          path: |
            report_html.html
            report_json.json
ステップ 3:OpenAPI 仕様を使用して API スキャンを設定する
  zap-api-scan:
    name: ZAP API Scan
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: ZAP API Scan
        uses: zaproxy/[email protected]
        with:
          target: 'https://staging.example.com/api/openapi.json'
          format: openapi
          rules_file_name: '.zap/api-rules.tsv'
          cmd_options: '-a -j'
ステップ 4:ZAP スキャンルールを設定する
# .zap/rules.tsv
# Rule ID	Action (IGNORE/WARN/FAIL)	Description
10003	IGNORE	# Vulnerable JS Library (handled by SCA)
10015	WARN	# Incomplete or No Cache-control Header
10021	FAIL	# X-Content-Type-Options Missing
10035	FAIL	# Strict-Transport-Security Missing
10038	FAIL	# Content Security Policy Missing
10098	IGNORE	# Cross-Domain Misconfiguration (CDN)
40012	FAIL	# Cross Site Scripting (Reflected)
40014	FAIL	# Cross Site Scripting (Persistent)
40018	FAIL	# SQL Injection
40019	FAIL	# SQL Injection (MySQL)
40032	FAIL	# .htaccess Information Leak
90033	FAIL	# Loosely Scoped Cookie
ステップ 5:ローカルテスト用に Docker Compose で ZAP を実行する
# docker-compose.zap.yml
version: '3.8'
services:
  webapp:
    build: .
    ports:
      - "8080:8080"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 10s
      retries: 5

  zap:
    image: zaproxy/zap-stable:latest
    depends_on:
      webapp:
        condition: service_healthy
    command: >
      zap-baseline.py
        -t http://webapp:8080
        -r /zap/wrk/report.html
        -J /zap/wrk/report.json
        -c /zap/wrk/rules.tsv
        -I
    volumes:
      - ./zap-reports:/zap/wrk
      - ./.zap/rules.tsv:/zap/wrk/rules.tsv

主な概念

用語定義
DAST動的アプリケーションセキュリティテスト。リクエストを送信してレスポンスを分析し、実行中のアプリケーションをテストします
ベースラインスキャンアクティブ攻撃を行わずにアプリケーションをスパイダーで巡回する、CI/CD に適した高速なパッシブスキャン
フルスキャンXSS、SQLi、その他のインジェクション脆弱性を狙った攻撃ペイロードを含むアクティブスキャン
API スキャンOpenAPI/Swagger 仕様を使用して、文書化されたすべての API エンドポイントをテストする、対象を絞ったスキャン
スパイダーリンクをたどってアプリケーションのページやエンドポイントを検出する ZAP のクローラー
アクティブスキャンZAP が検出したエンドポイントに攻撃ペイロードを送信し、悪用可能な脆弱性を探すフェーズ
パッシブスキャン攻撃を送信せずに、HTTP レスポンスのセキュリティヘッダー、Cookie、情報漏えいを分析します
スキャンポリシー有効にする攻撃の種類と強度レベルを定義する設定

ツールとシステム

  • OWASP ZAP:DAST テスト用のオープンソースウェブアプリケーションセキュリティスキャナー
  • zaproxy/action-baseline:ZAP のパッシブなベースラインスキャン用 GitHub Action
  • zaproxy/action-full-scan:ZAP のアクティブなフルスキャン用 GitHub Action
  • zaproxy/action-api-scan:OpenAPI に対応した API 中心のスキャン用 GitHub Action
  • Nuclei:CI/CD 統合向けのテンプレートベースの検出機能を備えた代替の脆弱性スキャナー

よくあるシナリオ

シナリオ:ステージングデプロイパイプラインへの DAST の統合

コンテキスト:あるチームは本番環境の前にステージング環境へデプロイしており、実行時の脆弱性を検出するため、各ステージの間に自動 DAST スキャンを行う必要があります。

アプローチ:

  1. ステージング環境へのデプロイが成功した後に実行される DAST ジョブをパイプラインに追加します
  2. まず ZAP ベースラインスキャンを実行し、迅速なパッシブフィードバックを得ます(2~5 分)
  3. 続いて、アプリケーションの OpenAPI 仕様を使用した対象を絞った API スキャンを実行します
  4. rules.tsv を設定し、重大な検出結果(XSS、SQLi)は FAIL、ヘッダーや Cookie の問題は WARN とします
  5. 確認用に ZAP レポートをパイプラインのアーティファクトとしてアップロードします
  6. FAIL レベルの検出結果があれば、本番環境へのデプロイをブロックします
  7. より広範囲を検査するため、ステージング環境に対するフルスキャンを毎週スケジュールします

注意点:ZAP のフルスキャンには 30 分以上かかることがあり、攻撃トラフィックによってステージングサーバーに過剰な負荷がかかる場合があります。CI ではベースラインスキャンを使い、フルスキャンはスケジュールに従って実施してください。調整せずに本番環境に対して DAST を実行すると、WAF によるブロックやインシデントアラートが発生する可能性があります。

出力形式

ZAP DAST Scan Report
======================
Target: https://staging.example.com
Scan Type: Baseline + API
Date: 2026-02-23
Duration: 4m 32s

FINDINGS:
  FAIL: 3
  WARN: 7
  INFO: 12
  PASS: 45

FAILING ALERTS:
  [HIGH] 40012 - Cross Site Scripting (Reflected)
    URL: https://staging.example.com/search?q=<script>
    Method: GET
    Evidence: <script>alert(1)</script>

  [MEDIUM] 10021 - X-Content-Type-Options Missing
    URL: https://staging.example.com/api/v1/*
    Evidence: Response header missing

  [MEDIUM] 10035 - Strict-Transport-Security Missing
    URL: https://staging.example.com/
    Evidence: HSTS header not present

QUALITY GATE: FAILED (1 HIGH, 2 MEDIUM findings)

コメント