
Microsoft Sentinel SIEM ログソース分析ツール
「これらのログから実際に何が得られているのか?」とか「Microsoft Sentinel に推奨されるログは何か?」といった質問に何度も答えてきました。答えは常に多くの要因に依存しますが、汎用的にすることはできます。そこで、このツールをここに作りました。
Log Horizon は、Microsoft Sentinel ワークスペース(およびオプションで Defender XDR)に接続し、取り込んでいるすべてのログテーブルを調べて、セキュリティ上の価値が得られているか、それとも単にコストを浪費しているだけかを判断します。テーブルを分類し、検出ルールに基づいてスコアリングし、具体的な推奨事項とコスト削減見積もりを提供します。
重要: これは汎用的なアプローチです。ログソースが環境にとって重要だと分かっている場合、そのコンテキストが常にこのツールの指示よりも優先されます。分類は出発点であり、絶対的なものではありません。
さらに読みたいですか? Log Horizon に関するブログ記事があります:
| 機能 | 説明 |
|---|---|
| 分類エンジン | 240 以上のコネクタ、22 カテゴリをカバーする 481 エントリのナレッジベース。ライフサイクルステータス(非推奨/レガシーと置き換えテーブル)と、未知のテーブルに対する自動ヒューリスティックフォールバックを備える |
| コスト価値スコアリング | テーブルごとのコスト層と検出層のマトリクスによる複合評価(高価値から低価値まで)。観測されたプラン(Analytics、Basic、Data Lake)ごとに価格設定 |
| 推奨事項 | 13 種類の優先順位付けされたアクションタイプ: Data Lake または Basic 候補、ゼロ検出テーブル、XDR ストリーミングの無駄、取り込み時フィルタリング、分割候補、プラン使用状況、非推奨ソース、保持期間不足、XDR チェッカーと検出アナライザーの結果。それぞれにコスト削減見積もりを添付 |
| 検出マッピング | 分析ルール、ハンティングクエリ、XDR 検出を各テーブルにマッピングし、カバレッジのギャップを特定 |
| 相関タグ | ルール説明内の #DONT_CORR# / #INC_CORR# タグを検出し、Defender の相関から除外されたルールにフラグを立てる |
| 保持期間コンプライアンス | 実際の保持期間を、業界標準とセキュリティのベストプラクティスに基づく推奨最小値と比較 |
| SOC 最適化 | Security Insights API から Microsoft 自身の SOC 改善推奨事項を取得 |
| キーワードギャップ分析 | ベンダー/製品キーワードに基づいて、取り込むべきなのに取り込んでいないテーブルにフラグを立てる |
| 変換ディスカバリ | ワークスペースを対象とする Data Collection Rules(DCR)を検出し(宛先でフィルタリングされたサブスクリプションリスト、ワークスペース変換 DCR、ワークスペース関連付け)、インラインおよびマルチステージ変換を解析し、すべての操作(フィルタ、プロジェクション、列削除、エンリッチメント、集計)にラベルを付ける |
| 分割テーブル検出 | _SPLT_CL 分割テーブルを特定し、分類エンジン内の親テーブルにリンク |
| 分割 KQL ジェネレーター | 厳選されたナレッジベース、ライブルール分析、コミュニティのフィールド頻度統計から、ポータル対応の分割 KQL を生成 -- Sentinel の分割ルールエディタにそのまま貼り付けられる条件のみの形式。フィールドリストはテーブルのライブスキーマと交差検証され、存在しないものは破棄されたとして報告される |
| 検出アナライザー | インシデント結果(自動クローズ率、誤検知率、インシデント量のパーセンタイル)を使用して、分析ルールの潜在的なノイズ性をスコアリング |
| XDR チェッカー | XDR に焦点を当てたアドバイザリレイヤーを追加: XDR 関連テレメトリのストリーミングカバレッジチェックと 1 年間の Data Lake 保持期間ガイダンス |
| カスタム分類 | 独自の JSON を提供して、組み込みの分類データベースに追加または上書き |
| コレクションキャッシュ | 収集されたワークスペースデータはローカルにキャッシュされ(デフォルト 60 分)、再実行や再エクスポートが数秒で完了。-NoCache でオプトアウト可能 |
| ソブリンクラウド | ARM、Log Analytics、Graph のエンドポイントは、サインイン中の Azure 環境(パブリック、US Government、China)に従う |
| 対話型 TUI | Spectre.Console ダッシュボード。メニュー、色分けされたテーブル、ドリルダウン、保持期間ウィザード、ASCII アートを備える |
| エクスポート | チーム共有用の JSON、Markdown、または静的 HTML レポート |
[!CAUTION] 免責事項
このツールは AI の支援を受けて開発・保守されています。 このソリューションを使用する際は注意を払い、本番環境で実行する前に、何を実行しているのかを常に理解してください。開発者は、脆弱性や問題について一切の責任を負いません。
このツールをダウンロード、インストール、または使用することにより、これらの条項を読み、理解し、同意したものとみなされます。
| 必要なもの | バージョン |
|---|---|
| PowerShell | 7.0+ |
| Az モジュール | Az.Accounts |
| その他のモジュール | PwshSpectreConsole 2.6.3+ |
| オプション | Microsoft.Graph.Authentication(-IncludeDefenderXDR をサインインユーザーとして使用する場合) |
エンドポイントは、現在の Connect-AzAccount セッションの Azure 環境に従うため、Azure Government および Azure China のワークスペースは追加パラメータなしで動作します。環境が利用できない場合は、パブリッククラウドの値が使用されます。
Azure にまだログインしていない場合、モジュールが自動的に Connect-AzAccount を起動します。すでにログインしている場合は、そのまま続行します。
アクセス許可: ワークスペースに対する Log Analytics Reader と Microsoft Sentinel Reader で分析をカバーできます。変換ディスカバリには、サブスクリプションまたはリソースグループに対する Microsoft.Insights/dataCollectionRules/read(Monitoring Reader)も必要です。これがない場合、実行は続行され、不足しているアクセス許可を示す警告が出力されます。-IncludeDefenderXDR は CustomDetection.Read.All を持つ Microsoft Graph を使用します。これはサインインユーザーの場合、オプションの Microsoft.Graph.Authentication モジュールを意味します。
かなり簡単です:```powershell
Install-Module -Name Az.Accounts -Scope CurrentUser Install-Module -Name PwshSpectreConsole -Scope CurrentUser
git clone https://github.com/lnfernux/log-horizon Import-Module ./log-horizon/LogHorizon.psd1
## 使用方法
### 基本操作
まずAzureに接続し、正しいアカウントとサブスクリプションを選択していることを確認します:```powershell
Connect-AzAccount
次に、ツールを呼び出すことができます:```powershell Invoke-LogHorizon -SubscriptionId '00000000-0000-0000-0000-000000000000' -ResourceGroup 'rg-sentinel' -WorkspaceName 'my-sentinel-ws'
<img width="860" height="842" alt="{F4FFA929-B24F-490C-BD3D-F75E214BCD93}" src="https://assets.kitploit.com/production/public/readmes/13110/ff9d1da85043d02a216df72913ecf63520310b8d820b1bd1278b8e4aca718494.png" />
また、他の出力をさらに掘り下げるためのメニューもあります:
<img width="395" height="223" alt="{83CE9E6E-F373-49CD-BE05-182DB69F36BE}" src="https://assets.kitploit.com/production/public/readmes/13110/0606a575b10640bd13ebb87b930f74b2438167b5578cb843b412b4fcf273fc26.png" />
### キーワードのギャップ + Defender XDR
特定のベンダーに関連するテーブルが不足しているかどうかを知りたいですか? いくつかのキーワードを入力してください。XDR分析も必要な場合は、`-IncludeDefenderXDR` を追加してください。```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Keywords 'CrowdStrike','AWS','Okta' -IncludeDefenderXDR
インシデントと自動化ルールに基づくルール品質・ノイズ分析を有効にします:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -IncludeDetectionAnalyzer -DetectionLookbackDays 90
### レポートをエクスポートする```powershell
# JSON
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output json -OutputPath ./report.json
# Markdown
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output markdown -OutputPath ./report.md
# Static HTML (self-contained, no JS, works offline)
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output html -OutputPath ./report.html
# Auto-generate timestamped filename by pointing at a directory
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output html -OutputPath ./reports/
インタラクティブTUIから直接、テーブルの保持期間とテーブルタイプを更新できるようになりました:
Invoke-LogHorizon を通常どおり開き、メインメニューから Manage table retention and type を選択すると、保持期間やタイプの一括更新ができます。スクリプトや自動化には、専用の公開コマンドを使用してください:```powershell
Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -TotalRetentionInDays 365 -WhatIf
Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'AzureDiagnostics','VMConnection' -TargetPlan Basic -TotalRetentionInDays 730
Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -RetentionInDays -1 -TotalRetentionInDays -1
### 非対話モード / CIモード
対話型TUIをスキップして、直接ファイルにエクスポートします。パイプラインやスケジュール実行に便利です。```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NonInteractive -Output json -OutputPath ./reports/
-Output を省略すると、分析オブジェクトがパイプラインに返されるため、独自のロジックにパイプ処理できます。