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, 后端开发, 威胁情报, 开发者工具, 漏洞管理, 调试插件, 逆向工具