你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 ArcSight 检测规则迁移到 Microsoft Sentinel
本文介绍如何识别、比较 ArcSight 检测规则并将其迁移到 Microsoft Sentinel 分析规则。
识别和迁移规则
Microsoft Sentinel 使用机器学习分析来创建高保真的且可处理的事件,某些现有检测在 Microsoft Sentinel 中可能是多余的。 因此,请不要盲目地迁移所有检测和分析规则。 在识别现有检测规则时请查看这些注意事项。
- 确保选择能够证明规则迁移合理的用例,同时考虑业务优先级和效率。
- 确认你是否了解 Microsoft Sentinel 规则类型。
- 确认你是否理解规则术语。
- 查看过去 6-12 个月未触发任何警报的任何规则,并确定这些规则是否仍然相关。
- 消除你在日常中会忽略的低级别威胁或警报。
- 使用现有功能,并检查 Microsoft Sentinel 的内置分析规则是否可以解决你当前用例的需求。 由于 Microsoft Sentinel 使用机器学习分析来生成高保真且可操作的事件,因此可能不再需要某些现有检测。
- 确认连接的数据源并查看数据连接方法。 重新访问数据收集对话,确保打算检测的用例的数据深度和广度足够。
- 浏览社区资源(例如 SOC Prime Threat Detection Marketplace),以检查你的规则是否可用。
- 考虑 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 中的实体,使 SOC 工程师能够将实体定义为在调查期间要跟踪的证据的一部分。 实体映射还可让 SOC 分析师利用直观的调查图来帮助减少时间和工作量。
- 使用 UEBA 数据调查事件,例如,使用证据来显示与事件预览窗格中特定事件关联的事件、警报和任何书签。
- Kusto 查询语言 (KQL),可用于将只读请求发送到 Log Analytics 数据库,以处理数据并返回结果。 还可以在 Microsoft Defender for Endpoint 和 Application Insights 等其他 Microsoft 服务中使用 KQL。
比较规则术语
下表阐明了 Microsoft Sentinel 与 ArcSight 中的规则在概念上的差别。
ArcSight | Microsoft Sentinel | |
---|---|---|
规则类型 | • 筛选规则 • 联接规则 • 活动列表规则 • 等等 |
• 计划的查询 • 融合 • Microsoft 安全 • 机器学习 (ML) 行为分析 |
条件 | 在规则条件中定义 | 在 KQL 中定义 |
触发器条件 | • 在操作中定义 • 在聚合中定义(用于事件聚合) |
阈值:查询结果数 |
操作 | • 设置事件字段 • 发送通知 • 创建新案例 • 添加到活动列表 • 等等 |
• 创建警报或事件 • 与逻辑应用集成 |
映射和比较规则示例
在各种方案中使用这些示例来比较 ArcSight 和 Microsoft Sentinel 中的规则并相互映射这些规则。
规则 | 说明 | 示例检测规则 (ArcSight) | 示例 KQL 查询 | 资源 |
---|---|---|---|---|
筛选器 (AND ) |
包含 AND 条件的示例规则。 该事件必须与所有条件匹配。 |
筛选器 (AND) 示例 | 筛选器 (AND) 示例 | 字符串筛选器: • 字符串运算符 数值筛选器: • 数值运算符 日期时间筛选器: • ago • Datetime • between • now 分析: • parse • extract • parse_json • parse_csv • parse_path • parse_url |
筛选器 (OR ) |
包含 OR 条件的示例规则。 该事件可以匹配任何条件。 |
筛选器 (OR) 示例 | 筛选器 (OR) 示例 | • 字符串运算符 • in |
嵌套的筛选器 | 包含嵌套筛选条件的示例规则。 该规则包括 MatchesFilter 语句,其中还包括筛选条件。 |
嵌套筛选器示例 | 嵌套筛选器示例 | • 示例 KQL 函数 • 示例参数函数 • join • where |
活动列表(查找) | 使用 InActiveList 语句的示例查找规则。 |
活动列表(查找)示例 | 活动列表(查找)示例 | • 播放列表等效于活动列表功能。 详细了解播放列表。 • 实现查找的其他方式 |
关联(匹配) | 使用 Matching Event 语句针对一组基本事件定义条件的示例规则。 |
关联(匹配)示例 | 关联(匹配)示例 | 联接运算符: • join • join with time window • shuffle • Broadcast • Union 定义语句: • let 聚合: • make_set • make_list • make_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
语句开始对筛选器进行排序。
筛选器 (OR) 示例: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 函数:
使用
ExcludeValidUsers
别名将以下查询另存为 KQL 函数。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:datatime, 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
此规则假设在 Microsoft Sentinel 中存在一个带有帐户字段的 Cyber-Ark 异常帐户监视列表。
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
函数的左侧。 - 如果表的左侧相对较小(最多 100K 条记录),请添加
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 分钟内匹配 3 次。
聚合示例:KQL
SecurityEvent
| summarize Count = count() by SubjectUserName,
SubjectDomainName
| where Count >3
后续步骤
在本文中,你已了解如何将迁移规则从 ArcSight 映射到 Microsoft Sentinel。