你当前正在访问 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 主要威胁检测市场等社区资源,检查规则是否可用。
  • 考虑联机查询转换器(如 Uncoder.io)是否适用于你的规则。
  • 如果规则不可用或无法转换,则需要使用 KQL 查询手动创建规则。 查看 规则映射 以创建新查询。

详细了解 迁移检测规则的最佳做法

将分析规则迁移到Microsoft Sentinel

  1. 验证是否为要迁移的每个规则都安装了测试系统。

    1. 为迁移的规则准备验证过程,包括完整的测试方案和脚本。

    2. 确保团队具有有用的资源 来测试迁移的规则。

    3. 确认已连接任何必需的数据源, 并查看数据连接方法。

  2. 验证检测是否可用作Microsoft Sentinel中的内置模板:

    • 如果内置规则已足够,请使用内置规则模板为自己的工作区创建规则。

      在Microsoft Sentinel中,转到“配置>分析>规则模板”选项卡,创建和更新每个相关的分析规则。

      有关详细信息,请参阅 从模板创建计划分析规则

    • 如果有Microsoft Sentinel内置规则未涵盖的检测,请尝试使用联机查询转换器(如 Uncoder.io)将查询转换为 KQL。

      确定触发条件和规则操作,然后构造并查看 KQL 查询。

    • 如果内置规则和联机规则转换器都不够,则需要手动创建规则。 在这种情况下,请使用以下步骤开始创建规则:

      1. 确定要在规则中使用的数据源。 你需要在 Microsoft Sentinel 中的数据源和数据表之间创建映射表,以标识要查询的表。

      2. 标识数据中要在规则中使用的任何属性、字段或实体

      3. 确定规则条件和逻辑。 在此阶段,你可能希望使用规则模板作为示例来构造 KQL 查询。

        考虑筛选器、相关规则、活动列表、引用集、监视列表、检测异常、聚合等。 可以使用旧版 SIEM 提供的引用 来了解如何最好地映射查询语法

      4. 确定触发条件和规则操作,然后构造并查看 KQL 查询。 查看查询时,请考虑 KQL 优化指南资源。

  3. 使用每个相关用例测试规则。 如果它未提供预期结果,则可能需要查看 KQL 并再次对其进行测试。

  4. 如果满意,可以考虑迁移规则。 根据需要为规则操作创建 playbook。 有关详细信息,请参阅 Microsoft Sentinel 中使用 playbook 自动执行威胁响应

详细了解分析规则:

比较规则术语

此表有助于阐明与 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 函数:

  1. 将以下查询保存为具有 别名的 ExcludeValidUsers KQL 函数。

        SecurityEvent
        | where EventID == 4728
        | where isnotempty(SubjectDomainName)
        | where SubjectUserName =~ "AutoMatedService"
        | project SubjectUserName
    
  2. 使用以下查询筛选 ExcludeValidUsers 别名。

        SecurityEvent    
        | where EventID == 4728
        | where isnotempty(SubjectDomainName) or 
        isnotempty(TargetDomainName)
        | where SubjectUserName !in (ExcludeValidUsers)
    

作为第三个选项,请使用参数函数:

  1. 使用 创建参数函数 ExcludeValidUsers 作为名称和别名。

  2. 定义函数的参数。 例如:

        Tbl: (TimeGenerated:datetime, Computer:string, 
        EventID:string, SubjectDomainName:string, 
        TargetDomainName:string, SubjectUserName:string)
    
  3. 函数 parameter 具有以下查询:

        Tbl
        | where SubjectUserName !~ "AutoMatedService"
    
  4. 运行以下查询以调用参数函数:

        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。