Use junções na Pesquisa

Compatível com:

As junções ajudam a correlacionar dados de várias origens para fornecer mais contexto para uma investigação. Ao associar eventos, entidades e outros dados relacionados, pode investigar cenários de ataques complexos.

Este documento explica como usar a operação de junção no Google Security Operations. Também aborda os tipos de junção suportados, os exemplos de utilização e as práticas recomendadas.

Crie uma junção

Apenas são suportadas junções baseadas em estatísticas. Tem de defini-los na secção de correspondência de uma consulta com um intervalo de tempo de correlação de até 48 horas. Pode criar uma junção associando campos diretamente (por exemplo, $e1.hostname = $e2.hostname) ou usando variáveis de marcadores de posição. Quando define uma junção na secção match, tem de usar variáveis de marcadores de posição.

O exemplo seguinte consulta a junção de dois campos com um sinal de igual (=) e uma variável de marcador de posição partilhada:

Exemplo 1:


events:

  // Assign a value from the first event to the placeholder variable $user

  $user = $e1.principal.user.userid

  // The second assignment creates an implicit join, linking $e2 to $e1

  // where the user ID is the same.

  $user = $e2.principal.user.userid

match:

  $user over 1h

condition:

  $e1 and $e2

Exemplo 2:


$e1.principal.ip = $ip

$e1.metadata.event_type = "USER_LOGIN"

$e1.principal.hostname = $host

$e2.target.ip = $ip

$e2.principal.hostname = "altostrat"

$e2.target.hostname = $host

match:
  $ip, $host over 5m

Tipos de junção suportados

Esta secção descreve os diferentes tipos de junções que pode usar.

Junção evento-evento

Uma junção evento-evento associa dois eventos diferentes do modelo de dados universal (UDM). A seguinte consulta de exemplo associa um evento USER_LOGIN a outro evento para encontrar o nome do anfitrião (altostrat) com o qual o utilizador interagiu, com base num endereço IP comum:


$e1.principal.ip = $ip

$e1.metadata.event_type = "USER_LOGIN"

$e2.target.ip = $ip

$e2.principal.hostname = "altostrat"

match:

  $ip over 5m

Event-ECG join

Uma junção de ECG de eventos associa um evento de UDM a uma entidade do gráfico de contexto de entidades (ECG). A seguinte consulta de exemplo encontra um evento NETWORK_CONNECTION e um ASSET do gráfico de entidades que partilham o mesmo nome de anfitrião num período de 1 hora:


events:

   $e1.metadata.event_type = "NETWORK_CONNECTION"

   $g1.graph.metadata.entity_type = "ASSET"

   $e1.principal.asset.hostname = $g1.graph.entity.asset.hostname

   $x = $g1.graph.entity.asset.hostname

match:

   $x over 1h

condition:

   $e1 and $g1

Junção de eventos de tabela de dados

Uma associação de eventos de tabela de dados associa eventos da CDFU a entradas numa tabela de dados personalizada. Isto é útil para verificar os dados de eventos em direto em relação a uma lista definida pelo utilizador, como endereços IP maliciosos conhecidos ou autores de ameaças. A seguinte consulta de exemplo junta eventos NETWORK_CONNECTION com uma tabela de dados para encontrar ligações que envolvam endereços IP específicos dessa lista:


$ip = %DATATABLE_NAME.COLUMN_NAME

$ip = $e1.principal.ip

$e1.metadata.event_type = "NETWORK_CONNECTION"

match:

   $ip over 1h

Práticas recomendadas

As consultas de junção podem consumir muitos recursos porque combinam muitos resultados. Os filtros amplos e gerais podem fazer com que as consultas falhem, por vezes, após um longo atraso. Por exemplo:

  • target.ip != null

  • metadata.event_type = "NETWORK_CONNECTION" (se este tipo de evento for muito comum no seu ambiente)

Recomendamos que combine filtros gerais com filtros mais específicos para reduzir o número total de eventos que a consulta tem de processar. Um filtro amplo como target.ip != null deve ser associado a filtros mais específicos para melhorar o desempenho da consulta, por exemplo:

$e1.metadata.log_type = $log
$e1.metadata.event_type = "USER_LOGIN"
$e1.target.ip != ""

$e2.metadata.log_type = $log
$e2.principal.ip = "10.0.0.76"
$e2.target.hostname != "altostrat"

