Faça uma pesquisa de dados de contexto de entidades

Compatível com:

A funcionalidade Contexto da entidade na Pesquisa melhora as investigações de segurança e a resposta a incidentes, permitindo que os utilizadores pesquisem e vejam eventos de contexto relacionados com entidades na respetiva conta do Google Security Operations. Ao contrário das pesquisas limitadas ao esquema de eventos do modelo de dados unificado (UDM) padrão, esta funcionalidade aborda a necessidade de pesquisar além dos dados de eventos do UDM, incluindo o contexto da entidade do UDM, e fornece estatísticas mais detalhadas sobre incidentes de segurança.

Principais vantagens

  • Os analistas de segurança e os caçadores de ameaças podem consultar informações contextuais sobre entidades.
  • Ajudar na análise da causa principal, na deteção de ameaças e na análise forense.
  • Os utilizadores podem executar pesquisas estatísticas no contexto da entidade para compreender os padrões de telemetria e as entidades afetadas através da análise de telemetria.

Pode usar o contexto das entidades para obter estatísticas dos seus resultados de pesquisa das seguintes formas:

  • Pesquise usando os nomes dos campos da entidade UDM: crie as suas consultas de pesquisa usando os nomes dos campos da entidade UDM. Por exemplo, para encontrar todos os eventos de contexto associados a um nome de anfitrião específico, crie uma pesquisa com graph.entity.hostname.
  • Aceda ao separador Vista geral: o separador Vista geral oferece um resumo de alto nível das entidades encontradas na sua pesquisa, tirando partido das informações da consulta que um utilizador introduz para apresentar informações. A página Vista geral apresenta informações para tipos de entidades, como DOMAIN_NAME, IP_ADDRESS, ASSET, USER, FILE, GROUP e RESOURCE.
  • Use o separador Entidade: o separador Entidade lista todos os eventos de contexto de entidade recebidos, incluindo subcomponentes como Tendência ao longo do tempo, Filtro de instantâneo, Agregações e Eventos. As entidades são categorizadas em entidades temporais e intemporais, apresentadas em separadores separados.
  • Ver agregações: as agregações são apresentadas para campos, de forma semelhante à pesquisa de eventos da UDM. As agregações são ainda categorizadas em tipos de contexto: Entity Context, Derived Context e Global Context.

Exemplo de utilização: investigar uma conta de utilizador comprometida

Considere o seguinte cenário: um analista de segurança tem de investigar uma conta de utilizador potencialmente comprometida (email@company.com). Siga estes passos para investigar:

  1. Identificar o utilizador comprometido: um alerta indica que o utilizador email@company.com foi identificado como uma conta suspeita.

  2. Recolha informações de contexto da entidade: obtenha dados contextuais sobre o utilizador para compreender o âmbito e o impacto.

  3. Executar consultas: use o contexto de entidade na Pesquisa para executar as seguintes consultas:

    • graph.entity.user.email_addresses = "email@company.com" para obter informações sobre o utilizador.
    • 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. Analise o separador Vista geral: o separador Vista geral apresenta o resumo da entidade para o utilizador, incluindo:

    • Verifique as indicações de tempo First Seen e Last Seen.
    • Reveja os nomes de anfitriões, os endereços IP e os endereços MAC (se disponíveis).
    • Inspecione o modelo de hardware, a plataforma do SO e a versão da plataforma.
  5. Examine o separador Eventos: veja os eventos associados a este utilizador, incluindo tentativas de início de sessão e anomalias.

  6. Rever agregados: identifique padrões e anomalias nos dados de contexto das entidades, distribuídos em contexto da entidade, contexto derivado e contexto global.

Para pesquisar dados de contexto de entidades, use os nomes dos campos de entidades do UDM nas suas consultas de pesquisa:

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

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

  • Metadados da entidade
  • Métricas (First Seen, Last Seen)
  • Relations (Entity, Direction, Entity_label, Entity_type, Relationship)
  • Consoante o tipo de entidade, campos específicos, como Principal_ip para recursos, Mail_id para utilizadores, File_name para hashes/ficheiros e Domain_name e IP_address para domínios.

Contexto da entidade em exemplos de pesquisa

Esta secção fornece exemplos práticos de criação com base na funcionalidade de contexto de entidade da UDM para analisar estatísticas de entidades.

