复合检测概览

支持平台:

本文档介绍了复合检测,以及如何通过关联多个规则的输出,来增强威胁检测工作流。

复合检测由规则生成,这些规则使用其他规则的检测结果作为输入,并结合事件、指标或实体风险信号。然后,这些规则会与事件、指标或实体风险信号相结合,以检测单个规则可能会遗漏的复杂多阶段威胁。

复合检测有助于通过定义的规则互动和触发器分析事件。通过关联来自不同来源和攻击阶段的数据,可以提高准确率、减少假正例,并全面了解安全威胁。

以下概念定义了复合规则的构建块,并阐明了它们在检测工作流中的运作方式:

  • 复合规则:使用检测结果或提醒(或两者)作为输入。(可选)使用事件、指标和实体图中的各种情境数据(例如普及率数据、威胁情报或实体风险评分)来丰富这些规则。这些规则必须始终包含匹配部分,并且可以引用输入规则中的元字段、match 变量和 outcome 变量。

  • 检测结果:当规则的条件得到满足时生成的输出。

  • 仅检测规则:仅使用检测结果或提醒 作为输入的复合规则。

何时使用复合检测

复合检测有助于实现以下目标:

  • 关联两个或多个规则的结果(例如,将“恶意软件已下载”检测结果与来自同一主机的后续 C2 信标提醒相关联)。

  • 使用相关事件数据丰富提醒。

  • 减少频繁的提醒,仅当嘈杂、置信度低的检测结果多次出现或与其他可疑活动相结合时,才触发最终提醒。

  • 针对复杂的多阶段攻击构建提醒,其中每个阶段都已由自己的规则识别。

复合检测的优势

复合检测具有以下优势:

  • 揭示多阶段攻击:网络攻击通常是多方面且 相互关联的。复合检测通过关联看似孤立的安全性事件,揭示更广泛的攻击叙事。例如,复合检测可以识别攻击的完整序列,例如初始入侵,然后是提权和数据渗漏。

  • 减少频繁的提醒:复合规则会整合和过滤嘈杂的提醒, 从而实现更专注的响应。这种方法有助于优先处理影响较大的事件,并减少频繁的提醒。

  • 提高检测准确性:结合来自统一数据模型 (UDM) 事件、规则检测、实体情境、用户和实体行为 分析 (UEBA) 发现结果以及数据表的洞见,构建更准确的检测逻辑。

  • 简化复杂逻辑:将复杂的检测场景分解为 可管理、相互关联且可重复使用的规则,以简化开发和 维护。

  • 在信息中心中使用:将复合检测无缝集成为 Google SecOps 信息中心的数据 源。您可以使用它们创建可视化图表,总结多阶段攻击模式,从而更轻松地了解复杂风险。

常见使用场景

本部分列出了一些常见的复合检测使用场景。

使用原始事件中的情境丰富检测结果

此使用场景涉及将一个系统中的高级别提醒与另一个系统中的事件日志相关联。

  • 目标: 找出导致高级别提醒的特定本地操作。

  • 示例:

    1. 由于工作负载向恶意网域发出了 DNS 调用,因此 Google Cloud Event Threat Detection 中会触发提醒。这是 检测结果。

    2. 此检测结果会触发复合规则。

    3. 然后,该规则会在一分钟的时间窗口内搜索来自同一工作负载的原始端点检测与响应 (EDR) 日志(即 事件),查找包含相同恶意网域的命令行操作。

    最终提醒提供了丰富的情境:它显示了恶意网域的联系方式以及使用的特定 ssh 命令。与原始检测结果相比,此信息使结果更具实用性。

跟踪登录后的用户活动

主要使用场景侧重于将用户的登录事件与后续可疑活动相关联。虽然标准的多事件规则可以跟踪简短的序列,但复合检测更适合构建用户整个会话的全面风险概况。

  • 目标:在较长时间(例如一整天)内,将单个事件(例如高风险登录)与各种后续“弱信号”活动相关联。

  • 示例:创建多个规则,以生成较低级别的检测结果。 然后,使用具有较长匹配窗口期(例如 24 小时)的复合规则,根据初始可疑登录触发,并将其与来自同一用户的以下任何检测结果相关联:

    • 用户清除其命令行历史记录。

    • 创建新的本地管理员账号。

    • 向个人 Cloud Storage 网站上传大量数据。

与 UEBA 指标结合使用

