Use a sintaxe N OF com variáveis de eventos
Este documento explica como usar a sintaxe N OF para escrever lógica flexível e condicional na secção condition da sua consulta.
A sintaxe N OF permite-lhe combinar várias condições, reduzindo a complexidade geral da sintaxe da consulta:
- Oferece uma forma de especificar que um número mínimo de expressões booleanas de uma determinada lista tem de ser avaliado como verdadeiro.
- Evita a necessidade de especificar todas as combinações possíveis, reduzindo os erros e o esforço.
Sintaxe N OF
A sintaxe de uma declaração N OF é uma lista separada por vírgulas de expressões booleanas expressas da seguinte forma:
[expr1, expr2, … , exprN] em que [expr1, expr2, … , exprN]
As secções seguintes mostram algumas variações da sintaxe N DE.
QUALQUER UM DE
O exemplo seguinte verifica se, pelo menos, uma expressão na lista é verdadeira.
Isto é o mesmo que juntar todas as expressões com or.
condition:
ANY OF [$e1, #e2 > 5, $outcome1 = "FAILED"]
TODOS OS
Se todas as expressões na lista seguinte forem verdadeiras, o exemplo é verdadeiro. Isto é o mesmo que juntar todas as expressões com and.
condition:
ALL OF [$e1, $e2, $outcome1 = "SUCCESS"]
N de X
Esta condição é avaliada como verdadeira 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")]
Regra de exemplo: sinalizar acesso a ficheiros confidenciais
A regra seguinte marca um utilizador se este iniciar sessão com êxito ($e1). Em seguida, a regra verifica se a sessão também cumpre um de dois critérios: um ficheiro confidencial é acedido ($e2) ou o número total de ficheiros confidenciais únicos acedidos 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 ficheiros confidenciais
O exemplo seguinte mostra como pode 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 de eventos obrigatória: as expressões da sintaxe N OF não podem ser ilimitadas. A existência do evento tem de ser um requisito para que a cláusula seja verdadeira (por exemplo,
$e1ou#e1 > 0).Mistura de tipos de variáveis: não pode combinar variáveis não UDM com variáveis de eventos UDM na mesma lista N DE.
Restrição de janelas: não pode usar janelas de rolamento com a sintaxe N OF.
O que se segue?
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.