YARA-L 最佳实践

本文档介绍了 Google Security Operations 在 YARA-L 中编写规则的推荐最佳实践。

过滤掉零值

当您对事件运行规则时,事件中的字段可能会被自动省略。如果字段被省略,则字段默认为零值。

例如,省略的字符串值默认为 ""

如果您让两个都被省略的字段等同,则它们可能都默认为零值。这样可能会在这两个字段匹配时导致意外匹配,因为它们都具有零值。您可以通过明确指定零值来避免这种情况。

例如,如果您的规则基于两个字段让两个事件等同,那么有可能这两个字段都为空,从而导致匹配:

$e1.field1 = $e2.field2

如果数据中同时省略 e1.field1e2.field2,则 "" = "" 为 true,从而导致匹配。

以下比较表达式可确保您不会获得匹配项,因为 e1.field1e2.field2 不包含任何数据:

$e1.field1 = $e2.field2
$e1.field != ""

添加事件类型过滤条件

在以下示例中,系统会根据参考列表检查每个 UDM 事件的 IP 地址,这会消耗大量资源:

events:
  // For every UDM event, check if the target.ip is listed in
  // the suspicious_ip_addresses reference list.
  $e.target.ip in %suspicious_ip_addresses

如果您的 YARA-L 规则仅检测到特定事件类型的 UDM 事件,则添加事件类型过滤条件可通过减少规则需要评估的事件数量,从而优化您的规则。

events:
  // For every UDM event of type NETWORK_DNS, check if the target.ip is
  // listed in the suspicious_ip_addresses reference list.
  $e.metadata.event_type = "NETWORK_DNS"
  $e.target.ip in %suspicious_ip_addresses

将这些过滤条件添加至事件部分的开头。您还应在正则表达式或其他比较之前添加等式过滤条件。过滤条件会按照其在规则中的显示顺序应用。