搜索最佳做法
本文档介绍了 Google 推荐的有关如何使用 Search 进行搜索的最佳实践。如果搜索查询构建不当,可能需要大量计算资源才能完成。性能还因 Google Security Operations 实例中的数据规模和复杂程度而异。
构建有效的搜索查询
每个条件都必须采用 udm-field operator value
格式。
例如:principal.hostname = "win-server"
。
优化搜索的时间范围
请始终尝试将时间范围缩小到必要的最小值。Google SecOps 可以注入大量数据,因此在进行搜索时限制数据范围可以大幅提高搜索性能。
在搜索中使用正则表达式
您可以在搜索时使用正则表达式:
- 请使用
AND
、OR
和NOT
。 - 如果缺少其他运算符,则假定为
AND
。 - 使用圆括号修改优先级顺序。括号中最多可使用 169 个逻辑运算符(
OR
、AND
和NOT
)。 - 根据字段类型,字段运算符可以包括:
= != >= > < <=
或者,您也可以使用参考列表。
使用 nocase
作为搜索修饰符
nocase
可用作修饰符,以忽略大小写。
例如,以下搜索无效:
target.user.userid = "TIM.SMITH" nocase
正则表达式不适用于枚举字段
您无法对枚举字段(具有一系列预定义值的字段),例如 metadata.event_type
或 network.ip_protocol
,使用正则表达式。
例如,以下搜索无效:
metadata.eventtype = /NETWORK*/
不过,以下搜索是有效的(并且近似于上述尝试):
(metadata.event_type = "NETWORK_CONNECTION" or
metadata.event_type = "NETWORK_DHCP")
在“活动”字段中使用 any 和 all 运算符
在搜索中,某些字段被标记为重复,这意味着它们包含值或消息类型的列表。与规则不同,搜索中的重复字段默认情况下始终使用 any
运算符处理,并且没有指定 all
的选项。
使用 any
运算符时,如果重复字段中的任何值满足条件,则谓词的评估结果为 true。例如,如果您搜索 principal.ip != "1.2.3.4"
,并且搜索结果中的活动同时包含 principal.ip = "1.2.3.4"
和 principal.ip = "5.6.7.8"
,则搜索会生成匹配结果。这样一来,搜索范围会扩大,搜索结果会包含与任一运算符匹配的结果,而不是与所有运算符都匹配的结果。
重复字段中的每个元素都是单独处理的。如果在搜索结果中的事件中找到重复字段,系统会针对该字段中的每个元素评估相应事件。这可能会导致意外行为,尤其是在使用 !=
运算符进行搜索时。
使用 any
运算符时,如果重复字段中的任何值满足条件,则谓词的评估结果为 true。
时间戳使用 Unix 纪元时间
时间戳字段使用 Unix 纪元时间(自 1970 年 1 月 1 日星期四 00:00:00 以来经过的秒数)进行匹配。
搜索特定时间戳时,以下(以纪元时间表示)是有效的时间戳:
metadata.ingested_timestamp.seconds = 1660784400
以下时间戳无效:
metadata.ingested_timestamp = "2022-08-18T01:00:00Z"
某些字段会从过滤条件中排除,包括以下字段:
metadata.id
metadata.product_log_id
*.timestamp
由于这些字段通常包含唯一值,因此往往会添加不必要的详细信息,从而降低搜索效果。
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。