UDM 搜索最佳实践

本文档介绍了 Google 推荐使用 UDM 搜索进行搜索的最佳实践。如果不小心构建 UDM 搜索,则可能需要大量计算资源才能完成。此外,性能还会因 Google Security Operations 实例中数据的大小和复杂程度而异。

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

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

请始终尝试将时间范围缩小到所需的最短时间。Google Security Operations 可以注入大量数据,因此在执行搜索时限制数据的广度可以显著提高搜索性能。

您可以在执行 UDM 搜索时使用正则表达式:

  • 使用 ANDORNOT
  • 如果没有其他运算符,则假定为 AND
  • 使用括号修改优先级顺序。
  • 字段运算符可能包括以下内容,具体取决于字段类型: = != >= > < <=

使用 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")

在“事件”字段中使用任意及所有运算符

在 UDM 搜索中,某些字段会被标记为重复,这意味着它们是值列表或其他类型的消息。与 YARA-L 不同,UDM 搜索中的重复字段默认始终使用 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

由于这些字段往往具有唯一值,因此显示它们会产生更多“噪声”UDM 搜索界面中的值。

合取范式

UDM 搜索使用合取范式,这是一种布尔逻辑方法,将公式表示为使用 AND 或 OR 的子句连接。通过连词 (AND) 连接的每个子句都必须是字面量或包含析取运算 (OR)。

例如:

  • (A OR B) AND (C OR D)
  • (A OR B) AND (NOT C OR B)

子句也可以是字面量:

  • A OR B
  • A AND B

您不能以合取范式的形式使用 A OR (B AND C),但可以使用 (A OR B) AND (A OR C)

下例会在 UDM 搜索中生成错误:

principal.hostname = "win-server" nocase OR (principal.hostname = "win-adfs" nocase AND metadata.event_type = "NETWORK_CONNECTION")

以下是在 UDM 搜索中使用合取范式的有效示例:

(principal.hostname = "win-server" nocase OR principal.hostname = "win-adfs" nocase) AND (principal.hostname = "win-server" nocase OR metadata.event_type = "NETWORK_CONNECTION")

您不能以合取范式的形式使用 NOT (A OR B),但可以使用 NOT A AND NOT B

以下设置无效:

principal.hostname = "win-server" nocase AND NOT(metadata.event_type = "PROCESS_TERMINATION" OR metadata.event_type = "USER_RESOURCE_ACCESS")

以下字段有效:

principal.hostname = "win-server" nocase AND NOT metadata.event_type = "PROCESS_TERMINATION" AND NOT metadata.event_type = "USER_RESOURCE_ACCESS"

您不能以合取范式的形式使用 A AND (B OR (C AND D)),但可以使用 A AND (B OR C) AND (B OR D)

以下设置无效:

principal.hostname = "win-server" nocase AND (metadata.event_type = "PROCESS_LAUNCH" OR (metadata.event_type = "NETWORK_CONNECTION" AND target.ip = "10.128.0.21")

以下字段有效:

principal.hostname = "win-server" nocase AND (metadata.event_type = "PROCESS_LAUNCH" OR metadata.event_type = "NETWORK_CONNECTION") AND (metadata.event_type = "PROCESS_LAUNCH" OR target.ip = "10.128.0.21")