Use junções na Pesquisa
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 APISearchService.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.