Sintassi della sezione degli eventi

Supportato in:

La sezione events deve seguire immediatamente la sezione meta in una regola. Definisce gli eventi che la query deve esaminare e gli attributi specifici che questi eventi devono possedere per essere considerati pertinenti per un potenziale rilevamento.

La sezione events è obbligatoria per regole, ricerche e dashboard.

Utilizza la sezione events per elencare i predicati che specificano quanto segue:

  • Dichiarazioni di variabili
  • Filtri delle variabili degli eventi
  • Join delle variabili degli eventi

Definire la sezione degli eventi

Le regole e le query incentrate su un solo tipo di evento possono includere una singola variabile di evento, ad esempio:

events:
  $e.metadata.event_type = "USER_LOGIN" // 'e' is the common convention for a single event

Le regole e le query che richiedono la correlazione tra due o più tipi distinti di eventi (ad esempio, un accesso utente seguito da una modifica del file) richiedono una variabile per ogni tipo di evento:

events:
  $login.metadata.event_type = "USER_LOGIN" // Event 1: User Login
  $file_op.metadata.event_type = "FILE_MODIFICATION" // Event 2: File Modification

Una volta dichiarata una variabile di evento, la utilizzi come prefisso per accedere a campi specifici di quel tipo di evento. Ad esempio, la seguente sezione event filtra gli eventi di accesso non riuscito da Okta:

events:
   $e.metadata.vendor_name = "Okta"
   $e.metadata.event_type = "USER_LOGIN"
   $e.security_result.action = "FAIL"

Dichiarazioni di variabili

Per le dichiarazioni di variabili, utilizza la seguente sintassi:

  • <EVENT_FIELD> = <VAR>
  • <VAR> = <EVENT_FIELD>

Entrambe sono equivalenti, come mostrato negli esempi seguenti:

  • $e.source.hostname = $hostname
  • $userid = $e.principal.user.userid

Questa dichiarazione indica che questa variabile rappresenta il campo specificato per la variabile di evento. Quando il campo evento è un campo ripetuto, la variabile match può rappresentare qualsiasi valore nell'array. Puoi anche assegnare più campi evento a una singola variabile di corrispondenza o segnaposto. Questa operazione è detta condizione di join transitiva.

Ad esempio, quanto segue:

  • $e1.source.ip = $ip
  • $e2.target.ip = $ip

Sono equivalenti a:

  • $e1.source.ip = $ip
  • $e1.source.ip = $e2.target.ip

Quando viene utilizzata una variabile, deve essere dichiarata tramite la dichiarazione della variabile. Se una variabile viene utilizzata senza alcuna dichiarazione, viene generato un errore di compilazione.

Per ulteriori informazioni sulle variabili, consulta Espressioni, operatori e altri costrutti.

Filtri delle variabili degli eventi

Un'espressione booleana che agisce su una singola variabile di evento è considerata un filtro.

Join delle variabili degli eventi

Tutte le variabili di evento utilizzate in una regola devono essere unite a ogni altra variabile di evento in uno dei seguenti modi:

  • Direttamente tramite un confronto di uguaglianza tra i campi evento delle due variabili di evento unite, ad esempio: $e1.field = $e2.field. L'espressione non deve includere operazioni aritmetiche (ad esempio, $\text{+, -, *, /}$).

  • Indirettamente tramite un join transitivo che coinvolge solo un campo evento (vedi la dichiarazione della variabile per la definizione di "join transitivo"). L'espressione non deve includere l'aritmetica.

Ad esempio, supponendo che nella regola vengano utilizzate $e1, $e2 e $e3, le seguenti sezioni events sono valide:

events:
  $e1.principal.hostname = $e2.src.hostname // $e1 joins with $e2
  $e2.principal.ip = $e3.src.ip // $e2 joins with $e3
events:
  // $e1 joins with $e2 using function to event comparison
  re.capture($e1.src.hostname, ".*") = $e2.target.hostname
events:
  // $e1 joins with $e2 using an `or` expression
  $e1.principal.hostname = $e2.src.hostname
  or $e1.principal.hostname = $e2.target.hostname
  or $e1.principal.hostname = $e2.principal.hostname
events:
  // all of $e1, $e2 and $e3 are transitively joined using the placeholder variable $ip
  $e1.src.ip = $ip
  $e2.target.ip = $ip
  $e3.about.ip = $ip
events:
  // $e1 and $e2 are transitively joined using function to event comparison
  re.capture($e2.principal.application, ".*") = $app
  $e1.principal.hostname = $app

Tuttavia, gli esempi seguenti mostrano sezioni events non valide.

events:
  // Event to arithmetic comparison is an invalid join condition for $e1 and $e2.
  $e1.principal.port = $e2.src.port + 1
events:
  $e1.src.ip = $ip
  $e2.target.ip = $ip
  $e3.about.ip = "192.1.2.0" //$e3 is not joined with $e1 or $e2.
events:
  $e1.src.port = $port

  // Arithmetic to placeholder comparison is an invalid transitive join condition.
  $e2.principal.port + 800 = $port

Passaggi successivi

Informazioni aggiuntive

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