Fungsi

Didukung di:

Bagian ini menjelaskan fungsi YARA-L 2.0 yang dapat Anda gunakan dalam kueri Aturan, Penelusuran, dan Dasbor.

Lihat juga Fungsi YARA-L 2.0 untuk dasbor dan Statistik dan penggabungan dalam penelusuran menggunakan YARA-L 2.0.

Fungsi ini dapat digunakan di bagian kueri YARA-L berikut:

arrays.concat

arrays.concat(string_array, string_array)

Deskripsi

Menampilkan array string baru dengan menyalin elemen dari array string asli.

Jenis data parameter

ARRAY_STRINGS, ARRAY_STRINGS

Jenis hasil yang ditampilkan

ARRAY_STRINGS

Contoh kode

Contoh 1

Contoh berikut menggabungkan dua array string yang berbeda.

arrays.concat(["test1", "test2"], ["test3"]) = ["test1", "test2", "test3"]
Contoh 2

Contoh berikut menggabungkan array dengan string kosong.

arrays.concat([""], [""]) = ["", ""]
Contoh 3

Contoh berikut menggabungkan array kosong.

arrays.concat([], []) = []

arrays.index_to_float

arrays.index_to_float(array, index)

Deskripsi

Menampilkan elemen pada indeks tertentu dari sebuah array. Elemen pada indeks tersebut ditampilkan sebagai float.

Indeks adalah nilai bilangan bulat yang merepresentasikan posisi elemen dalam array. Secara default, elemen pertama array memiliki indeks 0, dan elemen terakhir memiliki indeks n-1, dengan n adalah ukuran array. Pengindeksan negatif memungkinkan akses elemen array relatif terhadap akhir array. Misalnya, indeks -1 merujuk ke elemen terakhir dalam array dan indeks -2 merujuk ke elemen kedua dari terakhir dalam array.

Jenis data parameter

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh 1

Contoh berikut mengambil elemen pada indeks 1 dari array float.

arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 1) // 2.1
Contoh 2

Contoh berikut mengambil elemen pada indeks -1 dari array float.

arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 0-1) // 4.6
Contoh 3

Contoh berikut mengambil elemen untuk indeks yang lebih besar dari ukuran array.

arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 6) // 0.0
Contoh 4

Contoh berikut mengambil elemen dari array kosong.

arrays.index_to_float([], 0) // 0.0
Contoh 5

Contoh berikut mengambil elemen pada indeks 1 dari array string.

arrays.index_to_float(["1.2", "3.3", "2.4"], 1) // 3.3
Contoh 6

Contoh berikut mengambil elemen pada indeks 2 dari array bilangan bulat.

arrays.index_to_float([1, 3, 2], 2) // 2.0

arrays.index_to_int

arrays.index_to_int(array_of_inputs, index)

Deskripsi

Menampilkan nilai pada indeks tertentu dalam array sebagai bilangan bulat.

Indeks adalah nilai bilangan bulat yang merepresentasikan posisi elemen dalam array. Secara default, elemen pertama array memiliki indeks 0, dan elemen terakhir memiliki indeks n-1, dengan n adalah ukuran array. Pengindeksan negatif memungkinkan akses elemen array relatif terhadap akhir array. Misalnya, indeks -1 merujuk ke elemen terakhir dalam array dan indeks -2 merujuk ke elemen kedua dari terakhir dalam array.

Jenis data parameter

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Panggilan fungsi ini menampilkan 0 jika nilai pada indeks adalah string non-numerik.

arrays.index_to_int(["str0", "str1", "str2"], 1) = 0
Contoh 2

Fungsi ini menampilkan elemen pada indeks -1.

arrays.index_to_int(["44", "11", "22", "33"], 0-1) = 33
Contoh 3

Menampilkan 0 untuk elemen di luar batas.

arrays.index_to_int(["44", "11", "22", "33"], 5) = 0
Contoh 4

Fungsi ini mengambil elemen dari array float pada indeks 1.

arrays.index_to_int([1.100000, 1.200000, 1.300000], 1) = 1
Contoh 5

Fungsi ini mengambil elemen dari array int pada indeks 0.

arrays.index_to_int([1, 2, 3], 0) = 1

arrays.index_to_str

arrays.index_to_str(array, index)

Deskripsi

Menampilkan elemen pada indeks tertentu dari array sebagai string. Indeks adalah nilai bilangan bulat yang mewakili posisi elemen dalam array. Secara default, elemen pertama array memiliki indeks 0, dan elemen terakhir memiliki indeks n-1, dengan n adalah ukuran array. Pengindeksan negatif memungkinkan akses ke elemen array dari akhir array. Misalnya, indeks -1 merujuk ke elemen terakhir dalam array dan indeks -2 merujuk ke elemen kedua dari terakhir dalam array.

Jenis data parameter

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh berikut mengambil elemen pada indeks 1 dari array string.

arrays.index_to_str(["test1", "test2", "test3", "test4"], 1) // "test2"
Contoh 2

Contoh berikut mengambil elemen pada indeks -1 (elemen terakhir array) dari array string.

arrays.index_to_str(["test1", "test2", "test3", "test4"], 0-1) // "test4"
Contoh 3

Contoh berikut mengambil elemen untuk indeks yang lebih besar dari ukuran array, yang menampilkan string kosong.

arrays.index_to_str(["test1", "test2", "test3", "test4"], 6) // ""
Contoh 4

Contoh berikut mengambil elemen dari array kosong.

arrays.index_to_str([], 0) // ""
Contoh 5

Contoh berikut mengambil elemen pada indeks 0 dari array float. Output ditampilkan sebagai string.

arrays.index_to_str([1.200000, 3.300000, 2.400000], 0) // "1.2"
Contoh 6

Contoh berikut mengambil elemen pada indeks 2 dari array bilangan bulat. Outputnya dalam bentuk string.

arrays.index_to_str([1, 3, 2], 2) // "2"

arrays.join_string

arrays.join_string(array_of_strings, optional_delimiter)

Deskripsi

Mengonversi array string menjadi satu string yang dipisahkan oleh parameter opsional. Jika tidak ada pemisah yang diberikan, string kosong akan digunakan.

Jenis data parameter

ARRAY_STRINGS, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Berikut beberapa contoh cara menggunakan fungsi ini:

Contoh 1

Contoh ini menggabungkan array dengan elemen non-null dan pemisah.

arrays.join_string(["foo", "bar"], ",") = "foo,bar"
Contoh 2

Contoh ini menggabungkan array dengan elemen null dan pemisah.

arrays.join_string(["foo", NULL, "bar"], ",") = "foo,bar"
Contoh 3

Contoh ini menggabungkan array dengan elemen non-null dan tanpa pemisah.

arrays.join_string(["foo", "bar"]) = "foobar"

arrays.length

arrays.length(repeatedField)

Deskripsi

Menampilkan jumlah elemen kolom berulang.

Jenis data parameter

LIST

Jenis hasil yang ditampilkan

NUMBER

Contoh kode

Contoh 1

Menampilkan jumlah elemen kolom berulang.

arrays.length($e.principal.ip) = 2
Contoh 2

Jika ada beberapa kolom berulang di sepanjang jalur, fungsi ini akan menampilkan jumlah total elemen kolom berulang.

arrays.length($e.intermediary.ip) = 3

arrays.max

arrays.max(array_of_ints_or_floats)

Deskripsi

Menampilkan elemen terbesar dalam array atau nol jika array kosong.

Jenis data parameter

ARRAY_INTS|ARRAY_FLOATS

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Berikut beberapa contoh cara menggunakan fungsi ini:

Contoh 1

Contoh ini menampilkan elemen yang lebih besar dalam array bilangan bulat.

arrays.max([10, 20]) = 20.000000
Contoh 2

Contoh ini menampilkan elemen yang lebih besar dalam array float.

arrays.max([10.000000, 20.000000]) = 20.000000

arrays.min

arrays.min(array_of_ints_or_floats[, ignore_zeros=false])

Deskripsi

Menampilkan elemen terkecil dalam array atau nol jika array kosong. Jika argumen kedua opsional ditetapkan ke benar, elemen yang sama dengan nol akan diabaikan.

Jenis data parameter

ARRAY_INTS|ARRAY_FLOATS, BOOL

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Berikut beberapa contoh cara menggunakan fungsi ini:

Contoh 1

Contoh ini menampilkan elemen terkecil dalam array bilangan bulat.

arrays.min([10, 20]) = 10.000000
Contoh 2

Contoh ini menampilkan elemen terkecil dalam array float.

arrays.min([10.000000, 20.000000]) = 10.000000
Contoh 3

Contoh ini menampilkan elemen terkecil dalam array float, sambil mengabaikan angka nol.

arrays.min([10.000000, 20.000000, 0.0], true) = 10.000000

arrays.size

arrays.size( array )

Deskripsi

Menampilkan ukuran array. Menampilkan 0 untuk array kosong.

Jenis data parameter

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Contoh ini menggunakan array string yang berisi dua elemen.

