执行实体情境搜索

支持平台:

借助“在搜索中使用实体情境”功能,用户可以搜索和查看与其 Google Security Operations 账号中的实体相关的情境事件,从而增强安全调查和突发事件响应能力。与仅限于标准统一数据模型 (UDM) 事件架构的搜索不同,此功能可满足搜索 UDM 事件数据以外的数据(包括 UDM 实体情境)的需求,并提供对安全突发事件的更深入洞察。

主要优势

  • 安全分析师和威胁搜寻者可以查询有关实体的情境信息。
  • 有助于进行根本原因分析、威胁搜寻和取证。
  • 用户可以对实体情境执行统计搜索,通过遥测分析了解遥测模式和受影响的实体。

您可以通过以下方式使用实体情境从您的 搜索结果中获取洞察:

  • 使用 UDM 实体 字段名称进行搜索:使用 UDM 实体字段名称构建搜索查询。例如,如需查找与特定主机名关联的所有情境事件,请使用 graph.entity.hostname 创建搜索。
  • 访问“概览”标签页概览标签页会根据用户输入的查询中的信息,提供搜索中找到的实体的简要摘要。概览 页面会显示实体类型(例如 DOMAIN_NAMEIP_ADDRESSASSETUSERFILEGROUPRESOURCE)的信息。
  • 使用“实体”标签页实体 标签页会列出收到的所有实体情境事件, 包括“随时间变化的趋势”“快照过滤条件”“聚合”和“事件”等子组件。实体分为有时效性 实体和无时效性 实体,并显示在单独的标签页中。
  • 查看聚合:系统会针对字段显示聚合,类似于 UDM 事件搜索。聚合进一步分为以下情境类型:实体情境、派生情境和全局情境。

实体情境图表 Search Console

实体情境图 (ECG) Search Console 提供了多个标签页,可帮助您分析实体情境数据:

  • 结果标签页:显示 Timed DataTimeless Data

    • Timed Data:显示在提取期间具有 metadata.interval.end_time 值的实体。
    • Timeless Data:显示没有 metadata.interval.end_time 值的实体。

    Search Console 最多显示 1 万个有时效性或无时效性数据条目。

  • 提醒标签页:显示与搜索中找到的实体关联的所有提醒。

  • 概览标签页:显示有关搜索查询中实体的信息。

  • 一段时间内的活动图表

    • 显示每个时间段内有效的实体 数量和实体情境 数量。您可以使用滑块放大或缩小时间范围。

    • 更改的实体总数:实体情境图表 (ECG) 会在其有效期内将数据存储在时间段内。如果实体保持有效(基于 end_time),它还会将此数据复制到下一个时间段。每当实体属性在两个时间段之间发生变化时,此图表都会更新。

使用场景:调查遭入侵的用户账号

假设有以下场景:安全分析师需要调查可能遭入侵的用户账号 (email@company.com)。请按照以下步骤进行调查:

  1. 识别遭入侵的用户:提醒会标记用户 email@company.com 已 被识别为可疑账号。

  2. 收集实体情境信息:获取有关用户的情境数据,以了解范围和影响。

  3. 运行查询:使用在搜索中使用实体情境 运行以下查询:

    • graph.entity.user.email_addresses = "email@company.com",用于检索有关用户的信息。
    • graph.entity.user.email_addresses = "email@company.com" AND graph.metadata.product_name = "Google Cloud Compute Context",用于检查产品名称和其他元数据。
  4. 分析“概览”标签页概览 标签页会显示用户的实体摘要,包括:

    • 检查 First Seen HourLast Seen Hour 时间戳。
  • 查看主机名、IP 地址和 MAC 地址(如果有)。
  • 检查硬件型号、操作系统平台和平台版本。
  1. 检查“事件”标签页:查看与此用户关联的事件,包括登录尝试和异常。

  2. 查看聚合:识别实体情境数据中的模式和异常, 这些数据分为实体情境、派生情境和全局情境。

如需搜索实体情境数据,请在搜索查询中使用 UDM 实体字段名称:

  • graph.entity.hostname
  • graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"

