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