匹配部分语法

支持:

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

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

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

定义关联条件

通过指定以下内容,使用它来定义此关联的条件:

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

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

比较功能要求

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

功能 规则要求 搜索和信息中心支持
变量类型 必须使用 events 部分中定义的占位符。 同时支持占位符和直接 UDM 字段。
时间窗口 定义检测边界。 定义聚合或关联存储桶。
语法
  • over <number><m/h/d>(例如 10m、2h、1d)
  • by <number><m/h/d>
  • over <number><m/h/d> [before|after] $pivot
  • over <number><m/h/d>
  • by <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 专业人士的解答。