搜索结果会显示有关实体的关键信息,包括:

  • 实体元数据
  • 指标(First Seen HourLast Seen Hour
  • 关系(EntityDirectionEntity_labelEntity_typeRelationship
  • 根据实体类型,显示特定字段,例如资产的 Principal_ip、用户的 Mail_id、哈希/文件的 File_name,以及网域的 Domain_nameIP_address

在搜索中使用实体情境的示例

本部分提供了有关如何利用 UDM 实体情境功能分析实体统计信息的实用示例。

如需查看可用的情境来源和类型,请在 UDM 搜索中运行以下 UDM 实体统计信息搜索:

graph.metadata.source_type = $sourceType
graph.metadata.entity_type = $entityType
match:
  $sourceType, $entityType
outcome:
  $total = count(graph.metadata.product_entity_id)
order:
  $sourceType, $total desc
limit:
  100

时间选择器 会显示实体图表中的有效数据,而不是情境数据的提取时间。

由于 UDM 实体搜索使用标准 UDM 搜索界面,因此您可以使用各种功能,例如聚合 面板(用于查看最大值或最小值)、结果表和 UDM 统计信息展开结果。

示例:查看不同的 ENTITY_TYPE

如需展开 UDM 实体搜索,您可以添加日志源、命名空间和结果数组,以显示观察到的不同 ENTITY_TYPE,如下所示:

graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper(graph.metadata.event_metadata.base_labels.log_types)
$namespace = strings.to_upper(graph.metadata.event_metadata.base_labels.namespaces)
match:
  $logType, $namespace
outcome:
  $total = count(graph.metadata.product_entity_id)
  $entityTypes = array_distinct(graph.metadata.entity_type)
order:
  $logType, $total desc
limit:
  100

示例:优化实体集

您可以使用 UDM 搜索数据透视功能优化特定实体集。 然后,此优化会生成如下所示的 YARA-L 查询:

graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper( graph.metadata.event_metadata.base_labels.log_types )
$namespace = strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces )
AND strings.to_upper( graph.metadata.event_metadata.base_labels.log_types ) = "WINDOWS_AD"
AND strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces ) = "ACME"

派生情境

Google SecOps 提供以下类型的派生情境:

  • 每个 ENTITY_TYPEfirst_seenlast_seen 时间戳
  • Prevalence:访问给定 ENTITY_TYPE 的资产数量

First Seen HourLast Seen Hour 时间戳

Google SecOps 会对传入数据执行统计分析,并使用 first_seenlast_seen 时间戳丰富实体情境记录:

  • first_seen_time 字段会捕获实体在客户环境中首次出现的小时。
  • last_seen_time 字段会记录最近一次观察到该实体的小时。

在过去 7 天内首次出现的小时的用户:

graph.metadata.entity_type = "USER"
graph.entity.user.userid != ""
graph.entity.user.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)

在过去 7 天内首次出现的网域:

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/
graph.entity.domain.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)

在过去 7 天内观察到的文件(哈希):

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "FILE"
//graph.entity.file.md5 != ""
//graph.entity.file.sha1 != ""
graph.entity.file.sha256 != ""
graph.entity.file.first_seen_time.hours >= timestamp.current_hours() - (86400 * 7)

ENTITY_TYPE 表示 FILE 哈希,例如 entity.file.hash。在 hash 对象中,类型可以是以下任一类型:

  • md5
  • sha1
  • sha256

如需搜索特定哈希,您可以针对给定的哈希类型运行 UDM 实体搜索:

// This will search ENTITY, DERIVED, and GLOBAL Source Types
graph.metadata.entity_type = "FILE"
graph.entity.file.sha256 = "eb5db1feadda5351c3b8fc0770e9f4c173484df5dc4a785bd1bdce7806a9e498"

IP 地址

IP_ADDRESS 的派生 ENTITY_TYPES 可以表示内部或外部实体。