arrays.size(["test1", "test2"]) = 2
Contoh 2

Contoh ini menggunakan array int yang berisi 3 elemen.

arrays.size([1, 2, 3]) = 3
Contoh 3

Contoh ini menggunakan array float yang berisi 1 elemen

arrays.size([1.200000]) = 1
Contoh 4

Contoh ini menggunakan array kosong.

arrays.size([]) = 0

bytes.to_base64

bytes.to_base64(bytes, optional_default_string)

Deskripsi

Fungsi mengonversi nilai bytes menjadi base64 encoded string. Panggilan fungsi dengan nilai yang tidak dapat di-casting akan menampilkan string kosong secara default.

Jenis data parameter

BYTES, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Byte Biner Mentah ke String Berenkode Base64

Fungsi ini mengonversi byte biner mentah ke string berenkode base64.

bytes.to_base64(b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000) = "AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA="
Konversi Gagal (Default ke String yang Diberikan Secara Opsional)

Fungsi ini secara default menggunakan "invalid bytes" jika nilai byte yang diberikan tidak valid.

bytes.to_base64(b'000000006f8ec5586d", "invalid bytes") = "invalid bytes"

cast.as_bool

cast.as_bool(string_or_int)

Deskripsi

Fungsi mengonversi nilai int atau string menjadi nilai bool. Panggilan fungsi dengan nilai yang tidak dapat di-cast akan menampilkan FALSE. Menampilkan TRUE hanya untuk bilangan bulat 1 dan string 'true' yang tidak peka huruf besar/kecil.

Jenis data parameter

INT|STRING

Jenis hasil yang ditampilkan

BOOL

Contoh kode

Contoh 1

Contoh ini menunjukkan cara melakukan transmisi string non-boolean

cast.as_bool("123") = false
Contoh 2

Bilangan bulat benar (1)

cast.as_bool(1) = true
Contoh 3

String benar

cast.as_bool("true") = true
Contoh 4

String benar huruf kapital

cast.as_bool("TRUE") = true
Contoh 5

Bilangan bulat negatif

cast.as_bool(0-1) = false
Contoh 6

Integer salah (0)

cast.as_bool(0) = false
Contoh 7

string kosong

cast.as_bool("") = false

cast.as_float

cast.as_float(string_to_cast)

Deskripsi

Mengonversi string numerik menjadi float. Setiap panggilan fungsi dengan nilai yang tidak dapat di-casting akan menampilkan 0. Float mempertahankan presisi hingga 7 digit desimal.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh 1

Mentransmisikan string non-numerik akan menampilkan 0.

cast.as_float("str") = 0.0000000
Contoh 2

Mengonversi string kosong akan menampilkan 0.

cast.as_float("") = 0.0000000
Contoh 3

Mentransmisikan string numerik yang valid akan menampilkan nilai float.

cast.as_float("1.012345678") = 1.0123456

cast.as_string

cast.as_string(int_or_bytes_or_bool, optional_default_string)

Deskripsi

Fungsi cast.as_string mengubah nilai INT, BYTES, atau BOOL menjadi representasi stringnya. Anda dapat memberikan argumen default_string opsional untuk menangani kasus saat transmisi gagal. Jika Anda menghilangkan argumen default_string, atau jika input adalah urutan byte UTF-8 atau BASE64 yang tidak valid, fungsi akan menampilkan string kosong.

Jenis data parameter

INT|BYTES|BOOL, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Konversi Integer ke String

Fungsi ini mengonversi bilangan bulat 123 menjadi string "123".

cast.as_string(123) = "123"
Konversi Float ke String

Fungsi ini mengonversi float 2.25 menjadi string "2.25".

cast.as_string(2.25) = "2.25"
Konversi Byte ke String

Fungsi ini mengonversi b'01 biner mentah menjadi string "\x01".

cast.as_string(b'01, "") = "\x01"
Konversi Boolean ke String

Fungsi ini mengonversi boolean true menjadi string "true".

cast.as_string(true, "") = "true"
Konversi Gagal (Default ke String yang Diberikan Secara Opsional)

Fungsi ini secara default menggunakan string "casting error" jika nilai yang diberikan tidak valid.

cast.as_string(9223372036854775808, "casting error") = "casting error"

sidik jari

Didukung di:
hash.fingerprint2011(byteOrString)

Deskripsi

Fungsi ini menghitung hash fingerprint2011 dari urutan byte atau string input. Fungsi ini menampilkan nilai INT yang tidak bertanda dalam rentang [2, 0xFFFFFFFFFFFFFFFF].

Jenis data parameter

BTYE, STRING

Jenis hasil yang ditampilkan

INT

Contoh kode

id_fingerprint = hash.fingerprint2011("user123")

grup

Didukung di:
group(field1, field2, field3, ...)

Deskripsi

Kelompokkan kolom dengan jenis yang serupa ke dalam variabel placeholder.

Dalam penelusuran UDM, kolom yang dikelompokkan digunakan untuk menelusuri beberapa kolom dengan jenis yang serupa. Fungsi grup mirip dengan kolom yang dikelompokkan, tetapi memungkinkan Anda memilih kolom yang ingin dikelompokkan untuk memicu deteksi. Anda dapat menggunakan fungsi grup untuk mengumpulkan informasi tentang entitas tertentu (misalnya, nama host, alamat IP, atau ID pengguna) di berbagai Jenis kata benda.

Contoh kode

Contoh 1

Kelompokkan semua alamat IP dan berikan jumlah alamat IP yang paling umum dalam rentang waktu yang dipindai secara menurun.

$ip = group(principal.ip, about.ip, target.ip)
$ip != ""
match:
  $ip
outcome:
  $count = count_distinct(metadata.id)
order:
  $count desc

hash.sha256

Didukung di:
hash.sha256(string)

Deskripsi

Menampilkan hash SHA-256 dari string input.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh ini menunjukkan hash SHA-256 saat input berupa string yang valid.

hash.sha256("str") = "8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a"
Contoh 2

Contoh ini menunjukkan hash SHA-256 saat input berupa string kosong.

hash.sha256("") = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

math.abs

math.abs(numericExpression)

Deskripsi

Menampilkan nilai absolut dari ekspresi bilangan bulat atau float.

Jenis data parameter

NUMBER

Jenis hasil yang ditampilkan

NUMBER

Contoh kode

Contoh 1

Contoh ini menampilkan True jika peristiwa terjadi lebih dari 5 menit dari waktu yang ditentukan (dalam detik dari epoch Unix), terlepas dari apakah peristiwa terjadi sebelum atau setelah waktu yang ditentukan. Panggilan ke math.abs tidak dapat bergantung pada beberapa variabel atau placeholder. Misalnya, Anda tidak dapat mengganti nilai waktu yang di-hardcode 1643687343 dalam contoh berikut dengan $e2.metadata.event_timestamp.seconds.

300 < math.abs($e1.metadata.event_timestamp.seconds - 1643687343)

math.ceil

math.ceil(number)

Deskripsi

Menampilkan bilangan bulat terkecil yang tidak kurang dari bilangan yang diberikan (membulatkan ke atas). Akan menampilkan 0 jika inputnya null atau terlalu besar untuk dimuat dalam int64.

Jenis data parameter

FLOAT

Jenis hasil yang ditampilkan

INT

Contoh kode

Bagian ini berisi contoh penggunaan math.ceil.

Contoh 1

Contoh ini menampilkan ceil bilangan bulat.

math.ceil(2.000000) = 2
Contoh 2

Contoh ini menampilkan ceil angka negatif.

math.ceil(0-1.200000) = -1
Contoh 3

Contoh ini menampilkan 0 sebagai ceil dari angka yang terlalu besar untuk bilangan bulat 64 bit.

math.ceil(184467440737095516160.0) = 0

math.floor

math.floor(float_val)

Deskripsi

Menampilkan nilai bilangan bulat terbesar yang tidak lebih besar dari nilai yang diberikan (membulatkan ke bawah). Menampilkan 0 jika input adalah null atau terlalu besar untuk dimasukkan ke dalam int64.

Jenis data parameter

FLOAT

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Contoh ini menunjukkan kasus bilangan positif.

math.floor(1.234568) = 1
Contoh 2

Contoh ini menunjukkan kasus angka negatif.

math.floor(0-1.234568) = -2
Contoh 3

Contoh ini menunjukkan kasus nol.

math.floor(0.000000) = 0

math.geo_distance

Didukung di:
math.geo_distance(longitude1, latitude1, longitude2, latitude2))

Deskripsi

Menampilkan jarak antara dua lokasi geografis (koordinat) dalam meter. Menampilkan -1 jika koordinat tidak valid.

Jenis data parameter

FLOAT, FLOAT, FLOAT, FLOAT

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh 1

Contoh berikut menampilkan jarak saat semua parameter adalah koordinat yang valid:

math.geo_distance(-122.020287, 37.407574, -122.021810, 37.407574) = 134.564318
Contoh 2

Contoh berikut menampilkan jarak saat salah satu parameter adalah koordinat yang dipangkas:

math.geo_distance(-122.000000, 37.407574, -122.021810, 37.407574) = 1926.421905
Contoh 3

Contoh berikut menampilkan -1 jika salah satu parameter adalah koordinat yang tidak valid:

math.geo_distance(0-122.897680, 37.407574, 0-122.021810, 97.407574) = -1.000000
Contoh 4

Contoh berikut menampilkan 0 jika koordinatnya sama:

math.geo_distance(-122.897680, 37.407574, -122.897680, 37.407574) = 0.000000

math.is_increasing

math.is_increasing(num1, num2, num3)

Deskripsi

Mengambil daftar nilai numerik (bilangan bulat atau ganda) dan menampilkan True jika nilai dalam urutan menaik, dan False jika sebaliknya.

Jenis data parameter

INT|FLOAT, INT|FLOAT, INT|FLOAT

Jenis hasil yang ditampilkan

BOOL

Contoh kode

Contoh 1

Contoh ini mencakup nilai seperti stempel waktu dalam detik.

math.is_increasing(1716769112, 1716769113, 1716769114) = true
Contoh 2

Contoh ini mencakup satu nilai ganda negatif, satu nilai INT64 nol, dan satu nilai INT64 positif.

math.is_increasing(-1.200000, 0, 3) = true
Contoh 3

Contoh ini mencakup satu nilai ganda negatif, satu nilai INT64 nol, dan satu nilai INT64 negatif.

math.is_increasing(0-1.200000, 0, 0-3) = false
Contoh 4

Contoh ini mencakup dua nilai ganda negatif dan satu nilai INT64 nol.

math.is_increasing(0-1.200000, 0-1.50000, 0) = false
Contoh 5

Contoh ini mencakup satu nilai ganda negatif dan dua nilai yang sama.

math.is_increasing(0-1.200000, 0, 0) = false

math.log

math.log(numericExpression)

Deskripsi

Menampilkan nilai log natural dari ekspresi bilangan bulat atau float.

Jenis data parameter

NUMBER

Jenis hasil yang ditampilkan

NUMBER

Contoh kode

Contoh 1
math.log($e1.network.sent_bytes) > 20

math.pow

math.pow(base, exponent)

Deskripsi

Menampilkan nilai argumen pertama yang dipangkatkan argumen kedua. Menampilkan 0 jika terjadi overflow.

Jenis data parameter

basis: INT|FLOAT eksponen: INT|FLOAT

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh 1

Contoh ini menunjukkan kasus bilangan bulat.

math.pow(2, 2) // 4.00
Contoh 2

Contoh ini menunjukkan kasus dasar pecahan.

math.pow(2.200000, 3) // 10.648
Contoh 3

Contoh ini menunjukkan kasus dasar dan pangkat pecahan.

math.pow(2.200000, 1.200000) // 2.575771
Contoh 4

Contoh ini menunjukkan kasus daya negatif.

math.pow(3, 0-3) // 0.037037
Contoh 5

Contoh ini menunjukkan kasus pangkat pecahan.

math.pow(3, 0-1.200000) // 0.267581
Contoh 6

Contoh ini menunjukkan kasus dasar negatif.

math.pow(0-3, 0-3) // -0.037037
Contoh 7

Contoh ini menunjukkan kasus dasar nol.

math.pow(0, 3) // 0
Contoh 8

Contoh ini menunjukkan kasus daya nol.

math.pow(9223372036854775807, 0) // 1
Contoh 9

Contoh ini menunjukkan kasus dasar yang besar.

math.pow(9223372036854775807, 1.200000) // 57262152889751593549824

math.random

math.random()

Deskripsi

Menghasilkan nilai pseudo-acak berjenis DOUBLE dalam rentang [0, 1), inklusif 0 dan eksklusif 1.

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh berikut memeriksa apakah nilai acak berada dalam rentang [0, 1). none if(math.random() >= 0 and math.random() < 1) = true

math.round

Didukung di:
math.round(numericExpression, decimalPlaces)

Deskripsi

Menampilkan nilai yang dibulatkan ke bilangan bulat terdekat atau ke jumlah tempat desimal yang ditentukan.

Jenis data parameter

NUMBER

Jenis hasil yang ditampilkan

NUMBER

Contoh kode

math.round(10.7) // returns 11
math.round(1.2567, 2) // returns 1.25
math.round(0-10.7) // returns -11
math.round(0-1.2) // returns -1
math.round(4) // returns 4, math.round(integer) returns the integer

math.sqrt

math.sqrt(number)

Deskripsi

Menampilkan akar kuadrat dari bilangan yang diberikan. Menampilkan 0 jika angka negatif.

Jenis data parameter

INT|FLOAT

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh 1

Contoh ini menampilkan akar kuadrat argumen int.

math.sqrt(3) = 1.732051
Contoh 2

Contoh ini menampilkan akar kuadrat argumen int negatif.

math.sqrt(-3) = 0.000000
Contoh 3

Contoh ini menampilkan akar kuadrat dari argumen nol.

math.sqrt(0) = 0.000000
Contoh 4

Contoh ini menampilkan akar kuadrat dari argumen float.

math.sqrt(9.223372) = 3.037000
Contoh 5

Contoh ini menampilkan akar kuadrat argumen float negatif.

math.sqrt(0-1.200000) = 0.000000

metrik

Didukung di:

Fungsi metrik dapat menggabungkan data historis dalam jumlah besar. Anda dapat menggunakan ini dalam aturan menggunakan metrics.functionName() di bagian hasil.

Untuk mengetahui informasi selengkapnya, lihat Metrik YARA-L.

net.ip_in_range_cidr

net.ip_in_range_cidr(ipAddress, subnetworkRange)

Deskripsi

Menampilkan true jika alamat IP yang diberikan berada dalam subnetwork yang ditentukan.

Anda dapat menggunakan YARA-L untuk menelusuri peristiwa UDM di semua alamat IP dalam subnetwork menggunakan pernyataan net.ip_in_range_cidr(). IPv4 dan IPv6 didukung.

Untuk menelusuri rentang alamat IP, tentukan kolom UDM IP dan rentang CIDR. YARA-L dapat menangani kolom alamat IP tunggal dan berulang.

Untuk menelusuri di seluruh rentang alamat IP, tentukan kolom UDM ip dan rentang Classless Inter-Domain Routing (CIDR). YARA-L dapat menangani kolom alamat IP tunggal dan berulang.

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

BOOL

Contoh kode

Contoh 1

Contoh IPv4:

net.ip_in_range_cidr($e.principal.ip, "192.0.2.0/24")
Contoh 2

Contoh IPv6:

net.ip_in_range_cidr($e.network.dhcp.yiaddr, "2001:db8::/32")

Untuk contoh aturan yang menggunakan pernyataan net.ip_in_range_cidr(), lihat contoh aturan di Satu Peristiwa dalam Rentang Alamat IP.)

