Sintaksis bagian peristiwa
Bagian events harus segera mengikuti bagian meta dalam aturan. Bagian ini menentukan peristiwa mana yang harus diperiksa kueri dan atribut spesifik apa yang harus dimiliki peristiwa tersebut agar dianggap relevan untuk potensi deteksi.
Bagian events bersifat wajib untuk aturan, tetapi opsional untuk Penelusuran dan Dasbor.
Gunakan bagian events untuk mencantumkan predikat yang menentukan hal berikut:
- Deklarasi variabel
- Filter variabel peristiwa
- Penggabungan variabel peristiwa
Bagian tentukan peristiwa
Aturan dan kueri yang hanya berfokus pada satu jenis peristiwa dapat menyertakan satu variabel peristiwa, seperti:
events:
$e.metadata.event_type = "USER_LOGIN" // 'e' is the common convention for a single event
Aturan dan kueri yang memerlukan korelasi antara dua atau lebih jenis peristiwa yang berbeda (seperti login pengguna yang diikuti dengan modifikasi file), memerlukan variabel untuk setiap jenis peristiwa:
events:
$login.metadata.event_type = "USER_LOGIN" // Event 1: User Login
$file_op.metadata.event_type = "FILE_MODIFICATION" // Event 2: File Modification
Setelah variabel peristiwa dideklarasikan, Anda menggunakannya sebagai awalan untuk mengakses kolom tertentu dari jenis peristiwa tersebut. Misalnya, bagian event berikut memfilter peristiwa login yang gagal dari Okta:
events:
$e.metadata.vendor_name = "Okta"
$e.metadata.event_type = "USER_LOGIN"
$e.security_result.action = "FAIL"
Deklarasi variabel
Untuk deklarasi variabel, gunakan sintaksis berikut:
<EVENT_FIELD> = <VAR><VAR> = <EVENT_FIELD>
Keduanya setara, seperti yang ditunjukkan dalam contoh berikut:
$e.source.hostname = $hostname$userid = $e.principal.user.userid
Deklarasi ini menunjukkan bahwa variabel ini merepresentasikan kolom yang ditentukan untuk variabel peristiwa. Jika kolom peristiwa adalah kolom berulang, variabel match dapat merepresentasikan nilai apa pun dalam array. Anda juga dapat menetapkan beberapa kolom peristiwa ke satu variabel kecocokan atau placeholder. Hal ini disebut kondisi gabungan transitif.
Misalnya:
$e1.source.ip = $ip$e2.target.ip = $ip
Setara dengan:
$e1.source.ip = $ip$e1.source.ip = $e2.target.ip
Saat variabel digunakan, variabel harus dideklarasikan melalui deklarasi variabel. Jika variabel digunakan tanpa deklarasi apa pun, error kompilasi akan dipicu.
Untuk mengetahui informasi selengkapnya tentang variabel, lihat Ekspresi, operator, dan konstruksi lainnya.
Filter variabel peristiwa
Ekspresi boolean yang bertindak pada satu variabel peristiwa dianggap sebagai filter.
Penggabungan variabel peristiwa
Semua variabel peristiwa yang digunakan dalam aturan harus digabungkan dengan setiap variabel peristiwa lainnya dengan salah satu cara berikut:
Secara langsung melalui perbandingan kesetaraan antara kolom peristiwa dari dua variabel peristiwa yang digabungkan, misalnya:
$e1.field = $e2.field. Ekspresi tidak boleh menyertakan operasi aritmetika (seperti, $\text{+, -, *, /}$).Secara tidak langsung melalui gabungan transitif yang hanya melibatkan kolom peristiwa (lihat deklarasi variabel untuk definisi "gabungan transitif"). Ekspresi tidak boleh menyertakan aritmetika.
Misalnya, dengan asumsi $e1, $e2, dan $e3 digunakan dalam aturan, bagian events berikut valid:
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
Namun, contoh berikut menunjukkan bagian events yang tidak valid.
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
Langkah berikutnya
Informasi tambahan
- Ekspresi, operator, dan konstruksi yang digunakan di YARA-L 2.0
- Fungsi di YARA-L 2.0
- Membangun aturan deteksi komposit
- Contoh: Kueri YARA-L 2.0
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.