dast-zap dast-zap

使用OWASP ZAP进行动态应用安全测试(DAST),包括被动和主动扫描,API测试和OWASP Top 10漏洞检测。

渗透测试 0 次安装 0 次浏览 更新于 2/27/2026

以下是内容的中文翻译:

name: dast-zap description: > 使用OWASP ZAP(Zed Attack Proxy)进行动态应用安全测试(DAST),包括被动和主动扫描, API测试和OWASP Top 10漏洞检测。使用场景:(1) 对Web应用程序和API进行运行时安全测试,(2) 在部署的 应用程序中检测XSS、SQL注入和认证缺陷等漏洞,(3) 在CI/CD管道中使用Docker容器自动化安全扫描,(4) 进行 会话管理的认证测试,(5) 生成具有OWASP和CWE映射的安全性报告以符合合规性。 version: 0.1.0 maintainer: SirAppSec category: appsec tags: [dast, zap, web-security, owasp, vulnerability-scanning, api-testing, penetration-testing] frameworks: [OWASP, CWE] dependencies: tools: [docker] optional: [python3, java] references:


DAST与OWASP ZAP

概览

OWASP ZAP(Zed Attack Proxy)是一个开源DAST工具,作为中间人代理拦截、检查和测试Web应用程序流量以 寻找安全漏洞。ZAP提供自动化被动和主动扫描、API测试功能,并与CI/CD集成,实现运行时安全测试。

快速开始

基础扫描(Docker)

运行快速被动安全扫描:

docker run -t zaproxy/zap-stable zap-baseline.py -t https://target-app.com -r baseline-report.html

全面主动扫描(Docker)

进行全面的主动漏洞测试:

docker run -t zaproxy/zap-stable zap-full-scan.py -t https://target-app.com -r full-scan-report.html

API扫描与OpenAPI规范

使用OpenAPI/Swagger规范测试API:

docker run -v $(pwd):/zap/wrk/:rw -t zaproxy/zap-stable zap-api-scan.py \
  -t https://api.target.com \
  -f openapi \
  -d /zap/wrk/openapi-spec.yaml \
  -r /zap/wrk/api-report.html

核心工作流程

第1步:定义扫描范围和目标

确定目标应用程序URL并定义范围:

# 设置目标URL
TARGET_URL="https://target-app.com"

# 对于认证扫描,准备认证上下文
# 详见references/authentication_guide.md中的详细设置

范围考虑因素:

  • 排除第三方域名和CDN URL
  • 包括所有应用程序子域和API端点
  • 尊重渗透测试协议中的范围限制

第2步:运行被动扫描

执行被动扫描以分析流量而不进行主动攻击:

# 基础扫描执行爬虫+被动扫描
docker run -t zaproxy/zap-stable zap-baseline.py \
  -t $TARGET_URL \
  -r baseline-report.html \
  -J baseline-report.json

被动扫描检测内容:

  • 缺少安全头部(CSP、HSTS、X-Frame-Options)
  • 响应中信息泄露
  • Cookie安全问题(HttpOnly、Secure标志)
  • 基本认证弱点
  • 应用程序指纹数据

第3步:执行主动扫描

进行主动漏洞测试(需要授权):

# 全面扫描包括爬虫+被动+主动扫描
docker run -t zaproxy/zap-stable zap-full-scan.py \
  -t $TARGET_URL \
  -r full-scan-report.html \
  -J full-scan-report.json \
  -z "-config api.addrs.addr.name=.* -config api.addrs.addr.regex=true"

主动扫描覆盖范围:

  • SQL注入(SQLi)
  • 跨站脚本(XSS)
  • 路径遍历
  • 命令注入
  • XML外部实体(XXE)
  • 服务器端请求伪造(SSRF)
  • 安全配置错误

警告: 主动扫描执行真实攻击。仅在您有明确授权测试的应用程序上运行。

第4步:使用规范测试API

扫描REST、GraphQL和SOAP API:

# OpenAPI/Swagger API扫描
docker run -v $(pwd):/zap/wrk/:rw -t zaproxy/zap-stable zap-api-scan.py \
  -t https://api.target.com \
  -f openapi \
  -d /zap/wrk/openapi.yaml \
  -r /zap/wrk/api-report.html

# GraphQL API扫描
docker run -v $(pwd):/zap/wrk/:rw -t zaproxy/zap-stable zap-api-scan.py \
  -t https://api.target.com/graphql \
  -f graphql \
  -d /zap/wrk/schema.graphql \
  -r /zap/wrk/graphql-report.html

参考references/api_testing_guide.md了解包括认证和速率限制在内的高级API测试模式。

第5步:处理认证

对于测试经过认证的应用程序区域:

# 使用捆绑脚本进行认证设置
python3 scripts/zap_auth_scanner.py \
  --target $TARGET_URL \
  --auth-type form \
  --login-url https://target-app.com/login \
  --username testuser \
  --password-env ZAP_AUTH_PASSWORD \
  --output auth-scan-report.html