re.regex

Anda dapat menentukan pencocokan ekspresi reguler di YARA-L 2.0 menggunakan salah satu sintaksis berikut:

  • Menggunakan sintaksis YARA-L — Terkait dengan peristiwa. Berikut adalah representasi generik dari sintaksis ini:

    $e.field = /regex/
    
  • Menggunakan sintaksis YARA-L — Sebagai fungsi yang menggunakan parameter berikut:

    • Kolom tempat ekspresi reguler diterapkan.
    • Regular expression yang ditentukan sebagai string.

    Berikut adalah representasi generik dari sintaksis ini:

    re.regex($e.field, `regex`)
    

Deskripsi

Fungsi ini menampilkan true jika string berisi substring yang cocok dengan ekspresi reguler yang diberikan. Anda tidak perlu menambahkan .* di awal atau di akhir ekspresi reguler.

Catatan
  • Untuk mencocokkan string yang sama persis atau hanya awalan atau akhiran, sertakan karakter penanda ^ (awal) dan $ (akhir) dalam ekspresi reguler. Misalnya, /^full$/ cocok dengan "full" secara persis, sedangkan /full/ dapat cocok dengan "fullest", "lawfull", dan "joyfully".
  • Jika kolom UDM menyertakan karakter baris baru, regexp hanya cocok dengan baris pertama kolom UDM. Untuk menerapkan pencocokan kolom UDM penuh, tambahkan (?s) ke ekspresi reguler. Misalnya, ganti /.*allUDM.*/ dengan /(?s).*allUDM.*/.
  • Anda dapat menggunakan pengubah nocase setelah string untuk menunjukkan bahwa penelusuran harus mengabaikan kapitalisasi.

Jenis data parameter

STRING, STRING

Jenis ekspresi parameter

ANY, ANY

Jenis hasil yang ditampilkan

BOOL

Contoh kode

Contoh 1
// Equivalent to $e.principal.hostname = /google/
re.regex($e.principal.hostname, "google")

re.capture

re.capture(stringText, regex)

Deskripsi

Mengambil (mengekstraksi) data dari string menggunakan pola ekspresi reguler yang diberikan dalam argumen.

