Statistik dan agregasi dalam penelusuran melalui YARA-L 2.0
Halaman ini menjelaskan cara menjalankan kueri statistik pada peristiwa UDM dan mengelompokkan hasilnya untuk analisis menggunakan YARA-L 2.0.
Saat menangani volume besar peristiwa UDM yang dihasilkan di lingkungan Anda, penting untuk memahami tren dalam data penelusuran UDM Anda. Anda dapat menggunakan statistik dan fungsi agregat untuk mendapatkan insight yang dapat ditindaklanjuti dari log UDM Anda. Penelusuran UDM mendukung semua fungsi agregat di YARA-L 2.0.
Kasus penggunaan untuk kueri statistik
Anda dapat menggunakan kueri statistik untuk kasus penggunaan berikut:
Melacak metrik penting: Anda dapat mengukur distribusi dan frekuensi peristiwa UDM dan aset terkait, seperti host yang berkomunikasi dengan alamat IP berbahaya yang diketahui.
Mendeteksi perilaku anomali: Anda dapat mengidentifikasi lonjakan aktivitas yang mungkin mengindikasikan insiden keamanan, seperti lonjakan traffic jaringan yang tidak terduga atau login di luar jam kerja.
Menganalisis tren dari waktu ke waktu: Anda dapat menilai perubahan postur keamanan untuk mengevaluasi efektivitas kontrol atau mengidentifikasi area yang perlu ditingkatkan, seperti memantau fluktuasi jumlah kerentanan dari waktu ke waktu.
Struktur kueri YARA-L 2.0 dalam penelusuran
Anda dapat mengelompokkan dan mengurutkan hasil kueri penelusuran UDM menggunakan sintaksis yang mirip dengan struktur YARA-L yang digunakan dalam aturan mesin deteksi. Untuk mengetahui informasi selengkapnya, lihat sintaksis bahasa YARA-L 2.0.
Struktur kueri YARA-L 2.0 adalah sebagai berikut:
Pernyataan pemfilteran: menentukan kondisi untuk memfilter peristiwa.
Cocokkan (opsional): menentukan kolom yang akan dikelompokkan. Untuk mengetahui informasi selengkapnya, lihat Sintaksis bagian kecocokan.
Hasil: menentukan output kueri. Untuk informasi selengkapnya, lihat Sintaksis bagian hasil.
Urutan: menentukan urutan hasil kueri sebagai
asc
(naik) ataudesc
(turun). Jika urutan (asc
ataudesc
) tidak ditentukan, nilai defaultnya adalahasc
.Batas (opsional): menetapkan jumlah maksimum baris yang ditampilkan kueri.
Berikut adalah contoh penggunaan urutan dan batas:
metadata.log_type = "OKTA"
match:
principal.ip
Outcome:
$user_count_by_ip = count(principal.user.userid)
order:
$user_count_by_ip desc
limit:
20
Agregasi
Penelusuran UDM mendukung fungsi agregat berikut:
array
array(expression)
Deskripsi
Fungsi array
menampilkan semua nilai dalam bentuk daftar. Daftar ini dipangkas menjadi maksimum 25 elemen acak.
Jenis data parameter
STRING
Jenis hasil yang ditampilkan
LIST
Contoh Kode
Contoh
Menampilkan array yang berisi jenis peristiwa.
$event_type = metadata.event_type
outcome:
$event_type_array = array($event_type)
array_distinct
array_distinct(expression)
Deskripsi
Fungsi array_distinct
menampilkan semua nilai unik dalam bentuk daftar. Fungsi ini memangkas daftar hingga maksimum 25 elemen acak. Penghapusan duplikat untuk mendapatkan daftar unik diterapkan sebelum pemotongan.
Jenis data parameter
STRING
Jenis hasil yang ditampilkan
LIST
Contoh Kode
Contoh
Menampilkan array yang berisi jenis peristiwa yang berbeda.
$event_type = metadata.event_type
outcome:
$event_type_array = array_distinct($event_type)
rata-rata
avg(numericExpression)
Deskripsi
Fungsi avg
menampilkan rata-rata nilai dalam kolom angka. Fungsi ini
mengabaikan nilai NULL
selama penghitungan. Fungsi ini sering digunakan
dengan match
untuk menghitung rata-rata dalam grup tertentu dalam data.
Jenis data parameter
NUMBER
Jenis hasil yang ditampilkan
NUMBER
Contoh Kode
Contoh
Temukan semua acara yang target.ip
-nya tidak kosong. Untuk semua peristiwa yang cocok dengan principal.ip
, simpan rata-rata metadata.event_timestamp.seconds
dalam variabel bernama avg_seconds
.
target.ip != ""
match:
principal.ip
outcome:
$avg_seconds = avg(metadata.event_timestamp.seconds)
jumlah
count(expression)
Deskripsi
Fungsi count
menampilkan jumlah baris dalam grup. Fungsi ini sering digunakan
dengan match
untuk mendapatkan jumlah grup tertentu dalam data.
Jenis data parameter
STRING
Jenis hasil yang ditampilkan
NUMBER
Contoh Kode
Contoh
Menampilkan jumlah login pengguna yang berhasil dari waktu ke waktu.
metadata.event_type = "USER_LOGIN"
$security_result = security_result.action
$security_result = "ALLOW"
$date = timestamp.get_date(metadata.event_timestamp.seconds, "America/Los_Angeles")
match:
$security_result, $date
outcome:
$event_count = count(metadata.id)
count_distinct
count_distinct(expression)
Deskripsi
Fungsi count_distinct
menampilkan jumlah baris yang memiliki nilai unik dalam grup. Fungsi ini sering digunakan dengan match
untuk mendapatkan jumlah grup tertentu dalam data.
Jenis data parameter
STRING
Jenis hasil yang ditampilkan
NUMBER
Contoh Kode
Contoh
Menampilkan jumlah login pengguna yang berhasil dan berbeda dari waktu ke waktu.
metadata.event_type = "USER_LOGIN"
$security_result = security_result.action
$security_result = "ALLOW"
$date = timestamp.get_date(metadata.event_timestamp.seconds, "America/Los_Angeles")
match:
$security_result, $date
outcome:
$event_count = count_distinct(metadata.id)
maks
max(numericExpression)
Deskripsi
Fungsi max
menampilkan nilai maksimum dari nilai dalam kolom numerik.
Fungsi ini sering digunakan dengan match
untuk mendapatkan nilai maksimum dalam setiap grup dalam data.
Jenis data parameter
NUMBER
Jenis hasil yang ditampilkan
NUMBER
Contoh Kode
Contoh
Temukan semua acara yang target.ip
-nya tidak kosong. Untuk semua peristiwa yang cocok dengan principal.ip
, simpan nilai maksimum metadata.event_timestamp.seconds
dalam variabel bernama max_seconds
.
target.ip != ""
match:
principal.ip
outcome:
$max_seconds = max(metadata.event_timestamp.seconds)
mnt
min(numericExpression)
Deskripsi
Fungsi min
menampilkan nilai minimum dari nilai dalam kolom numerik. Fungsi ini sering digunakan dengan match
untuk mendapatkan nilai minimum dalam setiap grup dalam data.
Jenis data parameter
NUMBER
Jenis hasil yang ditampilkan
NUMBER
Contoh Kode
Contoh
Temukan semua acara yang target.ip
-nya tidak kosong. Untuk semua peristiwa yang cocok dengan principal.ip
, simpan nilai minimum metadata.event_timestamp.seconds
dalam variabel bernama min_seconds
.
target.ip != ""
match:
principal.ip
outcome:
$min_seconds = min(metadata.event_timestamp.seconds)
jumlah
sum(numericExpression)
Deskripsi
Fungsi sum
menampilkan jumlah nilai dalam kolom numerik. Fungsi ini mengabaikan
nilai NULL
selama penghitungan. Fungsi ini sering digunakan dengan match
untuk menghitung jumlah dalam berbagai grup dalam data.
Jenis data parameter
NUMBER
Jenis hasil yang ditampilkan
NUMBER
Contoh Kode
Contoh
Temukan semua acara yang target.ip
-nya tidak kosong. Untuk semua peristiwa yang cocok di principal.ip
, simpan jumlah network.sent_bytes
dalam variabel bernama sent_bytes
.
target.ip != ""
match:
principal.ip
outcome:
$sent_bytes = sum(network.sent_bytes)
stddev
stddev(numericExpression)
Deskripsi
Fungsi stddev
menampilkan simpangan baku untuk semua kemungkinan
nilai.
Jenis data parameter
NUMBER
Jenis hasil yang ditampilkan
NUMBER
Contoh Kode
Contoh
Temukan semua acara yang target.ip
-nya tidak kosong. Untuk semua peristiwa yang cocok di principal.ip
, simpan standar deviasi metadata.event_timestamp.seconds
dalam variabel bernama stddev_seconds
.
target.ip != ""
match:
principal.ip
outcome:
$stddev_seconds = stddev(metadata.event_timestamp.seconds)
paling awal
earliest(timestamp)
Deskripsi
Fungsi earliest
menampilkan stempel waktu paling awal dari sekumpulan data dengan resolusi mikrodetik.
Jenis data parameter
TIMESTAMP
Jenis hasil yang ditampilkan
TIMESTAMP
Contoh Kode
Contoh
Untuk semua peristiwa yang cocok di hostname
, simpan metadata.event_timestamp
paling awal di variabel start
.
$hostname = principal.hostname
match:
$hostname
outcome:
$start = earliest(metadata.event_timestamp)
terbaru
latest(timestamp)
Deskripsi
Fungsi latest
menampilkan stempel waktu terbaru dari sekumpulan rekaman dengan resolusi mikrodetik.
Jenis data parameter
TIMESTAMP
Jenis hasil yang ditampilkan
TIMESTAMP
Contoh Kode
Contoh
Untuk semua peristiwa yang cocok pada hostname
, simpan metadata.event_timestamp
terbaru di variabel end
.
$hostname = principal.hostname
match:
$hostname
outcome:
$end = latest(metadata.event_timestamp)
YARA-L 2.0: penelusuran versus penggunaan UDM
Kata kunci
over
, yang digunakan untuk penelusuran jendela peristiwa, tidak didukung dalam penelusuran.Kueri penelusuran UDM tidak menyertakan bagian
condition
danoption
.
Kelompokkan menurut perincian waktu
Anda dapat mengelompokkan kolom peristiwa dan placeholder di bagian match
menurut perincian waktu yang ditentukan, mirip dengan mengelompokkan kolom di SQL.
Sintaksisnya adalah sebagai berikut:
match:
... [BY|OVER EVERY] [FIRST] [TIME_GRANULARITY]
Untuk mengelompokkan menurut perincian waktu, Anda dapat menggunakan kata kunci by
atau over
every
. Perincian waktu yang diizinkan adalah sebagai berikut:
MINUTE
ataum
HOUR
atauh
DAY
ataud
WEEK
atauw
MONTH
ataumo
Kata kunci by
dan over every
memiliki fungsi yang setara. Anda dapat
menggunakan salah satunya.
Contoh
Kelompokkan alamat IP dan nama host per jam.
$hostname = principal.hostname
match:
$hostname, target.ip by hour
Kelompokkan jumlah semua peristiwa menurut nama host dan menurut hari terjadinya peristiwa.
$hostname = target.hostname
match:
$hostname over every day
outcome:
$events_count = count($hostname)
Beberapa sumber data, seperti konteks entity, valid selama rentang waktu
(<start_time>
, <end_time>
) dan tidak memiliki stempel waktu tunggal.
Kata kunci first
bersifat opsional dan berlaku untuk satu stempel waktu. Artinya, untuk sumber data yang valid selama rentang waktu,
kata kunci first
hanya mempertimbangkan waktu mulai (<start_time>
).
Misalnya, pertimbangkan entity dengan rentang waktu (1m, 5m
) dengan perincian
waktu 1m
. Jika hasilnya dikelompokkan menurut host (h1
,h2
), kolom yang ditampilkan adalah (h1
, 1m
) dan (h2
, 1m
), dengan rentang waktu lainnya diabaikan.
Kata kunci first
dapat ditambahkan ke by
dan over every
, sehingga menghasilkan
perilaku yang sama untuk keduanya. Penggunaan by first
setara dengan
over every first
.
Berikut adalah contoh kueri yang menggunakan operator by
dengan
sumber data konteks entitas yang valid selama rentang waktu. Dalam kueri ini, seluruh rentang waktu dipertimbangkan karena kata kunci first
tidak ada.
graph.entity.hostname != ""
match:
graph.entity.ip by hour
outcome:
$min_seconds = min(graph.metadata.event_metadata.event_timestamp.seconds)
Membuat dan menyimpan visualisasi dalam penelusuran
Bagian ini menguraikan kemampuan visualisasi data dalam penelusuran Model Data Terpadu (UDM) Google SecOps. Fitur ini memungkinkan analis Security Operations Center (SOC) mendeteksi, menyelidiki, dan merespons ancaman secara efisien dengan membuat visualisasi dari hasil penelusuran dan menyimpannya ke dasbor.
Membuat dan menyimpan visualisasi ke dasbor
Untuk membuat dan menyimpan visualisasi yang akan ditambahkan ke dasbor, lakukan tindakan berikut:
Tulis kueri YARA-L dengan bagian
match
danoutcome
.Pilih rentang tanggal, lalu klik Jalankan Penelusuran untuk menjalankan kueri. Lihat hasil di tab Statistik dan Visualisasi.
Di tab Visualize, lakukan hal berikut: a. Pilih jenis diagram dari daftar Jenis diagram. b. Sesuaikan setelan di bagian Setelan Data untuk menyesuaikan diagram.
Di layar Tambahkan ke dasbor, lakukan hal berikut: a. Masukkan nama diagram, deskripsi, dan rentang waktu. b. Pilih untuk menambahkan diagram ke dasbor yang ada atau membuat dasbor baru.
Klik Tambahkan ke Dasbor untuk menambahkan diagram ke dasbor.
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.