此使用场景利用现有的 UEBA 指标作为复合检测的起点,以查找更复杂的长期行为。

  • 目标:将 UEBA 指标的峰值与另一项异常 活动相关联。

  • 示例:

    1. UEBA 规则检测到用户的登录失败次数过多。

    2. 另一条 UEBA 规则检测到来自同一用户的大量出站字节。

    3. 复合检测会在几天内关联这两个单独的 UEBA 发现结果,以识别潜在的账号盗用行为,然后是数据窃取。

检测数据渗漏尝试

这涉及关联几个不同的用户操作,这些操作组合在一起时可能表明尝试渗漏数据。

  • 目标:构建单个用户在 多个设备和操作中处理风险数据的概况。

  • 关联的操作:

    • 从多个设备登录(例如,家用设备与工作设备)。

    • 访问的数据源比平时多。

    • 同时下载、打印和通过电子邮件发送数据。

    • 统计用户在一段时间内接触的分类文档数量。

    • 已提交辞职信。

检测多阶段恶意软件

此使用场景涉及识别在较长时间内缓慢运行的恶意软件,这些恶意软件很难通过匹配窗口期较短的单个规则捕获。

  • 目标: 将初始感染媒介与后续恶意操作相关联,即使它们相隔数小时或数天也是如此。

  • 示例:

    1. 用户访问恶意网站(初始网络事件)。

    2. 下载并执行“植入程序文件”(第一个进程事件)。

    3. 很久以后,植入程序文件会下载并运行另一个可执行文件(第二个进程事件)。

    这需要较长的 match 窗口期来连接父进程和子进程,而复合检测可以提供此窗口期。

减少提醒噪声

此使用场景涉及管理过于“嘈杂”或自行产生过多假正例的检测结果。

  • 目标: 优化嘈杂的规则,而无需将其关闭或创建复杂的排除项。

  • 示例:

    1. 将嘈杂的精选检测设置为“仅检测”,使其不再生成提醒。

    2. 创建复合检测,该检测使用精选规则的输出作为其第一个条件。

    3. 添加第二个条件以提供额外的资格条件,例如“仅当同一用户在一小时内发生此检测 5 次时才提醒”,或者如果它与来自不同规则的检测结果相结合。

复合检测的工作原理

当规则满足预定义的条件时,它们会生成检测结果。这些检测结果可以选择性地包含结果变量,这些变量会捕获特定数据或事件状态。

复合规则使用来自其他规则的这些检测结果作为其输入的一部分。 评估可以基于原始规则的元部分、结果变量和匹配变量中的信息。

根据此评估,您可以使用复合规则创建新的检测结果,以用作调查的中间表示形式,并使用后续规则发出提醒。这有助于关联来自不同检测结果的多个因素,以识别复杂威胁。

如需详细了解语法和示例,请参阅复合检测规则和示例。

制定策略

在开始创建复合规则之前,请先制定策略,以确保新规则有效、高效且能解决正确的问题。

  1. 评估当前的检测策略 。检查现有规则,找出过于嘈杂、产生大量假正例或过于复杂且难以管理的规则。

  2. 确定复合规则可以提供价值的具体场景 。 这包括检测多阶段攻击、将多个置信度较低的提醒关联到单个置信度较高的提醒,或使用来自其他数据源的额外情境丰富检测结果。

  3. 根据评估结果,制定实施计划 。确定需要优化哪些嘈杂的规则、需要简化哪些复杂的规则,以及需要优先处理哪些新的多阶段检测结果。

此定义的计划为创建有针对性且有效的复合规则提供了路线图。请考虑以下高级别策略,以便在管理技术限制的同时,充分利用复合检测的价值。

选择适当的方法

在构建复合检测之前,请先确定是否可以使用其他替代方案实现所需的结果。分析是否可以使用现有的 UEBA 检测结果识别复杂模式。 过度复杂化检测结果可能会增加维护开销并消耗规则配额。

  • 在以下情况下使用复合检测:您的目标是将两个或多个不同的现有规则的最终 结果相关联。这会将攻击在概念上分离的阶段连接起来。

    示例:将“恶意软件已下载”规则中的检测结果与 “C2 信标已检测到”规则中的后续检测结果相关联。

  • 在以下情况下使用现有的 UEBA 检测结果:您想要查找用户或 设备何时打破其正常活动模式。

    示例:自动检测到用户今天下载了 100 GB 的数据 ,而他们通常只下载 1 GB。

管理规则配额和风险评分

如需管理组织的资源,请了解不同规则类型对规则配额的影响。

  • 精选规则不计入自定义规则配额。

  • 复合规则和自定义多事件规则计入配额。

您可以将精选检测设置为“仅检测”来使用它。这样,精选规则就可以执行初始的广泛检测,而不会生成提醒。 然后,您可以使用复合规则将特定逻辑应用于这些发现结果,从而在策略性地管理配额的同时提供更多价值。