Fungsi ini menggunakan dua argumen:

  • stringText: string asli yang akan dicari.
  • regex: ekspresi reguler yang menunjukkan pola yang akan dicari.

Ekspresi reguler dapat berisi 0 atau 1 grup tangkapan dalam tanda kurung. Jika ekspresi reguler berisi 0 grup tangkapan, fungsi akan menampilkan substring seluruh kecocokan pertama. Jika ekspresi reguler berisi 1 grup tangkapan, fungsi ini akan menampilkan substring pertama yang cocok untuk grup tangkapan. Menentukan dua atau lebih banyak grup pengambilan akan menampilkan error compiler.

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Dalam contoh ini, jika $e.principal.hostname berisi "aaa1bbaa2", pernyataan berikut akan benar, karena fungsi menampilkan instance pertama. Contoh ini tidak memiliki grup tangkapan.

"aaa1" = re.capture($e.principal.hostname, "a+[1-9]")
Contoh 2

Contoh ini mengambil semua teks setelah simbol @ dalam email. Jika kolom $e.network.email.from adalah test@google.com, contoh akan menampilkan google.com. Contoh berikut berisi satu grup pengambilan.

"google.com" = re.capture($e.network.email.from , "@(.*)")
Contoh 3

Jika ekspresi reguler tidak cocok dengan substring apa pun dalam teks, fungsi akan menampilkan string kosong. Anda dapat menghilangkan peristiwa yang tidak cocok dengan mengecualikan string kosong, yang sangat penting saat Anda menggunakan re.capture() dengan ketidaksetaraan:

// Exclude the empty string to omit events where no match occurs.
"" != re.capture($e.network.email.from , "@(.*)")

// Exclude a specific string with an inequality.
"google.com" != re.capture($e.network.email.from , "@(.*)")

re.replace

re.replace(stringText, replaceRegex, replacementText)

Deskripsi

Melakukan penggantian ekspresi reguler.

Fungsi ini menggunakan tiga argumen:

  • stringText: string asli.
  • replaceRegex: ekspresi reguler yang menunjukkan pola yang akan dicari.
  • replacementText: Teks yang akan disisipkan ke dalam setiap kecocokan.

Menampilkan string baru yang berasal dari stringText asli, dengan semua substring yang cocok dengan pola di replaceRegex diganti dengan nilai di replacementText. Anda dapat menggunakan digit yang di-escape dengan garis miring terbalik (\1 hingga \9) dalam replacementText untuk menyisipkan teks yang cocok dengan grup bertanda kurung yang sesuai dalam pola replaceRegex. Gunakan \0 untuk merujuk ke keseluruhan teks yang cocok.

Fungsi ini menggantikan kecocokan yang tidak tumpang-tindih dan akan memprioritaskan penggantian kemunculan pertama yang ditemukan. Misalnya, re.replace("banana", "ana", "111") menampilkan string "b111na".

Jenis data parameter

STRING, STRING, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh ini mengambil semua yang ada setelah simbol @ dalam email, mengganti com dengan org, lalu menampilkan hasilnya. Perhatikan penggunaan fungsi bertingkat.

"email@google.org" = re.replace($e.network.email.from, "com", "org")
Contoh 2

Contoh ini menggunakan digit yang di-escape dengan garis miring terbalik dalam argumen replacementText untuk merujuk kecocokan ke pola replaceRegex.

"test1.com.google" = re.replace(
                       $e.principal.hostname, // holds "test1.test2.google.com"
                       "test2\.([a-z]*)\.([a-z]*)",
                       "\\2.\\1"  // \\1 holds "google", \\2 holds "com"
                     )
Contoh 3

Perhatikan kasus berikut saat menangani string kosong dan re.replace():

Menggunakan string kosong sebagai replaceRegex:

// In the function call below, if $e.principal.hostname contains "name",
// the result is: 1n1a1m1e1, because an empty string is found next to
// every character in `stringText`.
re.replace($e.principal.hostname, "", "1")

Untuk mengganti string kosong, Anda dapat menggunakan "^$" sebagai replaceRegex:

// In the function call below, if $e.principal.hostname contains the empty
// string, "", the result is: "none".
re.replace($e.principal.hostname, "^$", "none")

sample_rate

Didukung di:
optimization.sample_rate(byteOrString, rateNumerator, rateDenominator)

Deskripsi

Fungsi ini menentukan apakah akan menyertakan peristiwa berdasarkan strategi pengambilan sampel deterministik. Fungsi ini menampilkan:

  • true untuk sebagian kecil nilai input, setara dengan (rateNumerator / rateDenominator), yang menunjukkan bahwa peristiwa harus disertakan dalam sampel.
  • false yang menunjukkan bahwa peristiwa tidak boleh disertakan dalam sampel.

Fungsi ini berguna untuk skenario pengoptimalan saat Anda ingin memproses hanya sebagian kecil peristiwa. Setara dengan:

hash.fingerprint2011(byteOrString) % rateDenominator < rateNumerator

Jenis data parameter

  • byteOrString: Ekspresi yang dievaluasi ke BYTE atau STRING.
  • rateNumerator: 'INT'
  • rateDenominator: 'INT'

Jenis hasil yang ditampilkan

BOOL

Contoh kode

events:
    $e.metadata.event_type = "NETWORK_CONNECTION"
    $asset_id = $e.principal.asset.asset_id
    optimization.sample_rate($e.metadata.id, 1, 5) // Only 1 out of every 5 events

  match:
    $asset_id over 1h

  outcome:
    $event_count = count_distinct($e.metadata.id)
  // estimate the usage by multiplying by the inverse of the sample rate
    $usage_past_hour = sum(5.0 * $e.network.sent_bytes)

 condition:
  // Requiring a certain number of events after sampling avoids bias (e.g. a
  // device with just 1 connection will still show up 20% of the time and
  // if we multiply that traffic by 5, we'll get an incorrect estimate)
  $e and ($usage_past_hour > 1000000000) and $event_count >= 100

strings.base64_decode

strings.base64_decode(encodedString)

Deskripsi

Menampilkan string yang berisi versi string berenkode yang didekode base64.

Fungsi ini menggunakan satu string berenkode base64 sebagai argumen. Jika encodedString bukan string berenkode base64 yang valid, fungsi akan menampilkan encodedString tanpa perubahan.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1
"test" = strings.base64_decode($e.principal.domain.name)

strings.coalesce

strings.coalesce(a, b, c, ...)

Deskripsi

Fungsi ini menggunakan argumen dalam jumlah tak terbatas dan menampilkan nilai ekspresi pertama yang tidak dievaluasi ke string kosong (misalnya, "nilai bukan nol"). Jika semua argumen bernilai string kosong, panggilan fungsi akan menampilkan string kosong.

Argumen dapat berupa literal, kolom peristiwa, atau panggilan fungsi. Semua argumen harus berjenis STRING. Jika ada argumen yang merupakan kolom peristiwa, atribut harus berasal dari peristiwa yang sama.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh berikut menyertakan variabel string sebagai argumen. Kondisi dievaluasi sebagai benar jika (1) $e.network.email.from adalah suspicious@gmail.com atau (2) $e.network.email.from kosong dan $e.network.email.to adalah suspicious@gmail.com.

"suspicious@gmail.com" = strings.coalesce($e.network.email.from, $e.network.email.to)
Contoh 2

Contoh berikut memanggil fungsi coalesce dengan lebih dari dua argumen. Kondisi ini membandingkan alamat IP non-null pertama dari peristiwa $e dengan nilai dalam daftar referensi ip_watchlist. Urutan penggabungan argumen dalam panggilan ini sama dengan urutan argumen tersebut didaftar dalam kondisi aturan:

  1. $e.principal.ip dievaluasi terlebih dahulu.
  2. $e.src.ip dievaluasi berikutnya.
  3. $e.target.ip dievaluasi berikutnya.
  4. Terakhir, string "No IP" ditampilkan sebagai nilai default jika kolom ip sebelumnya tidak disetel.
strings.coalesce($e.principal.ip, $e.src.ip, $e.target.ip, "No IP") in %ip_watchlist
Contoh 3

Contoh berikut mencoba menggabungkan principal.hostname dari peristiwa $e1 dan peristiwa $e2. Tindakan ini akan menampilkan error compiler karena argumennya adalah variabel peristiwa yang berbeda.

// returns a compiler error
"test" = strings.coalesce($e1.principal.hostname, $e2.principal.hostname)

strings.concat

strings.concat(a, b, c, ...)

Deskripsi

Menampilkan penggabungan sejumlah item yang tidak terbatas, yang masing-masing dapat berupa string, bilangan bulat, atau float.

Jika ada argumen yang merupakan kolom peristiwa, atribut harus berasal dari peristiwa yang sama.

Jenis data parameter

STRING, FLOAT, INT

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh berikut menyertakan variabel string dan variabel bilangan bulat sebagai argumen. principal.hostname dan principal.port berasal dari peristiwa yang sama, $e, dan digabungkan untuk menampilkan string.

"google:80" = strings.concat($e.principal.hostname, ":", $e.principal.port)
Contoh 2