Para ver os tipos e as origens 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 Selecionador de horas mostra os dados ativos no gráfico de entidades e não quando os dados de contexto foram carregados.

Uma vez que a pesquisa de entidades da UDM usa a interface de pesquisa da UDM padrão, pode usar funcionalidades, como o painel Agregações (para ver os valores superiores ou inferiores), a tabela de resultados e os resultados expandidos das estatísticas da UDM.

Exemplo: ver ENTITY_TYPE

Para expandir a pesquisa de entidades UDM, pode incluir a origem do registo, o espaço de nomes e uma matriz de resultados para mostrar 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: refine o conjunto de entidades

Pode refinar um conjunto específico de entidades através da funcionalidade de tabela dinâmica de pesquisa do UDM. Este refinamento gera, em seguida, uma consulta YARA-L semelhante à seguinte:

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 fornece os seguintes tipos de contexto derivado:

  • Data/hora de first_seen e last_seen para cada ENTITY_TYPE
  • Prevalence: o número de recursos que acederam a um determinado ENTITY_TYPE

First Seen e Last Seen indicações de tempo

O SecOps da Google realiza uma análise estatística dos dados recebidos e enriquece os registos de contexto das entidades com as datas/horas first_seen e last_seen:

  • O campo first_seen_time capta quando uma entidade foi vista pela primeira vez no ambiente do cliente.
  • O campo last_seen_time regista a observação mais recente dessa entidade.

Utilizadores 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.seconds >= timestamp.current_seconds()- (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.seconds >= timestamp.current_seconds()- (86400 * 7)

Ficheiros (hashes) observados 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.seconds >= timestamp.current_seconds()- (86400 * 7)

O símbolo 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, pode executar uma pesquisa de entidades UDM para o tipo de hash fornecido:

// 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 entidades do UDM identifica IP_ADDRESSES observados recentemente e usa funções de agregação (na secçã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.seconds >= timestamp.current_seconds()- (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 detalhadamente um intervalo invulgar ou inesperado, pode executar uma pesquisa de entidade 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 seguinte pesquisa de entidades UDM identifica nomes de domínio que são raramente observados. Estes domínios estão especificamente associados no máximo a um recurso distinto por dia, durante o período da consulta (day_max = 1), e no máximo a um recurso distinto nos 10 dias anteriores (rolling_max = 1).

Este padrão é útil para detetar 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

Em alternativa, pode transformar isto numa pesquisa de estatísticas de entidades do UDM agregadas e agregar 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

Seguem-se exemplos adicionais de utilização do contexto de entidade na funcionalidade de pesquisa no Google SecOps, com base nas origens 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"

Criar tabelas dinâmicas a partir de campos de entidades

Use campos de entidades para criar tabelas dinâmicas e explorar dados relacionados. Exemplos de campos dinâmicos:

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

Compreenda os campos dinâmicos

As fontes fazem referência a campos estruturados dinâmicos com prefixos, como additional. Pode pesquisar estes campos em eventos de UDM.

Considerações sobre o controlo de acesso

É imposto um limite de 50 eventos aos dados de contexto global e são removidas as referências aos controlos de acesso.

As seguintes fontes oferecem compatibilidade com o contexto global:

  • Navegação segura
  • Relações do VirusTotal
  • WHOIS
  • Maiúsculas
  • IOCs da Intel de código aberto (OPEN_SOURCE_INTEL_IOC)
  • IOC de violação ativa do Mandiant (MANDIANT_ACTIVE_BREACH_IOC)
  • Mandiant Fusion IOC (MANDIANT_FUSION_IOC)

Limitações

  • Limites de volume: limite de 1 milhão de resultados cumulativos para dados com e sem limite de tempo.
  • Dados de contexto global: existe um limite de 50 linhas para dados de contexto global sensíveis, como UPPERCASE_VT_PROTECTED, MANDIANT_ACTIVE_BREACH_IOC, MANDIANT_FUSION_IOC e VIRUS_TOTAL_CONNECTIONS, apresentados aos utilizadores com âmbito de acesso aos dados globais.
  • Consistência dos 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 num evento.
  • Funcionalidades não suportadas:

    • Pesquisas inversas em campos de entidades, pesquisas de campos agrupados, baixa prevalência e mapa de calor.
    • Não pode juntar consultas de entidades e eventos.

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