支持的认证方法:

  • 基于表单的认证
  • HTTP基本/摘要认证
  • OAuth 2.0流程
  • API密钥/令牌认证
  • 脚本自定义认证

详见references/authentication_guide.md了解详细的认证配置。

第6步:分析结果并生成报告

按风险等级审查发现:

# 生成多种报告格式
docker run -v $(pwd):/zap/wrk/:rw -t zaproxy/zap-stable zap-full-scan.py \
  -t $TARGET_URL \
  -r /zap/wrk/report.html \
  -J /zap/wrk/report.json \
  -x /zap/wrk/report.xml

风险等级:

  • :需要立即补救的关键漏洞(SQLi、RCE、认证绕过)
  • :重大安全弱点(XSS、CSRF、敏感数据暴露)
  • :较低可利用性的安全问题(信息披露、次要配置错误)
  • 信息性:安全最佳实践和观察

使用references/owasp_mapping.md将发现映射到OWASP Top 10。

自动化与CI/CD集成

GitHub Actions集成

将ZAP扫描添加到GitHub工作流:

# .github/workflows/zap-scan.yml
name: ZAP安全扫描
on: [push, pull_request]

jobs:
  zap_scan:
    runs-on: ubuntu-latest
    name: OWASP ZAP基础扫描
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: ZAP基础扫描
        uses: zaproxy/action-baseline@v0.7.0
        with:
          target: 'https://staging.target-app.com'
          rules_file_name: '.zap/rules.tsv'
          cmd_options: '-a'

Docker自动化框架

使用基于YAML的自动化进行高级工作流:

# 创建自动化配置(见assets/zap_automation.yaml)
docker run -v $(pwd):/zap/wrk/:rw -t zaproxy/zap-stable \
  zap.sh -cmd -autorun /zap/wrk/zap_automation.yaml

捆绑的assets/zap_automation.yaml模板包括:

  • 环境配置
  • 爬虫和AJAX爬虫设置
  • 被动和主动扫描策略
  • 认证配置
  • 报告生成

CI/CD最佳实践

  • 对每个提交/PR使用基础扫描(低误报)
  • 在生产部署前对暂存环境运行全面扫描
  • 为微服务和REST端点配置API扫描
  • 设置失败阈值以在发现高严重性问题时中断构建
  • 生成SARIF报告以集成到GitHub安全标签

详见scripts/ci_integration.sh了解完整的CI/CD集成示例。

安全考虑

  • 授权:在扫描生产系统或第三方应用程序之前始终获得书面授权
  • 速率限制:配置扫描速度以避免压垮目标应用程序或触发DDoS保护
  • 敏感数据:永远不要在扫描配置中包含生产凭据;使用环境变量或秘密管理
  • 扫描时间:在维护窗口期间或针对专用测试环境运行主动扫描
  • 法律合规:遵守计算机欺诈和滥用法律;未经授权的扫描可能是非法的
  • 审计日志:记录所有扫描执行、目标、发现和补救措施以进行合规性审计
  • 数据保留:在共享之前清理扫描报告;它们可能包含敏感的应用程序数据
  • 误报:在引发安全事件之前手动验证发现;DAST工具会产生误报

捆绑资源

