重要
注意:根据 世纪互联发布的公告,所有 Microsoft Sentinel 功能将于 2026 年 8 月 18 日 在 Azure 中国区域正式停用。
事件任务可确保所有 SOC 人员都能全面和统一地处理事件。 任务列表通常根据高级分析师或 SOC 经理的决定进行定义,并使用自动化规则或 playbook 付诸实践。
分析师可以在事件详细信息页上查看需要为特定事件执行的任务列表,并随时将它们标记为完成。 分析师还可以在现场直接从事件中手动创建自己的任务。
本文介绍了作为 SOC 经理该如何审核 Microsoft Sentinel 事件任务的历史记录,并跟踪这些任务在整个生命周期中所做的更改,以衡量任务分配的成效及其对 SOC 的效率和正常运行的贡献。
SecurityIncident 表中任务数组的结构
SecurityIncident 表是一个审核表,它存储的不是事件本身,而是对事件生存期的记录:事件的创建和对事件所做的任何更改。 每当创建事件或更改事件时,都会在此表中生成一条记录,其中显示该事件的当前状态。
在 SecurityIncident 表的架构中添加任务详细字段,可以让你对任务进行更深入的审计。
添加到“任务”字段的详细信息由采用以下结构的键值对组成:
| 密钥 | 值说明 |
|---|---|
| createdBy | 任务创建者的标识: - email:身份的电子邮件地址 - name:标识的名称 - objectId:标识的 GUID - userPrincipalName:标识的 UPN |
| createdTimeUtc | 任务创建时间 (UTC)。 |
| lastCompletedTimeUtc | 任务完成的时间,标记为UTC时间。 |
| lastModifiedBy | 上次修改任务的标识: - email:身份的电子邮件地址 - name:标识的名称 - objectId:标识的 GUID - userPrincipalName:标识的 UPN |
| lastModifiedTimeUtc | 上次修改任务的时间 (UTC)。 |
| 状态 | 任务的当前状态:新建、已完成、已删除。 |
| taskId | 任务的资源 ID。 |
| 标题 | 创建者为任务提供的易记名称。 |
查看 SecurityIncident 表中的事件任务
除了事件任务工作簿外,还可以通过查询日志中的 SecurityIncident 表来审核任务活动。 本节展示了如何查询表格,并阅读和理解结果以获取任务活动信息。
在“日志”页中,在查询窗口中输入以下查询并运行。 此查询将返回分配了任务的所有事件。
SecurityIncident | where array_length( Tasks) > 0可以将任意数量的语句添加到查询中,以筛选结果和缩小结果范围。 为了演示如何查看和理解结果,我们将添加语句来筛选结果,以便只看到单个事件的任务,我们还将添加一个
project语句,以便只看到那些对我们的目标有用的字段,以免繁杂混乱。SecurityIncident | where array_length( Tasks) > 0 | where IncidentNumber == "405211" | sort by LastModifiedTime desc | project IncidentName, Title, LastModifiedTime, Tasks让我们看一下此事件的最新记录,找到与之关联的任务列表。
查看添加到列表的任务
执行以下步骤将任务添加到事件中,并观察 安全事件 记录的变化。
我们先向事件添加一个任务,然后返回此处,再次运行查询,查看结果中的更改。
在“事件”页上,在搜索栏中输入事件 ID 号。
打开事件详细信息页,然后从工具栏中选择“任务”。
添加新任务,将其命名为“此任务是测试任务!”,然后选择“保存”。 下面显示的是应在最后完成的最终任务:
现在我们回到 日志 页面,再次运行 安全事件 查询。
在结果中,你将看到表中有一条针对此相同事件的新记录(记下时间戳)。 展开记录,你将看到,虽然我们之前看到的记录在其 Tasks 数组中有两个任务,但新记录有三个任务。 最新的任务是我们刚刚添加的,你可以从它的标题上看出来。
查看任务的状态更改
现在,如果我们返回到标题为“此任务是测试任务!” 的事件详细信息页中将其标记为已完成,然后返回到 日志 并再次运行查询,我们将看到同一事件的另一个新记录,这次显示任务的新状态为 “已完成”。
查看任务的删除
让我们返回到事件详细信息页中的任务列表,并删除标题为“此任务是测试任务!”的任务。
当我们回到 Logs 并重新运行事件任务查询时,会看到另一个新记录,这次是任务的状态——标题为“此任务为测试任务!”——将被 删除。
但是,一旦任务在数组中出现一次(状态为“已删除”),它将不再出现在 SecurityIncident 表中该事件的新记录的 Tasks 数组中。 现有的早期事件记录将继续保存该任务曾经存在的证据。
查看属于已关闭事件的活动任务
通过以下查询,可以了解事件是否已关闭,但并非其所有分配的任务都已完成。 此知识可帮助你验证调查中的剩下的任何未了结事项是否都已有结论 -- 所有相关方都已收到通知,输入了所有评论,所有响应都已得到验证,等等。 查询使用 arg_max 聚合函数,仅返回每个事件和任务的最新记录,因此结果反映的是最新的状态。
运行以下查询以获取每个事件的最新记录,筛选已关闭事件,并返回尚未完成或删除的任务:
SecurityIncident
| summarize arg_max(TimeGenerated, *) by IncidentNumber
| where Status == 'Closed'
| mv-expand Tasks
| evaluate bag_unpack(Tasks)
| summarize arg_max(lastModifiedTimeUtc, *) by taskId
| where status !in ('Completed', 'Deleted')
| project TaskTitle = ['title'], TaskStatus = ['status'], createdTimeUtc, lastModifiedTimeUtc = column_ifexists("lastModifiedTimeUtc", datetime(null)), TaskCreator = ['createdBy'].name, lastModifiedBy, IncidentNumber, IncidentOwner = Owner.userPrincipalName
| sort by lastModifiedTimeUtc desc
关于本文示例查询中使用的Kusto运算符和函数的更多信息,请参见:
有关 KQL 的更多信息,请参阅 Kusto 查询语言 (KQL) 概述。
其他资源:
后续步骤
- 详细了解事件任务。
- 了解如何调查事件。
- 了解如何使用 自动化规则 或 playbook 自动将任务添加到事件组, 以及何时使用自动化规则或 playbook 添加任务。
- 详细了解 自动化规则 以及如何 创建和管理自动化规则。
- 详细了解剧本以及如何创建用于应对威胁的剧本。