YARA-L 最佳实践
本文档介绍了 Google 安全运营团队针对 YARA-L 编写规则的推荐最佳实践。
过滤掉零值
当您对事件运行规则时,事件中的字段可能会被自动省略。如果字段被省略,则字段默认为零值。
例如,省略的字符串值默认为 ""
。
如果您让两个都被省略的字段等同,则它们可能都默认为零值。这样可能会在这两个字段匹配时导致意外匹配,因为它们都具有零值。您可以通过明确指定零值来避免这种情况。
例如,如果您的规则基于两个字段让两个事件等同,那么有可能这两个字段都为空,从而导致匹配:
$e1.field1 = $e2.field2
如果数据中同时省略 e1.field1
和 e2.field2
,则 "" = ""
为 true,从而导致匹配。
以下比较表达式可确保不会仅因为 e1.field1
和 e2.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 的社区博客,请参阅:
- YARA-L 基础知识
- YARA-L 规则变量
- YARA-L 运算符和修饰符
- 使用正则表达式构建单个事件规则
- 在规则中汇总事件
- 在条件中设置阈值
- 规则编辑器导航
- YARA-L 规则选项
- 构建单个事件规则 - 字符串匹配
- 构建多事件规则 - 联接事件
- 构建多事件规则 - 对事件进行排序
- 构建多事件规则 - 条件中的多重联接和统计
- 构建多事件规则 - 滑动窗口
- 在单个事件规则中引入结果
- 多事件规则中的结果 - 计数
- 多事件规则中的结果 - 数组
- 多事件规则中的结果 - 最大值、最小值、总和
- 结果 - 风险评分、条件逻辑运算符和数学运算符
- 函数 - strings.concat
- 函数 - strings.coalesce
- 函数 - 网络
- 参考列表
- CIDR 参考列表
- 正则表达式参考列表
- 字符串函数 - 大写或小写
- 正则表达式函数 - re.regex
- 正则表达式函数 - re.capture
- 字符串函数 - strings.base64_decode
- 正则表达式函数 - re.replace
- 统计搜索使用入门
- 统计搜索 - 不止于统计
需要更多帮助?向社区成员和 Google SecOps 专业人士寻求解答。