Contoh berikut menyertakan variabel string dan literal string sebagai argumen.

"google-test" = strings.concat($e.principal.hostname, "-test") // Matches the event when $e.principal.hostname = "google"
Contoh 3

Contoh berikut menyertakan variabel string dan literal float sebagai argumen. Jika direpresentasikan sebagai string, float yang merupakan bilangan bulat diformat tanpa titik desimal (misalnya, 1.0 direpresentasikan sebagai "1"). Selain itu, float yang melebihi enam belas digit desimal akan dipangkas menjadi enam belas tempat desimal.

"google2.5" = strings.concat($e.principal.hostname, 2.5)
Contoh 4

Contoh berikut menyertakan variabel string, literal string, variabel bilangan bulat, dan literal float sebagai argumen. Semua variabel berasal dari peristiwa yang sama, $e, dan digabungkan dengan literal untuk menampilkan string.

"google-test802.5" = strings.concat($e.principal.hostname, "-test", $e.principal.port, 2.5)
Contoh 5

Contoh berikut mencoba menggabungkan principal.port dari peristiwa $e1, dengan principal.hostname dari peristiwa $e2. Hal ini akan menampilkan error compiler karena argumennya adalah variabel peristiwa yang berbeda.

// Will not compile
"test" = strings.concat($e1.principal.port, $e2.principal.hostname)

strings.contains

strings.contains( str, substr )

Deskripsi

Menampilkan benar jika string tertentu berisi substring yang ditentukan. Jika tidak, nilai salah (false) akan ditampilkan.

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

BOOL

Contoh kode

Contoh 1

Contoh ini menampilkan nilai benar karena string memiliki substring "is".

strings.contains("thisisastring", "is") = true
Contoh 2

Contoh ini menampilkan nilai salah (false) karena string tidak memiliki substring "that".

strings.contains("thisisastring", "that") = false

strings.count_substrings

strings.count_substrings(string_to_search_in, substring_to_count)

Deskripsi

Jika diberi string dan substring, akan menampilkan int64 jumlah kemunculan substring yang tidak tumpang-tindih dalam string.

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

INT

Contoh kode

Bagian ini berisi contoh yang menghitung berapa kali substring muncul dalam string tertentu.

Contoh 1

Contoh ini menggunakan string non-null dan karakter substring tunggal non-null.

strings.count_substrings("this`string`has`four`backticks", "`") = 4
Contoh 2

Contoh ini menggunakan string non-null dan substring non-null yang lebih dari satu karakter.

strings.count_substrings("str", "str") = 1
Contoh 3

Contoh ini menggunakan string non-null dan substring kosong.

strings.count_substrings("str", "") = 0
Contoh 4

Contoh ini menggunakan string kosong dan substring non-null yang lebih dari satu karakter.

strings.count_substrings("", "str") = 0
Contoh 5

Contoh ini menggunakan string kosong dan substring kosong.

strings.count_substrings("", "") = 0
Contoh 6

Contoh ini menggunakan string non-null dan substring non-null yang lebih dari satu karakter dan lebih dari satu kemunculan.

strings.count_substrings("fooABAbarABAbazABA", "AB") = 3
Contoh 7

Contoh ini menggunakan string non-null dan substring non-null yang lebih dari satu karakter dan lebih dari satu kemunculan. Hal ini menyoroti batasan dengan kemunculan substring yang tumpang-tindih

strings.count_substrings("ABABABA", "ABA") = 2

strings.ends_with

strings.ends_with(value, suffix)

Deskripsi

Fungsi mengambil dua string (value, suffix). Menampilkan benar (true) jika sufiks tidak kosong dan berada di akhir nilai.

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

BOOL

Contoh kode

Contoh kode berikut mengilustrasikan beberapa cara Anda dapat menggunakan fungsi strings.ends_with.

Contoh: menampilkan nilai benar (true)

Menampilkan nilai benar jika sufiks ditemukan di akhir nilai.

strings.ends_with(target.hostname, "com") = true
Contoh: menampilkan nilai salah (false)

Menampilkan nilai salah (false) jika akhiran tidak berada di akhir nilai.

strings.ends_with(target.hostname, "com") = false
Contoh: menampilkan nilai salah (false) jika identik

Menampilkan salah (false) jika sufiks dan nilai sama.

target.hostname != "example.com"
strings.ends_with("str", "str") = true
Contoh: menampilkan nilai salah (false) saat akhiran kosong

Menampilkan salah (false) jika akhiran adalah string kosong.

target.hostname != "example.com"
strings.ends_with("str", "") = false
Contoh: menampilkan salah (false) jika nilai kosong

Menampilkan nilai salah (false) jika nilainya adalah string kosong.

target.hostname != "example.com"
strings.ends_with("", "str") = false
Contoh: menampilkan salah (false) jika sufiks dan nilai kosong

Menampilkan salah (false) jika akhiran dan nilai adalah string kosong.

target.hostname != "example.com"
strings.ends_with("", "") = false

strings.extract_domain

strings.extract_domain(url_string)

Deskripsi

Mengekstrak domain dari string.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh ini menunjukkan string kosong

strings.extract_domain("") = ""
Contoh 2

string acak, bukan URL

strings.extract_domain("1234") = ""
Contoh 3

beberapa garis miring terbalik

strings.extract_domain("\\\\") = ""
Contoh 4

karakter non-alfabet ditangani dengan baik

strings.extract_domain("http://例子.卷筒纸.中国") = "卷筒纸.中国"
Contoh 5

menangani URI

strings.extract_domain("mailto:?to=&subject=&body=") = ""
Contoh 6

beberapa karakter sebelum URL sebenarnya

strings.extract_domain("     \t   !$5*^)&dahgsdfs;http://www.google.com") = "google.com"
Contoh 7

karakter khusus dalam URI #

strings.extract_domain("test#@google.com") = ""
Contoh 8

karakter khusus dalam URL #

strings.extract_domain("https://test#@google.com") = ""
Contoh 9

kasus pengujian positif

strings.extract_domain("https://google.co.in") = "google.co.in"

strings.extract_hostname

strings.extract_hostname(string)

Deskripsi

Mengekstrak nama host dari string. Fungsi ini peka huruf besar/kecil.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh ini menampilkan string kosong.

strings.extract_hostname("") = ""
Contoh 2

string acak, bukan URL

strings.extract_hostname("1234") = "1234"
Contoh 3

beberapa garis miring terbalik

strings.extract_hostname("\\\\") = ""
Contoh 4

karakter non-Inggris ditangani dengan baik

strings.extract_hostname("http://例子.卷筒纸.中国") = "例子.卷筒纸.中国"
Contoh 5

menangani URI

strings.extract_hostname("mailto:?to=&subject=&body=") = "mailto"
Contoh 6

beberapa karakter sebelum URL sebenarnya

strings.extract_hostname("     \t   !$5*^)&dahgsdfs;http://www.google.com") = "www.google.com"
Contoh 7

karakter khusus dalam URI #

strings.extract_hostname("test#@google.com") = "test"
Contoh 8

karakter khusus dalam URL #

strings.extract_hostname("https://test#@google.com") = "test"

strings.from_base64

strings.from_base64(base64_encoded_string)

Deskripsi

Fungsi mengonversi nilai STRING berenkode base64 menjadi nilai BYTES biner mentah. Panggilan fungsi dengan nilai yang tidak dapat di-casting akan menampilkan BYTES kosong secara default.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

BYTES

Contoh kode

Konversi String Berenkode Base64 ke Byte

Fungsi ini mengonversi string berenkode base64 ke representasi byte biner mentahnya.

strings.from_base64("AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA=") = b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000
Konversi Gagal (Default ke Byte Kosong)

Fungsi ini secara default akan menampilkan byte kosong jika nilai yang diberikan tidak valid.

strings.from_base64("invalid-value") = b'

strings.from_hex

strings.from_hex(hex_string)

Deskripsi

Menampilkan byte yang terkait dengan string hex yang diberikan.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

BYTES

Contoh kode

Mendapatkan byte yang terkait dengan string hex tertentu.

Contoh 1

Contoh ini menunjukkan konversi karakter non-hex.

strings.from_hex("str") // returns empty bytes
Contoh 2

Contoh ini menunjukkan input dengan string kosong.

strings.from_hex("") // returns empty bytes
Contoh 3

Contoh ini menunjukkan konversi string hex.

strings.from_hex("1234") // returns 1234 bytes
Contoh 4

Contoh ini menunjukkan konversi karakter non-ASCII.

strings.from_hex("筒纸.中国") // returns empty bytes

strings.ltrim

strings.ltrim(string_to_trim, cutset)

Deskripsi

Memangkas ruang kosong di depan dari string tertentu. Fungsi ini menghapus karakter di awal yang ada dalam cutset tersebut.

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Berikut adalah contoh kasus penggunaan.

Contoh 1

Contoh ini menggunakan argumen pertama dan kedua yang sama.

strings.ltrim("str", "str") = ""
Contoh 2

