匹配部分语法

支持的平台:

在 YARA-L 2.0 中,match 部分提供了多事件相关性机制。它通过在特定时间边界内关联用户、IP 地址或文件哈希等常见属性,定义将事件分组为单个检测的逻辑。

您可以在以下使用场景中使用 match 部分:

  • 在规则中关联两个或多个不同的事件。
  • 在搜索和信息中心内汇总数据,例如在特定时间范围内统计登录失败的次数。

定义相关性条件

您可以使用它来定义此相关性的条件,方法是指定以下内容:

  • 分组字段(键):变量(例如 $user$ip),必须在事件(在 events 部分中定义)中具有相同的值才能触发匹配。

  • 时间限制:分组事件必须在某个时长窗口内发生,才能满足规则或聚合条件。在“规则”中,此参数用于定义检测窗口;在“搜索”和“信息中心”中,此参数用于定义聚合或关联窗口。

比较功能要求

下表详细比较了“规则到搜索”和“信息中心”。

功能 规则要求 搜索和信息中心支持
变量类型 必须使用在 events 部分中定义的占位符。 支持占位符和直接 UDM 字段。
时间窗口 定义检测边界。 定义聚合或相关性分桶。
语法 over <number><m/h/d>(例如 10m2h1d over <number><m/h/d>
限制 最小值:1m / 最大值:48h 最小值:1m / 最大值:48h

支持的窗口类型

YARA-L 2.0 使用不同的窗口化行为来确定如何划分时间以及如何对事件进行分组。您可以使用以下支持的时间窗口,按指定的时间粒度match 部分中的事件字段和占位符进行分组。

如需详细了解 YARA-L 2.0 支持的窗口类型,请参阅 YARA-L 2.0 开窗逻辑

了解时间边界

match 部分会根据您的分组键将事件划分为不同的组。指定的时长定义了每个组的时间边界:

  • 纳入:只有在窗口内的事件才会传递到 condition 评估中,以进行特定匹配。
  • 排除:对于相应匹配组,系统会忽略窗口之外的事件,从而防止不相关的事件触发假正例。

match 部分中的零值

Google SecOps 会隐式过滤掉 match 部分中使用的所有占位符的零值("" 表示字符串,0 表示数字,false 表示布尔值,位置 0 中的值表示枚举类型)。

示例:过滤掉零值

以下示例展示了过滤掉零值的查询。

rule ZeroValuePlaceholderExample {

events:
  // Because $host is used in the match section, the query behaves
  // as if the following predicate was added to the events section:
  // $host != ""
  $host = $e.principal.hostname

  // Because $otherPlaceholder was not used in the match,
  // there is no implicit filtering of zero values for $otherPlaceholder.
  $otherPlaceholder = $e.principal.ip

match:
  $host over 5m

condition:
  $e
}

不过,如果将占位变量分配给函数,查询不会隐式过滤掉 match 部分中使用的占位变量的零值。

如需停用对零值的隐式过滤,您可以在“选项”部分中使用 allow_zero_values 选项。allow_zero_values 选项仅在“规则”中提供。

示例:允许零值

以下示例展示了不会隐式过滤掉 match 部分中所用占位符的零值的查询:

rule AllowZeroValuesExample {

events:
  // Because allow_zero_values is set to true, there is no implicit filtering
  // of zero values for $host.
  $host = $e.principal.hostname

  // Because $otherPlaceholder was not used in the match,
  // there is no implicit filtering of zero values for $otherPlaceholder.
  $otherPlaceholder = $e.principal.ip

match:
  $host over 5m

condition:
  $e

options:
  allow_zero_values = true
}

后续步骤

您可以探索以下资源,继续学习 YARA-L 逻辑,或深入了解高级查询函数:

语法和逻辑

参考和示例

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