アップデート一覧に戻る
New releaseSep 6, 2026

deadair v0.8.0

SIEM内でブラインド状態になっている検出ルールを見つけ出します

共有

deadair - SIEM detection coverage health

CI Release Go 1.26 License: Apache-2.0

deadair は、有効化された SIEM 検知が必要なテレメトリをまだ持っているかどうかをチェックします。
欠落または古いデータ、取り込み遅延、スキーマの不一致を報告します。

ローカルで実行 · 読み取り専用 · エージェント不要 · テレメトリのアップロードなし

技術解説を読む · Detection Engineering Weekly で紹介 · tl;dr sec #341 で紹介

欠落および古い入力、欠落フィールド、遅延イベントを示す Elastic スキャン

使い捨ての Elastic ラボにおける欠落フィールドと遅延イベント。画像を開くと再生コントロール付きの短い録画を確認できます。または make record-scan-lab で再現できます。

deadair の理由

ルールは、必要なデータが消えた後でも、有効化され、スケジュールされ、エラーなく動作し続けることがあります。deadair は 稼働中のルールインベントリを読み取り、バックエンド固有のセマンティクスを使って各ルールの入力を解決し、 その背後にある具体的なソースをチェックします。

検出するもの:

  • インデックス、エイリアス、データストリームセレクタが何も解決しないルール;
  • 宣言された入力の1つが消えたのに別の入力がまだ解決する、混在セレクタのルール;
  • 一致するソースがすべて古いか空であるルール;
  • Elastic 上で、宣言されたフィールドが欠落したまま実行されているルール;
  • Elastic および対象となる Sentinel Scheduled ルールで、取り込みラグによるブラインドウィンドウ;
  • Sentinel 上で、既知のソースが互換性のない Basic または Auxiliary テーブルプランを使用しているルール;
  • Elastic および OpenSearch 上で、有効な検知がどれも読み取っていない健全なテレメトリ。

deadair は Elastic Security、OpenSearch Security Analytics、Microsoft Sentinel をサポートします。

クイックスタート

macOS、Linux、Windows 用のバイナリを GitHub Releases からダウンロードするか、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

1つセットアップを実行し、検証してスキャンします:

deadair check   # verify the credential can scan
deadair scan    # assess live rules and telemetry

終了コードは安定しています: 0 は設定されたゲートを通過、1 はゲート対象の検出事項あり、2 はスキャン失敗を意味します。

ソースとそれを消費する検知を調査するには:

deadair scan --json-out report.json --html-out report.html
deadair inspect --source CommonSecurityLog report.json

レポートのソース名を使用してください。調査ガイドでは、 個別の Sentinel フィード、メンテナンス、復旧の追跡についても説明しています。

仕組み

ステージdeadair が行うこと
インベントリ有効な検知と、それらが宣言する入力を読み取る
解決Elastic と OpenSearch ではネイティブのインデックス解決を使用; Sentinel では、KQL 分析をテーブル、ウォッチリスト、保存関数、ASIM、マッピングされたクロスワークスペースの証拠と組み合わせる
測定ソースの鮮度とタイミング、およびバックエンドが対応している場合はスキーマとストレージをチェックする
レポート各判定の根拠とともに、ターミナル、JSON、HTML、フリートロールアップ、Prometheus メトリクスを出力する

Sentinel は同じルール対ソースのモデルに従い、リテラルウォッチリスト、保存関数、ASIM パーサー、マッピングされたワークスペース、サマリーテーブルの系統を追加します。また、共有テーブルの フィルタされたスライスが沈黙した場合や、サマリーパイプラインが遅延した場合も示します。

使用ガイドでは証拠ルールを説明し、 検証記録ではライブテストのカバレッジを記録しています。

Sentinel CommonSecurityLog 内の沈黙したロンドンのファイアウォールフィードと、それに依存する検知

2つのファイアウォールフィードが CommonSecurityLog を共有しています。一方が停止し、もう一方は報告を続けます。録画では保存された障害と復旧のスキャンを示しています。ラボの条件については検証記録を参照してください。

deadair は検知のテレメトリが存在し健全かどうかをチェックします。ルール ロジックを検証したり、シミュレートされた攻撃がアラートを発火することを証明したりはしません。それらの作業には静的ルール検証とエンドツーエンドの 検知テストを使用してください。

検出事項

