Sintaxe da secção de correspondência
A secção match fornece os parâmetros necessários para correlacionar vários eventos relacionados numa única deteção. Só é obrigatório para regras que associam dois ou mais eventos distintos. Use-o para definir os critérios desta correlação
especificando o seguinte:
Campos de agrupamento (chaves): os campos específicos dos eventos (definidos na secção
events) que têm de partilhar o mesmo valor para que os eventos sejam associados logicamente.Restrição temporal: o período de tempo contínuo no qual os eventos relacionados têm de ocorrer para constituírem uma correspondência única e completa. Isto só é necessário para regras e não é necessário para a pesquisa nem para os painéis de controlo.
Defina a secção de correspondência
As regras requerem que as variáveis de correspondência sejam marcadores de posição definidos na secção event. Também pode especificar campos event na Pesquisa e nos painéis de controlo.
Use as variáveis de marcadores de posição definidas na secção events para especificar o período durante o qual os eventos têm de ocorrer. Todos os eventos correspondentes que ocorram fora do período especificado são ignorados para esse grupo de deteção específico.
Use a palavra-chave over e a sintaxe <number><m/h/d> (em que m/h/d são minutos, horas e dias) para especificar o período. Pode especificar um mínimo de um minuto e um máximo de 48 horas.
Esta regra de exemplo deteta inícios de sessão falhados que ocorrem num período de 10 minutos. A correlação de vários inícios de sessão falhados num curto período indica frequentemente uma tentativa de acesso não autorizado ou de força bruta.
rule failed_logins
{
meta:
author = "Security Team"
description = "Detects multiple failed user logins within 10-minute windows."
severity = "HIGH"
events:
$e.metadata.event_type = "USER_LOGIN"
$e.security_result.action = "FAIL"
$user = $e.target.user.userid
match:
$user over 10m
condition:
#e >= 5
}
A secção match encontra utilizadores com uma tentativa de início de sessão falhada numa nova localização num intervalo de 10 minutos:
match:
$user over 10m
Valores zero na secção de correspondência
O Google SecOps filtra implicitamente os valores zero para todos os marcadores de posição que são usados na secção match ("" para string, 0 para números, false para booleanos, o valor na posição 0 para tipos enumerados).
Exemplo: filtrar valores zero
O exemplo seguinte ilustra consultas que filtram os valores zero.
rule ZeroValuePlaceholderExample {
meta:
events:
// Because $host is used in the match section, the query behaves
// as if the following predicate was added to the events section:
// $host != ""
$host = $e.principal.hostname
// Because $otherPlaceholder was not used in the match,
// there is no implicit filtering of zero values for $otherPlaceholder.
$otherPlaceholder = $e.principal.ip
match:
$host over 5m
condition:
$e
}No entanto, se um marcador de posição for atribuído a uma função, as consultas não
filtram implicitamente os valores zero dos marcadores de posição usados na
secção match.
Para desativar a filtragem implícita de valores zero,
pode usar a opção allow_zero_values na secção de opções. A opção allow_zero_values só está disponível em Regras.
Exemplo: permitir valores zero
O exemplo seguinte ilustra consultas que não filtram implicitamente os valores zero de marcadores de posição usados na secção match:
rule ZeroValueFunctionPlaceholder {
meta:
events:
// Even though $ph is used in the match section, there is no
// implicit filtering of zero values for $ph, because $ph is assigned to a function.
$ph = re.capture($e.principal.hostname, "some-regex")
match:
$ph over 5m
condition:
$e
}Períodos suportados
Pode agrupar campos de eventos e marcadores de posição na secção match por uma granularidade de tempo especificada através de uma das seguintes janelas suportadas.
- Saltar janelas (janelas sobrepostas)
- Janelas de rolamento (janelas não sobrepostas)
- Janelas deslizantes (janelas geradas por eixos)
Hop windows
Uma janela de salto é um tipo de consulta de vários eventos que agrupa eventos que correspondem aos critérios de uma consulta num período especificado, independentemente da ordem em que ocorrem. Por predefinição, as consultas YARA-L com uma secção match usam janelas de saltos para correlacionar vários eventos ao longo do tempo. O intervalo de tempo da execução da consulta é dividido num conjunto de janelas de salto sobrepostas, cada uma com a duração especificada na secção match. Em seguida, os eventos são correlacionados em cada intervalo de saltos.
Por exemplo, para uma consulta executada no intervalo de tempo [1:00, 2:00], com uma secção match sobre 30m, um possível conjunto de intervalos de saltos sobrepostos que podem ser gerados é [1:00, 1:30], [1:03, 1:33] e [1:06, 1:36].
Estes períodos são usados para correlacionar vários eventos.
Janelas de tombo
Uma janela de tempo contínuo segmenta um fluxo de dados em intervalos de tempo contínuos, não sobrepostos e de tamanho fixo. Cada evento de dados é atribuído apenas a uma janela. Isto contrasta com uma janela deslizante ou de salto, que pode ter intervalos de tempo sobrepostos.
Por exemplo, com uma janela de tempo de 30 minutos, os eventos que ocorrem entre as 01:00:00 e as 01:29:59 são processados em conjunto. Em seguida, o conjunto seguinte de eventos, das 01:30:00 às 01:59:59, é processado separadamente.
Janelas deslizantes
Quando precisa de pesquisar eventos que ocorrem numa ordem relativa específica (por exemplo, e1ocorre até dois minutos após e2), as janelas deslizantes são altamente eficazes. As janelas deslizantes são geradas quando uma restrição de tempo começa ou termina com uma variável de evento de referência especificada. Isto acompanha dinamicamente a sequência de eventos e a data/hora em relação a essa variável de evento de referência específica.
Em seguida, os eventos são correlacionados em cada janela deslizante. Isto permite-lhe pesquisar eventos que ocorrem numa ordem específica (por exemplo, e1 ocorre no prazo de 2 minutos após e2). Uma ocorrência do evento e1 e uma ocorrência do evento e2 estão correlacionadas se o evento e1 ocorrer no período de tempo de análise após o evento e2.
- Os períodos dinâmicos baseiam-se na variável do evento de referência (
pivot-event-var). - Use a palavra-chave
beforepara gerar intervalos móveis que terminam com cada ocorrência do evento de referência. - Use a palavra-chave
afterpara gerar janelas deslizantes que começam com cada ocorrência do evento de referência.
Especifique intervalos móveis na secção match de uma consulta da seguinte forma:
<match-var-1>, <match-var-2>, ... over <duration> before|after <pivot-event-var>
Os exemplos seguintes mostram janelas deslizantes válidas:
$var1, $var2 over 5m after $e1
$user over 1h before $e2
Notas:
- Exemplo de janela deslizante adicional.
Sabe-se que a utilização de janelas deslizantes em vez de janelas de salto resulta num desempenho mais lento. Recomendamos que use janelas deslizantes apenas para casos específicos, como quando a ordem dos eventos é absolutamente necessária ou quando procura a não existência de eventos.
Uma vez que as janelas deslizantes são concebidas para detetar vários eventos, recomendamos que não as use para consultas de evento único. Em alternativa, use uma das seguintes soluções alternativas:
- Converta a consulta para usar várias variáveis de eventos e atualize a secção de condições se a consulta exigir mais do que uma ocorrência do evento.
- Opcionalmente, considere adicionar filtros de data/hora em vez de usar um período dinâmico. Por exemplo:
$permission_change.metadata.event_timestamp.seconds < $file_creation.metadata.event_timestamp.seconds - Remova a janela deslizante.
O que se segue?
Informações adicionais
- Expressões, operadores e construções usados no YARA-L 2.0
- Funções no YARA-L 2.0
- Crie regras de deteção compostas
- Exemplos: consultas YARA-L 2.0
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.