匹配部分语法

支持的平台:

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

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

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

定义关联条件

您可以使用它来指定以下内容,从而定义相应关联的标准:

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

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

比较功能要求

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

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