アップデート一覧に戻る
New releaseJul 23, 2026

deadair v0.4.0

SIEM内で効果を発揮していない検知ルールを見つけ出します。

共有

deadair - SIEM detection coverage health

CI Release Go 1.26 License: Apache-2.0

オープンソースのSIEM検知ヘルスチェック。
テレメトリが欠落、陳腐化、遅延、またはスキーマ非互換のために盲目になっている有効な検知を発見します。

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

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

deadair scan of a disposable Elastic lab showing dead and impaired detections

意図的に欠落、陳腐化、遅延、未使用のテレメトリを仕込んだ使い捨て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   # 資格情報がスキャンできることを検証
deadair scan    # ライブルールとテレメトリを評価

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

仕組み

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

Sentinelも同じルールからソースへのモデルに従います。そのアダプタはリテラルなウォッチリスト、 保存関数、ASIMパーサー、マッピングされたワークスペース、サマリーテーブルの系統も理解します。Azureが十分な 証拠を提供する場合、deadairは共有テーブルのフィルタリングされたスライスが沈黙したことや、サマリー パイプラインが遅れていることを示せます。これらの2つのチェックは参考情報であり、ゲートは変更しません。 使用ガイドに証拠ルールが記載され、 検証記録にライブテストのカバレッジが記録されています。

deadair scan of a disposable Microsoft Sentinel lab showing missing, stale, late, and incompatible telemetry

欠落、陳腐化、遅延、非互換のテレメトリを仕込んだ使い捨てSentinelラボのライブスキャン。画像を開いて短いリプレイをご覧ください。読み取り専用および書き込み拒否テストについては別のAzure適合性記録を参照してください。

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

検出結果

検出結果意味最初のチェック
一致するソースなしルールの入力のいずれも可視のインデックス、データストリーム、またはSentinelテーブルに解決されないパターン変更、統合の欠落、資格情報のスコープ
すべてのソースが陳腐化または空解決されたすべてのソースが現在使用不可ソースの頻度と取り込みパス
フィールド欠落Elasticルール宣言フィールドが、すべてのソースマッピングを読み取った後、1つ以上の解決済みソースに存在しないか検索不可パーサー、パッケージ、マッピングの変更
遅延ブラインドウィンドウペアイベントのp95取り込み遅延がルールのルックバックマージンを超えるルール間隔、ルックバック、タイムスタンプオーバーライド、パイプライン遅延
部分的な入力カバレッジ完全な式は解決されるが、その中の1つの正のセレクタが空に解決される移行、フォールバックセレクタ、期待される代替。ポリシーでゲートされない限り情報提供
ソースプラン非互換Sentinelルールが、分析ルール証拠パスに適格でないBasicまたはAuxiliaryテーブルに依存テーブルプランとルールタイプ
ソース劣化ソースが陳腐化、空、低ボリューム、またはスキーマドリフトソース履歴と期待されるメンテナンス
未使用テレメトリ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が デプロイされている必要があります。同一サブスクリプションのマッピングはソースの可用性を証明できます。クロスサブスクリプションのルールには、 正確なルールIDに結び付けられたランタイム証拠が必要です。証拠ルール、ワークスペースと リージョンの制限、Microsoftのパフォーマンスガイダンスについては Sentinel使用詳細を参照してください。

ElasticOpenSearch、または Microsoft Sentinelのドキュメント化された読み取り専用ロールを使用してください。

CI、フリート、モニタリング

# ライブソースの可用性に対して候補ルールをゲート。
deadair scan --rule new-rule.json

# レポート間の新しいリグレッションのみで失敗。
deadair diff yesterday.json today.json

# 1つのプロセスから複数のSIEMインスタンスをスキャン。
deadair scan --fleet fleet.json

# キャッシュされたスキャン結果をPrometheusメトリクスとしてエクスポート。
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にはホームコール動作や使用テレメトリはありません。

レポートは機密のSOC成果物として扱ってください。盲目の検知、ソース名、スキーマギャップ、 未使用の収集を特定します。

ドキュメント

貢献

バグレポート、サニタイズされたフィクスチャ、正確性ケース、ドキュメント、バックエンド提案を歓迎します。 CONTRIBUTING.mdから始め、アダプタ作業にはバックエンドRFCテンプレートを使用してください。

ライセンス

Apache-2.0。

カテゴリ