规则链接
借助规则链接,您可以将规则相互关联,使一个规则的输出作为另一个规则的输入。借助此功能,您可以创建更复杂、更灵活的规则。规则链式可以跨不同的数据源和时间范围关联和分析事件,从而克服孤立事件检测的局限性。
规则链的好处:
揭露多阶段攻击:网络攻击通常相互关联。规则链可显示看似孤立的事件之间的关联,有助于揭示攻击过程。例如,规则链可以识别整个攻击序列,例如初始数据泄露、特权提升和数据渗漏。
减少警报疲劳:通过实现使用方规则,优先处理重大威胁并减少警报疲劳。这些规则会整合和过滤生产者规则生成的噪声警报,以便更有针对性地做出响应。
提高检测准确性:结合 UDM 事件、其他规则检测、实体信息、UEBA 发现结果和数据表中的分析洞见,创建准确的检测逻辑。
简化复杂逻辑:将复杂的检测场景细分为可管理、相互关联且可重复使用的规则,以简化开发和维护。
规则链接术语和概念:
检测:是规则的结果,也称为提醒。
链:是一系列规则,其中一条规则的输出将作为下一条规则的输入。例如,在链式规则 rule1 -> rule2 -> rule3 中,rule1 生成的检测会被 rule2 用于生成新的检测,然后 rule3 会使用这些检测生成自己的一组检测。
生产者规则:是指其检测结果会用作另一个规则的输入的规则。任何规则都可以用作生产者规则,无需进行特定指定。生产者规则使用实体和事件作为输入。它们不会将检测结果用作输入。
使用方规则:是指在规则文本中使用检测结果作为输入的规则。使用方规则必须包含匹配部分。
串联规则:也称为使用方规则。
高级概念
单事件检测规则
Google SecOps 不支持单事件检测规则。也就是说,任何将检测结果用作数据源的规则都必须包含匹配部分。
检查延迟时间
由于存在调度问题,我们建议仅在单事件规则上串联使用使用方规则。单个事件规则的运行方式接近实时,因此这些规则的检测结果几乎总是可供在首次执行使用方规则时使用。如果您使用多事件规则创建规则链,生产者规则可能会在使用方规则之后执行,从而延迟使用方规则中的检测生成。
TestRule 和 Retrohunt
对使用方规则进行测试或运行 Retrohunt 时,系统只会运行您使用现有检测选择的特定规则。如需运行完整链,您必须在链条开头启动 Retrohunt,并等待每次运行完成后再运行下一个规则。
对规则运行测试不会将检测结果保留或写入数据库,并且使用方规则要求输入检测结果存在于数据库中。因此,您无法在测试规则中测试一组规则。
构建规则链
您可以使用提供方规则和使用方规则的组合来创建规则链。
生产者规则
生产者规则是数据传输链的基础。它们用于识别特定事件或条件,这些事件或条件结合起来会指示恶意活动。如需配置生产者规则,请执行以下操作:
创建新规则或重复使用现有规则
在“结果”部分中停用提醒,并将
$risk_score
设置为 0。这样可以防止这些规则生成单独的提醒或影响实体风险评分。通过使用此配置,您可以优先处理由使用方规则生成的更重要的提醒,这些规则会评估整个事件链。使用
outcome
部分定义可供链式规则访问的变量。
以下生产者规则示例会检测登录失败。
rule failed_login {
meta:
events:
$e.metadata.event_type = "USER_LOGIN"
any $e.security_result.action = "BLOCK"
outcome:
$risk_score = 0
$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 检测。
更改生产者规则时的注意事项
在规则链中更新生产者规则时,系统会创建生产者规则的新版本。这适用于逻辑更新(条件、事件、结果)和元数据更新(名称、说明、严重程度)。使用新版本的消费者规则会继续生效。请务必测试更新后的生产者规则及其下游使用方规则,以确保实现预期行为。