我曾多次被问到*"我们实际上从这些日志中得到了什么?"或"Microsoft Sentinel 推荐的日志是什么?"*答案总是取决于很多因素,但我们可以给出一般性的建议。所以我就在这里构建了这个工具。
Log Horizon 连接到您的 Microsoft Sentinel 工作区(并可选择连接到 Defender XDR),遍历您正在引入的每个日志表,告诉您是否从中获得了安全价值,还是仅仅在浪费金钱。它对表进行分类,根据检测规则进行评分,并给出具体的建议和节省估算。
重要提示:这是一种通用方法。如果您知道某个日志源对您的环境很重要,那么该上下文始终优先于此工具告诉您的内容。这些分类只是一个起点,并非绝对真理。
想了解更多?我在博客上发布了一些关于 Log Horizon 的文章:
| 功能 | 描述 |
|---|---|
| 分类引擎 | 包含345条知识条目,覆盖190+连接器,21个类别,对未知表提供自动启发式回退 |
| 成本价值评分 | 每个表的成本层级与检测层级矩阵,进行综合评估(高价值 → 低价值) |
| 建议 | 优先操作:数据湖候选表、零检测表、XDR流浪费、引入时过滤、保留时间不足 |
| 检测映射 | 将分析规则、搜寻查询和XDR检测映射到每个表,以发现覆盖缺口 |
| 关联标签 | 检测规则描述中的 #DONT_CORR# / #INC_CORR# 标签,并标记从Defender关联中排除的规则 |
| 保留合规性 | 根据行业标准和安全最佳实践,比较实际保留时间与建议的最低保留时间 |
| SOC优化 | 从Security Insights API拉取微软自己的SOC改进建议 |
| 关键词差距分析 | 根据供应商/产品关键词标记您应该引入但尚未引入的表 |
| 转换发现 | 发现数据收集规则(DCR)并对引入时转换进行分类(过滤、投影、扩充、聚合) |
| 拆分表检测 | 识别 _SPLT_CL 拆分表并将其链接回分类引擎中的父表 |
| 拆分KQL生成器 | 从精心策划的知识库、实时规则分析和社区字段频率统计生成门户就绪的拆分KQL——仅条件格式,可直接粘贴到Sentinel拆分规则编辑器中 |
| 检测分析器 | 使用事件结果(自动关闭率、误报率和事件量百分位数)对分析规则的潜在噪声进行评分 |
| XDR检查器 | 添加以XDR为重点的咨询层:流式覆盖检查以及XDR相关遥测的一年Data Lake保留指导 |
| 自定义分类 | 提供您自己的JSON以添加或覆盖内置分类数据库 |
| 交互式TUI | Spectre.Console仪表板,包含菜单、颜色编码表、下钻和ASCII艺术 |
| 导出 | JSON、Markdown或静态HTML报告,用于与团队分享 |
[!CAUTION] 免责声明
本工具在AI的帮助下开发与维护。 使用此解决方案时请务必谨慎,并在投入生产前始终了解您正在运行的内容。开发者不对任何漏洞或问题承担任何责任。
下载、安装或使用此工具即表示您确认已阅读、理解并同意这些条款。
| 所需内容 | 版本 |
|---|---|
| PowerShell | 7.0+ |
| Az 模块 | Az.Accounts, Az.Resources |
| 其他模块 | PwshSpectreConsole 2.6.3+ |
如果您尚未登录Azure,该模块将为您启动 Connect-AzAccount。如果已登录,则会继续执行。
非常简单:```powershell
Install-Module -Name Az.Accounts, Az.Resources -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'
Output should look something like this:
<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
Enable rule quality/noise analysis based on incidents and automation rules:```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,然后从主菜单中选择 管理表保留期和类型 以进行批量保留期或类型更新。对于脚本编写或自动化,请使用专用的公开命令:```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,分析对象将返回到管道,以便你可以将其导入自己的逻辑中。
交互式 TUI 包含一个拆分 KQL 建议菜单,该菜单为适合拆分的表生成可直接在门户中使用的拆分 KQL。它会显示每个表的 KQL,你可以直接粘贴到 Sentinel 拆分规则编辑器中,并附带来源归属(知识库、规则分析或组合)。
默认价格为 5.59 $/GB(西欧简化 PAYG)。如果您的承诺层级不同:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -PricePerGB 4.61
### All parameters
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| `-SubscriptionId` | string | 是 | - | Azure 订阅 ID |
| `-ResourceGroup` | string | 是 | - | 包含 Sentinel 工作区的资源组 |
| `-WorkspaceName` | string | 是 | - | Log Analytics 工作区名称 |
| `-WorkspaceId` | string | 否 | - | 工作区 ID(省略时自动解析) |
| `-Output` | string | 否 | - | 导出格式:`json`、`markdown` / `md` 或 `html` |
| `-OutputPath` | string | 否 | - | 导出的文件或目录路径(指定目录时自动生成带时间戳的文件名) |
| `-Keywords` | string[] | 否 | - | 用于差距分析的关键词(例如 `'AWS','CrowdStrike'`) |
| `-IncludeDefenderXDR` | switch | 否 | - | 包含 Defender XDR 自定义检测分析 |
| `-IncludeDetectionAnalyzer` | switch | 否 | - | 使用事件和自动化规则进行基于规则的噪声检测分析 |
| `-DetectionLookbackDays` | int | 否 | 90 | 基于事件/自动化的检测分析查询窗口(1-365 天) |
| `-DaysBack` | int | 否 | 90 | 使用数据的查询窗口(1-365 天) |
| `-PricePerGB` | decimal | 否 | 5.59 | Sentinel 每 GB 摄取价格 |
| `-NonInteractive` | switch | 否 | - | 跳过 TUI 仪表板直接导出(如果省略 `-Output`,则返回数据到管道) |
| `-CustomClassificationPath` | string | 否 | - | 自定义 JSON 文件的路径,以添加或覆盖分类 |
---
## 内部原理
共分为四个阶段。
### 1. 数据收集
模块连接到 Azure,并从 Log Analytics 和 Security Insights API 提取数据:
| 数据源 | API | 获取内容 |
|---|---|---|
| 表用量 | `Usage` 表 (KQL) | 查询窗口内每个表的摄取量 |
| 分析规则 | Security Insights REST | 活动检测规则 + 它们命中的表 + 关联标签 |
| 搜寻查询 | Security Insights REST | 已保存的搜寻查询 + 引用的表 |
| 数据连接器 | Security Insights REST | 已安装的连接器清单 |
| SOC 优化 | Security Insights REST | Microsoft 内置的 SOC 建议 |
| 表保留 | Azure Tables REST | 每个表的保留期、存档和计划(Analytics/Basic) |
| Defender XDR | Security Insights REST | XDR 自定义检测和流式传输配置(可选) |
| 事件 | Security Insights REST | 事件结果(状态/分类)、时间以及用于规则质量评分的规则关联提示 |
| 自动化规则 | Security Insights REST | 规则级的关闭事件操作和用于自动关闭归因的标题匹配条件 |
| SentinelHealth | Log Analytics KQL | 自动化规则运行事件(含事件编号),用于明确的自动关闭归因(可选,需要健康监控) |
### 2. 分类
每个表通过两次传递进行分类:
**第一次**,直接查询 `Data/log-classifications.json` 中 345 条记录的知识库。每条记录包含连接器名称、主要/次要分类、安全类别、MITRE 数据源映射以及推荐的价格层。
**如果没有匹配**,则启用启发式规则:
- 名称包含安全模式,如 `Alert`、`Incident`、`Threat`、`Signin`、`Audit`、`Risk` -> **primary**
- 名称看起来像基础设施遥测:`Flow`、`Metric`、`Diagnostic`、`Perf`、`Heartbeat` -> **secondary**
- 有活动的分析规则指向它 -> **primary**
- 高容量(>10 GB/月)且无检测规则 -> **secondary**
- 以上均不符合 -> **unknown**
### 3. 成本价值评分
每个表在几个维度上打分:
- **成本层级**:免费 / 低(<1 GB)/ 中(1-10 GB)/ 高(10-50 GB)/ 极高(>50 GB)
- **检测层级**:无 / 低(1-2 条规则)/ 中(3-9 条规则)/ 高(10+ 条规则)
- **评估**:高价值 / 良好价值 / 覆盖缺失 / 需审查 / 数据湖候选 / 免费层
- **覆盖率%**:至少有一条分析规则或搜寻查询引用的表百分比,计算公式为 `tablesWithRules / totalTables * 100`。每个表的覆盖率通过解析 KQL 中的表名,汇总分析规则+搜寻查询的数量。
然后模块生成建议:
| 类型 | 触发条件 | 操作建议 |
|---|---|---|
| **数据湖** | 次要 + 高成本 + 少量检测 | 移至 Auxiliary/Data Lake 层(约节省 95%) |
| **低价值** | 高成本 + 零检测 | 添加规则、过滤或移至数据湖 |
| **XDR 优化** | XDR 流式传输 + 0 条 Sentinel 规则 + XDR 规则存在 | 停止流式传输,改用统一的 XDR 门户 |
| **覆盖缺失** | 主要 + 零检测 | 编写分析规则以从数据中获取价值 |
| **摄入时过滤** | 主要 + >20 GB + <=3 条检测 | 应用摄入时转换以减少容量 |
| **拆分候选** | 主要 + 高容量 + 有检测 + 无现有转换 | 拆分表——高价值行保留在 Analytics,其余移至数据湖 |
| **保留期不足** | 表的保留期低于建议的最低值 | 增加总保留期/存档保留期以符合监管指南 |
### 4. 检测分析器(噪声评分)
当传递 `-IncludeDetectionAnalyzer` 时,模块会获取近期事件和自动化规则,然后为每个启用的分析规则评估潜在的噪声性。
**每个规则的指标**(根据事件数据计算):
| 指标 | 计算方式 |
|---|---|
| 事件总数 | 关联到该规则的事件数量 |
| 自动关闭比例 | 由自动化规则关闭的事件 ÷ 事件总数。主要来源:SentinelHealth 表(通过事件编号明确匹配)。备用方案:针对自动化规则条件进行支持运算符的标题匹配。 |
| 误报比例 | 被分类为误报的事件 ÷ 事件总数 |
**噪声评分公式**:
每个指标根据至少有一个事件的所有规则转换为其百分位数排名。综合得分是加权混合:```
Score = (Volume_percentile × 0.35) + (AutoClose_percentile × 0.40) + (FalsePositive_percentile × 0.25)
评分阈值:
| 评分 | 标签 | 含义 |
|---|
评分≥70且至少有5个事件的规则会自动在“建议”视图中显示为高优先级建议。
-IncludeDefenderXDR 时)-IncludeDetectionAnalyzer 时)位于 Data/log-classifications.json。345条条目,190个连接器,21个类别。
主要(211条条目):你实际用于构建检测的表。登录日志、安全警报、威胁情报、审计跟踪、漏洞发现、防火墙命中、EDR遥测。
辅助(133条条目):支持性内容。性能指标、基础设施诊断、网络流量量、库存快照、配置基线、运行状况检查。
你可以提供自己的分类文件,用于添加内置数据库中不存在的表条目,或覆盖默认条目以匹配你的环境。当相同的 tableName 出现在两者中时,自定义条目的优先级高于内置条目。```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' `
-CustomClassificationPath './my-classifications.json'
自定义文件使用与 `Data/log-classifications.json` 相同的模式——一个对象数组:```json
[
{
"tableName": "MyCustomApp_CL",
"connector": "Custom Logs (DCR)",
"classification": "primary",
"category": "Application Logs",
"description": "Security-relevant audit events from an internal application",
"keywords": ["custom", "internal", "audit"],
"mitreSources": [],
"recommendedTier": "analytics",
"isFree": false
},
{
"tableName": "AzureMetrics",
"connector": "Azure Monitor",
"classification": "primary",
"category": "Infrastructure Diag",
"description": "Override: promoted to primary because we detect on Azure resource metrics in this environment",
"keywords": ["metrics", "azure", "infrastructure", "monitoring"],
"mitreSources": [],
"recommendedTier": "analytics",
"isFree": false
}
]
关于如何使用,请参见 Data/custom-classifications-example.json 中的现成模板。
主要/次要分级部分由作者手动完成,然后将 Microsoft 的数据连接器和表定义与人工分级基线一同输入 AI,并采用 Microsoft 最佳实践和行业标准作为分类依据。如果在你的环境中发现某些内容不太合理,请以自身背景为准—AI 可能犯错,背景信息才是关键。
分类标准来源于以下资料:
ACSC(澳大利亚信号局,澳大利亚网络安全中心)
CISA(网络安全与基础设施安全局)
Microsoft
MITRE
NIST(国家标准与技术研究院)
NSA(国家安全局)
NCSC-UK(英国国家网络安全中心)
Google Cloud
LogHorizon.psd1 Module manifest (v0.6.2) LogHorizon.psm1 Module loader Public/ Invoke-LogHorizon.ps1 Entry point, the main orchestrator Private/ Connect-Sentinel.ps1 Azure auth + workspace resolution Get-TableUsage.ps1 KQL query for ingestion volumes Get-AnalyticsRules.ps1 Analytics rules + table/field extraction + correlation tags Get-HuntingQueries.ps1 Hunting queries + table extraction Get-DataConnectors.ps1 Data connector inventory Get-DataTransforms.ps1 DCR transform discovery, split KQL generation Get-DefenderXDR.ps1 Defender XDR analysis (optional) Get-Incidents.ps1 Incident fetch + SentinelHealth auto-close attribution Get-AutomationRules.ps1 Automation rule inventory + close-logic attribution Get-SocOptimization.ps1 SOC improvement recommendations Get-TableRetention.ps1 Per-table retention, archive, and plan type Invoke-AzRestWithRetry.ps1 REST retry wrapper with exponential backoff for 429/5xx Invoke-Classification.ps1 Static DB + heuristic classification + _SPLT_CL detection Invoke-Analysis.ps1 Cost-value matrix + recommendations + split suggestions Write-Report.ps1 Spectre.Console TUI rendering Export-Report.ps1 JSON / Markdown / static HTML export with shared section renderer Data/ log-classifications.json 345-entry classification knowledge base high-value-fields.json 15-table split KQL knowledge base with curated fields and split hints field-frequency-stats.json Community field frequency stats (generated by Build-FieldKnowledgeBase.ps1) custom-classifications-example.json Example custom classification override file ReportTemplate.html Static HTML report template (pure-CSS tabs, zero JS) Tests/ LogHorizon.Tests.ps1 Pester v5 unit tests
### 知识库生成
分割的 KQL 知识库——`high-value-fields.json` 和 `field-frequency-stats.json`——由 `Build-FieldKnowledgeBase.ps1` 离线生成。该脚本:
1. 浅克隆 [Azure/Azure-Sentinel](https://github.com/Azure/Azure-Sentinel) GitHub 仓库(稀疏签出 `Solutions/`、`Detections/`、`Hunting Queries/`)
2. 解析约 3,800 个 YAML 规则文件,并通过正则表达式提取 KQL 查询
3. 在每个查询上运行 `Get-TablesFromKql` 和 `Get-FieldsFromKql`,以构建按表的字段频率计数
4. 计算三层回退字段:
- **通用字段** —— 出现在所有表中 >50% 的字段(例如 `TimeGenerated`)
- **类别默认值** —— 在某个分类类别中出现于 >40% 表中的字段
- **按表统计** —— 对于引用规则 >= 3 的表,原始字段频率计数
5. 将挖掘出的字段合并到现有的 curated `high-value-fields.json` 中(保留已整理条目,添加新发现的、规则数 >= 3 且有效字段数 >= 3 的表)
6. 将两个文件输出到 `Data/`
在运行时,`Get-SplitKql` 使用一个回退层级:整理的知识库条目 -> 实时规则/狩猎字段分析 -> 社区按表统计 -> 类别默认值 -> 通用字段。字段频率并非完美方法,但了解它仍有用处。
## 测试```powershell
Invoke-Pester ./Tests/LogHorizon.Tests.ps1 -Output Detailed
MIT
要在终端中启用 UTF-8 输出,请在 PowerShell 配置文件 $PROFILE 顶部添加以下行,然后重新启动终端:```powershell
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
模块在导入时自动设置此选项,但根据您的会话,警告可能仍然会出现。这仅影响外观,不影响功能。
## 贡献
如果您遇到问题或想要贡献,请创建一个PR。
## 喜欢这个工具?
</br>
<a href='https://ko-fi.com/B0B61XGLO7' target='_blank'><img height='36' style='border:0px;height:36px;' src="https://assets.kitploit.com/production/public/readmes/13110/85ecfd7542830b8c7e246d37aec7c2b7397da003291ec4c56074631499f4829a.webp" border='0' alt='在 ko-fi.com 上请我喝杯咖啡' /></a>
</br>
| ≥ 70 | 嘈杂 | 规则可能需要调整或禁用 |
| ≥ 50 | 关注 | 规则出现早期嘈杂迹象 |
| < 50 | 健康 | 规则处于正常范围内 |
| 不适用 | — | 规则没有关联事件(无法评分) |
| 字段 | 含义 |
|---|
tableName | Log Analytics表名(SecurityEvent、SigninLogs等) |
connector | 产生此表的数据连接器 |
classification | primary(安全价值)或 secondary(辅助遥测) |
category | 安全类别:身份与访问、网络安全等 |
description | 表格内容的简明英文摘要 |
keywords | 用于关键词差距分析匹配的术语 |
mitreSources | MITRE ATT&CK数据源映射 |
recommendedTier | analytics(热层)或 datalake(辅助候选) |
recommendedRetentionDays | 建议的最低总保留天数(监管指导) |
isFree | 微软是否免费引入此表 |
| 类别 | 数量 | 示例 |
|---|
| 身份与访问 | 33 | SigninLogs、OktaSSO、CyberArk_AuditEvents_CL |
| 网络安全 | 29 | AZFWNetworkRule、Cloudflare_CL、darktrace_model_alerts_CL |
| 安全警报 | 26 | SecurityAlert、SecurityIncident、SentinelOneAlerts_CL |
| 端点检测 | 22 | DeviceProcessEvents、DeviceFileEvents、SentinelOne_CL |
| 云控制平面 | 22 | AzureActivity、OfficeActivity、GoogleWorkspaceReports |
| 网络流量 | 23 | AzureNetworkAnalytics_CL、CommonSecurityLog、AZFWFatFlow |
| 云安全 | 13 | McasShadowItReporting、PaloAltoPrismaCloudAlertV2_CL |
| 电子邮件安全 | 20 | EmailEvents、ProofPointTAPMessagesBlockedV2_CL、MimecastSIEM_CL |
| 端点遥测 | 14 | DeviceInfo、SentinelOneAgents_CL、jamfprotecttelemetryv2_CL |
| 漏洞管理 | 11 | DeviceTvmSoftwareVulnerabilities、QualysHostDetectionV3_CL |
| 数据安全 | 12 | PurviewDataSensitivityLogs、VaronisAlerts_CL、MimecastDLP_CL |
| 应用程序日志 | 22 | AppServiceHTTPLogs、FunctionAppLogs、DynatraceAttacks_CL |
| 威胁情报 | 8 | ThreatIntelligenceIndicator、CybleVisionAlerts_CL |
| SAP安全 | 7 | ABAPAuditLog、SAPBTPAuditLog_CL、Onapsis_Defend_CL |
| 物联网/OT安全 | 4 | RadiflowEvent、DragosAlerts_CL、Phosphorus_CL |
| 数据平台 | 13 | AzureDiagnostics、SnowflakeLogin_CL、MongoDBAudit_CL |
| 容器与K8s | 7 | ContainerLog、KubeEvents、GKEAudit、AWSEKSLogs_CL |
| 平台运行状况 | 6 | SentinelHealth、Watchlist、SOCPrimeAuditLogs_CL |
| 基础设施诊断 | 7 | AzureMetrics、GCPComputeEngine、GCPMonitoring |
| 态势管理 | 7 | DeviceTvmSecureConfigurationAssessment、CortexXpanseAlerts_CL |
| 配置管理 | 6 | ConfigurationData、ESIExchangeOnlineConfig_CL |
| 存储访问 | 5 | StorageBlobLogs、StorageFileLogs、AWSS3ServerAccess |
| 版本 | 日期 | 变更说明 |
|---|
| 0.8.0 | 2026-05-26 | 新增交互式表保留管理功能,包含新的批量TUI流程和单表更新入口,以及公开的 Set-LogHorizonTableRetention 命令。新增 Tables API PATCH 应用引擎,支持验证、Azure 异步操作轮询和两步回退(组合 PATCH,再单独应用计划与保留)以实现稳健的保留更新。新增针对验证、载荷结构、回退和公共命令映射的 Pester 测试覆盖。同时修复了一个边界问题/缺陷:当用户在 Sentinel 中仍有分析数据时,系统会错误建议将数据湖表更改为数据湖层级。 |
| 0.7.1 | 2026-05-15 | 新增来自 Usage.Plan 的计划感知功能,而不替换已配置的表计划:分析现可跟踪观察到的计划历史,标记多计划使用及配置与实际不符的情况,并在仪表板、表下钻、查看所有表、保留评估及导出中展示计划数据。修复了检测分析器自动关闭归因功能,确保仅当不存在启用的自动化规则时,时间启发式逻辑才生效。203 项测试通过。 |
| 0.7.0 | 2026-04-16 | 检测评估更新:新增成本-价值矩阵汇总表(主要/次要 ×7 个评估类别,带颜色编码),主/次要表下钻子菜单含成本/检测层级列。检测分析器更新:新增 GB 加权容量覆盖柱状图(检测/狩猎/合计 GB 占总摄入量百分比,与现有表计数柱状图并列)。检测分析器自适应显示改进(动态柱状宽度、规则名称截断、根据控制台宽度有条件隐藏列)。193 项测试通过。 |
| 0.6.3 | 2026-04-11 | PSGallery 小版本更新。 |
| 0.6.2 | 2026-04-11 | 日志调整/转换菜单:实时数据调整分析(基于已部署规则/狩猎查询的逐表字段使用情况、过滤/投影/合并 KQL 生成、节省估算)、从 Tables API 提取模式列、Get-SplitKql 回退层次结构(社区统计数据→类别默认值→通用字段)、包含字段使用矩阵的综合表评估器、统一的 KB + 实时调整导出部分、用于 Azure-Sentinel GitHub 规则语料库的 Build-FieldKnowledgeBase.ps1 挖掘脚本。检测分析器:基于 SentinelHealth 的自动关闭归因(主要)及操作符感知规则匹配回退、布尔条件包装解析、已解决状态检测、ARM 资源 ID 的 GUID 尾部匹配。覆盖率现在基于所有表(包括免费层级)的表计数。TUI 和导出中添加评分免责声明。174 项测试。 |
| 0.6.1 | 2026-04-10 | 缺陷修复:$kqlKeywords 过滤现共享在文件作用域(原在 Get-TablesFromKql 中未定义),为所有辅助函数添加 [CmdletBinding()],简化 Defender 统一检查,移除多余的 -RuleCount 测试参数。健壮性增强:Get-HuntingQueries 分页、Invoke-AzRestWithRetry 重试包装器(针对 429/5xx 的指数退避)、PricePerGB 验证、关键函数中的 Write-Verbose。文档:版本徽章、数据库计数、与清单对齐的前提条件。 |
| 0.6.0 | 2026-04-10 | 动态 XDR 流式检测,包含 21 个 KnownXDRTables(原为硬编码 18 个)、逐表 XDRState(NotStreaming/Analytics/Basic/Auxiliary)、将 Auxiliary 识别为数据湖层级、未流式 XDR 表以信息/低建议形式呈现(含 NotStreamedCount)、保留分析器将未流式 XDR 表显示为“仅 XDR (30 天)”、概览层级细分(分析/基础/数据湖 + 未流式)、导出报告将 Auxiliary→“数据湖”标签、分类数据库更新至 345 条(新增 DeviceNetworkInfo、DeviceInfo→次要/数据湖、DeviceImageLoadEvents 和 IdentityQueryEvents→数据湖层级),新增 15 项 Pester 测试(共 121 项)。 |
| 0.5.0 | 2026-04-03 | 静态 HTML 导出,使用纯 CSS 标签页(零 JS、无 CDN、完全自包含)、统一的 MD/HTML 部分渲染器、完整的 JSON 数据捕获(dataTransforms、correlationExcluded/Included、streamingTables)、适用于 CI/流水线的 -NonInteractive 开关、md 格式别名、带时间戳的自动文件名、DCR 转换中 KQL 完整显示(无截断)、Markdown 表格中的多行 KQL 处理、修复 HTML 令牌替换中正则 $ 反向引用损坏、重命名内部辅助函数以避免 PowerShell 别名冲突(h→hEnc、md→mdEsc),新增 33 项 Pester 测试(共 106 项)。 |
| 0.4.1 | 2026-04-03 | 安全性与稳定性修复:新增令牌内存清理、输出路径验证及 XSS 保护、REST API 分页限制、修复模块加载器错误掩盖、解决 PSScriptAnalyzer 警告。 |
| 0.4.0 | 2026-04-02 | 转换发现(DCR 列表 + 转换类型分类)、拆分表检测(_SPLT_CL)、拆分 KQL 辅助函数(含 15 张表的知识库 high-value-fields.json + 规则分析回退)、门户就绪的条件仅 KQL 输出、可展开的建议列表、拆分 KQL 建议 TUI 菜单。 |
| 0.3.0 | 2026-04-02 | 日志保留合规性分析(CISA M-21-31、NIST SP 800-92、NCSC-UK、ASD ACSC、NSA)、关联标签检测(#DONT_CORR#/#INC_CORR#)、保留评估菜单视图、所有表中的保留列、分类模式中的 recommendedRetentionDays。 |
| 0.2.2 | 2026-04-02 | SOC 优化表在窄控制台上隐藏详细信息列。 |
| 0.2.1 | 2026-04-02 | 自定义分类支持(-CustomClassificationPath)、丰富 SOC 优化建议(含 API 建议/下钻)、默认仅显示活动视图、抑制 UTF-8 编码警告。 |
| 0.2.0 | - | 初始公开发布,包含分类引擎、成本-价值评分、Spectre.Console TUI、导出为 JSON/Markdown。 |
| 0.1.0 | - | 用于开发的内部版本。 |