Usar junções na Pesquisa
As junções ajudam a correlacionar dados de várias fontes para fornecer mais contexto a uma investigação. Ao vincular eventos, entidades e outros dados relacionados, é possível investigar cenários de ataques complexos.
Este documento explica como usar a operação de junção no Google Security Operations. Ele também aborda os tipos de junção compatíveis, casos de uso e práticas recomendadas.
Criar uma junção
Somente junções baseadas em estatísticas são aceitas. Você precisa defini-los na seção "match" de uma consulta com um período de correlação de até 48 horas.
É possível criar uma junção conectando campos diretamente (por exemplo, $e1.hostname = $e2.hostname
) ou usando variáveis de marcador de posição. Ao definir uma junção na seção match
, use variáveis de marcador de posição.
O exemplo a seguir consulta dois campos com um sinal de igual (=
) e uma
variável de marcador de posição compartilhada:
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 compatíveis
Esta seção descreve os diferentes tipos de junções que podem ser usadas.
Junção de evento a evento
Uma junção de evento a evento conecta dois eventos diferentes do Modelo de dados universal (UDM).
A consulta de exemplo a seguir vincula um evento USER_LOGIN
a outro para encontrar o nome do host (altostrat
) com que o usuário interagiu, com base em um 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
Junção de evento e eletrocardiograma
Uma junção de evento e ECG conecta um evento da UDM a uma entidade do Entity Context Graph (ECG). A consulta de exemplo a seguir encontra um evento NETWORK_CONNECTION
e um ASSET
do gráfico de entidades que compartilham o mesmo nome de host em uma janela de uma 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 evento e tabela de dados
Uma junção de evento de tabela de dados conecta eventos da UDM a entradas em uma tabela de dados personalizada.
Isso é útil para verificar dados de eventos ao vivo em relação a uma lista definida pelo usuário, como endereços IP maliciosos conhecidos ou agentes de ameaças. A consulta de exemplo a seguir une eventos NETWORK_CONNECTION
com uma tabela de dados para encontrar conexões que envolvem 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 vários resultados. Filtros amplos e gerais podem fazer com que as consultas falhem, às vezes após um longo atraso. Por exemplo:
target.ip != null
metadata.event_type = "NETWORK_CONNECTION"
(se esse tipo de evento for muito comum no seu ambiente)
Recomendamos combinar filtros gerais com outros mais específicos para reduzir o número total de eventos que a consulta precisa processar. Um filtro amplo como
target.ip != null
precisa ser combinado com 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 ainda estiver lenta, reduza o período geral dela (por exemplo, de 30 dias para uma semana).
Para mais informações, consulte Práticas recomendadas da YARA-L.
Limitações
As seguintes limitações se aplicam ao usar junções:
É possível usar no máximo dois eventos da UDM por consulta.
É possível usar no máximo um evento de ECG por consulta.
É possível usar no máximo duas tabelas de dados por consulta.
Não é possível combinar eventos de tabela de dados, UDM e ECG em uma única consulta.
O período máximo da consulta é de 90 dias.
O período máximo de
match
é de 48 horas.As junções são compatíveis com a interface do usuário e a API
EventService.UDMSearch
, mas não com a APISearchService.UDMSearch
.
Casos de uso comuns
Esta seção lista algumas maneiras comuns de usar junções.
Detectar roubo e uso de credenciais
Meta: encontrar instâncias em que um usuário faz login com êxito e depois exclui rapidamente um arquivo crítico do sistema. Isso pode sugerir uma invasão de conta ou atividade interna maliciosa.
Tipo de junção: junção de evento com evento
Descrição: esta consulta conecta dois eventos distintos que não são suspeitos por si só, mas se tornam altamente suspeitos quando ocorrem juntos. Primeiro, ele procura um evento USER_LOGIN
e, depois, um evento FILE_DELETION
. Eles são unidos pelo user.userid
comum com uma janela de tempo curta.
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
Identificar conexões arriscadas de recursos essenciais
Objetivo: enriquecer os dados de rede em tempo real com informações de recursos para encontrar conexões de saída de servidores que não deveriam se comunicar com domínios externos de baixa prevalência (por exemplo, um servidor de banco de dados de produção).
Tipo de junção: junção de evento e eletrocardiograma
Descrição: uma única conexão de rede com um domínio raro pode não ser de alta prioridade. No entanto, essa consulta aumenta a importância do evento ao associá-lo ao gráfico de contexto de entidade (ECG, na sigla em inglês). Ele procura especificamente eventos NETWORK_CONNECTION
que vêm de recursos rotulados como "Servidor de banco de dados crítico" no gráfico de entidades.
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
Buscar IOCs de agentes de ameaças
Objetivo: pesquisar ativamente indicadores de comprometimento (IoCs) verificando todas as consultas DNS ativas em uma lista de domínios conhecidos por serem usados por um invasor específico.
Tipo de junção: junção de tabela de dados e evento
Descrição: sua equipe de inteligência de ameaças mantém uma tabela de dados chamada ThreatActor_Domains
que lista domínios maliciosos. Essa consulta une todos os eventos NETWORK_DNS_QUERY
em tempo real com essa tabela de dados. Ele mostra imediatamente qualquer instância em que um host na sua rede tenta resolver um domínio da sua lista de inteligência de 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 do Google SecOps.