了解风险与情境之间的区别

在设计检测逻辑时,请区分评估风险的规则和提供情境的规则。

风险是对一组活动危险程度的评估。为风险设计的规则通常会汇总多个情境事件或检测结果以做出判断。例如,虽然一次登录失败提供了情境,但多次登录失败则表明存在暴力破解攻击的风险。

情境是指围绕事件的真实细节。为情境设计的规则会使用另一个事件的详细信息来丰富一个事件。例如,虽然规则可以检测到用户登录成功,但情境规则会提供关键情境,即此登录来自一个新的异常国家/地区。

示例:初始检测可以提醒您潜在的风险,例如对恶意网域的 DNS 调用。然后,复合规则会将该提醒与 Google SecOps 中的事件日志相关联,以查找启动调用的特定命令行进程。这会使用关键的实用情境来丰富高级别风险提醒。

策略性地使用较长的匹配窗口期

配置了较长匹配窗口期(例如 14 天)的复合规则的执行频率较低。它们的高延迟可能会使其不适合对时间敏感的提醒。请考虑使用这些长时间窗口期来检测长时间内缓慢持续的对抗性活动。

使用检测结果进行可视化

管理嘈杂规则的一种策略是将它们的输出转换为信息中心内的可视化图表。这种方法不会消耗规则配额,并且可以将大量低保真度数据转化为有价值的洞见。

通过将规则设置为“仅检测”,然后在信息中心 widget 中绘制其检测结果,您可以跟踪趋势、识别异常值,并获得活动的高级别审核视图,而不会被单个提醒淹没。

示例:跟踪 PII 数据处理

规则会跟踪用户每次处理敏感 PII 数据的时间。 它不会在每次处理时都发出提醒,而是设置为“仅检测”。然后,信息中心 widget 会显示哪些用户即将达到每日出站限制(例如 10,000 字节)。这提供了风险行为的快速审核视图,而不会生成持续的提醒。

示例:监控特定 DLP 风险:

widget 会汇总来自非常特定的 DLP 规则子集的风险评分。这允许特定团队(例如,数据泄露防护 (DLP) 管理员)仅监控相关风险,过滤掉来自其他安全网域的噪声。

构建复合检测

以下工作流概述了创建复合规则的典型流程。如需详细了解语法和示例,请参阅复合检测规则和示例。

  1. 定义威胁场景:定义您要检测的特定威胁。

  2. 创建或识别输入规则:对于威胁场景的每个阶段, 创建或识别检测特定活动的输入规则。

  3. 定义联接条件:确定将输入规则中的检测结果相关联的通用信息 ,例如规则标签、 变量或检测字段。

  4. 构建复合规则:编写用于注入 输入规则中的检测结果的规则。

    • 定义 events 部分,按名称、ID 或共享元标签引用输入规则。

    • 定义 match 部分,以指定联接键和匹配的时间窗口期。

    • 定义 condition 部分,以设置必须满足的条件才能触发最终提醒。

  5. 测试和部署规则链:我们建议为序列中的每个规则手动运行 回溯搜索。

    在复合规则中使用测试规则 功能时,它仅针对与规则的输入条件匹配的现有检测结果运行。它不会自动执行底层规则来为测试生成新输入,这意味着您无法在单个操作中验证整个规则链。

    如需为规则序列运行回溯搜索,请执行以下操作:

    1. 从序列中的第一个规则手动启动回溯搜索。

    2. 等待其完成。

    3. 继续执行下一个规则。

示例:以下规则提供了一个基本的规则关联模板:


rule Basic_Rule_Correlation_Template {
    
    meta:
    description = "Triggers when a user triggers two different rules within X days"

    events: 
    // 1. Identify the first sub-rule detection
    $d1.metadata.event_type = "DETECTION" $d1.metadata.rule_name = "INSERT_RULE_NAME_A_HERE" $user = [REDACTED_GENERIC_ID]

    // 2. Identify the second sub-rule detection
    $d2.metadata.event_type = "DETECTION"
    $d2.metadata.rule_name = "INSERT_RULE_NAME_B_HERE"
    $user = [REDACTED_GENERIC_ID]
    match: 
    // 3. Connect the rules by the same user over the specified window
    $user over 14d
    condition: 
    // 4. Fire when both conditions have occurred
    $d1 and $d2
}

示例:以下规则使用事件检测规则和事件图检查精选检测,并使用了一些高级 YARA-L 函数和变量定义:


