madhav-dhungana/Dojo-CTI
GitHub: madhav-dhungana/Dojo-CTI
Dojo-CTI 是一个 DefectDojo 插件库,通过持续整合 EPSS、CISA KEV、勒索软件及在野利用情报来动态丰富漏洞 Finding 数据,帮助团队基于真实威胁信号进行补丁优先级排序。
Stars: 5 | Forks: 0
# DOJO CTI
用于 DefectDojo 的持续威胁监控 Django 库。
Dojo CTI 通过真实的可利用性信号,丰富了您现有的 DefectDojo Findings。它针对 FIRST.org EPSS 数据、CISA KEV 数据、勒索软件使用指标以及 VulnCheck POC / 在野利用情报,扫描 DefectDojo 中已存在的 CVE,以便团队能够持续了解哪些漏洞需要优先处理。
该库专为 Django-DefectDojo 构建,并设计为附加模式:它提供了自己的 Django 应用、管理 UI、定时任务、手动扫描、审计日志和 API 输出,同时保持 DefectDojo 的核心模型和业务逻辑完好无损。
## 功能
- 针对现有 DefectDojo Findings 进行 EPSS 扫描
- 使用 API JSON 或 CSV 源进行 KEV 扫描
- 来自 KEV 兼容源的勒索软件使用信号
- 首次发现 KEV 的日期跟踪,在后续扫描中不会覆盖现有日期
- 针对现有 Finding CVE 进行 POC 和在野利用(ITW)检查
- 使用 DefectDojo 的凭据加密密钥对 API 访问的第三方 token 进行加密存储
- 针对 Docker 和 Kubernetes 部署的基于环境/文件的 token 覆盖
- 支持针对大型资产清单(如 6万-7万个 CVE)发起 ITW/POC API 请求
- 面向包内全局 CVE 情报的 CTI DB,可被其他服务利用,不限于本地 Findings
- 可从 EPSS / KEV UI 执行手动获取和对比操作
- 使用 DefectDojo 的 Celery beat 和 worker 进行定时扫描
- 可从 API 或自定义 CSV URL 配置 EPSS 源
- 可配置 KEV 源 URL 和源格式
- 针对 EPSS 更新控制 Finding 的适用范围
- EPSS / KEV 仪表板和更新日志
- 在 Finding 匹配数据中附加 EPSS 更新 / KEV / POC / ITW 指标
- 在 Swagger 中可见的、用于 Finding 匹配数据的 API endpoint
- 在 Swagger 中可见的、用于 CVE 状态查询的 CTI DB endpoint
- 适用于 DefectDojo 开发和生产环境部署的 Docker 安装程序
## 它的功能
Dojo CTI 帮助漏洞管理团队超越静态严重性的限制。Dojo CTI 通过可能随时间变化的可利用性和威胁情报信号持续丰富 Findings。
该库:
- 从 DefectDojo Findings 中提取 CVE
- 从 FIRST.org 或给定数据获取 EPSS 分数和百分位数
- 将 EPSS 记录与现有 Findings 进行对比
- 检查 Finding CVE 是否被列为已知被利用漏洞
- 检查这些 CVE 是否已知在勒索软件活动中被使用
- 检查这些 CVE 是否具有公开的 PoC(概念验证)漏洞利用数据
- 检查这些 CVE 是否被报告存在在野利用
- 积极、安全地更新受支持的 Finding 字段
- 将 VulnCheck POC / ITW 结果存储在应用专属的快照表中
- 可选择根据配置源中可用的所有 CVE 构建本地 CTI DB
- 在便于审计的更新日志中记录每一次运行
- 在 UI 和 API 中公开结果
默认情况下,Dojo CTI 专注于 DefectDojo 环境中已存在的 CVE,因此输出结果反映了您真实的漏洞态势。如果启用了 CTI DB,它还会维护一个应用专属的 CVE 情报目录,其他工具可以对其进行查询,而无需在每次审计扫描期间请求公开源。
“设置”页面允许您将 EPSS 和 KEV 源指向兼容的内部镜像。目前通过 VulnCheck 分析 POC/ITW,访问由 API token 控制:社区版和商业版 token 会自动暴露该 token 授权的索引。
## 开发计划
- 如果存储的漏洞超过特定分数或级别,通过 Teams/Slack 发送通知
- DefectDojo 内部的高级风险评分引擎,以便您可以根据资产类型和组织制定并应用多种自定义风险方案。
## 依赖
依赖说明:
```
dependencies = ["Django>=4.2", "requests>=2.28"]
```
运行时依赖:
- Python `>=3.11`
- Django `>=4.2`
- requests `>=2.28`
- 用于定时/后台任务的 DefectDojo 现有 Celery 技术栈
可选依赖:
- Celery `>=5.3`,用于非 DefectDojo 的独立任务场景
- 用于测试的 pytest、pytest-django 和 responses
DefectDojo 在核心集中固定了许多运行时包,因此该库有意保持较低的依赖门槛。
## 安装说明
首先克隆此代码库:
```
git clone https://github.com/madhav-dhungana/Dojo-CTI
```
然后从您的 DefectDojo 检出根目录运行安装程序。
示例:
```
cd ~/path-to-your-DefectDojo/django-DefectDojo
bash "/path/to/Dojo-CTI/install-dojo-epss.sh" \
--source "/path/to/Dojo-CTI" \
--mode prod
```
对于生产环境的 Docker 部署,请使用 `--mode prod`。
对于将 DefectDojo 检出目录绑定挂载到容器 `/app` 路径下的开发环境部署,请使用 `--mode dev`。
您可以通过以下命令验证开发模式的适用性:
```
docker compose exec uwsgi test -f /app/docker-compose.yml && echo "dev mode OK"
```
如果该命令没有输出 `dev mode OK`,请使用 `--mode prod`。
## 安装程序模式
### 生产模式
生产模式构建一个名为 `dojo-epss-django:local` 的 Docker overlay 镜像。
它会:
- 将该库复制到 Docker 构建上下文中
- 将 Dojo EPSS 安装到镜像中
- 在镜像内应用附加的 UI 模板补丁
- 写入所需的 Django 设置覆盖
- 使用新镜像重新创建 Django 和 Celery 服务
- 运行 Dojo EPSS 数据库迁移
在生产模式下安装后,请始终使用生成的覆盖文件启动 DefectDojo:
```
docker compose -f docker-compose.yml \
-f dojo_epss_pkg/docker/docker-compose.override.dojo-epss.yml \
up -d
```
### 开发模式
开发模式适用于将 DefectDojo 检出目录绑定挂载到容器中的场景。
它会:
- 将该库复制到 `./dojo_epss_pkg`
- 将附加的模板补丁应用到主机检出目录
- 将 Dojo EPSS 设置块写入 `dojo/settings/local_settings.py`
- 在运行中的 Django/Celery 容器内安装该包
- 运行迁移
- 重启服务
仅当 `uwsgi` 容器内存在 `/app/docker-compose.yml` 时,才使用开发模式。
## 首次运行
安装完成后:
1. 以超级用户身份登录 DefectDojo。
2. 打开 `EPSS / KEV / VulnCheck / CTI DB Settings`。
3. 启用该模块。
4. 选择一个 EPSS 源:从 FIRST.org 获取或每日 CSV 下载。
5. 如果您需要 KEV 和勒索软件信息扩充,请启用 KEV 检查。
6. 如果您需要 POC 和在野利用信息扩充,请启用 VulnCheck 检查。
7. 添加 VulnCheck API token,或通过环境/文件覆盖方式提供。
8. 如果您需要应用专属的 CVE 情报目录,可选择启用 CTI DB。
9. 保存设置。
10. 打开 `Manual Run`。
11. 运行 `Fetch and Compare from FIRST.org` 或 `Download CSV and Compare`。
12. 可选择运行 `Fetch KEV and Update Findings`。
13. 可选择运行 `Fetch VulnCheck POC / ITW Signals`。
14. 可选择运行 `Sync CTI DB`。
15. 查看仪表板、Finding Matches、CTI DB、Update Logs 和 Findings 列表。
## 卸载说明
Dojo CTI 包含干净的卸载路径。在您的 DefectDojo 检出根目录下运行卸载命令:
```
cd ~/path-to-your-defectdojo/django-DefectDojo
bash "/path/to/Dojo-EPSS/install-dojo-epss.sh" --uninstall
```
卸载程序将:
- 将 Dojo CTI 数据库表迁移回初始状态
- 在可能的情况下,从运行中的 Django/Celery 容器中卸载 `dojo-epss` Python 包
- 撤销附加的 DefectDojo 模板补丁
- 从 `dojo/settings/local_settings.py` 中移除 Dojo EPSS 设置块
- 移除本地的 `dojo_epss_pkg` 副本
- 当技术栈正在运行时重启 Django/Celery 容器
卸载过程旨在干净地移除 Dojo CTI,而不会破坏 Django-DefectDojo 的核心文件或无关的 DefectDojo 数据。它仅针对 Dojo CTI 专属的表、包文件、设置块和模板补丁添加内容。
## 定时任务
Dojo CTI 使用 DefectDojo 现有的 Celery worker 和 Celery beat 设置。
安装程序会添加一个每小时的静态调度任务:
```
dojo_epss.schedule_dispatcher_task
```
调度程序会检查 EPSS / KEV / VulnCheck / CTI DB 设置页面,仅在配置的间隔时间到达时才执行扫描。
UI 计划任务字段使用小时为单位:
- `0` 表示禁用该定时同步
- 最多至 `8760` 的任何正整数值表示启用该定时同步
这使得 Celery beat 配置保持稳定,同时允许管理员通过 UI 控制扫描时间。
## 手动操作
可以从 EPSS / KEV / VulnCheck / CTI DB Manual Run 页面执行手动操作:
- 从 FIRST.org 获取并对比
- 下载 CSV 并对比
- 获取 KEV 并更新 Findings
- 获取 VulnCheck POC / ITW 信号
- 同步 CTI DB
- 自动更新符合条件的 Findings
- 测试 FIRST.org API 连通性
手动操作仅限超级用户执行,并会写入更新日志。
## API
Dojo CTI 提供了在 Swagger 中可见的 API endpoint:
```
GET /api/v2/dojo_epss/finding-matches/
GET /api/v2/dojo_epss/cti-cves/
```
受支持的查询过滤条件:
- `status`
- `finding_id`
- `cve_id`
- `kev=true`
- `ransomware=true`
- `poc=true`
- `itw=true`
响应内容包括 EPSS 匹配数据,以及可用的 KEV 和 VulnCheck 快照。
CTI DB endpoint 支持 CVE 目录过滤条件,例如 `cve_id`、`q`、`kev=true`、`ransomware=true`、`poc=true`、`itw=true` 和 `epss_min`。
## 权限
只读的 EPSS / KEV / VulnCheck / CTI DB 页面面向员工、超级用户或具有以下权限的用户开放:
```
dojo_epss.view_epss_dashboard
```
设置和手动写入操作需要超级用户权限。
详细的更新日志请求参数、源 URL 和错误详情仅对超级用户可见。
## 安全说明
EPSS 和 KEV 源 URL 是可配置的,以便组织可以使用内部镜像。请将这些设置视为受信任的管理员输入。
VulnCheck API token 使用 DefectDojo 的凭据加密助手进行加密存储,且在保存后绝不再显示。操作员可以通过向 Django 和 Celery 服务提供 `DOJO_EPSS_VULNCHECK_API_TOKEN`、`DOJO_EPSS_VULNCHECK_API_TOKEN_FILE`、`DD_DOJO_EPSS_VULNCHECK_API_TOKEN` 或 `DD_DOJO_EPSS_VULNCHECK_API_TOKEN_FILE`,来避免将 token 存储在数据库中。
该库:
- 在应用代码中不使用 `eval` 或 shell 执行
- 通过 CSRF 和超级用户检查来保护手动 POST 操作
- 使用有界的 HTTP 重试机制
- 将失败的外部调用记录在更新日志中,而不是破坏正常的 DefectDojo 页面
- 通过针对性的 `save(update_fields=[...])` 写入来更新 Findings
## 开源许可证
Dojo EPSS 采用 BSD-3-Clause 许可证发布。
参见 [LICENSE](LICENSE)。
标签:CISA KEV, DefectDojo, Django, EPSS, GPT, 威胁情报, 子域名突变, 安全运营, 开发者工具, 扫描框架, 漏洞管理, 网络测绘, 请求拦截, 逆向工具