Fazer pesquisas de contexto de entidade

Compatível com:

O recurso Contexto da entidade na pesquisa melhora as investigações de segurança e a resposta a incidentes, permitindo que os usuários pesquisem e vejam eventos de contexto relacionados a entidades na conta do Google Security Operations. Ao contrário das pesquisas limitadas ao esquema de eventos padrão do modelo de dados unificado (UDM), esse recurso atende à necessidade de pesquisar além dos dados de eventos do UDM, incluindo o contexto da entidade do UDM, e oferece insights mais detalhados sobre incidentes de segurança.

Principais vantagens

  • Os analistas de segurança e caçadores de ameaças podem consultar informações contextuais sobre entidades.
  • Ajuda na análise da causa raiz, na busca de ameaças e na perícia.
  • Os usuários podem fazer pesquisas estatísticas no contexto da entidade para entender os padrões de telemetria e as entidades afetadas pela análise de telemetria.

Você pode usar o contexto de entidade para extrair insights dos resultados da pesquisa das seguintes maneiras:

  • Pesquisar usando nomes de campos de entidade da UDM: crie suas consultas de pesquisa usando nomes de campos de entidade da UDM. Por exemplo, para encontrar todos os eventos de contexto associados a um nome de host específico, crie uma pesquisa usando graph.entity.hostname.
  • Acessar a guia "Visão geral": a guia Visão geral oferece um resumo de alto nível das entidades encontradas na sua pesquisa, usando informações da consulta inserida por um usuário para mostrar informações. A página Visão geral mostra informações sobre tipos de entidades, como DOMAIN_NAME, IP_ADDRESS, ASSET, USER, FILE, GROUP e RESOURCE.
  • Use a guia "Entidade": a guia Entidade lista todos os eventos de contexto de entidade recebidos, incluindo subcomponentes como "Tendência ao longo do tempo", "Filtro de snapshot", "Agregações" e "Eventos". As entidades são categorizadas como temporais e atemporais, exibidas em guias separadas.
  • Ver agregações: as agregações são mostradas para campos, de maneira semelhante à pesquisa de eventos da UDM. As agregações são ainda categorizadas em tipos de contexto: contexto de entidade, contexto derivado e contexto global.

Gráfico de contexto da entidade do Search Console

O gráfico de contexto da entidade (ECG, na sigla em inglês) do Search Console oferece várias guias para ajudar você a analisar os dados de contexto da entidade:

  • Guia "Resultados": mostra Timed Data e Timeless Data.

    • Dados com carimbo de data/hora: mostra entidades que tinham um valor para metadata.interval.end_time durante a ingestão.
    • Dados atemporais: mostra entidades que não tinham valor para metadata.interval.end_time.

    O Search Console mostra um máximo de 10 mil entradas de dados com ou sem carimbo de data/hora.

  • Guia "Alertas": mostra todos os alertas associados às entidades encontradas na pesquisa.

  • Guia "Visão geral": apresenta informações sobre a entidade na consulta de pesquisa.

  • Gráfico de atividade ao longo do tempo:

    • Mostra o número de entidades e o contexto da entidade válidos em cada período. Use o controle deslizante para aumentar ou diminuir o zoom no intervalo de tempo.

    • Total de entidades alteradas: o gráfico de contexto de entidade (ECG, na sigla em inglês) armazena dados em intervalos de tempo dentro do período de validade. Ele também copia esses dados para o próximo período, desde que a entidade permaneça válida (com base em end_time). Esse gráfico é atualizado sempre que uma propriedade da entidade muda entre dois períodos.

Caso de uso: investigar uma conta de usuário comprometida

Considere o seguinte cenário: um analista de segurança precisa investigar uma conta de usuário potencialmente comprometida (email@company.com). Siga estas etapas para investigar:

  1. Identifique o usuário comprometido: um alerta sinaliza que o usuário email@company.com foi identificado como uma conta suspeita.

  2. Reúna informações de contexto da entidade: receba dados contextuais sobre o usuário para entender o escopo e o impacto.

  3. Executar consultas: use o Contexto da entidade na Pesquisa para executar as seguintes consultas:

    • graph.entity.user.email_addresses = "email@company.com" para recuperar informações sobre o usuário.
    • graph.entity.user.email_addresses = "email@company.com" AND graph.metadata.product_name = "Google Cloud Compute Context" para verificar o nome do produto e outros metadados.
  4. Analisar a guia "Visão geral": a guia Visão geral mostra o resumo da entidade para o usuário, incluindo:

    • Verifique os carimbos de data/hora de First Seen Hour e Last Seen Hour.
  • Analise os nomes de host, endereços IP e endereços MAC (se disponíveis).
  • Inspecione o modelo de hardware, a plataforma do SO e a versão da plataforma.
  1. Analisar a guia "Eventos": confira os eventos associados a esse usuário, incluindo tentativas de login e anomalias.

  2. Agregados de avaliações: identifique padrões e anomalias nos dados de contexto da entidade, distribuídos em contexto da entidade, contexto derivado e contexto global.

Para pesquisar dados de contexto da entidade, use os nomes dos campos de entidade da UDM nas consultas de pesquisa:

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

Os resultados da pesquisa mostram informações importantes sobre as entidades, incluindo:

  • Metadados da entidade
  • Métricas (First Seen Hour, Last Seen Hour)
  • Relações (Entity, Direction, Entity_label, Entity_type, Relationship)
  • Dependendo do tipo de entidade, campos específicos, como Principal_ip para ativos, Mail_id para usuários, File_name para hashes/arquivos e Domain_name e IP_address para domínios.

