jayelbotvibe-web/detection-decay

GitHub: jayelbotvibe-web/detection-decay

一款基于能力门控模型的检测健康度评估工具,用于发现 SIEM 检测管道中传统监控难以察觉的源消亡与字段漂移导致的静默检测失效。

Stars: 0 | Forks: 0

# detection-decay [![Go](https://img.shields.io/badge/Go-1.22-00ADD8?logo=go)](https://go.dev) [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/31/31c96a8fe552af584b5983afc39ddf2e71ca6806185aad0eda564c77331e5b3e.svg)](https://github.com/jayelbotvibe-web/detection-decay/actions/workflows/go.yml) **静默检测失败问题。** 你的 SIEM agent 显示为活跃状态。事件数量看起来也很健康。但是,有两种情况会在传统的监控毫无察觉的情况下,静默地扼杀你的检测: 1. **源消亡 (Source death)** — 遥测源停止发送事件(日志收集配置被禁用、通道被丢弃),但 agent 仍保持连接。 2. **字段漂移 (Field drift)** — 索引处的关键字段变为 null(由于 schema 变更、pipeline 错误、解码器升级),但事件仍在持续流入。 **detection-decay** 通过一种能力门控模型 (capability-gate model) 解决了这个问题,该模型将检测完整性分解为三个独立的环节: ``` DecayScore = 1 - P(source_ok) * P(field_ok|source_ok) * P(behavior) ``` ![架构](https://raw.githubusercontent.com/jayelbotvibe-web/detection-decay/main/docs/architecture.svg) ## 适用人群 **运行 SIEM 检测 pipeline(如 Wazuh、Elastic、Splunk)的检测工程师和紫队 (purple teamer) 人员**,他们需要知道自己的检测何时发生了静默失效,而不仅仅是 agent 断开连接时。 ## 它是什么(以及不是什么) | 它是 | 它不是 | |---------|-------------| | 用于检测健康度评估的能力门控打分模型 | SIEM 替代品或日志聚合器 | | 带有 CLI + HTML 输出的、基于证据的衰退评分器 | 实时监控服务(目前还不是——参见路线图) | | 与 SIEM/源无关(模型适用于任何已索引的遥测数据) | Sigma 规则验证器或检测即代码工具 | ## 评分模型 每个门控都会针对健康的基线进行独立检查: | 门控 | 测量指标 | 失败条件 | |------|------------|------------| | **P(source)** | Agent 存活状态 + 事件量 | Agent 断开连接,或事件量 < 基线的 10% | | **P(field)** | 相比基线的字段填充率 | 新事件上的关键字段变为 null | | **P(behavior)** | 规则匹配新鲜度 | 在 MVP 中暂缓实现(= 1.0)| 系统会为每个规则-状态对分配一个判定结果:`HEALTHY`、`DEAD:SOURCE`、`DEAD:FIELD` 或 `INSUFFICIENT_DATA`。 ## 失效模式演示 均基于来自 Wazuh SIEM 实验室的真实 Windows Sysmon EID 1 遥测数据(评分模型与 SIEM/数据源无关): **源消亡** — 在 agent 配置中禁用了 Sysmon 通道收集。Agent 保持活跃。事件量从 64 骤降至 0。 ![源消亡仪表板](https://raw.githubusercontent.com/jayelbotvibe-web/detection-decay/main/screenshots/decay-dashboard.webp) **字段漂移** — 通过 ingest pipeline 移除了索引处的 `data.win.eventdata.image`。事件量保持在 234。字段填充率从 100% 崩塌至 0%。 ![CLI 输出](https://raw.githubusercontent.com/jayelbotvibe-web/detection-decay/main/screenshots/decay-cli.webp) ## 安装说明 需要 Go 1.22+。 ``` git clone https://github.com/jayelbotvibe-web/detection-decay.git cd detection-decay go build ./cmd/decay ``` 或者直接安装: ``` go install github.com/jayelbotvibe-web/detection-decay/cmd/decay@v0.1.0 ``` ## 用法 对静态证据文件进行评分: ``` ./decay score --evidence evidence.json ``` 生成 HTML 仪表板: ``` ./decay score --evidence evidence.json --format html --out demo/dashboard.html ``` 证据格式是一个由测量数据行组成的 JSON 数组: ``` [ { "rule": "win_proc_create.yml", "state": "field-drift", "liveness": "active", "volume": 234, "baseline_volume": 64, "field_populate": 0.0, "baseline_field_populate": 1.0 } ] ``` ## 路线图 - [ ] **实时模式** (`--live`) — 直接轮询 SIEM API(Wazuh、Elasticsearch、Splunk),而不是读取静态 JSON - [ ] **P(behavior) 门控** — 规则匹配新鲜度评分(距离上次告警匹配的时间) - [ ] **多规则范围** — 跨完整的 Sigma 规则集进行校准,而不仅仅是 `win_proc_create.yml` - [ ] **告警集成** — 检测到衰退时触发 webhook/Slack/PagerDuty - [ ] **闭环校准流程** — 运行探测、对结果进行评分、反馈到基线中 ## 局限性 - **基于证据的 MVP**:读取静态 JSON 测量数据,而非实时 SIEM。 - **P(behavior) 暂缓实现**:尚未对告警新鲜度进行建模。 - **单规则范围**:目前仅针对 `win_proc_create.yml` 进行了校准。 - **无闭环校准流程**:该工具对探测结果进行评分,但不会运行它们。 ⭐ 如果你在生产环境中遇到过静默的检测衰退,请**为本仓库点 Star**。欢迎提交 [Issues](https://github.com/jayelbotvibe-web/detection-decay/issues) 和 PR。 ## 许可证 MIT — 查看 [LICENSE](LICENSE)。
标签:EVTX分析, Go, Ruby工具, 多模态安全, 安全有效性验证, 安全运营, 扫描框架, 文档结构分析, 日志审计