news 2026/9/11 4:09:29

使用 DefectDojo 构建集中式漏洞管理仪表盘:Anthropic-Cybersecurity-Skills 实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 DefectDojo 构建集中式漏洞管理仪表盘:Anthropic-Cybersecurity-Skills 实战指南

使用 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_KEYDD_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 ApplicationsiOS 与 Android 应用
Internal Tools员工使用的内部应用
Infrastructure网络与云基础设施
APIsREST 与 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.pyimport-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给出的部分扫描器映射表如下:

扫描器类型字符串格式
NessusNessus ScanCSV/XML
OpenVASOpenVAS CSVCSV
QualysQualys ScanXML
OWASP ZAPZAP ScanXML/JSON
Burp SuiteBurp XMLXML
TrivyTrivy ScanJSON
SemgrepSemgrep JSON ReportJSON
SnykSnyk ScanJSON
SonarQubeSonarQube ScanJSON
CheckovCheckov ScanJSON

assets/template.md补充了 Bandit(Bandit Scan,JSON)、Qualys(Qualys Scan,XML)等更多映射;references/api-reference.md还列出了Nuclei ScanSARIFBurp REST API等取值;scripts/agent.py中的SUPPORTED_SCAN_TYPES常量也印证了Anchore GrypeGeneric 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-scanreimport-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_URLDD_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提供的dashboardfindings子命令:

# 生成产品级仪表盘 JSON 报表 python3 process.py dashboard --product-id 1 --output defectdojo_dashboard.json # 按严重级别列出发现 python3 process.py findings --product-id 1 --severity Critical --limit 20

generate_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.mdSKILL.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-06ID.IM-02
  • PCI DSS v4.0 要求 6:DefectDojo 对应用安全发现的跟踪可直接支撑持卡人数据环境的漏洞管理取证;
  • OWASP ASVS:DefectDojo 使用 OWASP 分类法对发现进行归类,与应用安全验证标准对齐;
  • MITRE ATT&CKT1190/T1203/T1068所覆盖的漏洞利用入口,正是仪表盘中需要优先度量与 SLA 追踪的对象。

使用限制与注意事项

  • 本文档描述的部署、命令与 API 参数均以当前仓库内容为准,DefectDojo 实际版本的行为可能略有差异,接入前应以部署实例的 API 响应为准;
  • reimport-scanauto_create_context会在目标缺失时自动创建 Product/Engagement,适合 CI/CD 场景,但建议在正式环境中预先通过 API 或 CLI 建立完整的组织层级,避免产生命名不一致的自动创建项;
  • SLA 阈值(Critical 7 天等)在不同文档中的 Low 级别略有差异(assets/template.md为 120 天,scripts/agent.py为 180 天),实施时应统一为组织实际的 SLA 策略;
  • 环境变量中的密钥类配置(DD_SECRET_KEYDD_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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 4:09:15

C#上位机高并发数据采集与UI解耦实战

1. 这不是“又一个C#教学视频”&#xff0c;而是上位机开发者的实战生存指南 你点开过多少个标着“C#上位机.NET教学视频”的链接&#xff1f;前3分钟讲Hello World&#xff0c;中间20分钟拖控件、改颜色、加按钮&#xff0c;最后5分钟说“完整源码已打包&#xff0c;评论区领取…

作者头像 李华
网站建设 2026/9/11 4:07:30

200 个机器人实时仿真,MuJoCo 分布式并行怎么搭

200 个机器人实时仿真&#xff0c;MuJoCo 分布式并行怎么搭 【免费下载链接】mujoco Multi-Joint dynamics with Contact. A general purpose physics simulator. 项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco 跑 MuJoCo 的时候&#xff0c;你有没有过这种…

作者头像 李华
网站建设 2026/9/11 4:06:31

YOLO目标检测实战:从归一化坐标到工业部署的七道关卡

1. 这不是“又一篇YOLO科普”&#xff0c;而是你真正能上手的检测逻辑拆解 我带过三届AI方向的实习生&#xff0c;每年第一课都问同一个问题&#xff1a;“YOLO到底在干什么&#xff1f;”90%的人会背出“You Only Look Once”&#xff0c;剩下10%翻出PPT念“单阶段目标检测算法…

作者头像 李华
网站建设 2026/9/11 4:06:26

10秒视频克隆你的专属数字人:Duix.Avatar本地部署实战

10秒视频克隆你的专属数字人&#xff1a;Duix.Avatar本地部署实战 【免费下载链接】Duix-Avatar &#x1f680; Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning. 项目地址: https://gitcode.com/GitHub_Trendi…

作者头像 李华
网站建设 2026/9/11 4:04:15

Docker网络模式详解:从bridge到overlay的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华