你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

监视运行状况并审核分析规则的完整性

为了确保Microsoft Sentinel服务中全面、不间断和无篡改的威胁检测,请跟踪分析规则的运行状况和完整性。 通过监视其 执行见解、查询运行状况和审核日志以及 使用手动重新运行来测试和优化规则,使它们保持最佳运行。

为相关利益干系人设置运行状况和审核事件的通知,然后他们可以采取措施。 例如,定义和发送电子邮件或Microsoft Teams 消息,在票证系统中创建新票证,等等。

本文介绍如何使用 Microsoft Sentinel 的审核和运行状况监视功能从Microsoft Sentinel内跟踪分析规则的运行状况和完整性。

有关规则见解和手动重新运行规则的信息,请参阅 监视和优化计划分析规则的执行

摘要

  • Microsoft Sentinel分析规则运行状况日志:

    • 此日志捕获记录分析规则运行的事件,以及这些运行的最终结果(如果成功或失败,以及失败的原因)。
    • 日志还会记录每个运行分析规则的记录:
      • 规则查询捕获的事件数。
      • 事件数是否超过规则中定义的阈值,导致规则触发警报。

    这些日志收集在 Log Analytics 的 SentinelHealth 表中。

  • Microsoft Sentinel分析规则审核日志:

    • 此日志捕获记录对任何分析规则所做的更改的事件,包括以下详细信息:
      • 已更改的规则的名称。
      • 规则的哪些属性已更改。
      • 更改前后规则设置的状态。
      • 进行更改的用户或标识。
      • 更改的源 IP 和日期/时间。
      • ...等等。

    这些日志收集在 Log Analytics 的 SentinelAudit 表中。

使用 SentinelHealth 和 SentinelAudit 数据表

若要从前面所述的表中获取审核和运行状况数据,必须先为工作区启用Microsoft Sentinel运行状况功能。 有关详细信息,请参阅启用Microsoft Sentinel的审核和运行状况监视

打开运行状况功能后,将在为自动化规则和 playbook 生成的第一个成功或失败事件时创建 SentinelHealth 数据表。

了解 SentinelHealth 和 SentinelAudit 表事件

SentinelHealth 表记录以下类型的分析规则运行状况事件:

  • 计划分析规则运行
  • NRT 分析规则运行

有关详细信息,请参阅 SentinelHealth 表列架构

SentinelAudit 表记录以下类型的分析规则审核事件:

  • 创建或更新分析规则
  • 已删除分析规则

有关详细信息,请参阅 SentinelAudit 表列架构

运行查询以检测运行状况和完整性问题

为了获得最佳结果,请对这些表的 预生成函数 生成查询, _SentinelHealth () _SentinelAudit () ,而不是直接查询表。 如果更改了表的架构,这些函数会保持查询的向后兼容性。

第一步,筛选表中与分析规则相关的数据。 SentinelResourceType使用 参数。

_SentinelHealth()
| where SentinelResourceType == "Analytics Rule"

如果需要,可以进一步筛选列表以查找特定类型的分析规则。 为此, SentinelResourceKind 请使用 参数。

| where SentinelResourceKind == "Scheduled"

# OR

| where SentinelResourceKind == "NRT"

下面是一些示例查询,可帮助你入门:

  • 查找“autodisabled”的规则:

    _SentinelHealth()
    | where SentinelResourceType == "Analytics Rule"
    | where Reason == "The analytics rule is disabled and was not executed."
    
  • 按原因计算成功或失败的规则和运行次数:

    _SentinelHealth()
    | where SentinelResourceType == "Analytics Rule"
    | summarize Occurrence=count(), Unique_rule=dcount(SentinelResourceId) by Status, Reason
    
  • 查找规则删除活动:

    _SentinelAudit()
    | where SentinelResourceType =="Analytic Rule"
    | where Description =="Analytics rule deleted"
    
  • 按规则名称和活动名称查找规则上的活动:

    _SentinelAudit()
    | where SentinelResourceType =="Analytic Rule"
    | summarize Count= count() by RuleName=SentinelResourceName, Activity=Description
    
  • 通过调用方名称 (执行活动) 标识查找规则上的活动:

    _SentinelAudit()
    | where SentinelResourceType =="Analytic Rule"
    | extend Caller= tostring(ExtendedProperties.CallerName)
    | summarize Count = count() by Caller, Activity=Description
    

请参阅 Kusto 文档中前面示例中使用的以下项的详细信息:

有关 KQL 的详细信息,请参阅 Kusto 查询语言 (KQL) 概述

其他资源:

计划规则

当计划规则失败时,将在完全相同的窗口中再重试五次。 只要六次尝试之一成功,规则就不会跳过窗口并错过警报。

六次尝试中的一次失败表示警报触发延迟。 以下查询计算确切延迟:

_SentinelHealth()
| where SentinelResourceType == @"Analytics Rule" 
| where SentinelResourceKind == "Scheduled"
| extend startTime = todatetime(ExtendedProperties["QueryStartTimeUTC"]), executionStart = todatetime(ExtendedProperties["executionStart"])
| extend delay = datetime_diff('minute', startTime, executionStart)

