Utilizzare la sintassi N OF con le variabili evento

Supportato in:

Questo documento spiega come utilizzare la sintassi N OF per scrivere una logica flessibile e condizionale all'interno della sezione condition della query.

La sintassi N OF ti consente di combinare più condizioni, riducendo la complessità complessiva della sintassi della query:

  • Fornisce un modo per specificare che un numero minimo di espressioni booleane di un determinato elenco deve restituire il valore true.
  • Evita la necessità di specificare ogni possibile combinazione, riducendo gli errori e l'impegno.

Sintassi N OF

La sintassi di un'istruzione N OF è un elenco separato da virgole di espressioni booleane espresse nel seguente modo:

[expr1, expr2, … , exprN] dove [expr1, expr2, … , exprN]

Le sezioni seguenti mostrano alcune varianti della sintassi N DI.

UNO QUALSIASI

L'esempio seguente verifica se almeno un'espressione nell'elenco è vera. Equivale a unire tutte le espressioni con or.

condition:
  ANY OF [$e1, #e2 > 5, $outcome1 = "FAILED"]

TUTTO

Se tutte le espressioni nel seguente elenco sono vere, l'esempio è vero. Questa operazione equivale a unire tutte le espressioni con and.

condition:
  ALL OF [$e1, $e2, $outcome1 = "SUCCESS"]

N di X

Questa condizione viene valutata come true se almeno N espressioni dell'elenco sono vere.

condition:
  2 of [$e1, $e2 > 0, $e3, arrays.contains($outcome_ips, "1.2.3.4")]

Regola di esempio: segnala l'accesso ai file sensibili

La seguente regola segnala un utente se esegue l'accesso ($e1). La regola verifica poi se la sessione soddisfa anche uno dei due criteri: viene acceduto a un file sensibile ($e2) o il numero totale di file sensibili unici a cui è stato acceduto supera 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]
  }

Esempio di ricerca: segnala l'accesso a file sensibili

L'esempio seguente mostra come riformattare la regola di esempio come query di ricerca.

$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]

Limitazioni note

  • Esistenza evento obbligatoria: le espressioni N OF non possono essere illimitate. L'esistenza dell'evento deve essere un requisito per la validità della clausola (ad esempio, $e1 o #e1 > 0).

  • Combinazione di tipi di variabili: non puoi combinare variabili non UDM con variabili evento UDM all'interno dello stesso elenco N DI.

  • Limitazione della finestra: non puoi utilizzare finestre temporali con la sintassi N OF.

Passaggi successivi

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.