以下 UDM 实体统计信息搜索会识别最近观察到的 IP_ADDRESSES,并使用聚合函数(在结果部分)按 CIDR 块对其进行计数:

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
//note, for IP addresses the first seen is under artifact, not ip
graph.entity.artifact.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
outcome:
  $total = count(graph.metadata.product_entity_id)
  $classA = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.0.0.0/8"),1,0))
  $classB = sum(if(net.ip_in_range_cidr(graph.entity.ip, "172.16.0.0/12"),1,0))
  $classC = sum(if(net.ip_in_range_cidr(graph.entity.ip, "192.168.0.0/16"),1,0))
  $classD = sum(if(net.ip_in_range_cidr(graph.entity.ip, "224.0.0.0/4"),1,0))
  // we shouldn't see results here…
  $classE = sum(if(net.ip_in_range_cidr(graph.entity.ip, "240.0.0.0/4"),1,0))
  $thisNetwork = sum(if(net.ip_in_range_cidr(graph.entity.ip, "0.0.0.0/8"),1,0))
  $loopback = sum(if(net.ip_in_range_cidr(graph.entity.ip, "127.0.0.0/8"),1,0))
  $linklocal = sum(if(net.ip_in_range_cidr(graph.entity.ip, "169.254.0.0/16"),1,0))
  $benchmark = sum(if(net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15"),1,0))
  $cgnat = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.64.0.0/10"),1,0))

如需进一步调查异常或意外范围,您可以运行 UDM 实体搜索:

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15")

普及率

普及率始终为 DERIVED_CONTEXT 类型。

以下 UDM 实体搜索会识别很少观察到的网域名称。在查询的时间窗口内 (day_max = 1),这些网域每天最多与一个不同的资产相关联 (at most);在过去 10 天内 (rolling_max = 1),这些网域最多与一个不同的资产相关联 (at most)。

此模式有助于检测环境中互动有限的网域:

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return specific TLDs where the FQDN is more than X characters
//graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
graph.entity.domain.prevalence.rolling_max = 1
graph.entity.domain.prevalence.day_max = 1

或者,您可以将其转换为聚合 UDM 实体统计信息搜索并聚合结果:

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
$domain = graph.entity.domain.name
$length = strings.length(graph.entity.domain.name)
$tld = strings.extract_domain(graph.entity.domain.name)
graph.entity.domain.prevalence.day_max = 1
graph.entity.domain.prevalence.rolling_max = 1
match:
  $domain, $tld, $length
limit:
  10

基本 UDM 实体字段搜索

以下是根据可用来源在 Google SecOps 中使用“在搜索中使用实体情境”功能的其他示例:

  • graph.entity.hostname
  • graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"
  • principal.ip
  • principal.hostname="baz"
  • principal.ip="1.2.3.4"
  • network.dns.questions.name="youtube.com"

从实体字段透视

使用实体字段进行透视并探索相关数据。透视字段的示例包括:

  • network.email.to
  • network.email.cc
  • principal.process.file.fileMetadata.pe.importHash
  • principal.process.file.sha256
  • network.dns.questions.name

了解动态字段

来源引用带有前缀(例如 additional)的动态结构化字段。您可以在 UDM 事件中搜索这些字段。

访问权限控制注意事项

系统对全局情境数据施加了 50 个事件的限制。全局用户和范围用户都可以查看数据。

以下来源提供全局情境数据:

全局情境数据 用户可以在何处查看或与此数据互动 哪些人可以查看
安全浏览 - 搜索
- 规则
所有用户
VirusTotal 关系 - 搜索
- 规则
所有用户
WHOIS - 搜索
- 规则
所有用户
Uppercase - 搜索
- 规则
所有用户
开源情报 IOC (OPEN_SOURCE_INTEL_IOC) - 搜索
- 规则
所有用户
Mandiant Fusion IoC (MANDIANT_FUSION_IOC) - 搜索
- 规则
- 新出现的威胁
所有用户

限制

  • 数量限制:有时效性和无时效性 数据的累计结果限制为 100 万。
  • 全局情境数据:敏感全局情境 数据(例如 UPPERCASE_VT_PROTECTEDMANDIANT_FUSION_IOCVIRUS_TOTAL_CONNECTIONS)的行数限制为 50 行。
  • 数据一致性:上次出现时间数据最多可能会延迟 2 小时。相关实体只能显示事件中列出的实体的一部分。
  • 不支持的功能

    • 对实体字段进行反向查找、分组字段搜索、低普及率和热图。
    • 您无法在实体情境查询和事件查询之间进行联接。

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。