Menggunakan sintaksis N OF dengan variabel peristiwa

Didukung di:

Dokumen ini menjelaskan cara menggunakan sintaksis N OF untuk menulis logika fleksibel dan bersyarat dalam bagian condition kueri Anda.

Sintaksis N OF memungkinkan Anda menggabungkan beberapa kondisi, sehingga mengurangi kompleksitas keseluruhan sintaksis kueri Anda:

  • Menyediakan cara untuk menentukan bahwa sejumlah minimum ekspresi boolean dari daftar tertentu harus bernilai benar.
  • Menghindari kebutuhan untuk menentukan setiap kemungkinan kombinasi, sehingga mengurangi kesalahan dan upaya.

Sintaksis N OF

Sintaksis untuk pernyataan N OF adalah daftar ekspresi boolean yang dipisahkan koma sebagai berikut:

[expr1, expr2, … , exprN] di mana [expr1, expr2, … , exprN]

Bagian berikut menunjukkan beberapa variasi sintaksis N OF.

SALAH SATU

Contoh berikut memeriksa apakah setidaknya satu ekspresi dalam daftar bernilai benar (true). Ini sama seperti menggabungkan semua ekspresi dengan or.

condition:
  ANY OF [$e1, #e2 > 5, $outcome1 = "FAILED"]

SEMUA

Jika semua ekspresi dalam daftar berikut benar, contohnya benar. Ini sama dengan menggabungkan semua ekspresi dengan and.

condition:
  ALL OF [$e1, $e2, $outcome1 = "SUCCESS"]

N dari X

Fungsi ini dievaluasi ke benar (true) jika setidaknya N ekspresi dari daftar bernilai benar (true).

condition:
  2 of [$e1, $e2 > 0, $e3, arrays.contains($outcome_ips, "1.2.3.4")]

Contoh aturan: menandai akses file sensitif

Aturan berikut menandai pengguna jika mereka berhasil login ($e1). Aturan kemudian memeriksa apakah sesi juga memenuhi salah satu dari dua kriteria: file sensitif diakses ($e2) atau jumlah total file sensitif unik yang diakses melebihi 3.

rule MultiEventNOf {
  meta:
    author = "google-secops"
    description = "Detects user login followed by sensitive file access or multiple sensitive files."
  events:
    $e1.principal.user.userid = $user
    $e1.metadata.event_type = "USER_LOGIN"

    $e2.principal.user.userid = $user
    $e2.metadata.event_type = "FILE_OPEN"
    re.regex($e2.target.file.full_path, `^/cns/sensitive/`)

  match:
    $user over 1h
  outcome:
    $sensitive_file_count = count_distinct($e2.target.file.full_path)
  condition:
    $e1 and ANY OF [$e2, $sensitive_file_count > 3]
  }

Contoh penelusuran: tandai akses file sensitif

Contoh berikut menunjukkan cara memformat ulang contoh aturan sebagai kueri penelusuran.

$e1.principal.user.userid = $user
$e1.metadata.event_type = "USER_LOGIN"
$e2.principal.user.userid = $user
$e2.metadata.event_type = "FILE_OPEN"
re.regex($e2.target.file.full_path, `^/cns/sensitive/`)

match:
  $user over 1h
outcome:
  $sensitive_file_count = count_distinct($e2.target.file.full_path)
condition:
  $e1 and ANY OF [$e2, $sensitive_file_count > 3]

Batasan umum

  • Keberadaan acara yang diperlukan: Sintaksis N OF tidak dapat tidak terikat. Keberadaan peristiwa harus menjadi persyaratan agar klausa bernilai benar (misalnya, $e1 atau #e1 > 0).

  • Pencampuran jenis variabel: Anda tidak dapat menggabungkan variabel non-UDM dengan variabel peristiwa UDM dalam daftar N OF yang sama.

  • Batasan jendela: Anda tidak dapat menggunakan jendela bergulir dengan sintaksis N OF.

Apa langkah selanjutnya?

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.