program-owasp-zap

Guia Definitivo e Padrões de Engenharia para OWASP ZAP (zaproxy.org), cobrindo o scanner dinâmico de segurança de aplicações web e APIs (DAST), ZAP Automation Framework (planos AF em YAML), scans empa

SKILL.md

GitHub

Habilidade de IA: Guia e Engenharia com OWASP ZAP (Zed Attack Proxy)

Esta skill fornece orientação técnica canônica, comandos operacionais e padrões de engenharia para o OWASP ZAP (Zed Attack Proxy) (zaproxy.org), a ferramenta de código aberto mais utilizada no mundo para Dynamic Application Security Testing (DAST) e inspeção de tráfego HTTP/HTTPS.


🧭 Visão Geral e Modos de Operação do ZAP

O OWASP ZAP opera como um proxy de interceptação e scanner dinâmico de vulnerabilidades, operando em três modalidades principais:

┌────────────────────────────────────────────────────────────────────────┐
│                        MODOS DE EXECUÇÃO DO ZAP                        │
└────────────────────────────────────────────────────────────────────────┘
  1. Desktop GUI / HUD: Auditoria interativa, exploração manual e depuração.
  2. Headless Daemon: Serviço de segundo plano expondo REST API (porta 8080).
  3. ZAP Automation Framework (AF): Execução headless dirigida por arquivo YAML.
  4. Docker Packaged Scans: Contêineres efêmeros para pipelines de CI/CD.

📄 ZAP Automation Framework (AF) — Padrão Canônico em YAML

O Automation Framework (AF) é o padrão moderno recomendado pela equipe do ZAP para orquestrar varreduras completas sem necessidade de scripts externos.

1. Estrutura Canônica de um Plano de Automação (zap-scan-plan.yaml)

---
env:
  contexts:
    - name: "Ecommerce-Staging"
      urls:
        - "https://staging.empresa.com"
      includePaths:
        - "https://staging.empresa.com/.*"
      excludePaths:
        - "https://staging.empresa.com/logout.*"
        - "https://staging.empresa.com/admin/delete.*"
      authentication:
        method: "json"
        parameters:
          loginUrl: "https://staging.empresa.com/api/v1/auth/login"
          loginRequestData: '{"username": "{%username%}", "password": "{%password%}"}'
        verification:
          method: "response"
          loggedInRegex: '"authenticated":\s*true'
          loggedOutRegex: '"error":\s*"unauthorized"'
      users:
        - name: "test-user"
          credentials:
            username: "qa-sec-user"
            password: "SecurePassword123!"
  parameters:
    failOnError: true
    failOnWarning: false
    progressToStdout: true

jobs:
  # 1. Spider Tradicional (Crawling de HTML)
  - type: spider
    parameters:
      context: "Ecommerce-Staging"
      user: "test-user"
      maxDuration: 10
      maxDepth: 5

  # 2. Ajax Spider (Navegação Headless em SPAs React/Vue via Chromium)
  - type: spiderAjax
    parameters:
      context: "Ecommerce-Staging"
      user: "test-user"
      maxDuration: 15
      browserId: "firefox-headless"

  # 3. Configuração de Varredura Passiva
  - type: passiveScan-config
    parameters:
      maxAlertsPerRule: 5
      scanOnlyInScope: true

  # 4. Aguardar Conclusão da Análise Passiva
  - type: passiveScan-wait
    parameters:
      maxDuration: 10

  # 5. Varredura Ativa (Fuzzing de Parâmetros e Injeções)
  - type: activeScan
    parameters:
      context: "Ecommerce-Staging"
      user: "test-user"
      policy: "Default Policy"
      maxRuleDurationInMins: 5
      maxScanDurationInMins: 30

  # 6. Geração de Relatórios (HTML, JSON e SARIF)
  - type: report
    parameters:
      template: "traditional-html"
      reportDir: "/zap/wrk/reports"
      reportFile: "zap-report.html"
  - type: report
    parameters:
      template: "sarif-json"
      reportDir: "/zap/wrk/reports"
      reportFile: "zap-report.sarif"

2. Execução do Plano via CLI:

# Executar o plano YAML em modo headless
./zap.sh -cmd -autorun zap-scan-plan.yaml

# Gerar template mínimo de plano YAML
./zap.sh -cmd -autogenmin template-min.yaml

# Gerar template com todos os parâmetros possíveis
./zap.sh -cmd -autogenmax template-max.yaml

🐳 Execução via Scans Empacotados em Docker

Para pipelines rápidos de CI/CD, o ZAP disponibiliza três scripts empacotados em sua imagem oficial zaproxy/zap-stable:

1. Baseline Scan (zap-baseline.py)

Executa spider rápido e análise passiva (cabeçalhos, cookies, CSP, SSL). Não envia payloads agressivos.

docker run --rm -v $(pwd):/zap/wrk:rw -t zaproxy/zap-stable zap-baseline.py \
    -t https://staging.empresa.com \
    -r zap-baseline-report.html \
    -J zap-baseline-report.json \
    -I

2. Full Active Scan (zap-full-scan.py)

Executa spider completo, Ajax spider e varredura ativa profunda com injeções de parâmetros.

docker run --rm -v $(pwd):/zap/wrk:rw -t zaproxy/zap-stable zap-full-scan.py \
    -t https://staging.empresa.com \
    -r zap-full-report.html \
    -n zap.context \
    -m 30

3. API Scan (zap-api-scan.py)

Projetado especificamente para APIs REST (OpenAPI/Swagger), GraphQL e SOAP.

# Varredura de contrato OpenAPI v3
docker run --rm -v $(pwd):/zap/wrk:rw -t zaproxy/zap-stable zap-api-scan.py \
    -t https://staging.empresa.com/api/v3/openapi.json \
    -f openapi \
    -r zap-api-report.html

# Varredura de endpoint GraphQL
docker run --rm -v $(pwd):/zap/wrk:rw -t zaproxy/zap-stable zap-api-scan.py \
    -t https://staging.empresa.com/graphql \
    -f graphql \
    -r zap-graphql-report.html

🔑 Autenticação Avançada e Injeção de Headers

1. Injeção de Bearer Token / API Key Estática:

# Injetar cabeçalho Authorization em todas as requisições disparadas pelo ZAP
docker run --rm -v $(pwd):/zap/wrk:rw -t zaproxy/zap-stable zap-api-scan.py \
    -t https://api.empresa.com/openapi.json \
    -f openapi \
    -z "-config replacer.full_list(0).description=AuthHeader \
        -config replacer.full_list(0).enabled=true \
        -config replacer.full_list(0).matchtype=REQ_HEADER \
        -config replacer.full_list(0).matchstr=Authorization \
        -config replacer.full_list(0).regex=false \
        -config replacer.full_list(0).replacement='Bearer eyJhbGciOiJIUzI1Ni...'"

🚀 Integração em CI/CD (GitHub Actions Workflow)

name: DAST Dynamic Security Scan (OWASP ZAP)

on:
  schedule:
    - cron: '0 2 * * *' # Execução noturna diária às 02:00
  workflow_dispatch:

jobs:
  dast_scan:
    name: OWASP ZAP Full Scan
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Create Reports Directory
        run: mkdir -p reports

      - name: Run OWASP ZAP Automation Plan
        uses: zaproxy/action-full-scan@v0.12.0
        with:
          target: 'https://staging.empresa.com'
          rules_file_name: '.zap/rules.tsv'
          cmd_options: '-a'

      - name: Upload ZAP HTML Report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: zap-scan-report
          path: report_html.html

🔗 Integração com Outras Skills do Repositório