Rootless-Ghost/DriftWatch

GitHub: Rootless-Ghost/DriftWatch

一款基于规则的检测漂移分析器,通过关联 Sigma 规则与归一化日志,分类规则状态并提供调优建议。

Stars: 0 | Forks: 0

# DriftWatch — 检测漂移分析器 属于 **Nebula Forge** 安全工具套件。 DriftWatch 通过将规则与归一化日志事件(ECS-lite)进行关联,识别 Sigma 规则集中的检测漂移。它将每条规则分类为 **从未触发**、**过度触发** 或 **健康**,并生成每条规则的统计信息、差距分析以及调优建议。 ## 功能特性 - **Sigma 规则解析** — 完整字段修饰符支持(contains、startswith、endswith、re、all、windash、base64、cidr),支持多文档 YAML 文件 - **三态分类** — 从未触发(0 次命中)、过度触发(> 阈值/小时)、健康(在范围内) - **每条规则统计** — 命中次数、速率/小时、最后出现时间、误报估计、匹配事件(样本)、命中时间线 - **差距分析** — 未覆盖的 MITRE 战术、从未触发占比、过度触发占比、高误报规则 - **调优建议** — 针对每条规则状态的可操作建议 - **报告库** — 持久化 SQLite 存储,支持搜索、分页、导出 - **导出** — JSON 与 Markdown 格式 - **CLI** — 无需 Web 界面的离线分析 - **集成** — 从 SigmaForge(5000 端口)拉取规则,接收 LogNorm(5006 端口)的 ECS-lite 事件 ## 快速开始 ``` cd DriftWatch pip install -r requirements.txt cp config.example.yaml config.yaml # optional — defaults work out of the box python app.py ``` 打开 [http://127.0.0.1:5008](http://127.0.0.1:5008)。 ## 用法 ### Web 界面 1. 粘贴或上传 Sigma 规则(YAML,单文档或多文档并使用 `---` 分隔)。 2. 粘贴或上传 ECS-lite 事件(JSON 数组或 NDJSON)。 3. 设置时间窗口、报告标签和过度触发阈值。 4. 点击 **运行分析**。 规则卡片可点击 — 每条规则会弹出一个详情模态框,包含: - **概览** — 命中次数、速率/小时、误报估计、描述、标签 - **匹配事件** — 原始事件样本(最多 10 条) - **调优建议** — 可操作的推荐 ### CLI ``` # 分析规则与事件对比,打印摘要 python cli.py --rules rules.yml --events events.json # 规则文件目录、自定义窗口、保存为 Markdown python cli.py --rules ./rules/ --events events.json --window 72 --output report.md # 验证单个规则 python cli.py --validate --rule rule.yml --events events.json # 打印为 JSON python cli.py --rules rules.yml --events events.json --format json # 跳过保存至数据库 python cli.py --rules rules.yml --events events.json --no-save ``` ## API 参考 | 方法 | 端点 | 描述 | |------|------|------| | GET | `/api/health` | 健康检查 | | POST | `/api/analyze` | 运行漂移分析 | | POST | `/api/validate` | 验证单条规则 | | GET | `/api/reports` | 列出已保存报告(分页) | | GET | `/api/report/` | 获取单个报告 | | DELETE | `/api/report/` | 删除报告 | | GET | `/api/report//export` | 导出报告(JSON 或 Markdown) | | GET | `/api/integrations/sigmaforge/rules` | 从 SigmaForge 获取规则 | ### POST /api/analyze — JSON 请求体 ``` { "rules_yaml": "title: ...\n---\ntitle: ...", "events_json": "[{...}, {...}]", "time_window_hours": 168, "label": "Weekly drift review", "overfire_threshold": 100.0 } ``` 也接受 `multipart/form-data`,包含 `rules_file` 和 `events_file` 字段。 ### 漂移报告结构 ``` { "id": "uuid", "label": "Weekly drift review", "time_window_hours": 168, "event_count": 4821, "analyzed_at": "2025-01-01T12:00:00", "summary": { "total_rules": 25, "never_fired_count": 10, "overfiring_count": 3, "healthy_count": 12, "coverage_pct": 52.0, "noise_score": 0.12, "total_matches": 1024, "gap_analysis": { "uncovered_tactics": ["collection", "exfiltration"], "never_fired_pct": 40.0, "overfiring_pct": 12.0, "coverage_breadth": 60.0, "low_confidence_rules": [] } }, "never_fired": [ { "rule_id": "...", "title": "...", "hit_count": 0, ... } ], "overfiring": [ ... ], "healthy": [ ... ] } ``` ## 支持的 Sigma 修饰符 | 修饰符 | 描述 | |--------|------| | `contains` | 字段包含值(不区分大小写的子字符串匹配) | | `startswith` | 字段以值开头 | | `endswith` | 字段以值结尾 | | `re` | 字段匹配正则表达式 | | `all` | 所有值必须匹配(AND 替代 OR) | | `windash` | 同时匹配 `-` 和 `/` 作为标志前缀 | | `base64` | 事件中的值为 base64 编码 | | `base64offset` | 处理 base64 偏移变体(0/1/2) | | `utf16le` / `wide` | UTF-16LE 编码 | | `cidr` | 网络 CIDR 范围匹配 | | 通配符 | `*` 和 `?` 全局匹配模式 | 条件表达式:`and`、`or`、`not`、`all of `、`N of `、`all of them`、`1 of them`。 ## ECS-lite 字段映射 DriftWatch 将 Sigma 字段名映射为 LogNorm 使用的 ECS-lite 点表示法路径: | Sigma 字段 | ECS-lite 路径 | |------------|---------------| | `CommandLine` | `process.command_line` | | `Image` | `process.executable` | | `EventID` | `event.code` | | `DestinationIp` | `destination.ip` | | `DestinationPort` | `destination.port` | | `TargetObject` | `registry.path` | | `ScriptBlockText` | `powershell.script_block_text` | 完整的映射表请参见 `core/field_mappings.py`。 ## 配置 | 键 | 默认值 | 描述 | |----|--------|------| | `host` | `127.0.0.1` | 绑定地址 | | `port` | `5008` | HTTP 端口 | | `db_path` | `./driftwatch.db` | SQLite 数据库 | | `analysis.overfire_threshold` | `100.0` | 过度触发阈值(命中/小时) | | `analysis.default_window_hours` | `168` | 默认时间窗口 | | `analysis.max_events` | `100000` | 事件输入上限 | | `analysis.max_rules` | `500` | 规则输入上限 | | `analysis.auto_save` | `true` | 自动保存报告 | | `integrations.sigmaforge_url` | `http://127.0.0.1:5000` | SigmaForge 端点 | | `integrations.lognorm_url` | `http://127.0.0.1:5006` | LogNorm 端点 | ## Nebula Forge 集成 DriftWatch 已在 Nebula Forge 仪表板中注册。将其添加到 `nebula-dashboard/config.yaml`: ``` tools: driftwatch: label: "DriftWatch" url: "http://127.0.0.1:5008" health_path: "/api/health" description: "Detection drift analyzer for Sigma rules" category: "Detection" ``` ## 许可证 本项目根据 MIT 许可证授权 — 详细信息请参阅 [LICENSE](LICENSE) 文件。
由 [Rootless-Ghost](https://github.com/Rootless-Ghost) 构建 属于 **Nebula Forge** 安全工具套件。
标签:AMSI绕过, API哈希动态解析, Cloudflare, ECS-lite, JSON导出, Markdown导出, MITRE ATT&CK, PB级数据处理, Sigma规则, SQLite, URL发现, Web界面, 健康状态, 命中统计, 多平台, 多文档YAML, 威胁检测, 字段修饰符, 安全检测, 安全运维, 报告库, 持久化存储, 搜索分页, 时间窗口, 未触发, 检测漂移, 正则匹配, 目标导入, 缺口分析, 规则分析, 规则分类, 规则调优, 误报估计, 调优建议, 过触发, 逆向工具, 集成LogNorm, 集成SigmaForge