Rootless-Ghost/ClusterIQ

GitHub: Rootless-Ghost/ClusterIQ

上下文感知告警聚类引擎,解决告警噪音与误报问题,提升事件处置优先级。

Stars: 0 | Forks: 0

# ClusterIQ — 上下文感知告警聚类引擎 属于 **Nebula Forge** 安全工具套件。 ClusterIQ 根据信号指纹对 ECS-lite 告警进行分组,然后对每个聚类进行上下文评分,以确定是否应将其 **升级**、**审查** 或 **抑制** 为噪声。与简单的去重不同,ClusterIQ 绝不会仅因信号匹配就抑制一个聚类——上下文始终优先。 ## 核心差异化 两条具有 **相同信号**(相同进程名称、相同目标 IP、相同事件操作)的告警,如果其中一条携带 TI 标签或涉及非常规用户,则会收到 **不同的判决**: ``` Cluster A — powershell.exe / C2_IP → ESCALATE (TI indicator present) Cluster B — powershell.exe / C2_IP → REVIEW (off-hours, rare user) Cluster C — powershell.exe / C2_IP → SUPPRESSED (known user, business hours, no TI) ``` ## 功能特性 - **信号指纹** — 可配置的聚类字段(process.name、event.action、目的 IP 等) - **模糊聚类合并** — 基于令牌级的 Jaccard 相似度,超过可配置阈值 - **五个上下文维度** — TI 指示器、关键资产启发式、用户异常、时段、命中率 - **上下文优先判决引擎** — TI 标签始终优先升级,无论相似度得分 - **精确去重** — 提供 `/api/deduplicate` 接口,使用滑动时间窗口 - **会话库** — 持久化 SQLite 存储,支持搜索、分页与导出 - **导出** — 每个会话支持 JSON 与 Markdown 格式导出 - **CLI** — 可在无 Web 界面情况下进行离线分析 - **集成** — 可直接从 LogNorm(端口 5006)接收 ECS-lite 数据 ## 快速开始 ``` cd ClusterIQ pip install -r requirements.txt cp config.example.yaml config.yaml # optional python app.py ``` 打开 [http://127.0.0.1:5009](http://127.0.0.1:5009)。 ## 使用方式 ### Web 界面 1. 粘贴或上传 ECS-lite 告警(JSON 数组或 NDJSON)。 2. 选择用于聚类的字段并设置相似度阈值。 3. 点击 **Cluster Alerts**。 4. 结果以颜色编码的聚类卡片展示: - **红色** — 升级 - **黄色** — 审查 - **灰色** — 抑制 5. 点击任意卡片可打开详情模态框(Overview、Context Scores、Members)。 ### CLI ``` # 集群警报,打印摘要 python cli.py --alerts alerts.json # 自定义字段和阈值 python cli.py --alerts alerts.json --fields process.name,event.action --threshold 0.8 # 另存输出为 Markdown python cli.py --alerts alerts.json --output session.md # 去重,5 分钟窗口 python cli.py --dedup --alerts alerts.json --window 300 # 打印为 JSON python cli.py --alerts alerts.json --format json ``` ## API 参考 | 方法 | 端点 | 描述 | |------|------|------| | GET | `/api/health` | 健康检查 | | POST | `/api/cluster` | 聚类告警 | | POST | `/api/deduplicate` | 移除精确重复项 | | GET | `/api/sessions` | 列出会话(分页) | | GET | `/api/session/` | 获取单个会话 | | DELETE | `/api/session/` | 删除会话 | | GET | `/api/session//export` | 导出(JSON 或 Markdown) | ### POST /api/cluster ``` { "alerts": [{...ECS-lite...}], "similarity_threshold": 0.75, "cluster_by": ["process.name", "event.action", "network.destination.ip"], "label": "Monday SOC triage", "save": true } ``` 同时接受 `alerts_json`(原始 JSON 字符串)和 `multipart/form-data`。 **响应:** ``` { "success": true, "session_id": "uuid", "clusters": [...], "original_count": 847, "cluster_count": 12, "suppressed_count": 821, "review_count": 18, "escalate_count": 8, "noise_reduction_pct": 96.8 } ``` ### POST /api/deduplicate ``` {"alerts": [...], "window_seconds": 300} ``` **响应:** `{"success": true, "unique": [...], "removed": 103, "original": 206}` ## 判决逻辑 | 条件 | 判决 | |------|------| | 任意成员包含 TI 指示器 | **升级**(始终优先,覆盖相似度得分) | | 关键资产 + 风险 ≥ 65% | **升级** | | 非常规/未知用户 ≥ 65% | **升级** | | 离时段 ≥ 30% 的成员 | **审查** | | 非常规用户 20–65% | **审查** | | 资产风险偏高 30–65% | **审查** | | 无异常上下文 | **抑制** | 上下文在每个层级均优先于信号相似度。 ## 上下文评分维度 | 维度 | 描述 | |------|------| | `ti_tags` | 标签中的威胁情报指示模式(rule.tags、threat.indicator.*) | | `has_critical_asset` | 主机名启发式:dc-、exchange、sql、prod-、srv-、backup 等 | | `user_anomaly` | 在会话告警中出现频率 ≤ 1% 的用户 | | `asset_risk` | 聚类成员中位于关键资产的比例 | | `time_anomaly` | 聚类成员中位于周一至周五 09:00–17:00 之外的比例 | | `hit_rate_anomaly` | 聚类大小相对于会话平均值的比率 | ## 聚类算法 1. **指纹化** 每个告警,提取 `cluster_by` 字段。 2. **精确分组** 按指纹的 SHA-256 哈希值分组。 3. **合并近似组**,其中令牌级 Jaccard 相似度 ≥ 阈值。 4. **评分上下文**,针对每个聚类计算五个维度的分数。 5. **分配判决** — 按优先级顺序:升级 → 审查 → 抑制。 ## 配置 | 配置键 | 默认值 | 描述 | |--------|--------|------| | `port` | `5009` | HTTP 端口 | | `db_path` | `./clusteriq.db` | SQLite 数据库路径 | | `clustering.default_threshold` | `0.75` | 相似度阈值 | | `clustering.default_fields` | `[process.name, event.action, network.destination.ip]` | 默认聚类字段 | | `clustering.max_alerts` | `50000` | 输入上限 | | `clustering.auto_save` | `true` | 自动持久化会话 | | `integrations.lognorm_url` | `http://127.0.0.1:5006` | LogNorm 端点 | ## Nebula Forge 集成 在 `nebula-dashboard/config.yaml` 中添加: ``` tools: clusteriq: label: "ClusterIQ" url: "http://127.0.0.1:5009" health_path: "/api/health" description: "Contextual alert clustering engine" category: "Detection" ``` ## 许可证 本项目采用 MIT License 授权——详情参见 [LICENSE](LICENSE) 文件。
由 [Rootless-Ghost](https://github.com/Rootless-Ghost) 构建 属于 **Nebula Forge** 安全工具套件。
标签:ClusterIQ, ECS-lite, Jaccard相似度, Nebula Forge, SQLite存储, Web界面, 上下文告警聚类, 上下文评分, 云计算, 会话管理, 信号指纹, 关键词:上下文, 关键词:告警管理, 关键词:噪声, 关键词:威胁情报标签, 关键词:安全工具, 关键词:相似度, 关键词:离岗告警, 关键词:聚类, 关键词:进程指纹, 去重, 可疑用户检测, 告警升级, 告警审查, 告警抑制, 告警聚类引擎, 命中频率, 噪声抑制, 威胁情报, 导出JSON, 导出Markdown, 开发者工具, 模糊聚类, 滑动时间窗口, 相似度分组, 离时段检测, 端口5006, 规则引擎, 资产关键性, 逆向工具, 集成LogNorm