返回更新列表
新发布Jul 23, 2026

deadair v0.4.0

找出SIEM中运行盲点的检测规则

分享

deadair - SIEM 检测覆盖健康度

CI Release Go 1.26 License: Apache-2.0

开源 SIEM 检测健康度。
发现因遥测数据缺失、过期、延迟或 schema 不兼容而失明的已启用检测。

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

阅读技术文档 · 入选 Detection Engineering Weekly · 入选 tl;dr sec #341

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

对一次性 Elastic 实验室的真实扫描,其中故意包含缺失、过期、延迟和未使用的遥测数据。打开图片查看简短回放,或使用 make record-scan-lab 复现。

为什么选择 deadair

一条规则可以在其所需数据消失后仍然保持启用、按计划运行且无错误。deadair 读取实时规则清单,使用后端原生语义解析每条规则的输入,并检查其背后的具体数据源。

它能发现:

  • 索引、别名或数据流选择器解析不到任何内容的规则;
  • 混合选择器规则,其中一个声明的输入已消失而另一个仍可解析;
  • 匹配的数据源全部过期或为空的规则;
  • 在 Elastic 上,运行但缺少声明字段的规则;
  • 在 Elastic 和符合条件的 Sentinel Scheduled 规则上,存在摄取延迟盲区;
  • 在 Sentinel 上,已知数据源使用不兼容的 Basic 或 Auxiliary 表计划的规则;
  • 在 Elastic 和 OpenSearch 上,健康但没有任何已启用检测读取的遥测数据。

deadair 支持 Elastic Security、OpenSearch Security Analytics 和 Microsoft Sentinel。

快速开始

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

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

打印您的 SIEM 的只读设置:

deadair setup elastic      # Elastic Security
deadair setup opensearch   # OpenSearch Security Analytics
deadair setup sentinel     # Microsoft Sentinel

运行一个设置,然后验证并扫描:

deadair check   # 验证凭据是否可以扫描
deadair scan    # 评估实时规则和遥测数据

退出码是稳定的:0 表示通过配置的门槛,1 表示存在门槛内发现的问题,2 表示扫描失败。

工作原理

阶段deadair 的作用
清单读取已启用的检测及其声明的输入
解析在 Elastic 和 OpenSearch 上使用原生索引解析;在 Sentinel 上,结合 KQL 分析与表、watchlist、已保存函数、ASIM 和映射的跨工作区证据
度量检查数据源新鲜度和时序,以及后端支持的 schema 和存储
报告输出终端、JSON、HTML、fleet 汇总和 Prometheus 指标,并附上每个判定背后的证据

Sentinel 遵循相同的规则到数据源模型。其适配器还理解字面 watchlist、已保存函数、ASIM 解析器、映射工作区和汇总表血缘。当 Azure 提供足够证据时,deadair 可以显示共享表的某个过滤切片已静默,或汇总管道已落后。这两项检查是建议性的;它们不会改变门槛。 使用指南 描述了证据规则,验证记录 记录了实时测试覆盖。

对一次性 Microsoft Sentinel 实验室进行 deadair 扫描,显示缺失、过期、延迟和不兼容的遥测数据

对预置了缺失、过期、延迟和不兼容遥测数据的一次性 Sentinel 实验室进行实时扫描。打开图片查看简短回放。有关只读和拒绝写入测试,请参阅单独的 Azure 一致性记录

deadair 检查检测的遥测数据是否存在且健康。它不验证规则逻辑,也不证明模拟攻击会触发警报。请使用静态规则验证和端到端检测测试来完成这些工作。

发现项

发现项含义首要检查
无匹配数据源规则的任何输入都无法解析到可见的索引、数据流或 Sentinel 表模式变更、缺失集成和凭据范围
所有数据源过期或为空每个已解析的数据源当前都不可用数据源节奏和摄取路径
字段缺失在读取所有数据源映射后,Elastic 规则声明的字段在一个或多个已解析数据源中不存在或不可搜索解析器、包和映射变更
延迟盲区配对事件的 p95 摄取延迟超过规则的回看余量规则间隔、回看、时间戳覆盖和管道延迟
输入覆盖不完整完整表达式可解析,但其中的一个正向选择器解析为空迁移、回退选择器和预期替代方案;除非策略要求,否则仅为信息性
数据源计划不兼容Sentinel 规则依赖的 Basic 或 Auxiliary 表不符合分析规则证据路径的资格表计划和规则类型
数据源降级数据源过期、为空、低容量或 schema 漂移数据源历史和预期维护
未使用的遥测数据在 Elastic 或 OpenSearch 上,数据被存储但没有任何已启用的本地检测解析到它已禁用的规则和有意收集

