搜索最佳做法

支持的语言:

本文档介绍了 Google 针对在 Google Security Operations 中使用搜索功能而推荐的最佳实践。如果搜索查询未经过精心构建,则可能需要大量计算资源。 性能还取决于 Google SecOps 实例中数据的规模和复杂程度。

构建有效的搜索查询

每个条件都必须采用 udm-field operator value 格式。

例如:principal.hostname = "win-server"

由于 Google SecOps 在搜索期间可能会注入大量数据,因此建议您尽可能缩短时间范围,以缩小搜索范围并提高搜索性能。

在搜索查询中使用正则表达式

您可以在搜索数据时使用正则表达式:

  • 请使用 ANDORNOT
  • 如果缺少其他运算符,则假定为 AND
  • 使用圆括号修改优先级顺序。括号中最多可使用 169 个逻辑运算符(ORANDNOT)。
  • 根据字段类型,字段运算符可以包括: = != >= > < <=

或者,您也可以使用参考列表

使用 nocase 作为搜索修饰符

nocase 可用作修饰符,以忽略大小写。

例如,以下搜索无效:

target.user.userid = "TIM.SMITH" nocase

请勿对枚举字段使用正则表达式

您无法对枚举字段(具有一系列预定义值的字段),例如 metadata.event_typenetwork.ip_protocol,使用正则表达式。

以下示例是一项无效的搜索: metadata.eventtype = /NETWORK*/

而以下示例是有效的搜索: (metadata.event_type = "NETWORK_CONNECTION" or metadata.event_type = "NETWORK_DHCP")

在“活动”字段中使用 any 和 all 运算符

Search 中,某些字段被标记为重复,这意味着它们包含值或消息类型的列表。默认情况下,重复字段始终使用 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 专业人士那里获得解答。