你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何识别、比较 ArcSight 检测规则并将其迁移到Microsoft Sentinel分析规则。
标识和迁移规则
Microsoft Sentinel使用机器学习分析来创建高保真且可操作的事件,并且某些现有检测在Microsoft Sentinel中可能是冗余的。 因此,不要盲目迁移所有检测和分析规则。 在识别现有检测规则时,请查看这些注意事项。
- 考虑到业务优先级和效率,请确保选择符合规则迁移的用例。
- 检查是否了解Microsoft Sentinel规则类型。
- 检查是否了解 规则术语。
- 查看过去 6-12 个月未触发任何警报的任何规则,并确定它们是否仍然相关。
- 消除经常忽略的低级别威胁或警报。
- 使用现有功能,并检查Microsoft Sentinel的内置分析规则是否可以解决当前用例。 由于Microsoft Sentinel使用机器学习分析来生成高保真和可操作的事件,因此可能不再需要某些现有检测。
- 确认连接的数据源并查看数据连接方法。 重新访问数据收集对话,以确保数据深度和广度跨计划检测的用例。
- 浏览 SOC 主要威胁检测市场等社区资源,检查规则是否可用。
- 考虑联机查询转换器(如 Uncoder.io)是否适用于你的规则。
- 如果规则不可用或无法转换,则需要使用 KQL 查询手动创建规则。 查看 规则映射 以创建新查询。
详细了解 迁移检测规则的最佳做法。
将分析规则迁移到Microsoft Sentinel:
验证是否为要迁移的每个规则都安装了测试系统。
为迁移的规则准备验证过程,包括完整的测试方案和脚本。
确保团队具有有用的资源 来测试迁移的规则。
确认已连接任何必需的数据源, 并查看数据连接方法。
验证检测是否可用作Microsoft Sentinel中的内置模板:
如果内置规则已足够,请使用内置规则模板为自己的工作区创建规则。
在Microsoft Sentinel中,转到“配置>分析>规则模板”选项卡,创建和更新每个相关的分析规则。
有关详细信息,请参阅 从模板创建计划分析规则。
如果有Microsoft Sentinel内置规则未涵盖的检测,请尝试使用联机查询转换器(如 Uncoder.io)将查询转换为 KQL。
确定触发条件和规则操作,然后构造并查看 KQL 查询。
如果内置规则和联机规则转换器都不够,则需要手动创建规则。 在这种情况下,请使用以下步骤开始创建规则:
确定要在规则中使用的数据源。 你需要在 Microsoft Sentinel 中的数据源和数据表之间创建映射表,以标识要查询的表。
标识数据中要在规则中使用的任何属性、字段或实体。
确定规则条件和逻辑。 在此阶段,你可能希望使用规则模板作为示例来构造 KQL 查询。
考虑筛选器、相关规则、活动列表、引用集、监视列表、检测异常、聚合等。 可以使用旧版 SIEM 提供的引用 来了解如何最好地映射查询语法。
确定触发条件和规则操作,然后构造并查看 KQL 查询。 查看查询时,请考虑 KQL 优化指南资源。
使用每个相关用例测试规则。 如果它未提供预期结果,则可能需要查看 KQL 并再次对其进行测试。
如果满意,可以考虑迁移规则。 根据需要为规则操作创建 playbook。 有关详细信息,请参阅 Microsoft Sentinel 中使用 playbook 自动执行威胁响应。
详细了解分析规则:
- Microsoft Sentinel中的计划分析规则。 通过对给定时间范围内发生的警报进行分组,使用 警报分组 来减少警报疲劳。
- 将数据字段映射到 Microsoft Sentinel 中的实体,使 SOC 工程师能够将实体定义为在调查期间要跟踪的证据的一部分。 实体映射还使 SOC 分析师能够利用直观的 调查图 ,这有助于节省时间和工作量。
- 使用 UEBA 数据调查事件,作为如何使用证据在事件预览窗格中显示事件、警报以及与特定事件关联的任何书签的示例。
- Kusto 查询语言 (KQL) ,可用于向 Log Analytics 数据库发送只读请求,以处理数据和返回结果。 KQL 还用于其他Microsoft服务,例如 Microsoft Defender for Endpoint 和 Application Insights。
比较规则术语
此表有助于阐明与 ArcSight 相比,Microsoft Sentinel中的规则概念。
| ArcSight | Microsoft Sentinel | |
|---|---|---|
| 规则类型 | • 筛选器规则 • 联接规则 • 活动列表规则 • 更多 |
• 计划查询 •融合 • Microsoft安全性 • 机器学习 (ML) 行为分析 |
| 条件 | 在规则条件中定义 | 在 KQL 中定义 |
| 触发器条件 | • 在操作中定义 • 在聚合 (中定义事件聚合) |
阈值:查询结果数 |
| 操作 | • 设置事件字段 • 发送通知 • 创建新案例 • 添加到活动列表 • 更多 |
• 创建警报或事件 • 与逻辑应用集成 |
映射和比较规则示例
使用这些示例来比较和映射 ArcSight 中的规则,以在各种方案中Microsoft Sentinel。
| Rule | 说明 | ArcSight) 示例检测规则 ( | 示例 KQL 查询 | 资源 |
|---|---|---|---|---|
筛选 (AND) |
包含 AND 条件的示例规则。 事件必须匹配所有条件。 |
筛选 (AND) 示例 | 筛选 (AND) 示例 | 字符串筛选器: • 字符串运算符 数值筛选器: • 数值运算符 日期时间筛选器: • 以前 • Datetime • 介于 • 现在 解析: • 分析 • 提取 • parse_json • parse_csv • parse_path • parse_url |
筛选 (OR) |
包含 OR 条件的示例规则。 事件可以匹配任何条件。 |
筛选器 (OR) 示例 | 筛选器 (OR) 示例 | • 字符串运算符 • in |
| 嵌套筛选器 | 具有嵌套筛选条件的示例规则。 规则包括 MatchesFilter 语句,其中还包括筛选条件。 |
嵌套筛选器示例 | 嵌套筛选器示例 | • 示例 KQL 函数 • 示例参数函数 • join • 其中 |
| 活动列表 (查找) | 使用 InActiveList 语句的示例查找规则。 |
活动列表 (查找) 示例 | 活动列表 (查找) 示例 | • 监视列表等效于活动列表功能。 详细了解 监视列表。 • 实现查找的其他方法 |
| 关联 (匹配) | 一个示例规则,该规则使用 Matching Event 语句针对一组基事件定义条件。 |
关联 (匹配) 示例 | 关联 (匹配) 示例 | join 运算符: • join • 加入时间窗口 • 随机 • 广播 • 联合 define 语句: • 让 聚合: • make_set • make_list • make_bag • bag_pack |
| 关联 (时间窗口) | 一个示例规则,该规则使用 语句针对一组基事件 Matching Event 定义条件,并使用 Wait time 筛选条件。 |
相关 (时间窗口) 示例 | 相关 (时间窗口) 示例 | • join • Microsoft Sentinel规则和联接语句 |
筛选 (AND) 示例:ArcSight
下面是 ArcSight 中具有 AND 条件的示例筛选器规则。
筛选器 (AND) 示例:KQL
下面是在 KQL 中使用条件的筛选器规则 AND 。
SecurityEvent
| where EventID == 4728
| where SubjectUserName =~ "AutoMatedService"
| where isnotempty(SubjectDomainName)
此规则假定Azure监视代理 (AMA) 收集Windows 安全中心事件。 因此,该规则使用 Microsoft Sentinel SecurityEvent 表。
请考虑以下最佳做法:
- 若要优化查询,请尽可能避免不区分大小写的运算符:
=~。 - 如果值不区分大小写,请使用
==。 - 从 语句开始
where对筛选器进行排序,该语句筛选出最多的数据。
筛选 (或) 示例:ArcSight
下面是 ArcSight 中具有 OR 条件的示例筛选器规则。
筛选器 (OR) 示例:KQL
下面是使用 KQL 中的条件编写筛选器规则 OR 的几种方法。
作为第一个选项,请使用 in 语句:
SecurityEvent
| where SubjectUserName in
("Adm1","ServiceAccount1","AutomationServices")
作为第二个选项,请使用 or 语句:
SecurityEvent
| where SubjectUserName == "Adm1" or
SubjectUserName == "ServiceAccount1" or
SubjectUserName == "AutomationServices"
虽然这两个选项的性能相同,但建议使用第一个选项,该选项更易于阅读。
嵌套筛选器示例:ArcSight
下面是 ArcSight 中的嵌套筛选器规则示例。
下面是筛选器的规则 /All Filters/Soc Filters/Exclude Valid Users 。
嵌套筛选器示例:KQL
下面是使用 KQL 中的条件编写筛选器规则 OR 的几种方法。
作为第一个选项,请对 where 语句使用直接筛选器:
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName) or
isnotempty(TargetDomainName)
| where SubjectUserName !~ "AutoMatedService"
第二个选项是使用 KQL 函数:
将以下查询保存为具有 别名的
ExcludeValidUsersKQL 函数。SecurityEvent | where EventID == 4728 | where isnotempty(SubjectDomainName) | where SubjectUserName =~ "AutoMatedService" | project SubjectUserName使用以下查询筛选
ExcludeValidUsers别名。SecurityEvent | where EventID == 4728 | where isnotempty(SubjectDomainName) or isnotempty(TargetDomainName) | where SubjectUserName !in (ExcludeValidUsers)
作为第三个选项,请使用参数函数:
使用 创建参数函数
ExcludeValidUsers作为名称和别名。定义函数的参数。 例如:
Tbl: (TimeGenerated:datetime, Computer:string, EventID:string, SubjectDomainName:string, TargetDomainName:string, SubjectUserName:string)函数
parameter具有以下查询:Tbl | where SubjectUserName !~ "AutoMatedService"运行以下查询以调用参数函数:
let Events = ( SecurityEvent | where EventID == 4728 ); ExcludeValidUsers(Events)
作为第四个选项,请使用 join 函数:
let events = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName)
or isnotempty(TargetDomainName)
);
let ExcludeValidUsers = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName)
| where SubjectUserName =~ "AutoMatedService"
);
events
| join kind=leftanti ExcludeValidUsers on
$left.SubjectUserName == $right.SubjectUserName
考虑:
- 建议将直接筛选器与语句一起使用
where, (第一个选项) ,因为它简单。 为了优化性能,请避免使用join(第四个选项) 。 - 若要优化查询,
=~请尽可能避免使用 不区分大小写的 运算符!~。==如果值不区分大小写,请使用 和!=运算符。
活动列表 (查找) 示例:ArcSight
下面是 ArcSight 中 (查找) 规则的活动列表。
活动列表 (查找) 示例:KQL
此规则假定 Cyber-Ark 异常帐户监视列表存在于具有“帐户”字段的Microsoft Sentinel中。
let Activelist=(
_GetWatchlist('Cyber-Ark Exception Accounts')
| project Account );
CommonSecurityLog
| where DestinationUserName in (Activelist)
| where DeviceVendor == "Cyber-Ark"
| where DeviceAction == "Get File Request"
| where DeviceCustomNumber1 != ""
| project DeviceAction, DestinationUserName,
TimeGenerated,SourceHostName,
SourceUserName, DeviceEventClassID
从筛选出最多数据的语句开始 where 对筛选器进行排序。
关联 (匹配) 示例:ArcSight
下面是一个示例 ArcSight 规则,该规则使用 Matching Event 语句针对一组基本事件定义条件。
关联 (匹配) 示例:KQL
let event1 =(
SecurityEvent
| where EventID == 4728
);
let event2 =(
SecurityEvent
| where EventID == 4729
);
event1
| join kind=inner event2
on $left.TargetUserName==$right.TargetUserName
最佳实践:
- 若要优化查询,请确保较小的表位于函数的
join左侧。 - 如果表的左侧相对较小, (最多) 100 K 条记录,请添加
hint.strategy=broadcast以提升性能。
关联 (时间窗口) 示例:ArcSight
下面是一个 ArcSight 规则示例,该规则使用 Matching Event 语句定义针对一组基事件的条件,并使用 Wait time 筛选条件。
相关 (时间窗口) 示例:KQL
let waittime = 10m;
let lookback = 1d;
let event1 = (
SecurityEvent
| where TimeGenerated > ago(waittime+lookback)
| where EventID == 4728
| project event1_time = TimeGenerated,
event1_ID = EventID, event1_Activity= Activity,
event1_Host = Computer, TargetUserName,
event1_UPN=UserPrincipalName,
AccountUsedToAdd = SubjectUserName
);
let event2 = (
SecurityEvent
| where TimeGenerated > ago(waittime)
| where EventID == 4729
| project event2_time = TimeGenerated,
event2_ID = EventID, event2_Activity= Activity,
event2_Host= Computer, TargetUserName,
event2_UPN=UserPrincipalName,
AccountUsedToRemove = SubjectUserName
);
event1
| join kind=inner event2 on TargetUserName
| where event2_time - event1_time < lookback
| where tolong(event2_time - event1_time ) >=0
| project delta_time = event2_time - event1_time,
event1_time, event2_time,
event1_ID,event2_ID,event1_Activity,
event2_Activity, TargetUserName, AccountUsedToAdd,
AccountUsedToRemove,event1_Host,event2_Host,
event1_UPN,event2_UPN
聚合示例:ArcSight
下面是包含聚合设置的示例 ArcSight 规则:10 分钟内有三个匹配项。
聚合示例:KQL
SecurityEvent
| summarize Count = count() by SubjectUserName,
SubjectDomainName
| where Count >3
后续步骤
本文介绍了如何将迁移规则从 ArcSight 映射到 Microsoft Sentinel。