検出事項意味最初の確認
一致するソースなしルールの入力のいずれも、可視のインデックス、データストリーム、または Sentinel テーブルに解決しないパターン変更、欠落した統合、資格情報のスコープ
すべてのソースが古いか空解決されたすべてのソースが現時点で使用不可ソースのケイデンスと取り込みパス
欠落フィールドすべてのソースマッピングを読み取った後、Elastic ルールで宣言されたフィールドが1つ以上の解決済みソースに存在しないか検索不可パーサー、パッケージ、マッピングの変更
ラグブラインドウィンドウペアイベントの p95 取り込みラグがルールのルックバックマージンを超えているルール間隔、ルックバック、タイムスタンプオーバーライド、パイプライン遅延
部分的な入力カバレッジ完全な式は解決するが、その中の1つのポジティブセレクタが空に解決する移行、フォールバックセレクタ、想定される代替; ポリシーがゲートしない限り情報提供
ソースプラン非互換Sentinel ルールが、分析ルールの証拠パスに適格でない Basic または Auxiliary テーブルに依存しているテーブルプランとルールタイプ
ソース劣化ソースが古い、空、低ボリューム、またはスキーマドリフトしているソース履歴と想定されるメンテナンス
未使用テレメトリElastic または OpenSearch 上で、データが保存されているが、有効なローカル検知がどれもそれを解決しない無効化されたルールと意図的な収集
想定プロデューサの沈黙設定された Sentinel のベンダー、製品、またはデバイスフィードがしきい値内に報告していないそのフィードの送信元とコレクタ
サマリーパイプライン異常関連する Sentinel サマリージョブが失敗したか、最後の成功が期限を過ぎているネイティブの実行記録とサマリークエリ

プロデューサおよびサマリーパイプラインの検出事項は、そのクラスがポリシーで選択されている場合に終了ステータスに影響します。 沈黙したデバイスフィードは、共有テーブルの他のコンシューマとは別に報告されます。

すべての判定は、設定された資格情報が参照できる範囲に限定されます。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>
# Optional: JSON allowlist for literal workspace() targets.
# export DEADAIR_SENTINEL_REMOTES=/restricted/path/sentinel-remotes.json

deadair check
deadair scan

deadair がルールのマッピングされたリモートワークスペースを評価する前に、そのワークスペースには Sentinel が デプロイされている必要があります。同一サブスクリプションのマッピングはソースの可用性を証明できます。クロスサブスクリプションのルールには、 正確なルール ID に紐づくランタイム証拠が必要です。証拠ルール、ワークスペースと リージョンの制限、Microsoft のパフォーマンスガイダンスについては、 Sentinel の使用詳細を参照してください。

ElasticOpenSearch、または Microsoft Sentinel の文書化された読み取り専用ロールを使用してください。

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 は、同じ呼び出し元が保持するキーで作成されたマスク済みレポートで動作します。フリート設定は、 シークレット値を保存するのではなく、環境変数を介してシークレットを参照します。

公式 GitHub Actionは、Elastic、OpenSearch、Sentinel 用の単一インスタンス候補 ゲートをラップします。ジョブサマリーを書き込み、マスク済み JSON レポートをアップロードし、ルールをインストールせずに deadair ポリシーを適用できます。Sentinel ワークフローは まずランナーを Azure に認証します; Action は Azure 資格情報の入力を定義しません。

CI ゲートの動作フリートと MSSP のデプロイ、およびPrometheus の例を参照して、ご自身の環境で テストする設定を確認してください。

テスト済みバックエンド

バックエンドライブ検証
Elastic Security8.19.19 および 9.4.4 での信頼済み CI
OpenSearch Security Analytics2.19.6 および 3.7.0 での信頼済み CI
Microsoft Sentinel使い捨ての UK South ワークスペースでの記録されたオプトイン適合性; 検証ステータスを参照

Sentinel の適合性実行は手動であり、スケジュールされた CI ではありません。

セキュリティモデル

  • すべてのアダプタ呼び出しは読み取り専用です。信頼済みの Elastic および OpenSearch テストに加え、別途の Sentinel ラボ プローブにより、文書化されたスキャン ID が代表的な書き込みを実行できないことを検証します。
  • レポート、HTML、状態ファイル、フリート出力は、POSIX システムでは 0600 で書き込まれます。
  • 資格情報は環境変数またはファイルから取得でき、プロセス引数にシークレットが含まれるのを避けます。
  • --redact は、テナント、ルール、ソース、パターン、フィールド、依存関係、系統、来歴、 ワークスペース、ウォッチリスト、テンプレート、パッケージの識別子を、キー付き HMAC 仮名に置き換えます。検証済みの 依存関係プローブ式とその KQL 引数はシリアライズされません。ランダムバイトから生成された --redact-key-file もマスキングを有効にし、別々の実行間で名前を安定させます。
  • エクスポータはデフォルトでループバックにバインドします。
  • deadair には電話 home 動作や使用状況テレメトリはありません。

レポートは機密性の高い SOC 成果物として扱ってください: それらはブラインド検知、ソース名、スキーマギャップ、 未使用の収集を特定します。

ドキュメント

コントリビューション

バグ、提案、またはサニタイズされた再現については issue を開いてください。コード変更はメンテナが対応します。 詳細は CONTRIBUTING.md を参照してください。

ライセンス

Apache-2.0.

カテゴリ