Exemplos de contexto da entidade na pesquisa

Esta seção oferece exemplos práticos de como usar o recurso Contexto da entidade da UDM para analisar estatísticas de entidades.

Para conferir as origens e os tipos de contexto disponíveis, execute a seguinte pesquisa de estatísticas de entidades da UDM na Pesquisa da 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

O Seletor de período mostra dados ativos no gráfico de entidades, não quando os dados de contexto foram ingeridos.

Como a pesquisa de entidades da UDM usa a interface padrão da pesquisa da UDM, é possível usar recursos como o painel Agregações (para ver os valores mais altos ou mais baixos), a tabela de resultados e os resultados expandidos das estatísticas da UDM.

Exemplo: ver ENTITY_TYPE distintos

Para complementar a pesquisa de entidades da UDM, inclua a origem do registro, o namespace e uma matriz de resultados para mostrar os ENTITY_TYPEs distintos observados, da seguinte forma:

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

Exemplo: refinar seu conjunto de entidades

É possível refinar um conjunto específico de entidades usando o recurso de rotação da pesquisa UDM. Esse refinamento gera uma consulta da YARA-L como esta:

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"

Contexto derivado

O Google SecOps oferece os seguintes tipos de contexto derivado:

  • Carimbos de data/hora de first_seen e last_seen para cada ENTITY_TYPE
  • Prevalence: o número de recursos que acessaram um determinado ENTITY_TYPE

First Seen Hour e Last Seen Hour marcações de tempo

O Google SecOps realiza análises estatísticas dos dados recebidos e enriquece os registros de contexto da entidade com carimbos de data/hora first_seen e last_seen:

  • O campo first_seen_time captura a hora em que uma entidade foi vista pela primeira vez no ambiente do cliente.
  • O campo last_seen_time registra a hora da observação mais recente dessa entidade.

Usuários com uma hora de primeira visualização nos últimos 7 dias:

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

Domínios vistos pela primeira vez nos últimos 7 dias:

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)

Arquivo (hashes) observado nos últimos 7 dias:

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)

O ENTITY_TYPE representa um hash FILE, por exemplo, entity.file.hash. No objeto hash, o tipo pode ser um dos seguintes:

  • md5
  • sha1
  • sha256

Para pesquisar um hash específico, execute uma pesquisa de entidade da UDM para o tipo de hash em questão:

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

Endereços IP

O ENTITY_TYPES derivado de IP_ADDRESS pode representar entidades internas ou externas.

A seguinte pesquisa de estatísticas de entidade da UDM identifica IP_ADDRESSES observados recentemente e usa funções de agregação (na seção de resultados) para contá-los por bloco 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))

Para investigar mais um intervalo incomum ou inesperado, faça uma pesquisa de entidade da 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")

Prevalência

A prevalência é sempre do tipo DERIVED_CONTEXT.

A pesquisa de entidade da UDM a seguir identifica nomes de domínio que são raramente observados. Esses domínios estão associados a no máximo um recurso distinto por dia, durante o período da consulta (day_max = 1), e no máximo um recurso distinto nos últimos 10 dias (rolling_max = 1).

Esse padrão é útil para detectar domínios com interação limitada no seu ambiente:

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

Ou transforme isso em uma pesquisa agregada de estatísticas de entidades UDM e agregue os resultados:

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

Pesquisas básicas de campos de entidades UDM

Confira mais exemplos de como usar o recurso Contexto da entidade na Pesquisa no Google SecOps, com base nas fontes disponíveis:

  • 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"

Como criar uma tabela dinâmica com base em campos de entidade

Use campos de entidade para criar tabelas dinâmicas e analisar dados relacionados. Exemplos de campos de rotação:

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

Entender os campos dinâmicos

As fontes referenciam campos estruturados dinâmicos com prefixos, como additional. Você pode pesquisar esses campos em eventos da UDM.

Considerações sobre o controle de acesso

O sistema impõe um limite de 50 eventos nos dados de contexto global. Os usuários globais e com escopo podem ver os dados.

As fontes a seguir fornecem dados de contexto global:

Dados de contexto global Onde um usuário pode ver ou interagir com esses dados Quem pode ver
Navegação segura - Pesquisa
- Regras
Todos os usuários
Relacionamentos do VirusTotal - Pesquisa
- Regras
Todos os usuários
WHOIS - Pesquisa
- Regras
Todos os usuários
Uppercase - Pesquisa
- Regras
Todos os usuários
IOC de inteligência de código aberto (OPEN_SOURCE_INTEL_IOC) - Pesquisa
- Regras
Todos os usuários
IoC do Mandiant Fusion (MANDIANT_FUSION_IOC) - Pesquisa
- Regras
- Novas ameaças
Todos os usuários

Limitações

  • Limites de volume: limite de 1 milhão de resultados cumulativos para dados com e sem carimbo de data/hora.
  • Dados de contexto global: há um limite de 50 linhas para dados sensíveis de contexto global, como UPPERCASE_VT_PROTECTED, MANDIANT_FUSION_IOC e VIRUS_TOTAL_CONNECTIONS.
  • Consistência de dados: os dados de "Última visualização" podem ter um atraso de até 2 horas. As entidades relacionadas podem mostrar apenas um subconjunto das entidades listadas em um evento.
  • Recursos não compatíveis:

    • Pesquisas inversas em campos de entidade, pesquisas de campos agrupados, baixa prevalência e mapa de calor.
    • Não é possível fazer junção entre o contexto da entidade e as consultas de eventos.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.