使用 DefectDojo 构建集中式漏洞管理仪表盘:Anthropic-Cybersecurity-Skills 实战指南
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
导读
本文基于 Anthropic-Cybersecurity-Skills 仓库中skills/building-vulnerability-dashboard-with-defectdojo/SKILL.md技能文档展开,系统讲解如何部署 DefectDojo 作为企业级集中式漏洞管理平台,将来自 200+ 安全扫描器的结果统一聚合、去重、追踪修复进度并输出执行层仪表盘。读完本文,你将掌握 Docker Compose 部署、REST API v2 自动化、扫描结果导入、Jira/Slack 集成以及基于仓库配套 Python 脚本生成漏洞指标报表的完整实操能力。
DefectDojo 在漏洞管理生态中的定位
DefectDojo 是 OWASP 旗下的开源应用漏洞管理平台,核心价值在于把分散在各安全工具中的发现(Finding)收敛到一个统一视图:它聚合来自 200+ 安全工具的扫描结果、自动去重、追踪修复进度,并提供面向管理层的执行仪表盘。它同时支持基于 OWASP 分类法的漏洞归类,暴露 REST API 供自动化流程调用。
在SKILL.md的 YAML frontmatter 中,该技能被标注为vulnerability-management子领域,并映射到 NIST CSF 2.0 的ID.RA-01(资产脆弱性识别)、ID.RA-02(威胁与脆弱性接收)、ID.IM-02(评估结果改进)、ID.RA-06(风险响应行动)以及 MITRE ATT&CK 的T1190(面向公网的漏洞利用)、T1203(客户端漏洞利用)、T1068(利用提权)——也就是说,构建该仪表盘的核心目的之一,正是为这些攻击面暴露出来的漏洞提供可度量、可追踪的闭环管理。
适用场景
- 在环境中部署或配置 DefectDojo 驱动的漏洞管理仪表盘能力;
- 建立对齐合规要求的安全控制(如 NIST RA-5、PCI DSS 漏洞管理要求);
- 构建或改进本领域的安全架构;
- 在执行安全评估时需要可落地的集中化实现方案。
部署前准备
SKILL.md明确列出的前置条件如下:
- Docker 与 Docker Compose;
- 4GB+ 内存、2+ CPU 核心、20GB+ 磁盘空间;
- PostgreSQL 12+(Docker 部署中已内置);
- Python 3.9+(用于编写 API 集成脚本);
- Jira 实例(可选,用于工单集成)。
配套的references/standards.md进一步给出了部署资源的推荐配置:CPU 最低 2 核、推荐 4 核;内存最低 4GB、推荐 8GB;磁盘最低 20GB、推荐 50GB+;PostgreSQL 最低 12+、推荐 15+;Docker 最低 20.10+;Docker Compose 最低 2.0+。在正式生产环境接入多个扫描器与长期保留扫描数据时,建议按推荐档位配置。
Docker Compose 部署与初始化
启动服务
按照SKILL.md的标准流程,克隆官方仓库并用 Docker Compose 启动:
# 克隆 DefectDojo 仓库 git clone https://github.com/DefectDojo/django-DefectDojo.git cd django-DefectDojo # 以生产模式启动(使用项目提供的封装脚本) ./dc-up-d.sh # 备选:手动执行 Docker Compose docker compose up -d # 查看服务状态 docker compose ps # 查看初始化器生成的初始管理员密码 docker compose logs initializer 2>&1 | grep "Admin password" # 访问 DefectDojo Web 界面 # http://localhost:8080首次登录后应立即修改默认管理员密码,这是后续所有自动化集成的安全前提。
关键环境变量
SKILL.md给出了docker-compose.yml中的核心环境变量配置:
DD_DATABASE_ENGINE=django.db.backends.postgresql DD_DATABASE_HOST=postgres DD_DATABASE_PORT=5432 DD_DATABASE_NAME=defectdojo DD_DATABASE_USER=defectdojo DD_DATABASE_PASSWORD=<secure_password> DD_ALLOWED_HOSTS=* DD_SECRET_KEY=<random_64_char_key> DD_CREDENTIAL_AES_256_KEY=<random_128_bit_key> DD_SOCIAL_AUTH_GOOGLE_OAUTH2_ENABLED=True其中DD_SECRET_KEY与DD_CREDENTIAL_AES_256_KEY必须使用足够强度的随机值;DD_CREDENTIAL_AES_256_KEY用于加密存储的凭据(如 Jira/扫描器凭据),一旦丢失将无法解密已存的凭据。DD_ALLOWED_HOSTS在生产环境应显式收窄为实际域名,避免使用通配符。
组织数据模型:Product Type → Product → Engagement → Test → Finding
DefectDojo 的组织层级决定了仪表盘的聚合维度。SKILL.md给出的层级如下:
Product Type (业务单元) └── Product (应用/服务) └── Engagement (评估/Sprint) └── Test (扫描器运行) └── Finding (单个漏洞)这一层级设计让企业可以从"业务单元 → 应用 → 某次评估 → 某次扫描 → 具体漏洞"逐层下钻,也正是执行层报表中"按产品汇总"的基础。
配套的assets/template.md建议按业务单元划分 Product Type,例如:
| Product Type | 描述 |
|---|---|
| Web Applications | 面向客户的 Web 应用 |
| Mobile Applications | iOS 与 Android 应用 |
| Internal Tools | 员工使用的内部应用 |
| Infrastructure | 网络与云基础设施 |
| APIs | REST 与 GraphQL API 服务 |
通过 REST API 建立组织骨架
SKILL.md展示了用 Python 脚本创建 Product Type、Product、Engagement 的过程:
import requests DD_URL = "http://localhost:8080/api/v2" API_KEY = "your_api_key_here" HEADERS = {"Authorization": f"Token {API_KEY}", "Content-Type": "application/json"} # 创建 Product Type(业务单元) resp = requests.post(f"{DD_URL}/product_types/", headers=HEADERS, json={ "name": "Web Applications", "description": "Customer-facing web application portfolio" }) product_type_id = resp.json()["id"] # 创建 Product(应用/服务) resp = requests.post(f"{DD_URL}/products/", headers=HEADERS, json={ "name": "Customer Portal", "description": "Main customer-facing web application", "prod_type": product_type_id, "sla_configuration": 1, }) product_id = resp.json()["id"] # 创建 Engagement(评估周期) resp = requests.post(f"{DD_URL}/engagements/", headers=HEADERS, json={ "name": "Q1 2024 Security Assessment", "product": product_id, "target_start": "2024-01-01", "target_end": "2024-03-31", "engagement_type": "CI/CD", "status": "In Progress", }) engagement_id = resp.json()["id"]仓库配套脚本scripts/process.py将这些调用封装为命令行工具,setup子命令一步完成三级结构创建:
# 创建 Product Type + Product + Engagement(默认 Engagement 名为 CI/CD) python3 process.py --url http://localhost:8080/api/v2 --api-key <KEY> \ setup --product-type "Web Applications" --product "Customer Portal" --engagement "CI/CD"脚本中的create_product_type()、create_product()、create_engagement()分别对应上述三个 POST 请求,并打印返回的对象 ID,便于后续导入扫描时引用。
扫描结果导入与去重
通过 reimport-scan 上传扫描结果
SKILL.md的核心实操环节是使用reimport-scan接口批量导入扫描结果,且支持auto_create_context=true自动创建缺失的上下文(Product/Engagement),以及deduplication_on_engagement=true在同一 Engagement 范围内去重:
# 上传 Nessus 扫描结果 curl -X POST "${DD_URL}/reimport-scan/" \ -H "Authorization: Token ${API_KEY}" \ -F "scan_type=Nessus Scan" \ -F "file=@nessus_report.csv" \ -F "product_name=Customer Portal" \ -F "engagement_name=Q1 2024 Security Assessment" \ -F "auto_create_context=true" \ -F "deduplication_on_engagement=true" # 上传 OWASP ZAP 结果 curl -X POST "${DD_URL}/reimport-scan/" \ -H "Authorization: Token ${API_KEY}" \ -F "scan_type=ZAP Scan" \ -F "file=@zap_report.xml" \ -F "product_name=Customer Portal" \ -F "engagement_name=Q1 2024 Security Assessment" \ -F "auto_create_context=true" # 上传 Trivy 容器扫描结果 curl -X POST "${DD_URL}/reimport-scan/" \ -H "Authorization: Token ${API_KEY}" \ -F "scan_type=Trivy Scan" \ -F "file=@trivy_results.json" \ -F "product_name=Customer Portal" \ -F "engagement_name=Q1 2024 Security Assessment" \ -F "auto_create_context=true"配套的scripts/process.py将import-scan封装为import子命令,并额外默认携带close_old_findings=true(关闭在本次扫描中已消失的旧发现)与deduplication_on_engagement=true:
python3 process.py import \ --file trivy_results.json \ --scan-type "Trivy Scan" \ --product "Customer Portal" \ --engagement "CI/CD"导入成功后脚本会打印Test ID以及统计信息created / closed / reactivated,这些统计正是后续去重效果与修复进度的直接度量。
支持的扫描器类型
SKILL.md给出的部分扫描器映射表如下:
| 扫描器 | 类型字符串 | 格式 |
|---|---|---|
| Nessus | Nessus Scan | CSV/XML |
| OpenVAS | OpenVAS CSV | CSV |
| Qualys | Qualys Scan | XML |
| OWASP ZAP | ZAP Scan | XML/JSON |
| Burp Suite | Burp XML | XML |
| Trivy | Trivy Scan | JSON |
| Semgrep | Semgrep JSON Report | JSON |
| Snyk | Snyk Scan | JSON |
| SonarQube | SonarQube Scan | JSON |
| Checkov | Checkov Scan | JSON |
assets/template.md补充了 Bandit(Bandit Scan,JSON)、Qualys(Qualys Scan,XML)等更多映射;references/api-reference.md还列出了Nuclei Scan、SARIF、Burp REST API等取值;scripts/agent.py中的SUPPORTED_SCAN_TYPES常量也印证了Anchore Grype、Generic Findings Import等通用导入方式。导入时必须使用与扫描器输出格式严格匹配的scan_type字符串,否则解析器无法正确识别。
API 查询参数与认证
references/api-reference.md汇总了 Token 认证方式与核心端点:
# Token 认证示例 curl -H "Authorization: Token $DEFECTDOJO_TOKEN" \ "http://localhost:8080/api/v2/findings/"| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /api/v2/findings/ | 列出漏洞发现 |
| GET | /api/v2/products/ | 列出产品 |
| GET | /api/v2/engagements/ | 列出评估 |
| GET | /api/v2/tests/ | 列出测试 |
| POST | /api/v2/import-scan/ | 导入扫描结果 |
| POST | /api/v2/reimport-scan/ | 重新导入/更新结果 |
查询 findings 时支持以下过滤参数:severity(Critical/High/Medium/Low/Info)、active(仅活跃发现)、verified(仅已验证发现)、duplicate(包含重复项)、product(按产品 ID 过滤)、limit(每页条数)、offset(分页偏移)。注意import-scan与reimport-scan的区别:前者用于全新导入,后者用于对同一 Test 的增量更新,是 CI/CD 场景下避免产生重复发现的关键接口。
CI/CD 流水线集成
SKILL.md给出了 GitHub Actions 中的完整集成示例:
# .github/workflows/security-scan.yml name: Security Scan on: [push] jobs: scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run Semgrep run: | pip install semgrep semgrep --config auto --json -o semgrep_results.json . - name: Upload to DefectDojo run: | curl -X POST "${{ secrets.DD_URL }}/api/v2/reimport-scan/" \ -H "Authorization: Token ${{ secrets.DD_API_KEY }}" \ -F "scan_type=Semgrep JSON Report" \ -F "file=@semgrep_results.json" \ -F "product_name=${{ github.event.repository.name }}" \ -F "engagement_name=CI/CD" \ -F "auto_create_context=true"assets/template.md提供了与 CI 工具无关的通用片段,可直接嵌入 GitLab CI、Jenkins 等任意流水线,注意其中的close_old_findings=true参数确保流水线复跑时关闭已修复项:
# 通用 CI/CD 上传步骤 - name: Upload scan results to DefectDojo env: DD_URL: ${{ secrets.DEFECTDOJO_URL }} DD_API_KEY: ${{ secrets.DEFECTDOJO_API_KEY }} run: | curl -X POST "${DD_URL}/api/v2/reimport-scan/" \ -H "Authorization: Token ${DD_API_KEY}" \ -F "scan_type=${SCAN_TYPE}" \ -F "file=@${SCAN_FILE}" \ -F "product_name=${PRODUCT_NAME}" \ -F "auto_create_context=true" \ -F "close_old_findings=true"生产实践中应将DD_URL与DD_API_KEY放入 CI 平台的 Secret 管理(如 GitHub Actions Secrets),并限定 API Key 的最小权限范围。
Jira 工单集成
当扫描发现需要进入修复流程时,DefectDojo 可将新发现自动推送为 Jira 工单。SKILL.md给出了在 DefectDojo 设置中的 Jira 集成配置:
jira_config = { "url": "https://company.atlassian.net", "username": "jira-bot@company.com", "password": "jira_api_token", "default_issue_type": "Bug", "critical_mapping_severity": "Blocker", "high_mapping_severity": "Critical", "medium_mapping_severity": "Major", "low_mapping_severity": "Minor", "finding_text": "**Vulnerability**: {{ finding.title }}\n**Severity**: {{ finding.severity }}\n**CVE**: {{ finding.cve }}\n**Description**: {{ finding.description }}", "accepted_mapping_resolution": "Done", "close_status_key": 6, }assets/template.md补充了完整设置场景:Jira URL 指向https://company.atlassian.net,项目 Key 为SEC,工单类型Bug;优先级映射为 Critical→Blocker、High→Critical、Medium→Major、Low→Minor;并建议开启"当 DefectDojo 中发现被关闭时自动关闭对应 Jira 工单"(Auto-close),配合accepted_mapping_resolution: Done实现修复闭环。finding_text模板中的{{ finding.cve }}等变量会在建单时被实际发现数据填充,因此模板化描述可在所有工单中保持统一格式。
指标查询与仪表盘构建
核心指标 API 查询
SKILL.md展示了三类典型指标查询:
# 按严重级别统计活跃发现数 resp = requests.get(f"{DD_URL}/findings/?limit=0&active=true", headers=HEADERS) findings = resp.json() # 统计 SLA 违约发现数 resp = requests.get(f"{DD_URL}/findings/?limit=0&active=true&sla_breached=true", headers=HEADERS) # 获取产品级指标 resp = requests.get(f"{DD_URL}/products/{product_id}/", headers=HEADERS) product_data = resp.json()limit=0表示返回全部结果,便于在客户端完成聚合统计。
用仓库脚本生成仪表盘报表
仓库配套脚本提供了两条生成报表的路径。其一为scripts/agent.py中的build_dashboard_data()函数,它对 findings 结果集计算:总活跃发现数、按严重级别分布(by_severity)、按产品分布 Top 10(by_product)、发现平均年龄(avg_age_days)、超期数量(overdue_count)以及 SLA 合规率(sla_compliance_pct)。其中 SLA 判定按严重级别使用不同的修复天数阈值(Critical 7 天、High 30 天、Medium 90 天、Low 180 天),与assets/template.md中的 SLA 配置表(Critical 7 / High 30 / Medium 90 / Low 120,Info 无 SLA)口径一致——接入时应确保脚本阈值与平台 SLA 配置保持一致。
其二为scripts/process.py提供的dashboard与findings子命令:
# 生成产品级仪表盘 JSON 报表 python3 process.py dashboard --product-id 1 --output defectdojo_dashboard.json # 按严重级别列出发现 python3 process.py findings --product-id 1 --severity Critical --limit 20generate_dashboard_report()会逐级统计 Critical/High/Medium/Low/Info 的活跃计数与总活跃数,输出结构化 JSON 并打印摘要,可直接作为执行层报表的数据源。脚本通过DEFECTDOJO_URL/DEFECTDOJO_API_KEY环境变量读取连接信息,也可用--url/--api-key参数覆盖。
仪表盘自动化流程
references/workflows.md将完整使用过程组织为四个工作流:
工作流 1:初始设置与配置——克隆并部署 DefectDojo;配置管理员账号并改密;按业务单元创建 Product Type;为每个应用/服务创建 Product;配置 Jira 集成;配置 Slack/Teams Webhook 通知;为每个严重级别设置 SLA 策略;为扫描器集成创建 API Key。
工作流 2:CI/CD 扫描集成——在流水线(GitHub Actions / GitLab CI / Jenkins)中添加扫描步骤;运行安全扫描器(Semgrep、Trivy、ZAP 等);通过 reimport-scan API 上传结果;DefectDojo 与已有数据去重;新发现触发 Jira 工单创建;关闭的发现自动关闭关联 Jira 工单;流水线依据发现严重级别获得 pass/fail 状态。
工作流 3:漏洞分类(Triage)——安全分析师在仪表盘上审查新发现;逐条验证、设置严重级别与风险接受状态;确认为有效漏洞的推送到 Jira 跟踪修复;误报则标注 false positive 并附理由;风险接受的记录补偿控制并设置过期时间;通过 DefectDojo 指标跟踪修复进度。
工作流 4:执行层汇报——通过 API 拉取报告期指标;计算总发现数、新增 vs 关闭、SLA 合规率;生成产品级与业务单元级汇总;按严重级别跟踪平均修复时间(MTTR);导出仪表盘数据用于管理层演示。
合规对齐:从 RA-5 到 PCI DSS
构建 DefectDojo 仪表盘不仅是工程实践,也是合规控制落地。结合references/standards.md与SKILL.md的 frontmatter:
- NIST SP 800-53 Rev 5 RA-5(漏洞监控与扫描):DefectDojo 的集中化漏洞追踪正是 RA-5 要求的落地载体,对应 NIST CSF 2.0 的
ID.RA-01/ID.RA-02/ID.RA-06与ID.IM-02; - PCI DSS v4.0 要求 6:DefectDojo 对应用安全发现的跟踪可直接支撑持卡人数据环境的漏洞管理取证;
- OWASP ASVS:DefectDojo 使用 OWASP 分类法对发现进行归类,与应用安全验证标准对齐;
- MITRE ATT&CK:
T1190/T1203/T1068所覆盖的漏洞利用入口,正是仪表盘中需要优先度量与 SLA 追踪的对象。
使用限制与注意事项
- 本文档描述的部署、命令与 API 参数均以当前仓库内容为准,DefectDojo 实际版本的行为可能略有差异,接入前应以部署实例的 API 响应为准;
reimport-scan的auto_create_context会在目标缺失时自动创建 Product/Engagement,适合 CI/CD 场景,但建议在正式环境中预先通过 API 或 CLI 建立完整的组织层级,避免产生命名不一致的自动创建项;- SLA 阈值(Critical 7 天等)在不同文档中的 Low 级别略有差异(
assets/template.md为 120 天,scripts/agent.py为 180 天),实施时应统一为组织实际的 SLA 策略; - 环境变量中的密钥类配置(
DD_SECRET_KEY、DD_CREDENTIAL_AES_256_KEY、API Key)应纳入组织的密钥管理体系,避免硬编码。
继续深入
若需进一步深入,可在当前仓库中继续阅读以下资源:
- 技能主文档:
skills/building-vulnerability-dashboard-with-defectdojo/SKILL.md - 配置模板(产品层级 / SLA / Jira / CI/CD 片段):
skills/building-vulnerability-dashboard-with-defectdojo/assets/template.md - API 参考(端点 / 参数 / Python 客户端):
skills/building-vulnerability-dashboard-with-defectdojo/references/api-reference.md - 标准与合规参考(部署要求 / RA-5 / PCI DSS):
skills/building-vulnerability-dashboard-with-defectdojo/references/standards.md - 四个核心工作流:
skills/building-vulnerability-dashboard-with-defectdojo/references/workflows.md - 仪表盘数据构建脚本:
skills/building-vulnerability-dashboard-with-defectdojo/scripts/agent.py - 自动化 CLI 脚本:
skills/building-vulnerability-dashboard-with-defectdojo/scripts/process.py
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考