Contoh ini menggunakan string kosong sebagai argumen kedua.

strings.ltrim("str", "") = "str"
Contoh 3

Contoh ini menggunakan string kosong sebagai argumen pertama, dan string sebagai argumen kedua.

strings.ltrim("", "str") = ""
Contoh 4

Contoh ini menggunakan string yang berisi spasi kosong, dan string sebagai argumen kedua.

strings.ltrim("a aastraa aa ", " a") = "straa aa "

strings.reverse

strings.reverse(STRING)

Deskripsi

Menampilkan string yang merupakan kebalikan dari string input.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh berikut meneruskan string pendek.

strings.reverse("str") = "rts"  // The function returns 'rts'.
Contoh 2

Contoh berikut meneruskan string kosong.

strings.reverse("") = ""
Contoh 3

Contoh berikut meneruskan palindrom.

strings.reverse("tacocat") = "tacocat"

strings.rtrim

strings.rtrim(string_to_trim, cutset)

Deskripsi

Memangkas ruang kosong di akhir dari string tertentu. Menghapus karakter di akhir yang ada dalam cutset tersebut.

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Berikut adalah contoh kasus penggunaan.

Contoh 1

Contoh berikut meneruskan string yang sama sebagai argumen pertama dan kedua.

strings.rtrim("str", "str") = ""
Contoh 2

Contoh berikut meneruskan string kosong sebagai argumen kedua.

strings.rtrim("str", "") = "str"
Contoh 3

Contoh berikut meneruskan string kosong sebagai argumen pertama dan string tidak kosong sebagai argumen kedua.

strings.rtrim("", "str") = ""
Contoh 4

Contoh berikut meneruskan string yang berisi spasi sebagai argumen pertama dan string yang tidak kosong sebagai argumen kedua.

strings.rtrim("a aastraa aa ", " a") = "a aasstr"

strings.split

strings.split(string, delimiter)

Deskripsi

Memisahkan nilai string menggunakan argumen pembatas. Pemisah defaultnya adalah koma (,).

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

ARRAY_STRINGS

Contoh kode

Contoh kode berikut mengilustrasikan beberapa cara Anda dapat menggunakan fungsi strings.split.

Contoh: memisahkan string dengan default

Contoh berikut memisahkan string menggunakan pembatas default, yaitu koma.

strings.split("a,b,c,d") = ["a", "b", "c", "d"]
Contoh: memisahkan string dengan titik dua

Contoh berikut memisahkan string di setiap titik dua (:).

strings.split("a:b:c:d", ":") = ["a", "b", "c", "d"]
Contoh: pemisah tidak ada

Contoh berikut tidak memiliki pemisah dalam nilai string.

strings.split("a,b,c,d", ":") = ["a,b,c,d"]
Contoh: pembatas kosong

Contoh berikut memiliki string pemisah kosong.

strings.split("abc", "") = ["a", "b", "c"]

strings.to_lower

strings.to_lower(stringText)

Deskripsi

Fungsi ini mengambil string input dan menampilkan string setelah mengubah semua karakter menjadi huruf kecil

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh berikut menampilkan true.

"test@google.com" = strings.to_lower($e.network.email.to)

strings.to_upper

strings.to_upper(string_val)

Deskripsi

Menampilkan string asli dengan semua karakter alfabet dalam huruf besar.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh berikut menampilkan argumen yang diberikan dalam huruf besar.

strings.to_upper("example") = "EXAMPLE"

strings.trim

strings.trim(string_to_trim, cutset)

Deskripsi

Memangkas spasi kosong di awal dan akhir dari string yang diberikan. Selain itu, hapus karakter yang tidak diinginkan (ditentukan oleh argumen cutset) dari string input.

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Berikut adalah contoh kasus penggunaan.

Contoh 1

Dalam contoh berikut, string yang sama diteruskan sebagai string input dan cutset, yang menghasilkan string kosong.

strings.trim("str", "str") // ""
Contoh 2

Dalam contoh berikut, string kosong diteruskan sebagai cutset, yang menghasilkan string str asli karena tidak ada karakter yang ditentukan dalam cutset untuk dihapus.

strings.trim("str", "") = "str"
Contoh 3

Dalam contoh berikut, fungsi menghasilkan string kosong karena string input sudah kosong dan tidak ada karakter yang akan dihapus.

strings.trim("", "str") = ""
Contoh 4

Dalam contoh berikut, fungsi menghasilkan str karena fungsi trim menghapus hal berikut:

  • spasi di akhir "a aastraa aa "
  • karakter yang ditentukan dalam cutset (spasi, a)
strings.trim("a aastraa aa ", " a") = "str"

strings.url_decode

strings.url_decode(url_string)

Deskripsi

Mengingat string URL, dekode karakter escape dan tangani karakter UTF-8 yang telah dienkode. Menampilkan string kosong jika decoding gagal.

Jenis data parameter

STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Contoh ini menunjukkan kasus pengujian positif.

strings.url_decode("three%20nine%20four") = "three nine four"
Contoh 2

Contoh ini menunjukkan kasus string kosong.

strings.url_decode("") // ""
Contoh 3

Contoh ini menunjukkan penanganan karakter non-alfabet.

strings.url_decode("%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B") // "上海+中國"
Contoh 4

Contoh ini menunjukkan contoh dekode URL.

strings.url_decode("http://www.google.com%3Fparam1%3D%22+1+%3E+2+%22%26param2%3D2%3B") // 'http://www.google.com?param1="+1+>+2+"&param2=2;'

timestamp.as_unix_seconds

timestamp.as_unix_seconds(timestamp [, time_zone])

Deskripsi

Fungsi ini menampilkan bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix untuk string stempel waktu yang diberikan.

  • timestamp adalah string yang merepresentasikan stempel waktu epoch yang valid. Formatnya harus %F %T.
  • time_zone bersifat opsional dan merupakan string yang merepresentasikan zona waktu. Jika dihapus, defaultnya adalah GMT. Anda dapat menentukan zona waktu menggunakan literal string. Opsinya adalah sebagai berikut:
    • Nama database TZ, misalnya America/Los_Angeles. Untuk mengetahui informasi selengkapnya, lihat daftar zona waktu database tz di Wikipedia.
    • Offset zona waktu dari UTC, dalam format(+|-)H[H][:M[M]], misalnya: "-08:00".

Berikut adalah contoh penentu time_zone yang valid, yang dapat Anda teruskan sebagai argumen kedua ke fungsi ekstraksi waktu:

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

Jenis data parameter

STRING, STRING

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Stempel waktu epoch yang valid

timestamp.as_unix_seconds("2024-02-22 10:43:00") = 1708598580
Contoh 2

Stempel waktu epoch yang valid dengan zona waktu America/New_York

timestamp.as_unix_seconds("2024-02-22 10:43:00", "America/New_York") = 1708616580

timestamp.current_seconds

timestamp.current_seconds()

Deskripsi

Menampilkan bilangan bulat yang merepresentasikan waktu saat ini dalam detik Unix. Nilai ini kira-kira sama dengan stempel waktu deteksi dan didasarkan pada waktu aturan dijalankan. Fungsi ini adalah sinonim dari fungsi timestamp.now().

Jenis data parameter

NONE

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Contoh berikut menampilkan true jika masa berlaku sertifikat telah berakhir selama lebih dari 24 jam. Fungsi ini menghitung selisih waktu dengan mengurangi detik Unix saat ini, lalu membandingkan menggunakan operator lebih besar dari.

86400 < timestamp.current_seconds() - $e.network.tls.certificate.not_after

timestamp.get_date

timestamp.get_date(unix_seconds [, time_zone])

Deskripsi

Fungsi ini menampilkan string dalam format YYYY-MM-DD, yang merepresentasikan hari saat stempel waktu berada.

  • unix_seconds adalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti $e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.
  • time_zone bersifat opsional dan merupakan string yang merepresentasikan time_zone. Jika dihapus, defaultnya adalah "GMT". Anda dapat menentukan zona waktu menggunakan literal string. Opsinya adalah:
    • Nama database TZ, misalnya "America/Los_Angeles". Untuk mengetahui informasi selengkapnya, lihat kolom"Nama Database TZ" dari halaman ini
    • Offset zona waktu dari UTC, dalam format(+|-)H[H][:M[M]], misalnya: "-08:00".

Berikut adalah contoh penentu time_zone yang valid, yang dapat Anda teruskan sebagai argumen kedua ke fungsi ekstraksi waktu:

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

Jenis data parameter

INT, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Dalam contoh ini, argumen time_zone tidak ada, sehingga secara default akan menjadi "GMT".

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_date($ts) = "2024-02-19"
Contoh 2

Contoh ini menggunakan literal string untuk menentukan time_zone.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_date($ts, "America/Los_Angeles") = "2024-02-20"

timestamp.get_minute

timestamp.get_minute(unix_seconds [, time_zone])

Deskripsi

