Sintaksis bagian peristiwa
Bagian events harus segera mengikuti bagian meta dalam aturan. Aturan 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 wajib ada untuk aturan, penelusuran, dan dasbor.
Gunakan bagian events untuk mencantumkan predikat yang menentukan hal berikut:
- Deklarasi variabel
- Filter variabel peristiwa
- Gabungan variabel peristiwa
Menentukan bagian 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 mewakili kolom yang ditentukan untuk variabel peristiwa. Jika kolom peristiwa adalah kolom berulang, variabel match dapat mewakili nilai apa pun dalam array. Anda juga dapat menetapkan beberapa kolom peristiwa ke satu variabel pencocokan 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, error kompilasi akan terjadi.
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.
Gabungan 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 penggabungan transitif yang hanya melibatkan kolom peristiwa (lihat deklarasi variabel untuk mengetahui definisi "penggabungan 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
- Membuat aturan deteksi komposit
- Contoh: Kueri YARA-L 2.0
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.