Sintassi della sezione degli eventi
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
- Sintassi della sezione di corrispondenza
- Sintassi della sezione dei risultati
- Sintassi della sezione delle condizioni
- Sintassi della sezione delle 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.