复合检测
通过复合检测,您可以将规则相互关联,使一条规则的输出充当另一条规则的输入。借助此功能,您可以创建更复杂、更灵活的规则。通过关联和分析不同数据源和时间范围内的事件,复合检测克服了孤立事件检测的局限性。
复合检测的优势
揭示多阶段攻击:网络攻击通常是多方面且相互关联的。复合检测有助于关联看似孤立的事件,从而揭示攻击叙事。例如,复合规则可以识别整个攻击序列,例如初始入侵,然后是权限升级和数据渗漏。
缓解提醒疲劳:通过实施消费者规则,优先处理重大威胁并缓解提醒疲劳。这些规则可整合并过滤输入规则生成的杂乱提醒,从而让您能够更专注于响应,有助于确定高影响事件的优先级并最大限度地减少提醒疲劳。
提高检测准确性:将 UDM 事件、其他规则检测、实体信息、UEBA 发现结果和数据表的分析洞见相结合,以创建准确的检测逻辑。
简化复杂逻辑:将复杂的检测场景分解为可管理、相互关联且可重用的规则,以简化开发和维护。
复合检测的相关术语和概念
检测:规则的结果,也可称为提醒。
复合:一系列相互关联的规则,其中一条规则的输出用作下一条规则的输入。例如,在复合规则序列
rule1 -> rule2
->rule3
中,rule1
生成的检测会传递给rule2
,后者会处理这些检测以生成新的检测。然后,rule3
会使用这些检测结果来生成最终输出。输入规则:检测结果用作另一条规则的输入的规则。任何规则都可以充当输入规则,无需进行特定指定。输入规则使用实体和事件作为输入。 它们不使用检测结果作为输入。
复合规则:一种在规则文本中使用检测结果作为输入的规则。 复合规则必须包含
match
部分。
高级概念
单事件检测规则
Google SecOps 不允许使用单事件复合规则。这意味着,任何使用检测结果作为输入源的规则都必须包含 match
部分。
检查延迟时间
由于调度行为,我们建议仅在单事件输入规则上撰写复合规则。单事件规则近乎实时运行,因此在执行复合规则时,通常已可获得其检测结果。如果复合规则依赖于多事件规则作为输入,则存在输入规则在复合规则的预定执行时间之后运行的风险。这可能会导致复合规则出现延迟或漏检。
TestRule 和 Retrohunt
对复合规则进行测试或运行 Retrohunt 时,系统只会使用现有检测结果运行您选择的特定规则。如需运行整个复合规则,您必须从序列中的第一条规则开始手动启动回溯分析,等待每次运行完成,然后继续下一条规则。
对规则运行测试不会将检测结果持久保留或写入数据库,而复合规则需要数据库中存在输入检测结果。
对规则运行测试不会将检测结果保留或写入数据库。由于复合规则需要输入检测结果存在于数据库中才能正常运行,因此您无法使用 TestRule 来验证复合规则。
构建复合规则
您可以使用输入规则和复合规则的组合来创建复合规则。
输入规则
输入规则是复合规则的基础。它们会检测特定事件或条件,这些事件或条件组合在一起时会指示恶意活动。 如需配置输入规则,请执行以下操作:
创建新规则或重复使用现有规则。
停用提醒。这样可以防止这些输入规则生成单独的提醒。使用此配置,您可以优先处理由复合规则生成的更关键的提醒,这些规则会评估整个事件链。
使用
outcome
部分定义可供链式规则访问的变量。
以下提供方规则示例可检测登录失败的情况。
rule failed_login {
meta:
events:
$e.metadata.event_type = "USER_LOGIN"
any $e.security_result.action = "BLOCK"
outcome:
$target_user = $e.target.user.userid
condition:
$e
}
此规则可识别被阻止的登录尝试,并提供关联的用户。
复合规则
编写使用检测的规则与编写使用 UDM 的规则大致相同,只是来源和可用字段有所不同。如需引用检测字段,请使用关键字 detection
作为来源:$eventname.detection.field1.field2
。
您可以在集合资源中找到 detection
来源下可用的子字段。
以下是集合中的常见字段:
$d.detection.detection.rule_id
$d.detection.detection.detection_fields["match_var_name"]
$d.detection.detection.outcomes["outcome_name"]
以下示例规则可检测到未启用 MFA 的登录、枚举和数据渗出。
rule login_enumeration_exfiltration {
meta:
description = "Detects when a user logs in without multifactor authentication (MFA) and then performs enumeration and exfiltration"
rule_name = "Login Without MFA, Enumeration, Exfiltration"
severity = "High"
events:
// Detection with name "Console Login Without MFA"
// The affected user is saved as $target_user
$login_without_mfa.detection.detection.rule_name = /Console Login Without MFA/
$target_user = $login_without_mfa.detection.detection.outcomes["target_user"]
// Any detection with a rule name containing 'enumeration'
// The user performing enumeration is the user that logged in without mfa
$enumeration.detection.detection.rule_name = /enumeration/ nocase
$enumeration.detection.detection.outcomes["principal_users"] = $target_user
// Any detection with the mitre tactic 'TA0010' (Exfiltration)
// The user performing exfiltration is the user that logged in without mfa
$exfiltration.detection.detection.rule_labels["tactic"] = "TA0010"
$exfiltration.detection.detection.outcomes["principal_users"] = $target_user
match:
// Looks for detections over a 24 hour period
$target_user over 24h
condition:
// All 3 must occur for a single user
$login_without_mfa and $enumeration and $exfiltration
}
分层检测
借助复合检测,您可以创建分层检测系统。较低级别的输入规则用于识别孤立的可疑事件。然后,更高级别的复合规则会使用这些输入规则的输出,以便跨时间、实体和数据源进行关联。 这种方法有助于将这些信息与其他来源的数据相关联,以检测单事件规则可能遗漏的多阶段攻击模式。
Google Security Operations 最多支持三个级别的组合,可在深度检测逻辑和可管理复杂性之间实现平衡。
例如:
级别 1:输入规则检测单个可疑事件。例如,登录失败事件、异常文件访问。
级别 2:复合规则可关联级别 1 检测结果。例如,登录失败事件后紧接着出现可疑的文件访问。
第 3 级:更高级别的复合规则将第 2 级检测结果与其他数据相结合,以实现更精密的检测。例如,与身份验证相关的 2 级检测和与所用设备的安全态势相关的 2 级检测。
编写复合规则时的注意事项
当您更新一条用于一个或多个复合规则的输入规则时,系统会自动创建该输入规则的新版本。这适用于逻辑更新(condition
、events
、outcomes
)和元数据更新(名称、说明、严重程度)。复合规则会继续使用新版本运行。建议您测试更新后的输入规则及其下游复合规则,以确保实现预期行为。
限制
复合规则具有以下限制。
仅检测规则和实体风险得分
仅检测规则(仅使用检测数据作为来源,而不使用事件或实体数据)不会影响实体风险得分。为仅检测规则设置的任何风险得分仅适用于该规则创建的检测结果。不会影响任何汇总实体风险得分。
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。