Fungsi
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:
- Bagian
events. BOOL_CLAUSEdari kondisi di bagian hasil.
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
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
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
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
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
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
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,
regexphanya 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
nocasesetelah 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
optimization.sample_rate(byteOrString, rateNumerator, rateDenominator)
Deskripsi
Fungsi ini menentukan apakah akan menyertakan peristiwa berdasarkan strategi pengambilan sampel deterministik. Fungsi ini menampilkan:
trueuntuk sebagian kecil nilai input, setara dengan (rateNumerator/rateDenominator), yang menunjukkan bahwa peristiwa harus disertakan dalam sampel.falseyang 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
BYTEatauSTRING. - 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:
$e.principal.ipdievaluasi terlebih dahulu.$e.src.ipdievaluasi berikutnya.$e.target.ipdievaluasi berikutnya.- Terakhir, string "No IP" ditampilkan sebagai nilai default jika kolom
ipsebelumnya 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+"¶m2=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.
timestampadalah string yang merepresentasikan stempel waktu epoch yang valid. Formatnya harus%F %T.time_zonebersifat opsional dan merupakan string yang merepresentasikan zona waktu. Jika dihapus, defaultnya adalahGMT. 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".
- Nama database TZ, misalnya
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_secondsadalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti$e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.time_zonebersifat 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_secondsadalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti$e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.time_zonebersifat 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_secondsadalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti$e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.time_zonebersifat 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_secondsadalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti$e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.time_zonebersifat 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_secondsadalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti$e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.timestamp_formatbersifat 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, atauYEAR. Untuk opsi pemformatan lainnya, lihat Memformat elemen untuk bagian tanggal dan waktutime_zonebersifat opsional dan merupakan string yang merepresentasikan zona waktu. Jika dihapus, defaultnya adalahGMT. 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".
- Nama database Zona Waktu (TZ) IANA, misalnya,
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_secondsadalah bilangan bulat yang merepresentasikan jumlah detik setelah epoch Unix, seperti$e.metadata.event_timestamp.seconds, atau placeholder yang berisi nilai tersebut.time_zonebersifat 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
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
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
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
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
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
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
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.