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