脚本(scripts/

  • zap_baseline_scan.sh - 自动化基础扫描,具有可配置的目标和报告
  • zap_full_scan.sh - 具有排除规则的全面主动扫描
  • zap_api_scan.py - 支持OpenAPI/GraphQL规范的API测试
  • zap_auth_scanner.py - 支持多种认证方法的认证扫描
  • ci_integration.sh - Jenkins、GitLab CI、GitHub Actions的CI/CD集成示例

参考(references/

  • authentication_guide.md - 表单基础、OAuth和令牌认证的完整认证配置
  • owasp_mapping.md - ZAP警报到OWASP Top 10 2021和CWE分类的映射
  • api_testing_guide.md - REST、GraphQL、SOAP和WebSocket的高级API测试模式
  • scan_policies.md - 不同应用程序类型的自定义扫描策略配置
  • false_positive_handling.md - 常见误报和验证技术

资产(assets/

  • zap_automation.yaml - 自动化框架配置模板
  • zap_context.xml - 具有认证和会话管理的上下文配置
  • scan_policy_modern_web.policy - 针对现代JavaScript应用程序优化的扫描策略
  • scan_policy_api.policy - 针对REST和GraphQL API的扫描策略
  • github_action.yml - GitHub Actions工作流模板
  • gitlab_ci.yml - GitLab CI管道模板

常见模式

模式1:渐进式扫描(速度vs.覆盖范围)

从快速扫描开始,逐渐增加深度:

# 第1阶段:快速基础扫描(5-10分钟)
docker run -t zaproxy/zap-stable zap-baseline.py -t $TARGET_URL -r baseline.html

# 第2阶段:全面爬虫+被动扫描(15-30分钟)
docker run -t zaproxy/zap-stable zap-baseline.py -t $TARGET_URL -r baseline.html -c baseline-rules.tsv

# 第3阶段:针对关键端点的针对性主动扫描(1-2小时)
docker run -t zaproxy/zap-stable zap-full-scan.py -t $TARGET_URL -r full.html -c full-rules.tsv

模式2:API优先测试

优先API安全测试:

# 1. 使用规范测试API端点
docker run -v $(pwd):/zap/wrk/:rw -t zaproxy/zap-stable zap-api-scan.py \
  -t https://api.target.com -f openapi -d /zap/wrk/openapi.yaml -r /zap/wrk/api.html

# 2. 在发现的API端点上运行主动扫描
# (ZAP自动包括爬虫API路由)

# 3. 测试认证流程
python3 scripts/zap_auth_scanner.py --target https://api.target.com --auth-type bearer --token-env API_TOKEN

模式3:认证Web应用程序测试

测试包括受保护区域的完整应用程序:

# 1. 配置认证上下文
# 见assets/zap_context.xml模板

# 2. 运行认证扫描
python3 scripts/zap_auth_scanner.py \
  --target https://app.target.com \
  --auth-type form \
  --login-url https://app.target.com/login \
  --username testuser \
  --password-env APP_PASSWORD \
  --verification-url https://app.target.com/dashboard \
  --output authenticated-scan.html

# 3. 审查会话特定漏洞(CSRF、权限提升)

模式4:CI/CD安全门

在部署管道中实施ZAP作为安全门:

# 运行基础扫描并在发现高风险漏洞时失败构建
docker run -t zaproxy/zap-stable zap-baseline.py \
  -t https://staging.target.com \
  -r baseline-report.html \
  -J baseline-report.json \
  --hook=scripts/ci_integration.sh

# 检查退出代码
if [ $? -ne 0 ]; then
  echo "安全扫描失败!发现高风险漏洞。"
  exit 1
fi

集成点

  • CI/CD: GitHub Actions, GitLab CI, Jenkins, Azure DevOps, CircleCI
  • 问题跟踪: Jira, GitHub Issues(通过SARIF), ServiceNow
  • 安全工具: Defect Dojo(漏洞管理), SonarQube, OWASP Dependency-Check
  • SDLC: 预生产测试阶段,安全回归测试,渗透测试准备
  • 认证: 与OAuth提供商、SAML、API网关、自定义认证脚本集成
  • 报告: HTML, JSON, XML, Markdown, SARIF(GitHub Security), PDF(通过自定义脚本)

故障排除

问题:Docker容器无法访问目标应用程序

解决方案:对于在localhost上运行或在其他容器中扫描应用程序:

# 从Docker容器扫描主机应用程序
# 使用docker0桥IP代替localhost
HOST_IP=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')
docker run -t zaproxy/zap-stable zap-baseline.py -t http://$HOST_IP:8080

# 容器间扫描 - 创建共享网络
docker network create zap-network
docker run --network zap-network -t zaproxy/zap-stable zap-baseline.py -t http://app-container:8080

问题:扫描完成得太快(覆盖范围不完整)

解决方案:增加爬虫深度和扫描持续时间:

# 配置爬虫深入爬行
docker run -t zaproxy/zap-stable zap-baseline.py \
  -t $TARGET_URL \
  -r report.html \
  -z "-config spider.maxDepth=10 -config spider.maxDuration=60"

对于JavaScript密集型应用程序,请使用AJAX爬虫或自动化框架。

问题:误报率太高

解决方案:创建自定义扫描策略和规则文件:

# 使用捆绑的误报处理指南
# 见references/false_positive_handling.md

# 生成规则文件以抑制误报
# 格式:alert_id  URL_pattern  parameter  CWE_id  WARN|IGNORE|FAIL
echo "10202  https://target.com/static/.*  .*  798  IGNORE" >> .zap/rules.tsv

docker run -t zaproxy/zap-stable zap-baseline.py -t $TARGET_URL -c .zap/rules.tsv

问题:认证会话在扫描期间过期

解决方案:配置会话重新认证:

# 使用捆绑的认证脚本与会话监控
python3 scripts/zap_auth_scanner.py \
  --target $TARGET_URL \
  --auth-type form \
  --login-url https://target.com/login \
  --username testuser \
  --password-env PASSWORD \
  --re-authenticate-on 401,403 \
  --verification-interval 300

问题:扫描触发速率限制或WAF阻止

解决方案:降低扫描侵略性:

# 带有请求间延迟的慢速扫描
docker run -t zaproxy/zap-stable zap-baseline.py \
  -t $TARGET_URL \
  -r report.html \
  -z "-config scanner.threadPerHost=1 -config scanner.delayInMs=1000"

参考