若要查找完全失败 (即) 跳过的窗口,请使用以下查询:

_SentinelHealth()| where SentinelResourceType == @"Analytics Rule" 
| where SentinelResourceKind == "Scheduled"
| where Status != "Success"
| extend startTime = tostring(ExtendedProperties["QueryStartTimeUTC"])
| summarize failuresByStartTime = count() by startTime, SentinelResourceId
| where failuresByStartTime == 6
| summarize count() by SentinelResourceId

此查询查找计划分析规则运行,其中 6 次重试均未成功。 可以通过查看规则窗口的开始时间来识别重试,因为重试始终查看原始开始时间。 此查询提供每个分析规则的跳过窗口量。 我们预计跳过的窗口很少出现。 如果发现具有跳过窗口的分析规则,请使用查询了解这些特定规则的失败原因以及故障原因和缓解措施表来修复这些规则。

NRT 规则

NRT 规则的重试机制的行为与计划规则不同。 如果规则无法运行,系统还会在一分钟后) 的下一次运行 (考虑失败的窗口。 此行为在一小时) (最多会持续 60 次故障。

由于特定运行的一次失败仅反映一分钟的延迟,因此不要查看单个失败。 请改用以下查询来监视每个分析规则的延迟:

_SentinelHealth()
| where SentinelResourceKind == "NRT"
| extend startTime = todatetime(ExtendedProperties["QueryStartTimeUTC"]), endTime = todatetime(ExtendedProperties["QueryEndTimeUTC"]), alertsCreated = toint(ExtendedProperties["AlertsGeneratedAmount"])
| where alertsCreated == 0 
| extend ruleDelay = datetime_diff('minute', endTime, startTime)
| project TimeGenerated, ruleDelay, SentinelResourceId
| render timechart

还可以定义一个分析规则来触发重大延迟 (警报,例如,如果 NRT 规则) 延迟超过 10 分钟。

状态、错误和建议的步骤

对于 计划分析规则运行NRT 分析规则运行,你可能会看到以下任何状态和说明:

  • 成功:已成功执行规则,生成 <n> 警报。

  • 成功:规则已成功执行,但未达到生成警报所需的阈值 (<n>) 。

  • 失败:这些说明介绍了规则失败以及可对其执行的操作。

    说明 修复
    运行查询时发生内部服务器错误。
    查询执行超时。
    找不到查询中引用的表。 验证相关数据源是否已连接。
    运行查询时发生语义错误。 尝试通过编辑并保存分析规则来重置分析规则, (而不更改任何设置) 。
    查询调用的函数使用保留字命名。 删除或重命名函数。
    运行查询时发生语法错误。 尝试通过编辑并保存分析规则来重置分析规则, (而不更改任何设置) 。
    工作区不存在。
    此查询使用过多的系统资源,并且无法运行。 查看和优化分析规则。 请参阅我们的Kusto 查询语言概述最佳做法文档。
    找不到查询调用的函数。 验证工作区中是否存在查询调用的所有函数。
    找不到查询中使用的工作区。 验证查询中的所有工作区是否存在。
    你没有运行此查询的权限。 尝试通过编辑并保存分析规则来重置分析规则, (而不更改任何设置) 。
    你没有对查询中的一个或多个资源的访问权限。
    查询引用了未找到的存储路径。
    该查询被拒绝访问存储路径。
    此工作区中定义了多个具有相同名称的函数。 删除或重命名冗余函数,并通过编辑和保存规则来重置该规则。
    此查询未返回任何结果。
    不允许在此查询中使用多个结果集。
    查询结果包含的每行字段数不一致。
    由于数据引入时间过长,规则的运行延迟。
    由于临时问题,规则的运行延迟。
    由于临时问题,警报未扩充。
    由于实体映射问题,警报未扩充。
    < 数量> 由于警报大小限制为 32 KB,实体在警报 <名称> 中被删除。
    < 数量> 由于实体映射问题,实体在警报 <名称> 中已删除。
    查询生成的<事件数>超出了具有警报每行事件分组配置的规则类型>规则允许<的最大<限制>结果数。 为第一个 <limit-1> 事件生成了每行警报,并生成了额外的聚合警报来考虑所有事件。
    - <number> = 查询返回的事件数
    - <限制> = 当前计划规则有 150 个警报,NRT 规则为 30 个
    - <规则类型> = 计划或 NRT

使用审核和运行状况监视工作簿

  1. 若要使工作簿在工作区中可用,请从Microsoft Sentinel内容中心安装工作簿解决方案:

    1. 在Microsoft Sentinel门户中,从“内容管理”菜单中选择“内容中心 (预览) ”。

    2. 内容中心,在搜索栏中输入运行状况,然后在结果的“独立”下的“工作簿解决方案”中选择“分析运行状况 & 审核”。

      从内容中心选择分析运行状况工作簿的屏幕截图。

    3. 从详细信息窗格中选择“ 安装 ”,然后选择在其位置显示的“ 保存 ”。

  2. 当解决方案指示已安装它时,请从“威胁管理”菜单中选择“工作簿”。

    指示从内容中心安装分析运行状况工作簿解决方案的屏幕截图。

  3. 工作簿 库中,选择“ 模板 ”选项卡,在搜索栏中输入 运行状况 ,然后从结果中选择“ 分析运行状况 & 审核 ”。

    从模板库选择分析运行状况工作簿的屏幕截图。

  4. 在详细信息窗格中选择“ 保存 ”,创建工作簿的可编辑和可用副本。 创建副本后,选择“ 查看保存的工作簿”。

  5. 进入工作簿后,首先选择要查看的 订阅工作区 , (它们可能已选择) ,然后定义 TimeRange 以根据需要筛选数据。 使用 “显示帮助” 切换可显示工作簿的就地说明。

    分析规则运行状况工作簿概述选项卡的屏幕截图。

此工作簿有三个选项卡式分区:

“概述”选项卡

概述 ”选项卡显示运行状况和审核摘要:

  • 所选工作区中分析规则运行状态的运行状况摘要:运行数、成功和失败以及失败事件详细信息。
  • 审核所选工作区中分析规则的活动摘要:随时间推移的活动数、按类型列出的活动数以及按规则划分的不同类型的活动数。

“运行状况”选项卡

使用“ 运行状况 ”选项卡可以浏览特定的运行状况事件。

分析运行状况工作簿中“运行状况”选项卡选择的屏幕截图。

  • 状态 (成功或失败筛选整个页面数据,) 和 规则类型 (计划或 NRT) 。
  • 根据所选时间段内的状态筛选器) ,查看成功和失败规则运行 (趋势。 你可以对趋势图进行“时间画笔”,以查看原始时间范围的子集。 分析运行状况工作簿中随时间推移的分析规则运行的屏幕截图。
  • 原因筛选页面的其余部分。
  • 查看所有分析规则的运行总数,按饼图中的状态按比例显示。
  • 下面是一个表,其中显示了运行的唯一分析规则数,按规则类型和状态细分。
    • 选择状态以筛选该状态的剩余图表。
    • 通过选择“清除选择”图标来清除筛选器, (它看起来像图表右上角的“撤消”图标) 。 在分析运行状况工作簿中按状态和键入运行的规则数的屏幕截图。
  • 查看每个状态,以及该状态的可能原因数。 (仅显示所选时间范围内运行中表示的原因。)
    • 选择状态以筛选该状态的剩余图表。
    • 通过选择“清除选择”图标来清除筛选器, (它看起来像图表右上角的“撤消”图标) 。 分析运行状况工作簿中按状态显示的唯一原因数的屏幕截图。
  • 接下来,查看这些原因的列表,以及总规则运行数和运行的唯一规则数。
    • 选择一个原因,根据该原因筛选以下图表。
    • 通过选择“清除选择”图标来清除筛选器, (它看起来像图表右上角的“撤消”图标) 。 分析运行状况工作簿中按唯一原因运行的规则的屏幕截图。
  • 之后是运行的唯一分析规则的列表,其成功和失败的最新结果和趋势线 (取决于选择用于筛选列表) 的状态。
    • 选择要向下钻取的规则,并显示一个新表,其中包含该规则的所有运行 (在所选时间范围内) 。
    • 通过选择“清除选择”图标来清除该表, (它看起来像图表右上角的“撤消”图标) 。 分析运行状况工作簿中具有状态和趋势线的唯一规则运行列表的屏幕截图。
  • 如果选择列表中的规则,将显示一个新表,其中包含所选规则的运行状况详细信息。 分析运行状况工作簿中所选分析规则运行列表的屏幕截图。

“审核”选项卡

审核 ”选项卡允许向下钻取到特定的审核事件。

分析运行状况工作簿中“审核”选项卡选择的屏幕截图。

  • 审核规则类型 (计划/Fusion) 筛选整个页面数据。
  • 查看所选时间段内分析规则的审核活动趋势。 你可以对趋势图进行“时间画笔”,以查看原始时间范围的子集。 分析运行状况工作簿中趋势审核活动的屏幕截图。
  • 查看按活动和规则类型细分的已审核事件数。
    • 选择活动以筛选该活动的以下图表。
    • 通过选择“清除选择”图标来清除筛选器, (它看起来像图表右上角的“撤消”图标) 。 按活动并在分析运行状况工作簿中键入的审核事件计数的屏幕截图。
  • 规则名称查看审核的事件数。
    • 选择规则名称以筛选该规则的下表,并向下钻取并显示一个新表,其中包含所选时间范围内 (该规则的所有活动) 。 (请参阅以下屏幕截图之后。)
    • 通过选择“清除选择”图标来清除筛选器, (它看起来像图表右上角的“撤消”图标) 。 分析运行状况工作簿中按规则名称和调用方审核的事件的屏幕截图。
  • 查看 调用方 (执行活动) 的标识的已审核事件数。
  • 如果在上图中选择了一个规则名称,则会显示另一个表,其中显示了该规则的已审核 活动 。 选择在 ExtendedProperties 列中显示为链接的值,打开显示对规则所做的更改的侧面板。 分析运行状况工作簿中所选规则的审核活动的屏幕截图。

后续步骤