Fungsi ini menampilkan bilangan bulat dalam rentang [0, 59] yang merepresentasikan menit.

  • unix_seconds adalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti $e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.
  • time_zone bersifat opsional dan merupakan string yang merepresentasikan zona waktu. Jika dihapus, defaultnya adalah "GMT". Anda dapat menentukan zona waktu menggunakan literal string. Opsinya adalah:
    • Nama database TZ, misalnya "America/Los_Angeles". Untuk mengetahui informasi selengkapnya, lihat kolom"Nama Database TZ" dari halaman ini
    • Offset zona waktu dari UTC, dalam format(+|-)H[H][:M[M]], misalnya: "-08:00".

Berikut adalah contoh penentu time_zone yang valid, yang dapat Anda teruskan sebagai argumen kedua ke fungsi ekstraksi waktu:

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

Jenis data parameter

INT, STRING

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Dalam contoh ini, argumen time_zone tidak ada, sehingga secara default akan menjadi "GMT".

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts) = 15
Contoh 2

Contoh ini menggunakan literal string untuk menentukan time_zone.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts, "America/Los_Angeles") = 15

timestamp.get_hour

timestamp.get_hour(unix_seconds [, time_zone])

Deskripsi

Fungsi ini menampilkan bilangan bulat dalam rentang [0, 23] yang merepresentasikan jam.

  • unix_seconds adalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti $e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.
  • time_zone bersifat opsional dan merupakan string yang merepresentasikan zona waktu. Jika dihapus, defaultnya adalah "GMT". Anda dapat menentukan zona waktu menggunakan literal string. Opsinya adalah:
    • Nama database TZ, misalnya "America/Los_Angeles". Untuk mengetahui informasi selengkapnya, lihat kolom"Nama Database TZ" dari halaman ini
    • Offset zona waktu dari UTC, dalam format(+|-)H[H][:M[M]], misalnya: "-08:00".

Berikut adalah contoh penentu time_zone yang valid, yang dapat Anda teruskan sebagai argumen kedua ke fungsi ekstraksi waktu:

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

Jenis data parameter

INT, STRING

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Dalam contoh ini, argumen time_zone tidak ada, sehingga secara default akan menjadi "GMT".

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts) = 15
Contoh 2

Contoh ini menggunakan literal string untuk menentukan time_zone.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts, "America/Los_Angeles") = 15

timestamp.get_day_of_week

timestamp.get_day_of_week(unix_seconds [, time_zone])

Deskripsi

Fungsi ini menampilkan bilangan bulat dalam rentang [1, 7] yang merepresentasikan hari dalam seminggu, dimulai dengan hari Minggu. Misalnya, 1 = Minggu dan 2 = Senin.

  • unix_seconds adalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti $e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.
  • time_zone bersifat opsional dan merupakan string yang merepresentasikan time_zone. Jika dihapus, defaultnya adalah "GMT". Anda dapat menentukan zona waktu menggunakan literal string. Opsinya adalah:
    • Nama database TZ, misalnya "America/Los_Angeles". Untuk mengetahui informasi selengkapnya, lihat kolom"Nama Database TZ" dari halaman ini
    • Offset zona waktu dari UTC, dalam format(+|-)H[H][:M[M]], misalnya: "-08:00".

Berikut adalah contoh penentu time_zone yang valid, yang dapat Anda teruskan sebagai argumen kedua ke fungsi ekstraksi waktu:

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

Jenis data parameter

INT, STRING

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Dalam contoh ini, argumen time_zone tidak ada, sehingga secara default akan menjadi "GMT".

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_day_of_week($ts) = 6
Contoh 2

Contoh ini menggunakan literal string untuk menentukan time_zone.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_day_of_week($ts, "America/Los_Angeles") = 6

timestamp.get_timestamp

timestamp.get_timestamp(unix_seconds, optional timestamp_format/time_granularity, optional timezone)

Deskripsi

Fungsi ini menampilkan string dalam format YYYY-MM-DD, yang merepresentasikan hari saat stempel waktu berada.

  • unix_seconds adalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti $e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.
  • timestamp_format bersifat opsional dan merupakan string yang merepresentasikan format stempel waktu. Jika dihilangkan, defaultnya adalah %F %T. Anda dapat menentukan format menggunakan string format tanggal waktu atau salah satu perincian waktu berikut: SECOND, MINUTE, HOUR, DATE, WEEK, MONTH, atau YEAR. Untuk opsi pemformatan lainnya, lihat Memformat elemen untuk bagian tanggal dan waktu
  • time_zone bersifat opsional dan merupakan string yang merepresentasikan zona waktu. Jika dihapus, defaultnya adalah GMT. Anda dapat menentukan zona waktu menggunakan literal string. Opsinya adalah sebagai berikut:
    • Nama database Zona Waktu (TZ) IANA, misalnya, America/Los_Angeles. Untuk mengetahui informasi selengkapnya, lihat daftar zona waktu database tz di Wikipedia.
    • Offset zona waktu dari UTC, dalam format (+|-)H[H][:M[M]], misalnya: "-08:00".

Berikut adalah contoh penentu time_zone yang valid, yang dapat Anda teruskan sebagai argumen kedua ke fungsi ekstraksi waktu:

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

Jenis data parameter

INT, STRING, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Dalam contoh ini, argumen time_zone tidak disertakan, sehingga secara default ditetapkan ke GMT.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_timestamp($ts) = "2024-02-22 10:43:51"
Contoh 2

Contoh ini menggunakan literal string untuk menentukan time_zone.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_timestamp($ts, "%F %T", "America/Los_Angeles") = "2024-02-22 10:43:51"
Contoh 3

Contoh ini menggunakan literal string untuk menentukan timestamp_format.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_timestamp($ts, "%Y-%m", "GMT") = "2024-02"
Contoh 4

Contoh ini memformat stempel waktu unix sebagai string dengan perincian detik.

timestamp.get_timestamp(1708598631, "SECOND", "GMT") = "2024-02-22 10:43:51"
Contoh 5

Contoh ini memformat stempel waktu Unix sebagai string pada perincian menit.

timestamp.get_timestamp(1708598631, "MINUTE", "GMT") = "2024-02-22 10:43"
Contoh 6

Contoh ini memformat stempel waktu Unix sebagai string dengan perincian per jam.

timestamp.get_timestamp(1708598631, "HOUR", "GMT") = "2024-02-22 10"
Contoh 7

Contoh ini memformat stempel waktu unix sebagai string dengan perincian harian.

timestamp.get_timestamp(1708598631, "DATE", "GMT") = "2024-02-22"
Contoh 8

Contoh ini memformat stempel waktu unix sebagai string dengan perincian minggu.

timestamp.get_timestamp(1708598631, "WEEK", "GMT") = "2024-02-18"
Contoh 9

Contoh ini memformat stempel waktu Unix sebagai string dengan perincian bulanan.

timestamp.get_timestamp(1708598631, "MONTH", "GMT") = "2024-02"
Contoh 10

Contoh ini memformat stempel waktu Unix sebagai string dengan perincian tahun.

timestamp.get_timestamp(1708598631, "YEAR", "GMT") = "2024"

timestamp.get_week

timestamp.get_week(unix_seconds [, time_zone])

Deskripsi

Fungsi ini menampilkan bilangan bulat dalam rentang [0, 53] yang mewakili minggu dalam setahun. Minggu dimulai pada hari Minggu. Tanggal sebelum hari Minggu pertama dalam setahun adalah minggu 0.

  • unix_seconds adalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti $e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.
  • time_zone bersifat opsional dan merupakan string yang merepresentasikan zona waktu. Jika dihapus, defaultnya adalah "GMT". Anda dapat menentukan zona waktu menggunakan literal string. Opsinya adalah:
    • Nama database TZ, misalnya "America/Los_Angeles". Untuk mengetahui informasi selengkapnya, lihat kolom"Nama Database TZ" dari halaman ini
    • Offset zona waktu dari UTC, dalam format(+|-)H[H][:M[M]], misalnya: "-08:00".

Berikut adalah contoh penentu time_zone yang valid, yang dapat Anda teruskan sebagai argumen kedua ke fungsi ekstraksi waktu:

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

Jenis data parameter

INT, STRING

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Dalam contoh ini, argumen time_zone tidak ada, sehingga secara default akan menjadi "GMT".

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_week($ts) = 0
Contoh 2

Contoh ini menggunakan literal string untuk menentukan time_zone.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_week($ts, "America/Los_Angeles") = 0

timestamp.now

timestamp.now()

Deskripsi

Menampilkan jumlah detik sejak 1970-01-01 00:00:00 UTC. Ini juga dikenal sebagai waktu epoch Unix.

Jenis hasil yang ditampilkan

INT

Contoh kode

Contoh 1

Contoh berikut menampilkan stempel waktu untuk kode yang dieksekusi pada 22 Mei 2024 pukul 18.16.59.

timestamp.now() = 1716401819 // Unix epoch time in seconds for May 22, 2024 at 18:16:59

window.avg

Didukung di:
window.avg(numeric_values [, should_ignore_zero_values])

Deskripsi

