返回更新列表
新发布Aug 8, 2026

deadair v0.5.1

找出您的 SIEM 中正在盲目运行的检测规则。

分享

deadair - SIEM 检测覆盖率健康度

CI Release Go 1.26 License: Apache-2.0

开源 SIEM 检测健康度。
找出因遥测数据缺失、过期、延迟或与模式不兼容而失明的已启用检测。

本地运行 · 只读 · 无代理 · 不上传遥测

阅读技术解读 · 被 Detection Engineering Weekly 收录

deadair 对一次性 Elastic 实验室的扫描,显示失效和受损的检测

对一次性 Elastic 实验室的真实扫描,其中刻意布置了缺失、过期、延迟和未使用的遥测数据。使用 make record-scan-lab 即可复现。

为什么是 deadair

一条规则可以处于启用、已调度且无错误的状态,而它所需的数据却已不复存在。deadair 读取实时规则清单,使用后端的原生语义解析每条规则的输入,并检查这些输入背后的具体数据源。

它能发现:

  • 索引、别名或数据流选择器解析不到任何内容的规则;
  • 匹配的数据源全部过期或为空的规则;
  • 在缺少字段或存在摄取延迟盲区的情况下运行的规则;
  • 没有任何已启用检测读取的健康遥测数据。

deadair 目前支持 Elastic Security 和 OpenSearch Security Analytics。

快速开始

GitHub Releases 下载适用于 macOS、Linux 或 Windows 的二进制文件,或使用 Go 安装:

go install github.com/alephnull-sh/deadair/cmd/deadair@latest

连接一个只读的 SIEM 凭据:

deadair setup elastic   # print the least-privilege setup
deadair check           # verify the credential can scan
deadair scan            # assess live rules and telemetry

退出码是稳定的:0 表示健康,1 表示存在发现项,2 表示扫描失败。

工作原理

阶段deadair 的作用
清点(Inventory)读取已启用的检测及其声明的输入
解析(Resolve)请求 Elastic 或 OpenSearch 解析索引模式、别名、数据流、选择器和远程输入
度量(Measure)检查文档数量、最新事件、存储、字段映射、模式历史和摄取延迟
报告(Report)输出终端、JSON、HTML、实例组汇总和 Prometheus 指标,并附带每项判定背后的证据

deadair 可以证明检测的可观测遥测前提是否存在且健康,但不能证明规则逻辑是否正确,也不能证明模拟攻击一定会产生告警。如需覆盖这些层面,请将其与静态规则验证和端到端检测测试配合使用。

发现项

发现项含义首先检查
没有匹配的数据源(no matching source)规则的任何输入都无法解析到可见的索引或数据流模式变更、缺失的集成以及凭据范围
所有数据源均已过期或为空(all sources stale or empty)所有已解析的数据源当前都无法使用数据源节奏和摄取路径
缺少字段(missing fields)声明的字段在所有匹配的数据源映射中都不存在解析器、包和映射变更
延迟盲区(lag blind window)实测摄取延迟超过了规则的回看余量规则间隔、回看、时间戳覆盖和管道延迟
数据源退化(source degradation)数据源已过期、为空、低容量或发生模式漂移数据源历史和预期维护
未使用的遥测(unused telemetry)数据正在存储,但没有任何已启用的本地检测解析到它已禁用的规则和有意收集

每项判定都仅限于所配置凭据能看到的范围。JSON 报告包含配置的表达式、已解析的数据源、解析方法、评估状态、后端元数据和能力证据。有关实际示例和排查方法,请参阅使用指南

连接 SIEM

Elastic:

export DEADAIR_ES_URL=https://es.example.internal:9200
export DEADAIR_KIBANA_URL=https://kibana.example.internal:5601
export DEADAIR_API_KEY=<read-only-api-key>

deadair check
deadair scan --json-out report.json --html-out report.html

OpenSearch:

export DEADAIR_BACKEND=opensearch
export DEADAIR_OPENSEARCH_URL=https://opensearch.example.internal:9200
export DEADAIR_OPENSEARCH_USERNAME=deadair
export DEADAIR_OPENSEARCH_PASSWORD=<password>

deadair check
deadair scan

请使用针对 ElasticOpenSearch 的文档化最小权限角色。可信集成测试套件还可证明,使用这些凭据进行的写入尝试均会被拒绝。

CI、实例组与监控

# Gate a candidate rule against live source availability.
deadair scan --rule new-rule.json

# Fail only on new regressions between reports.
deadair diff yesterday.json today.json

# Scan multiple SIEM instances from one process.
deadair scan --fleet fleet.json

# Export cached scan results as Prometheus metrics.
deadair serve --interval 5m

scan --rule 可将候选规则与无关的积压内容隔离开来。diff 可处理经过确定性脱敏的报告。实例组配置通过环境变量引用机密,而不是存储机密值。

deadair 候选规则门禁及随后的报告差异对比

针对一次性 Elastic 技术栈的候选规则门禁和报告差异对比。

有关生产模式,请参阅 CI 门禁行为实例组与 MSSP 部署以及 Prometheus 示例

经过测试的后端

集成工作流目前针对以下确切版本进行测试:

后端精确的实时 CI 版本
Elastic Security8.19.19, 9.4.4
OpenSearch Security Analytics2.19.6, 3.7.0

其他版本或许也能运行,但不在当前 CI 矩阵的覆盖范围内。

安全模型

  • 所有后端访问均为只读;可信集成测试证明文档中的凭据无法执行写入操作。
  • 在 POSIX 系统上,报告、HTML、状态文件和实例组输出均以 0600 权限写入。
  • 凭据可来自环境变量或文件,避免在进程参数中出现机密。
  • --redact 会用稳定的摘要替换租户、规则、数据源、模式和字段名称。
  • 导出器默认绑定到回环地址。
  • deadair 没有任何回传(phone-home)行为或使用遥测。

请将报告视为敏感的 SOC 产物:它们会标识出失明的检测、数据源名称、模式缺口和未使用的采集。

文档

贡献

欢迎提交错误报告、脱敏后的测试数据、正确性用例、文档和后端提案。请从 CONTRIBUTING.md 开始,适配器开发请使用后端 RFC 模板。

许可证

Apache-2.0.

分类