搜索实体情境数据

支持的语言:

借助“搜索中的实体上下文”功能,用户可以在 Google Security Operations 账号中搜索和查看与实体相关的上下文事件,从而增强安全调查和突发事件响应能力。与仅限于标准统一数据模型 (UDM) 事件架构的搜索不同,此功能可满足以下需求:搜索范围不仅限于 UDM 事件数据,还包括 UDM 实体情境,从而更深入地了解安全事件。

主要优势

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

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

  • 使用 UDM 实体字段名称进行搜索:使用 UDM 实体字段名称构建搜索查询。例如,如需查找与特定主机名关联的所有上下文事件,请使用 graph.entity.hostname 创建搜索。
  • 访问“概览”标签页:“概览”标签页会根据用户输入的查询内容,利用相关信息显示搜索结果中找到的实体的大致摘要。概览页面会显示实体类型(例如 DOMAIN_NAMEIP_ADDRESSASSETUSERFILEGROUPRESOURCE)的信息。
  • 使用“实体”标签页:“实体”标签页列出了收到的所有实体上下文事件,包括“随时间变化的趋势”“快照过滤器”“汇总”和“事件”等子组件。实体分为有时限实体和无时限实体,显示在不同的标签页中。
  • 查看汇总:系统会显示字段的汇总,类似于 UDM 事件搜索。这些汇总数据进一步分为以下情境类型:实体情境、派生情境和全局情境。

用例:调查被入侵的用户账号

假设有这样一种情况:一位安全分析师需要调查一个可能遭入侵的用户账号 (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_hour 字段用于捕获实体首次在客户环境中出现的时间(按小时分段)。
  • last_seen_hour 字段记录相应实体的最近一次观测时间的小时。

首次看到时间在过去 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) 内,这些网域每天最多与一项不同的资产相关联;在过去 10 天 (rolling_max = 1) 内,这些网域最多与一项不同的资产相关联。

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

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
  • 开源 Intel IOC (OPEN_SOURCE_INTEL_IOC)
  • Mandiant Active Breach IoC (MANDIANT_ACTIVE_BREACH_IOC)
  • Mandiant Fusion IoC (MANDIANT_FUSION_IOC)

限制

  • 量限制:对于有时限数据和无时限数据,累计结果的限制均为 100 万。
  • 全局上下文数据:对于敏感的全局上下文数据(例如 UPPERCASE_VT_PROTECTED、MANDIANT_ACTIVE_BREACH_IOC、MANDIANT_FUSION_IOC 和 VIRUS_TOTAL_CONNECTIONS),最多显示 50 行,这些数据仅供具有全局数据访问权限范围的用户查看。
  • 数据一致性:最后一次观看数据最多可能会延迟 2 小时。 相关实体可能仅显示活动中列出的部分实体。
  • 不支持的功能

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

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