Menampilkan rata-rata nilai input (yang dapat berupa Integer atau Float). Menetapkan argumen kedua opsional ke benar (true) akan mengabaikan nilai nol.

Jenis data parameter

INT|FLOAT

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh 1

Contoh ini menunjukkan rata-rata bilangan bulat.

// This rule sets the outcome $size_mode to the average
// file size in the 5 minute match window.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size) // yields 2.5 if the event file size values in the match window are 1, 2, 3 and 4
Contoh 2

Contoh ini menunjukkan rata-rata float.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size) // yields 1.75 if the event file size values in the match window are 1.1 and 2.4
Contoh 3

Rata-rata input negatif

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size) // yields 0.6 if the event file size values in the match window are -1.1, 1.1, 0.0 and 2.4
Contoh 4

0 pengembalian 0

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size) // yields 0 if the event file size values in the match window is 0
Contoh 5

Mengabaikan 0 nilai

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size, true) // yields 394 if the event file size values in the match window are 0, 0, 0 and 394

window.first

Didukung di:
window.first(values_to_sort_by, values_to_return)

Deskripsi

Fungsi agregasi ini menampilkan nilai string yang berasal dari peristiwa dengan nilai int berkorelasi terendah di jendela kecocokan. Contoh kasus penggunaan adalah mendapatkan userid dari peristiwa dengan stempel waktu terendah di jendela kecocokan (peristiwa paling awal).

Jenis data parameter

INT, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Mendapatkan nilai string yang berasal dari peristiwa dengan nilai int berkorelasi terendah di jendela pencocokan.

// This rule sets the outcome $first_event to the lowest correlated int value
// in the 5 minute match window.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $first_event = window.first($e.metadata.timestamp.seconds, $e.metadata.event_type) // yields v1 if the events in the match window are 1, 2 and 3 and corresponding values v1, v2, and v3.

window.last

Didukung di:
window.last(values_to_sort_by, values_to_return)

Deskripsi

Fungsi agregasi ini menampilkan nilai string yang berasal dari peristiwa dengan nilai int berkorelasi tertinggi dalam jendela kecocokan. Contoh kasus penggunaan adalah mendapatkan userid dari peristiwa dengan stempel waktu terendah di jendela kecocokan (stempel waktu tertinggi).

Jenis data parameter

INT, STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Mendapatkan nilai string yang berasal dari peristiwa dengan nilai int berkorelasi tertinggi di jendela pencocokan.

// This rule sets the outcome $last_event to the highest correlated int value
// in the 5 minute match window.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $last_event = window.first($e.metadata.timestamp.seconds, $e.metadata.event_type) // yields v3 if the events in the match window are 1, 2 and 3 and corresponding values v1, v2, and v3.

window.median

Didukung di:
window.median(numeric_values, should_ignore_zero_values)

Deskripsi

Menampilkan median nilai input. Jika ada 2 nilai median, hanya 1 yang akan dipilih secara non-deterministik sebagai nilai yang ditampilkan.

Jenis data parameter

INT|FLOAT, BOOL

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh 1

Contoh ini menampilkan median saat nilai input bukan nol.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size) // returns 2 if the file sizes in the match window are [1, 2, 3]
  condition:
      $e
}
Contoh 2

Contoh ini menampilkan median saat input menyertakan beberapa nilai nol yang tidak boleh diabaikan.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size) // returns 1 if the file sizes in the match window are [0,0, 1, 2, 3]
  condition:
      $e
}
Contoh 3

Contoh ini menampilkan median saat input menyertakan beberapa nilai nol yang harus diabaikan.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size, true) // returns 2 if the file sizes in the match window are [0,0, 1, 2, 3]
  condition:
      $e
}
Contoh 4

Contoh ini menampilkan median saat input mencakup semua nilai nol yang harus diabaikan.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size) // returns 0 if the file sizes in the match window are [0,0]
  condition:
      $e
}
Contoh 5

Contoh ini menunjukkan bahwa, jika ada beberapa median, hanya satu median yang ditampilkan.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size) // returns 1 if the file sizes in the match window are [1, 2, 3, 4]
  condition:
      $e
}

window.mode

Didukung di:
window.mode(values)

Deskripsi

Menampilkan mode nilai input. Jika ada beberapa kemungkinan nilai mode, hanya salah satu nilai tersebut yang akan dipilih secara non-deterministik sebagai nilai yang ditampilkan.

Jenis data parameter

INT|FLOAT|STRING

Jenis hasil yang ditampilkan

STRING

Contoh kode

Contoh 1

Mendapatkan mode nilai di jendela kecocokan.

// This rule sets the outcome $size_mode to the most frequently occurring
// file size in the 5 minute match window.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.mode($e.file.size) // yields 1.6 if the event file size values in the match window are 1.6, 2, and 1.6

window.range

window.range(numeric_values, optional should_ignore_zero_values)

Deskripsi

Menampilkan rentang nilai input yang ditemukan (inklusif min, maks). Setiap nilai dapat berupa bilangan bulat atau floating point. Menetapkan argumen kedua opsional ke benar (true) akan mengabaikan nilai nol.

Jenis data parameter

INT|FLOAT, BOOL

Jenis hasil yang ditampilkan

ARRAY_FLOATS

Contoh kode

Contoh kode berikut mengilustrasikan beberapa cara Anda dapat menggunakan fungsi window.range.

Contoh: bilangan bulat minimum dan maksimum

Contoh ini menunjukkan nilai bilangan bulat minimum dan maksimum.

window.range([1, 2, 3, 4], false) = [1.000000, 4.000000]
Contoh: floating point minimum dan maksimum

Contoh ini menunjukkan nilai floating point minimum dan maksimum.

window.range([1.100000, 39.400000, 2.400000], false) = [1.100000, 39.400000]
Contoh: bilangan bulat negatif minimum dan maksimum

Contoh ini menunjukkan nilai bilangan bulat negatif minimum dan maksimum.

window.range([-1.100000, 1.100000, 0.000000, 2.400000], false) = [-1.100000, 2.400000]
Contoh: nilai 0 yang diabaikan

Contoh ini menunjukkan cara nilai 0 diabaikan saat Anda menetapkan parameter kedua.

window.range([0, 0, 0, 394, 1], true) = [1.000000, 394.000000]

window.stddev

Didukung di:
window.stddev(numeric_values)

Deskripsi

Menampilkan simpangan baku nilai input dalam jendela kecocokan.

Jenis data parameter

INT|FLOAT

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh 1

Contoh ini menampilkan simpangan baku bilangan bulat dalam jendela kecocokan.

// This rule creates a detection when the file size stddev in 5 minutes for a user is over a threshold.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 4.0 if the event file size values in the match window are [10, 14, 18].
condition:
  $e and #p1 > 2
Contoh 2

Contoh ini menampilkan simpangan baku float dalam jendela pencocokan.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 4.488686 if the event file size values in the match window are [10.00, 14.80, 18.97].
condition:
  $e and #p1 > 2
Contoh 3

Contoh ini menampilkan simpangan baku dalam jendela kecocokan yang berisi angka negatif.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 48.644972 if the event file size values in the match window are [-1, -56, -98].
condition:
  $e and #p1 > 2
Contoh 4

Contoh ini menampilkan simpangan baku nol jika semua nilai dalam rentang kecocokan sama.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 0.000000 if the event file size values in the match window are [1, 1, 1].
condition:
  $e and #p1 > 2
Contoh 5

Contoh ini menampilkan simpangan baku jendela kecocokan yang berisi angka positif dan negatif.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 1.000000 if the event file size values in the match window are [1, 0, -1].
condition:
  $e and #p1 > 10

window.variance

Didukung di:
window.variance(values)

Deskripsi

Fungsi ini menampilkan varians yang ditentukan dari nilai input.

Jenis data parameter

INT|FLOAT

Jenis hasil yang ditampilkan

FLOAT

Contoh kode

Contoh 1

Contoh ini menampilkan variansi semua bilangan bulat.

// This rule creates a detection when the file size variance in 5 minutes for a user is over a threshold.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 16 if the event file size values in the match window are [10, 14, 18].
condition:
  $e and #p1 > 10
Contoh 2

Contoh ini menampilkan varians semua float.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 20.148300 if the event file size values in the match window are [10.00, 14.80, 18.97].
condition:
  $e and #p1 > 10
Contoh 3

Contoh ini menampilkan variansi angka negatif.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 2366.333333 if the event file size values in the match window are [-1, -56, -98].
condition:
  $e and #p1 > 10
Contoh 4

Contoh ini menampilkan nilai varians kecil.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 0.000000 if the event file size values in the match window are [0.000000, 0.000000, 0.000100].
condition:
  $e and #p1 > 10
Contoh 5

Contoh ini menampilkan varians nol.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 0.000000 if the event file size values in the match window are [1, 1, 1].
condition:
  $e and #p1 > 10
Contoh 6

Contoh ini menampilkan varians bilangan positif dan negatif.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 1.000000 if the event file size values in the match window are [1, 0, -1].
condition:
  $e and #p1 > 10

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