Sintassi della sezione Eventi
La sezione events deve seguire immediatamente la sezione meta in una regola. Definisce quali eventi deve esaminare la query e quali attributi specifici devono possedere questi eventi per essere considerati pertinenti per un potenziale rilevamento.
La sezione events è obbligatoria per le regole, ma facoltativa per la ricerca e le dashboard.
Utilizza la sezione events per elencare i predicati che specificano quanto segue:
- Dichiarazioni di variabili
- Filtri delle variabili evento
- Unioni di variabili evento
Sezione Definisci eventi
Le regole e le query incentrate su un solo tipo di evento possono includere una singola variabile 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 l'accesso di un utente seguito dalla modifica di un 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 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>
Entrambi 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 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 è chiamata condizione di join transitiva.
Ad esempio:
$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, questa deve essere dichiarata tramite la dichiarazione di variabile. Se una variabile viene utilizzata senza alcuna dichiarazione, viene generato un errore di compilazione.
Per ulteriori informazioni sulle variabili, vedi Espressioni, operatori e altri costrutti.
Filtri delle variabili evento
Un'espressione booleana che agisce su una singola variabile evento viene considerata un filtro.
Unioni di variabili evento
Tutte le variabili evento utilizzate in una regola devono essere unite a ogni altra variabile evento in uno dei seguenti modi:
Direttamente tramite un confronto di uguaglianza tra i campi evento delle due variabili 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 dichiarazione di variabile per la definizione di "join transitivo"). L'espressione non deve includere operazioni aritmetiche.
Ad esempio, supponendo che nella regola vengano utilizzati $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
- Sintassi della sezione Corrispondenza
- Sintassi della sezione Risultato
- Sintassi della sezione delle condizioni
- Sintassi della sezione Opzioni
Informazioni aggiuntive
- Espressioni, operatori e costrutti utilizzati in YARA-L 2.0
- Funzioni in YARA-L 2.0
- Creare regole di rilevamento composite
- Esempi: query YARA-L 2.0
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.