rule CheckCuratedDetection_with_EDR_and_EG {

  meta:
    author = "noone@cymbal.com"

  events:

    $d.detection.detection.rule_name = /SCC: Custom Modules: Configurable Bad Domain/
    $d.detection.collection_elements.references.event.network.dns.questions.name = $domain
    $d.detection.collection_elements.references.event.principal.asset.hostname = $hostname

    $e.metadata.log_type = "LIMACHARLIE_EDR"
    $e.metadata.product_event_type = "NETWORK_CONNECTIONS"
    $domain = re.capture($e.principal.process.command_line, "\\s([a-zA-Z0-9.-]+\\.[a-zA-Z0-9.-]+)$")
    $hostname = re.capture($e.principal.hostname, "([^.]*)")

    $prevalence.graph.metadata.entity_type = "DOMAIN_NAME"
    $prevalence.graph.metadata.source_type = "DERIVED_CONTEXT"
    $prevalence.graph.entity.hostname = $domain
    $prevalence.graph.entity.domain.prevalence.day_count = 10
    $prevalence.graph.entity.domain.prevalence.rolling_max <= 5
    $prevalence.graph.entity.domain.prevalence.rolling_max > 0

  match:
    $hostname over 1h

  outcome:
    $risk_score = 80
    $CL_target = array($domain)

  condition:
    $e and $d and $prevalence

}

查看复合检测发现结果

您可以在检测结果 页面中查看复合检测结果。当输入 列显示检测结果 作为来源,并且检测类型 列显示带有数字的 Alert 标签(例如 Alert (3))时,提醒就是复合检测。

注意:如果您同时拥有 SIEM 和 SOAR,您还可以在案例标签页中查看结果。

优化复合检测

我们建议采用以下做法来构建复合规则。

针对延迟进行优化

为了最大限度地减少检测流水线中的延迟,请尽可能使用单事件规则,例如用于初始触发器。复合规则可以使用其检测结果与其他事件、实体或检测结果执行更复杂的关联,这有助于减少总体延迟。

使用高效的方法联接检测结果

我们建议使用结果变量、元标签和匹配变量来联接检测结果。与使用事件样本相比,这些方法可提供更具确定性和可靠性的结果。元标签尤其灵活,因为它们允许您对规则进行分类,以便复合规则可以针对具有该标签的任何检测结果。

例如,如果多个规则共享相同的元标签 tactic: exfiltration,您可以让复合规则针对策略标签的值为exfiltration的任何检测结果。

在复合检测中使用带有联接变量的 nocase 时,您可能会收到以下语义分析错误:

semantic analysis: match variable <variable_name> is not assigned to an event field.

在复合检测中,第一个变量赋值(例如 $username = $fact1...) 定义了变量的属性,包括在使用 nocase 时不区分大小写。将 nocase 应用于同一联接 变量的后续变量赋值(例如 $username = $fact2...)会被编译器 解释为冲突的重新定义或冗余约束,从而导致语义 错误。

使用函数库增强检测结果

您可以在复合规则中的策略点使用 YARA-L 函数库,以增加信号并添加更复杂的逻辑。

管理规则更新

当您更新在一个或多个复合规则中使用的规则时,系统会自动创建该规则的新版本。复合规则会自动使用新版本。我们建议测试整个更新后的规则序列,以验证预期行为。

限制

在设计和实现复合检测时,请考虑以下限制:

  • 排除项:请勿将规则排除项直接应用于复合规则。您必须将排除项应用于为复合规则提供基础数据的底层规则。这是因为规则排除项是根据 UDM 字段(例如 principal.user.userid)进行评估的,但复合规则是根据其他检测结果而不是 UDM 字段触发的。如果您将规则排除项直接应用于复合规则,则排除项将无法匹配,并且事件不会被排除。

  • SOAR 案例数据的可用性:复合检测无法访问 所有 SOAR 案例数据。尝试根据状态过滤或排除案例的规则逻辑 (例如 $edetection.feedback_summary.status != "CLOSED")不受 支持。

  • 复合规则:Google SecOps 支持复合规则的最大 深度 为 10。深度是指从基本规则到最终复合规则的规则数量。

  • 仅检测规则:匹配窗口期上限为 14 天,并且 每个规则每天的检测次数上限为 10,000 次。

  • 结果变量:每个规则的结果变量上限为 20 个。此外,每个重复的结果变量的值上限为 25 个。

  • 事件样本:每个事件变量在 规则中仅存储 10 个事件样本,例如 $e1 存储 10 个,$e2 存储 10 个。

如需详细了解检测限制,请参阅检测限制。

后续步骤

如需了解如何构建复合检测规则,请参阅复合检测规则和示例。

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。