Comrob2018/Draugr
GitHub: Comrob2018/Draugr
Draugr 是一款基于 PyQt6 的本地漏洞情报分析平台,通过聚合多个威胁数据源为 CVE 计算加权风险评分,帮助用户快速完成漏洞优先级排序和修复决策。
Stars: 0 | Forks: 0
# Draugr
Draugr 是一款基于 PyQt6 的桌面漏洞情报工具,它通过比对多个威胁数据源(包括 NVD、CISA 已知被利用漏洞 (KEV) 目录、EPSS 评分和公开漏洞参考)来分析软件,从而为每个 CVE 计算加权风险评分。专为需要快速、本地化漏洞情报而不想依赖资产清单或复杂 CMDB 的分析师和开发人员设计。
## 🚀 功能
- **NVD 集成** — 使用您的 API key 直接查询 CVE 和 CPE API。
- **CISA KEV 覆盖** — 标记已知被利用的漏洞并添加元数据。
- **EPSS 评分** — 获取漏洞预测评分以进行优先级排序。
- **公开漏洞检测** — 识别具有已知漏洞参考的 CVE。
- **加权风险评分** — 将 CVSS、EPSS、KEV 和漏洞存在情况结合,生成单一的 0–100 风险评分。
- **离线扩充 pipeline** — 用于 CWE、CAPEC、ATT&CK、D3FEND 和 NIST 800-53 映射的可选本地数据库。
- **ICS/OT 分析** — 将 CWE 映射到 MITRE ATT&CK for ICS 技术,适用于运营技术环境。
- **版本去重** — 在解析时标准化版本字符串,以便将 `0.4` 和 `0.4.0` 视为同一条目,避免重复扫描。
- **多格式输入** — 接受 CSV/TXT 软件清单、CycloneDX JSON SBOM 和 SPDX JSON SBOM。
- **集群支持** — 汇总多台主机的扫描历史记录,并包含趋势跟踪和跨系统 CVE 热力图。
- **计划扫描** — 后台调度程序,支持可配置的间隔和作业列表,用于自动执行定期扫描。
- **插件系统** — 将 Python 文件放入 `plugins/` 目录,即可添加自定义扩充、评分修改器或报告章节。
- **告警** — 针对 KEV 发现和风险阈值违规,提供电子邮件 (SMTP)、Slack、Microsoft Teams 和通用 webhook 通知。
- **扫描恢复** — 基于 SQLite 的缓存可从中断处恢复未完成的扫描。
- **PyQt6 GUI** — 支持深色/浅色主题、进度跟踪、结果浏览器和扫描历史记录查看器。
- **无头 CLI** — 无需 GUI 即可使用完整扫描 pipeline,便于自动化和集成 CI/CD。
## 🧩 环境要求
### 安装依赖项:
```
pip install -r requirements.txt
```
#### requirements.txt 的内容:
```
PyQt6
requests
packaging
jsonschema
openpyxl
```
## ⚙️ 用法
### GUI
```
python draugr.py
```
### 无头 CLI
```
python draugr.py --scan --output [options]
```
#### CLI 选项:
| 标志 | 描述 |
|---|---|
| `--scan` | 软件列表、SBOM 或 CSV 的路径(必填) |
| `--output` | 输出目录(必填) |
| `--kev` | 本地 KEV JSON 文件的路径(可选) |
| `--api-key` | NVD API key(可选,可提高速率限制) |
| `--otx-key` | AlienVault OTX API key(可选) |
| `--cpe-map` | CPE 映射 JSON 的路径(可选) |
| `--resources` | 扩充数据库文件夹的路径(可选) |
| `--diff` | 要进行 diff 对比的上一次扫描 CSV(可选) |
| `--multi-host` | 将 `--scan` 视为按主机划分的 CSV 的 glob/列表 |
### 计划扫描
```
python draugr_scheduler.py --init # create default config
python draugr_scheduler.py # run on configured interval
python draugr_scheduler.py --once # run all jobs once and exit
```
## 📂 输入格式
### 准备软件列表文件
请参阅 resources 文件夹中的 `sample_list.txt` 或 `sample_list.csv`。
支持的格式:
- **带标题的 CSV** — `Name, Version, Publisher, Install Date`(从 Hapy、SCCM、PDQ、Qualys 等导出)
- **无标题 CSV** — `product, version`
- **纯文本** — 每行一个产品名称
- **CycloneDX JSON** — SBOM 格式(1.4 和 1.5)
- **SPDX JSON** — SBOM 格式(2.3)
### 可选:下载 CISA KEV JSON 订阅源:
```
https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
```
### 可选:创建 cpe_mappings.json 文件以覆盖启发式 CPE 匹配:
```
{
"apache tomcat": "apache:tomcat",
"openssl": "openssl:openssl",
"microsoft edge": "microsoft:edge_chromium"
}
```
## 📂 输出
所有输出均写入配置好的输出目录下的 `reports/` 和 `logs/` 中。
### CSV 报告
包含所有 CVE 详情、风险评分、漏洞指标、KEV 标志、MITRE ATT&CK 和 ICS 代码。
### HTML 报告
| 报告 | 描述 |
|---|---|
| 执行报告 | 面向高管的摘要,包含风险矩阵、关键发现和修复优先级 |
| 技术报告 | 详细的安全评估,包含缓解措施、NIST 800-53 控制措施和 ATT&CK 映射 |
| 红队报告 | 攻击路径分析和目标画像,供进攻性安全使用 |
| 集群报告 | 跨系统的 CVE 热力图和跨多台主机的趋势分析 |
| Diff 报告 | 两次扫描之间的增量对比,显示新增、已解决和恶化的发现 |
### Excel
| 文件 | 描述 |
|---|---|
| POA&M | 用于跟踪 CVE 的行动计划与里程碑 |
### SBOM
| 文件 | 描述 |
|---|---|
| CycloneDX JSON | 采用 CycloneDX 1.5 格式并带有漏洞注释的软件物料清单 |
### 日志
| 文件 | 描述 |
|---|---|
| 扫描日志 | 扫描日志窗口的完整输出 |
| 错误日志 | 扫描期间遇到的错误 |
## 🖥️ 结果浏览器
“结果浏览器”选项卡提供了扫描结果的可搜索、可筛选视图。您可以从源工具栏中:
- **📂 加载 CSV** — 将任何之前的 Draugr 扫描 CSV 加载到浏览器中
- **📄 生成报告** — 根据当前加载的结果生成所有 HTML 报告、POA&M 和 SBOM
“显示中危”、“显示低危”和“显示未验证”筛选器位于“扫描日志”选项卡的工具栏中,用于控制在活动扫描期间将哪些严重等级写入日志。
## 🧠 可选的扩充数据库
将这些 JSON 文件放入 `resources/` 目录以进行更深入的分析:
```
cwe_db.json
capec_db.json
defend_db.json
nist_db.json
```
这些文件支持 CWE 谱系扩展,并映射到 MITRE ATT&CK、D3FEND 和 NIST 800-53 框架。
## 🔌 插件
将 `.py` 文件放入 `plugins/` 目录以扩展 Draugr。每个插件都可以实现以下任何钩子:
| 钩子 | 描述 |
|---|---|
| `enrich_row(row)` | 在扩充后为每个 CVE 行调用 — 添加或修改字段 |
| `score_modifier(row, score)` | 在计算出风险评分后调用 — 返回修改后的评分 (0–100) |
| `on_scan_complete(all_rows)` | 在扫描完成时调用一次 — 返回修改后的行列表 |
| `report_section(all_rows)` | 返回追加到每个生成的报告中的 markdown 字符串 |
首次运行时,会在 `plugins/_sample_plugin.py` 中自动创建一个示例插件。
## 🔔 告警
在 `draugr_alerts.json` 中配置告警。支持的渠道:
- **SMTP 电子邮件** — 纯文本和 HTML 格式,包含完整的 CVE 详细信息表
- **Slack** — 采用 Block Kit 格式的卡片,带有严重性颜色和链接
- **Microsoft Teams** — Adaptive Card 格式
- **通用 webhook** — 向任何 endpoint 发送 JSON POST 请求
告警触发条件:新的 KEV 目录 CVE、风险评分阈值违规、以前干净的系统中出现新发现,以及在 diff 中检测到新列入 KEV 目录的 CVE。
## 📋 更新日志
查看 `CHANGELOG.md` 获取完整的版本历史记录。
标签:GPT, PyQt6, SBOM分析, Svelte, 后端开发, 威胁情报, 开发者工具, 漏洞管理, 调试插件, 逆向工具