YARA-L 最佳实践

支持的平台:

本文档介绍了 Google 安全运营团队针对 YARA-L 编写规则的推荐最佳实践。

过滤掉零值

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

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

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

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

$e1.field1 = $e2.field2

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

以下比较表达式可确保不会仅因为 e1.field1e2.field2 不包含任何数据而导致匹配:

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

零值和基于丰富内容的规则

如果规则依赖于尚未更新的丰富数据,则相应值可能是 null 或零。因此,最好对依赖于丰富的规则滤除零值(null 检查)。了解 Google 安全运营团队如何丰富事件和实体数据,以及如何在规则中使用经过情境丰富的数据

添加事件类型过滤条件

在以下示例中,系统会根据参考列表检查每个 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

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

如需查看有关使用 YARA-L 的社区博客,请参阅:

需要更多帮助?向社区成员和 Google SecOps 专业人士寻求解答。