Usar a sintaxe N OF com variáveis de evento
Este documento explica como usar a sintaxe N OF para
escrever uma lógica flexível e condicional na seção condition
da sua consulta.
A sintaxe N OF permite combinar várias condições, reduzindo a complexidade geral da sintaxe de consulta:
- Permite especificar que um número mínimo de expressões booleanas de uma determinada lista precisa ser avaliado como verdadeiro.
- Evita a necessidade de especificar todas as combinações possíveis, reduzindo erros e esforço.
Sintaxe N OF
A sintaxe de uma instrução N OF é uma lista separada por vírgulas de expressões booleanas, expressas da seguinte maneira:
[expr1, expr2, … , exprN] onde [expr1, expr2, … , exprN]
As seções a seguir mostram algumas variações da sintaxe N OF.
QUALQUER UM DE
O exemplo a seguir verifica se pelo menos uma expressão na lista é verdadeira.
Isso é o mesmo que juntar todas as expressões com or.
condition:
ANY OF [$e1, #e2 > 5, $outcome1 = "FAILED"]
TUDO
Se todas as expressões na lista a seguir forem verdadeiras, o exemplo será verdadeiro. Isso
é o mesmo que juntar todas as expressões com and.
condition:
ALL OF [$e1, $e2, $outcome1 = "SUCCESS"]
N de X
Isso será avaliado como verdadeiro se pelo menos N expressões da lista forem verdadeiras.
condition:
2 of [$e1, $e2 > 0, $e3, arrays.contains($outcome_ips, "1.2.3.4")]
Exemplo de regra: sinalizar acesso a arquivos sensíveis
A regra a seguir sinaliza um usuário se ele fizer login com sucesso ($e1). Em seguida, ela verifica se a sessão também atende a um dos dois critérios: um arquivo sensível é acessado ($e2) ou o número total de arquivos sensíveis únicos acessados excede 3.
rule MultiEventNOf {
meta:
author = "google-secops"
description = "Detects user login followed by sensitive file access or multiple sensitive files."
events:
$e1.principal.user.userid = $user
$e1.metadata.event_type = "USER_LOGIN"
$e2.principal.user.userid = $user
$e2.metadata.event_type = "FILE_OPEN"
re.regex($e2.target.file.full_path, `^/cns/sensitive/`)
match:
$user over 1h
outcome:
$sensitive_file_count = count_distinct($e2.target.file.full_path)
condition:
$e1 and ANY OF [$e2, $sensitive_file_count > 3]
}
Exemplo de pesquisa: sinalizar acesso a arquivos sensíveis
O exemplo a seguir mostra como reformatar a regra de exemplo como uma consulta de pesquisa.
$e1.principal.user.userid = $user
$e1.metadata.event_type = "USER_LOGIN"
$e2.principal.user.userid = $user
$e2.metadata.event_type = "FILE_OPEN"
re.regex($e2.target.file.full_path, `^/cns/sensitive/`)
match:
$user over 1h
outcome:
$sensitive_file_count = count_distinct($e2.target.file.full_path)
condition:
$e1 and ANY OF [$e2, $sensitive_file_count > 3]
Limitações conhecidas
Existência obrigatória de eventos: as expressões da sintaxe N OF não podem ser ilimitadas. A existência do evento precisa ser um requisito para que a cláusula seja verdadeira (por exemplo,
$e1ou#e1 > 0).Mistura de tipos de variáveis: não é possível combinar variáveis que não são da UDM com variáveis de evento da UDM na mesma lista de N DE.
Restrição de janela: não é possível usar janelas rotativas com a sintaxe N OF.
A seguir
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.