Usar a sintaxe N OF com variáveis de evento

Compatível com:

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, $e1 ou #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.