每个判定仅限于配置的凭据所能看到的内容。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

Microsoft Sentinel:

az login --tenant <tenant-id>

export DEADAIR_BACKEND=sentinel
export DEADAIR_AZURE_SUBSCRIPTION_ID=<subscription-id>
export DEADAIR_AZURE_RESOURCE_GROUP=<resource-group>
export DEADAIR_SENTINEL_WORKSPACE=<workspace-resource-name>
# 可选:字面 workspace() 目标的 JSON 允许列表。
# export DEADAIR_SENTINEL_REMOTES=/restricted/path/sentinel-remotes.json

deadair check
deadair scan

在 deadair 评估规则映射的远程工作区之前,该工作区必须已部署 Sentinel。同一订阅内的映射可以证明数据源可用性。跨订阅规则需要与确切规则身份绑定的运行时证据。有关证据规则、工作区和区域限制以及 Microsoft 的性能指南,请参阅 Sentinel 使用详情

使用文档中记录的只读角色:ElasticOpenSearchMicrosoft Sentinel

CI、fleet 和监控

# 根据实时数据源可用性对候选规则进行门槛检查。
deadair scan --rule new-rule.json

# 仅对报告之间的新回归失败。
deadair diff yesterday.json today.json

# 从单个进程扫描多个 SIEM 实例。
deadair scan --fleet fleet.json

# 将缓存的扫描结果导出为 Prometheus 指标。
deadair serve --interval 5m

scan --rule 将后端原生候选规则或检测器与无关积压工作隔离。diff 适用于使用同一调用方持有的密钥创建的脱敏报告。Fleet 配置通过环境变量引用密钥,而不是存储密钥值。

官方 GitHub Action 封装了 Elastic、OpenSearch 和 Sentinel 的单实例候选门槛。它写入作业摘要、上传脱敏的 JSON 报告,并且可以在不安装规则的情况下应用 deadair 策略。Sentinel 工作流首先将运行器认证到 Azure;该 Action 不定义任何 Azure 凭据输入。

有关在您自己的环境中测试的配置,请参阅 CI 门槛行为fleet 和 MSSP 部署 以及 Prometheus 示例

已测试的后端

后端实时验证
Elastic Security在 8.19.19 和 9.4.4 上进行可信 CI
OpenSearch Security Analytics在 2.19.6 和 3.7.0 上进行可信 CI
Microsoft Sentinel在一次性 UK South 工作区中记录的可选一致性测试;请参阅 验证状态

Sentinel 一致性运行是手动的,不是计划中的 CI。

安全模型

  • 所有适配器调用均为只读。可信的 Elastic 和 OpenSearch 测试以及单独的 Sentinel 实验室探针验证了文档化的扫描身份无法执行代表性的写入操作。
  • 报告、HTML、状态文件和 fleet 输出在 POSIX 系统上以 0600 权限写入。
  • 凭据可以来自环境变量或文件,避免在进程参数中暴露密钥。
  • --redact 使用带密钥的 HMAC 假名替换租户、规则、数据源、模式、字段、依赖项、血缘、来源、工作区、watchlist、模板和包标识符。经过验证的依赖探针表达式及其 KQL 参数永远不会被序列化。由随机字节生成的 --redact-key-file 也启用脱敏,并在不同运行之间保持名称稳定。
  • 导出器默认绑定到回环地址。
  • deadair 没有电话回家行为或使用遥测。

将报告视为敏感的 SOC 工件:它们标识盲检测、数据源名称、schema 缺口和未使用的收集。

文档

贡献

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

许可证

Apache-2.0。

分类