Agregações e estatísticas da YARA-L 2.0
Nesta página, descrevemos como executar consultas estatísticas em eventos da UDM e agrupar os resultados para análise usando o YARA-L 2.0.
Ao processar um grande volume de eventos da UDM gerados no seu ambiente, é importante entender as tendências nos dados de pesquisa da UDM. É possível usar estatísticas e funções de agregação para receber insights úteis dos registros da UDM. A pesquisa do UDM é compatível com todas as funções de agregação da YARA-L 2.0.
Casos de uso para consultas estatísticas
É possível usar consultas estatísticas para os seguintes casos de uso:
Acompanhe métricas importantes: é possível medir a distribuição e a frequência de eventos da UDM e recursos associados, como hosts que se comunicam com endereços IP maliciosos conhecidos.
Detectar comportamento anômalo: é possível identificar picos de atividade que podem indicar incidentes de segurança, como aumentos inesperados no tráfego de rede ou logins fora do horário de expediente.
Analisar tendências ao longo do tempo: é possível avaliar as mudanças na postura de segurança para avaliar a eficácia do controle ou identificar áreas de melhoria, como monitorar as flutuações na contagem de vulnerabilidades ao longo do tempo.
Estrutura da consulta YARA-L 2.0 na pesquisa
É possível agrupar e ordenar os resultados da consulta de pesquisa da UDM usando uma sintaxe semelhante à YARA-L estruturada usada nas regras do mecanismo de detecção. Para mais informações, consulte Começar a usar: YARA-L 2.0 no Google SecOps.
A estrutura da consulta YARA-L 2.0 é a seguinte:
Instrução de filtragem: especifica as condições para filtrar eventos.
Correspondência (opcional): define os campos para agrupar por. Para mais informações, consulte Sintaxe da seção de correspondência.
Resultado: especifica as saídas da consulta. Para mais informações, consulte Sintaxe da seção de resultados.
Desduplicação (opcional): reduz o volume de resultados duplicados. Para mais informações, consulte Usar a remoção de duplicidades na pesquisa e nos painéis.
Ordem: determina a ordem dos resultados da consulta como
asc(crescente) oudesc(decrescente). Se a ordem (ascoudesc) não for especificada, o padrão seráasc.Limite (opcional): define o número máximo de linhas que a consulta retorna.
Exemplo: uso de ordem e limite
O exemplo a seguir mostra o uso de ordem e limite:
metadata.log_type = "OKTA"
match:
principal.ip
Outcome:
$user_count_by_ip = count(principal.user.userid)
order:
$user_count_by_ip desc
limit:
20
Funções de agregação
Quando os eventos contêm vários valores, é necessário usar funções de agregação para resumir os dados.
A Pesquisa é compatível com as seguintes funções de agregação:
matriz
array(expression)
Descrição
A função array retorna todos os valores na forma de uma lista. Ela trunca a lista para um máximo de 25 elementos aleatórios.
Tipos de dados de parâmetros
STRING
Tipo de retorno
LIST
Exemplos de código
Exemplo
Retorna uma matriz que contém tipos de eventos.
$event_type = metadata.event_type
outcome:
$event_type_array = array($event_type)
array_distinct
array_distinct(expression)
Descrição
A função array_distinct retorna todos os valores distintos em forma de lista. Ela trunca a lista para um máximo de 25 elementos aleatórios. A remoção de duplicidades para gerar uma lista distinta é aplicada antes do truncamento.
Tipos de dados de parâmetros
STRING
Tipo de retorno
LIST
Exemplos de código
Exemplo
Retorna uma matriz que contém tipos de eventos distintos.
$event_type = metadata.event_type
outcome:
$event_type_array = array_distinct($event_type)
méd.
avg(numericExpression)
Descrição
A função avg retorna a média dos valores em uma coluna numérica. Ele ignora os valores NULL durante o cálculo. Ela é usada com frequência com match para calcular as médias em grupos específicos nos dados.
Tipos de dados de parâmetros
NUMBER
Tipo de retorno
NUMBER
Exemplos de código
Exemplo
Encontrar todos os eventos em que target.ip não está vazio. Para todos os eventos que corresponderem a principal.ip, armazene a média de metadata.event_timestamp.seconds em uma variável chamada avg_seconds.
target.ip != ""
match:
principal.ip
outcome:
$avg_seconds = avg(metadata.event_timestamp.seconds)
contagem
count(expression)
Descrição
A função count retorna o número de linhas em um grupo. Ela é usada com frequência
com match para receber contagens de grupos específicos nos dados.
Tipos de dados de parâmetros
STRING
Tipo de retorno
NUMBER
Exemplos de código
Exemplo
Retorna a contagem de logins de usuários bem-sucedidos ao longo do tempo.
metadata.event_type = "USER_LOGIN"
$security_result = security_result.action
$security_result = "ALLOW"
$date = timestamp.get_date(metadata.event_timestamp.seconds, "America/Los_Angeles")
match:
$security_result, $date
outcome:
$event_count = count(metadata.id)
count_distinct
count_distinct(expression)
Descrição
A função count_distinct retorna o número de linhas que têm valores distintos em um grupo. Ele é usado com frequência com match para receber contagens de grupos específicos nos dados.
Tipos de dados de parâmetros
STRING
Tipo de retorno
NUMBER
Exemplos de código
Exemplo
Retorna a contagem de logins de usuários distintos bem-sucedidos ao longo do tempo.
metadata.event_type = "USER_LOGIN"
$security_result = security_result.action
$security_result = "ALLOW"
$date = timestamp.get_date(metadata.event_timestamp.seconds, "America/Los_Angeles")
match:
$security_result, $date
outcome:
$event_count = count_distinct(metadata.id)
mais antiga
earliest(timestamp)
Descrição
A função earliest retorna o carimbo de data/hora mais antigo de um conjunto de registros com resolução de microssegundos.
Tipos de dados de parâmetros
TIMESTAMP
Tipo de retorno
TIMESTAMP
Exemplo de código
Para todos os eventos que correspondem a hostname, armazene o mais antigo de metadata.event_timestamp na variável start.
$hostname = principal.hostname
match:
$hostname
outcome:
$start = earliest(metadata.event_timestamp)
mais recente
latest(timestamp)
Descrição
A função latest retorna o carimbo de data/hora mais recente de um conjunto de registros com resolução de microssegundos.
Tipos de dados de parâmetros
TIMESTAMP
Tipo de retorno
TIMESTAMP
Exemplo de código
Para todos os eventos que correspondem a hostname, armazene o mais recente de metadata.event_timestamp na variável end.
$hostname = principal.hostname
match:
$hostname
outcome:
$end = latest(metadata.event_timestamp)
máx.
max(numericExpression)
Descrição
A função max retorna o máximo dos valores em uma coluna numérica.
Geralmente é usado com match para extrair o valor máximo de cada grupo nos dados.
Tipos de dados de parâmetros
NUMBER
Tipo de retorno
NUMBER
Exemplos de código
Exemplo
Encontrar todos os eventos em que target.ip não está vazio. Para todos os eventos que corresponderem a principal.ip, armazene o máximo de metadata.event_timestamp.seconds em uma variável chamada max_seconds.
target.ip != ""
match:
principal.ip
outcome:
$max_seconds = max(metadata.event_timestamp.seconds)
min
min(numericExpression)
Descrição
A função min retorna o mínimo dos valores em uma coluna numérica. Ele é usado com frequência com match para receber o valor mínimo em cada grupo nos dados.
Tipos de dados de parâmetros
NUMBER
Tipo de retorno
NUMBER
Exemplos de código
Exemplo
Encontrar todos os eventos em que target.ip não está vazio. Para todos os eventos que correspondem a principal.ip, armazene o mínimo de metadata.event_timestamp.seconds em uma variável chamada min_seconds.
target.ip != ""
match:
principal.ip
outcome:
$min_seconds = min(metadata.event_timestamp.seconds)
stddev
stddev(numericExpression)
Descrição
A função stddev retorna o desvio padrão em todos os valores possíveis.
Tipos de dados de parâmetros
NUMBER
Tipo de retorno
NUMBER
Exemplos de código
Exemplo
Encontrar todos os eventos em que target.ip não está vazio. Para todos os eventos que correspondem a principal.ip, armazene o desvio padrão de metadata.event_timestamp.seconds em uma variável chamada stddev_seconds.
target.ip != ""
match:
principal.ip
outcome:
$stddev_seconds = stddev(metadata.event_timestamp.seconds)
ponderada
sum(numericExpression)
Descrição
A função sum retorna a soma dos valores em uma coluna numérica. Ele ignora os valores NULL durante o cálculo. Ele é usado com frequência com match para calcular as somas em diferentes grupos nos dados.
Tipos de dados de parâmetros
NUMBER
Tipo de retorno
NUMBER
Exemplos de código
Exemplo
Encontrar todos os eventos em que target.ip não está vazio. Para todos os eventos que corresponderem a principal.ip, armazene uma soma de network.sent_bytes em uma variável chamada sent_bytes.
target.ip != ""
match:
principal.ip
outcome:
$sent_bytes = sum(network.sent_bytes)
YARA-L 2.0: pesquisa em comparação com UDM
A palavra-chave
over, usada para pesquisas de período de evento, não é compatível com a pesquisa.As consultas de pesquisa da UDM não incluem as seções
conditioneoption.
Agrupar por granularidade de tempo
É possível agrupar campos de evento e marcadores de posição na seção match por uma granularidade de tempo especificada, semelhante ao agrupamento de uma coluna em SQL.
A sintaxe é a seguinte:
match:
... [BY|OVER EVERY] [FIRST] [NUMBER] [TIME_GRANULARITY]
Para agrupar por granularidade de tempo, use a palavra-chave by ou over
every. As granularidades de tempo permitidas são as seguintes:
MINUTEoumHOURouhDAYoudWEEKouwMONTHoumo
As palavras-chave by e over every são funcionalmente equivalentes. Você pode usar uma sobre a outra.
Exemplo: agrupar endereço IP e nome do host a cada duas horas
$hostname = principal.hostname
match:
$hostname, target.ip by 2h
Exemplo: agrupar por nome do host com granularidade de tempo integral
$hostname = principal.hostname
match:
$hostname by minute
Exemplo: agrupar todos os eventos por nome do host e dia em que ocorreram
$hostname = target.hostname
match:
$hostname over every day
outcome:
$events_count = count($hostname)
Algumas fontes de dados, como o contexto da entidade, são válidas em um período (<start_time>, <end_time>) e não têm carimbos de data/hora únicos.
A palavra-chave first é opcional e se aplica a um único carimbo de data/hora. Isso significa que, para uma fonte de dados válida em um período, a palavra-chave first considera apenas o horário de início (<start_time>).
Por exemplo, considere uma entidade com um período de (1m, 5m) e uma granularidade de tempo de 1m. Se os resultados forem agrupados por hosts (h1,h2), as colunas retornadas serão (h1, 1m) e (h2, 1m), e o restante do período será ignorado.
A palavra-chave first pode ser adicionada a by e over every, resultando no mesmo comportamento para ambas. O uso de by first é equivalente a
over every first.
Confira a seguir um exemplo de consulta que usa o operador by com a fonte de dados de contexto da entidade válida em um período. Nessa consulta, todo o período é considerado porque a palavra-chave first é omitida.
graph.entity.hostname != ""
match:
graph.entity.ip by hour
outcome:
$min_seconds = min(graph.metadata.event_metadata.event_timestamp.seconds)
Criar e salvar visualizações na pesquisa
Esta seção descreve os recursos de visualização de dados na pesquisa do modelo de dados unificado (UDM) do Google SecOps. Com esse recurso, os analistas da central de operações de segurança (SOC) podem detectar, investigar e responder a ameaças com eficiência criando visualizações com base nos resultados da pesquisa e salvando-as em painéis.
Criar e salvar visualizações para adicionar ao painel
Para criar e salvar visualizações que serão adicionadas ao painel, faça o seguinte:
Escreva uma consulta em YARA-L com seções
matcheoutcome.Selecione um período e clique em Executar pesquisa para executar a consulta. Confira os resultados nas guias Estatísticas e Visualizar.
Na guia Visualizar, faça o seguinte: a. Selecione um tipo de gráfico na lista Tipo de gráfico. b. Ajuste as configurações em Configurações de dados para personalizar o gráfico.
Na tela Adicionar ao painel, faça o seguinte: a. Insira um nome do gráfico, uma descrição e um período. b. Escolha adicionar o gráfico a um painel ou criar um.
Clique em Adicionar ao painel para incluir o gráfico no painel.
Limitações
As seguintes limitações se aplicam à execução de consultas estatísticas:
- As consultas não podem processar dados com mais de 90 dias (um período de retorno de três meses).
- As consultas estatísticas retornam no máximo 10.000 resultados.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.