
deadair v0.5.1
找出您的 SIEM 中正在盲目运行的检测规则。
开源 SIEM 检测健康度。
找出因遥测数据缺失、过期、延迟或与模式不兼容而失明的已启用检测。
本地运行 · 只读 · 无代理 · 不上传遥测
阅读技术解读 · 被 Detection Engineering Weekly 收录
对一次性 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
请使用针对 Elastic 或 OpenSearch 的文档化最小权限角色。可信集成测试套件还可证明,使用这些凭据进行的写入尝试均会被拒绝。
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 可处理经过确定性脱敏的报告。实例组配置通过环境变量引用机密,而不是存储机密值。
针对一次性 Elastic 技术栈的候选规则门禁和报告差异对比。
有关生产模式,请参阅 CI 门禁行为、实例组与 MSSP 部署以及 Prometheus 示例。
经过测试的后端
集成工作流目前针对以下确切版本进行测试:
| 后端 | 精确的实时 CI 版本 |
|---|---|
| Elastic Security | 8.19.19, 9.4.4 |
| OpenSearch Security Analytics | 2.19.6, 3.7.0 |
其他版本或许也能运行,但不在当前 CI 矩阵的覆盖范围内。
安全模型
- 所有后端访问均为只读;可信集成测试证明文档中的凭据无法执行写入操作。
- 在 POSIX 系统上,报告、HTML、状态文件和实例组输出均以
0600权限写入。 - 凭据可来自环境变量或文件,避免在进程参数中出现机密。
--redact会用稳定的摘要替换租户、规则、数据源、模式和字段名称。- 导出器默认绑定到回环地址。
- deadair 没有任何回传(phone-home)行为或使用遥测。
请将报告视为敏感的 SOC 产物:它们会标识出失明的检测、数据源名称、模式缺口和未使用的采集。
文档
- 使用指南 — 首次扫描、报告证据、发现项、CI 门禁、状态和实例组
- 验证与自用测试 — 已证实的内容以及仍需实地证据的内容
- 架构 — 后端契约、数据模型、安全属性和限制
- 最佳实践 — 发布顺序、告警上下文和路由
- MSSP 指南 — 机密、脱敏、留存、容量规划和租户故障处理
- 在运行却看不见的检测 — 问题所在及可复现的模拟
贡献
欢迎提交错误报告、脱敏后的测试数据、正确性用例、文档和后端提案。请从 CONTRIBUTING.md 开始,适配器开发请使用后端 RFC 模板。
许可证
Apache-2.0.