match:
$log over 5m

Se a consulta continuar lenta, também pode reduzir o intervalo de tempo geral da consulta (por exemplo, de 30 dias para uma semana).

Para mais informações, consulte as práticas recomendadas do YARA-L.

Limitações

Aplicam-se as seguintes limitações quando usa junções:

  • Pode usar um máximo de dois eventos da UDM por consulta.

  • Pode usar um máximo de um evento de ECG por consulta.

  • Pode usar um máximo de duas tabelas de dados por consulta.

  • Não pode juntar eventos de tabelas de dados, UDM e ECG numa única consulta.

  • O intervalo de tempo máximo da consulta é de 90 dias.

  • O período de match máximo é de 48 horas.

  • As junções são suportadas na interface do utilizador e na API EventService.UDMSearch, mas não na API SearchService.UDMSearch.

Exemplos de utilização comuns

Esta secção apresenta algumas formas comuns de usar as junções.

Detetar roubo e utilização de credenciais

Objetivo: encontrar instâncias em que um utilizador inicia sessão com êxito e, em seguida, elimina rapidamente um ficheiro de sistema crítico. Isto pode sugerir uma apropriação de conta ou atividade interna maliciosa.

Tipo de junção: junção evento-evento

Descrição: esta consulta associa dois eventos distintos que não são suspeitos por si só, mas tornam-se altamente suspeitos quando ocorrem em conjunto. Primeiro, procura um evento USER_LOGIN e, em seguida, um evento FILE_DELETION. Estes são unidos pelo comum user.userid com um curto período de tempo.

Exemplo de consulta:


// Event 1: A user successfully logs in

$e1.metadata.event_type = "USER_LOGIN"

$e1.security_result.action = "ALLOW"

$e1.principal.user.userid = $user

// Event 2: The same user deletes a critical file

$e2.metadata.event_type = "FILE_DELETION"

$e2.target.file.full_path = /etc\/passwd|C:\\Windows\\System32\\/

$e2.principal.user.userid = $user

match:
  $user over 10m

condition:
  $e1 and $e2

Identifique ligações arriscadas a partir de recursos críticos

Objetivo: enriquecer os dados de rede em direto com informações de recursos para encontrar ligações de saída de servidores que não devem comunicar com domínios externos de baixa prevalência (por exemplo, um servidor de base de dados de produção).

Tipo de junção: junção de ECG de evento

Descrição: uma única ligação de rede a um domínio raro pode não ser uma prioridade elevada. No entanto, esta consulta aumenta a importância desse evento juntando-o ao gráfico de contexto de entidades (ECG). Procura especificamente eventos que provenham de recursos etiquetados como "Critical Database Server" no gráfico de entidades.NETWORK_CONNECTION

Exemplo de consulta:


events:
  $e.metadata.event_type = "NETWORK_CONNECTION"

  $e.target.domain.prevalence.day_count <= 5

  $asset.graph.metadata.entity_type = "ASSET"

  $asset.graph.entity.asset.labels.value = "Critical Database Server"

  $e.principal.asset.hostname = $asset.graph.entity.asset.hostname

  $host = $e.principal.asset.hostname

match:
  $host over 1h

condition:
  $e and $asset

Procure IOCs de intervenientes responsáveis pela ameaça

Objetivo: procurar ativamente indicadores de comprometimento (IoCs) verificando todas as consultas DNS ativas em relação a uma lista de domínios conhecidos por serem usados por um ator de ameaças específico.

Tipo de junção: junção de tabela de dados e eventos

Descrição: a sua equipa de informações sobre ameaças mantém uma tabela de dados denominada ThreatActor_Domains que lista domínios maliciosos. Esta consulta junta todos os eventos de NETWORK_DNS_QUERY em tempo real com esta tabela de dados. Mostra imediatamente qualquer instância em que um anfitrião na sua rede tenta resolver um domínio da sua lista de informações sobre ameaças.

Exemplo de consulta:


// Datatable: Get the list of malicious domains

$domain = $ip = %DATATABLE_NAME.COLUMN_NAME

// Event: A DNS query is made

$e.metadata.event_type = "NETWORK_DNS"

$e.network.dns.questions.name = $domain

match:
  $domain over 5m

condition:
  $e

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