Menerapkan gabungan dalam penelusuran dan dasbor
Gabungan membantu mengorelasikan data dari berbagai sumber untuk memberikan lebih banyak konteks bagi penyelidikan. Dengan menautkan peristiwa, entity, dan data lain yang terkait, Anda dapat menyelidiki skenario serangan yang kompleks dan memvisualisasikan tren.
Dokumen ini menjelaskan cara menggunakan operasi gabungan di kolom Penelusuran dan panel dasbor Google SecOps. Dokumen ini mencakup jenis gabungan yang didukung, kasus penggunaan, dan praktik terbaik.
Konsep inti gabungan
Anda dapat membuat gabungan dengan menghubungkan sumber data menggunakan variabel placeholder bersama atau pernyataan kesamaan eksplisit (misalnya, $e1.hostname = $e2.hostname). Saat menentukan gabungan di bagian match dari kueri berbasis statistik, Anda harus menggunakan variabel placeholder.
Contoh berikut menunjukkan cara menautkan sumber data menggunakan dua kolom dengan tanda sama dengan (=) dan
variabel placeholder bersama.
Contoh 1: Penggabungan implisit menggunakan variabel placeholder
events: // Assign a value from the first event to the placeholder variable $user $user = $e1.principal.user.userid // The second assignment creates an implicit join, linking $e2 to $e1 // where the user ID is the same. $user = $e2.principal.user.userid match: $user over 1h condition: $e1 and $e2Contoh 2: Gabungan eksplisit menggunakan kesetaraan dan placeholder
$e1.principal.ip = $ip $e1.metadata.event_type = "USER_LOGIN" $e1.principal.hostname = $host $e2.target.ip = $ip $e2.principal.hostname = "altostrat" $e2.target.hostname = $host match: $ip, $host over 5m
Bergabung dalam penelusuran
Contoh di bagian ini menunjukkan sintaksis yang digunakan di Search.
Kueri di Penelusuran bersifat tidak peka huruf besar/kecil secara default.
Penggabungan event-event
Penggabungan peristiwa-peristiwa menghubungkan dua peristiwa Universal Data Model (UDM) yang berbeda. Contoh kueri berikut menautkan peristiwa
USER_LOGINdengan peristiwa lain untuk menemukan nama host (altostrat) yang berinteraksi dengan pengguna, berdasarkan alamat IP yang sama:$e1.principal.ip = $ip $e1.metadata.event_type = "USER_LOGIN" $e2.target.ip = $ip $e2.principal.hostname = "altostrat" match: $ip over 5m
Bergabung dalam acara EKG
Gabungan Event-ECG menghubungkan peristiwa UDM dengan entitas dari Entity Context Graph (ECG). Contoh kueri berikut menemukan peristiwa
NETWORK_CONNECTIONdanASSETdari grafik entity yang memiliki nama host yang sama dalam jangka waktu 1 jam:events: $e1.metadata.event_type = "NETWORK_CONNECTION" $g1.graph.metadata.entity_type = "ASSET" $e1.principal.asset.hostname = $g1.graph.entity.asset.hostname $x = $g1.graph.entity.asset.hostname match: $x over 1h condition: $e1 and $g1
Gabungan datatable-event
Penggabungan datatable-event menghubungkan peristiwa UDM dengan entri dalam tabel data kustom. Hal ini berguna untuk memeriksa data peristiwa live berdasarkan daftar yang ditentukan pengguna, seperti alamat IP berbahaya atau pelaku ancaman yang diketahui. Contoh kueri berikut menggabungkan peristiwa
NETWORK_CONNECTIONdengan tabel data untuk menemukan koneksi yang melibatkan alamat IP tertentu dari daftar tersebut:$ip = %DATATABLE_NAME.COLUMN_NAME $ip = $e1.principal.ip $e1.metadata.event_type = "NETWORK_CONNECTION" match: $ip over 1h
Menggunakan klausa IN dengan tabel data
Anda juga dapat menggunakan klausa in untuk memeriksa apakah nilai kolom ada di kolom Tabel Data. Sintaksis ini didukung di semua sumber data (misalnya, ioc.type in %abc.type) dan memberikan cara mudah untuk memfilter peristiwa berdasarkan daftar rujukan tanpa menentukan variabel placeholder eksplisit untuk gabungan.
Kasus penggunaan umum
Bagian ini mencantumkan beberapa cara umum untuk menggunakan gabungan.
Mendeteksi pencurian dan penggunaan kredensial
Tujuan: Temukan instance saat pengguna berhasil login, lalu dengan cepat menghapus file sistem penting. Hal ini dapat menunjukkan pengambilalihan akun atau aktivitas orang dalam yang berbahaya.
Jenis gabungan: Gabungan Acara-Acara
Deskripsi: Kueri ini menghubungkan dua peristiwa berbeda yang tidak mencurigakan jika terjadi secara terpisah, tetapi menjadi sangat mencurigakan jika terjadi bersamaan. Pertama-tama, peristiwa
mencari peristiwa USER_LOGIN, lalu peristiwa FILE_DELETION. Keduanya digabungkan
oleh user.userid umum dengan jangka waktu singkat.
Kueri deteksi pencurian kredensial
// Event 1: A user successfully logs in $e1.metadata.event_type = "USER_LOGIN" $e1.security_result.action = "ALLOW" $e1.principal.user.userid = $user // Event 2: The same user deletes a critical file $e2.metadata.event_type = "FILE_DELETION" $e2.target.file.full_path = /etc\/passwd|C:\\Windows\\System32\\/ $e2.principal.user.userid = $user match: $user over 10m condition: $e1 and $e2
Mengidentifikasi koneksi berisiko dari aset penting
Tujuan: Memperkaya data jaringan aktif dengan informasi aset untuk menemukan koneksi keluar dari server yang seharusnya tidak berkomunikasi dengan domain eksternal yang prevalensinya rendah (misalnya, server database produksi).
Jenis penggabungan: Penggabungan Event-ECG
Deskripsi: Koneksi jaringan tunggal ke domain langka mungkin tidak menjadi
prioritas tinggi. Namun, kueri ini meningkatkan pentingnya peristiwa tersebut dengan menggabungkannya dengan Grafik Konteks Entitas (ECG). Pencarian ini secara khusus mencari peristiwa NETWORK_CONNECTIONyang berasal dari aset yang diberi label "Server Database Kritis" dalam grafik entity.
Kueri koneksi berisiko
events: $e.metadata.event_type = "NETWORK_CONNECTION" $e.target.domain.prevalence.day_count <= 5 $asset.graph.metadata.entity_type = "ASSET" $asset.graph.entity.asset.labels.value = "Critical Database Server" $e.principal.asset.hostname = $asset.graph.entity.asset.hostname $host = $e.principal.asset.hostname match: $host over 1h condition: $e and $asset
Mencari IOC pelaku ancaman
Tujuan: Secara aktif menelusuri Indikator Gangguan (IoC) dengan memeriksa semua kueri DNS aktif terhadap daftar domain yang diketahui digunakan oleh aktor ancaman tertentu.
Jenis gabungan: Gabungan Datatable-Event
Deskripsi: Tim threat intelligence Anda mengelola tabel data bernama
ThreatActor_Domains yang mencantumkan domain berbahaya. Kueri ini menggabungkan semua
peristiwa NETWORK_DNS_QUERY real-time dengan tabel data ini. Hal ini akan langsung menampilkan setiap instance saat host di jaringan Anda mencoba me-resolve domain dari daftar threat intelligence Anda.
Kueri perburuan IOC pelaku ancaman
// Datatable: Get the list of malicious domains $domain = %DATATABLE_NAME.COLUMN_NAME // Event: A DNS query is made $e.metadata.event_type = "NETWORK_DNS" $e.network.dns.questions.name = $domain match: $domain over 5m condition: $e
Gabungan dalam dasbor
Dasbor mendukung berbagai sumber data dan jangka waktu korelasi yang lebih lama daripada di Penelusuran. Tidak seperti kueri SQL standar, YARA-L 2.0 tidak menggunakan pernyataan JOIN eksplisit; sebagai gantinya, YARA-L 2.0 menghubungkan sumber data dengan mengorelasikan variabel placeholder bersama atau menggunakan kueri multi-tahap.
Kepekaan huruf besar/kecil
Kueri dasbor peka huruf besar/kecil. Untuk melakukan gabungan atau penelusuran yang tidak peka huruf besar/kecil di dasbor, gunakan pengubah nocase.
Sumber data yang didukung
Di dasbor, Anda dapat menggabungkan data dari kombinasi gabungan sumber data yang didukung. (Tidak semua kombinasi sumber data dapat digabungkan dalam satu kueri.)
Setiap referensi data dalam kueri dasbor multi-sumber harus menyertakan kualifikasi awalan YARA-L (misalnya, $u1), bukan hanya kolom yang digabungkan. Hal ini memungkinkan sistem mengidentifikasi kepemilikan kolom dengan benar di seluruh sumber data yang tumpang-tindih.
Kombinasi gabungan yang didukung
Penggabungan memungkinkan Anda mengorelasikan peristiwa UDM, konteks entity, dan tabel data di dasbor bawaan. Untuk mempertahankan performa sistem, tinjau kombinasi yang didukung dan batas teknis di bagian ini sebelum membuat kueri.
- Peristiwa UDM ke peristiwa UDM (multi-peristiwa)
- Peristiwa UDM ke konteks entitas
- Peristiwa UDM ke tabel data
Histori kasus ke kasus: Kombinasi ini dibatasi secara ketat hanya untuk satu sumber
casedan satu sumbercase_history. Anda tidak dapat menyertakan sumber data lain dalam gabungan ini.
Untuk mengetahui informasi tentang batas dan mekanisme pengamanan, lihat Batasan dan kendala teknis.
Contoh: Gabungkan kasus dan case_history
Anda dapat mengorelasikan metadata kasus dengan aktivitas historisnya dengan menggabungkan ID Kasus unik.
Contoh berikut menggabungkan sumber data
casedancase_historyuntuk menghitung jumlah total tindakan historis untuk setiap kasus berprioritas tinggi.// 1. Establish the Join using a shared placeholder variable ($case_id) $h.case_history.case_response_platform_info.case_id = $case_id $c.case.response_platform_info.response_platform_id = $case_id // 2. Apply Filters $c.case.priority = "PRIORITY_HIGH" // 3. Group the correlated data by the Case ID match: $case_id // 4. Calculate the selected metrics to display on the dashboard outcome: $case_name = array_distinct($c.case.display_name) $total_historical_actions = count($h.case_history.case_activity)
Kasus penggunaan lanjutan: Menghitung MTTR
Untuk metrik yang lebih kompleks seperti Rata-Rata Waktu Penyelesaian (MTTR) atau Rata-Rata Waktu Penutupan (MTTC), Anda dapat menggunakan kueri multi-tahap. Dengan begitu, Anda dapat menghitung durasi untuk setiap kasus di tahap pertama, lalu menghitung rata-rata durasi tersebut secara global di blok hasil akhir.
Kueri berikut menghitung rata-rata waktu untuk menutup kasus (dalam menit) di semua kasus dalam "Lingkungan Default".
stage stage1 { // 1. Establish the Join $h.case_history.case_response_platform_info.case_id = $case_id $c.case.response_platform_info.response_platform_id = $case_id // 2. Filter by specific environment $c.case.environment = "Default Environment" // 3. Group by Case ID to process per case match: $case_id // 4. Calculate the Time to Close (TTC) for each case individually outcome: $case_close_time = max(if($h.case_history.case_activity = "CLOSE_CASE", $h.case_history.event_time.seconds, 0)) $status = array_distinct($h.case_history.case_activity) // Subtract the very first event time (creation) from the close time $TTC = $case_close_time - min($h.case_history.event_time.seconds) // 5. Filter to ensure the case has a complete lifecycle condition: arrays.contains($status, "CREATE_CASE") and arrays.contains($status, "CLOSE_CASE") } // 6. Global Aggregation: Calculate the Mean (Average) across all processed cases outcome: $case_count = count($stage1.case_id) $MTTC = (math.round(avg($stage1.TTC) / 60))
Praktik terbaik
Untuk mengoptimalkan performa kueri gabungan dan memastikan kueri tersebut diproses secara efisien, ikuti praktik terbaik berikut untuk memfilter peristiwa dan mengelola cakupan penelusuran.
Gunakan filter tertentu untuk mengurangi jumlah peristiwa
Kueri gabungan dapat menggunakan banyak resource karena menggabungkan banyak hasil.
Filter yang luas dan umum dapat menyebabkan kueri gagal, terkadang setelah penundaan yang lama, misalnya:
target.ip != ""metadata.event_type = "NETWORK_CONNECTION"(jika jenis peristiwa ini sangat umum di lingkungan Anda)
Sebaiknya gabungkan filter umum dengan filter yang lebih spesifik untuk mengurangi jumlah total peristiwa yang perlu diproses kueri. Filter luas seperti
target.ip != ""harus dipasangkan dengan filter yang lebih spesifik untuk meningkatkan performa kueri, misalnya:$e1.metadata.log_type = $log $e1.metadata.event_type = "USER_LOGIN" $e1.target.ip != "" $e2.metadata.log_type = $log $e2.principal.ip = "10.0.0.76" $e2.target.hostname != "altostrat" match: $log over 5m
Jika kueri Anda masih lambat, Anda juga dapat mengurangi rentang waktu keseluruhan kueri (misalnya, dari 30 hari menjadi satu minggu).
Untuk mengetahui informasi selengkapnya, lihat Praktik terbaik YARA-L.
Batasan dan kendala teknis
Batasan dan batas berikut berlaku saat menggunakan gabungan di Penelusuran dan dasbor.
Batas kueri dan jendela pencocokan
Periode pencocokan menentukan jangka waktu tertentu agar peristiwa dapat dikorelasikan. Hal ini berbeda dengan Rentang waktu penelusuran yang Anda pilih di antarmuka pengguna.
Batas dalam penelusuran
Penelusuran dioptimalkan untuk penyelidikan langsung atau cepat dalam jangka waktu yang lebih singkat.
| Batas kueri | Penggunaan |
|---|---|
| Hingga 48 jam (beberapa kueri mungkin mendukung jangka waktu yang lebih lama). | Menghubungkan peristiwa dalam investigasi cepat. |
Batasan dalam dasbor
Dasbor mendukung analisis historis jangka panjang.
| Jenis gabungan | Batas kueri | Penggunaan |
|---|---|---|
| UDM-to-UDM dan UDM-to-Entity | 31 hari | Kueri telemetri bervolume tinggi. |
| Case-to-CaseHistory | 90 hari | Kueri pelacakan siklus proses. |
| Konfigurasi lain yang didukung | Hingga 365 hari | Penggantian untuk sumber berbasis metrik atau non-UDM (misalnya, metrik penyerapan). |
Batas sumber data dan tabel
Jumlah maksimum sumber data dan tabel yang dapat Anda gabungkan dalam satu kueri bergantung pada apakah Anda menggunakan Penelusuran atau dasbor.
Batasan penelusuran
- Anda dapat menggunakan maksimum dua peristiwa UDM per kueri.
- Anda dapat menggunakan maksimum satu peristiwa EKG per kueri.
- Anda dapat menggunakan maksimum dua Tabel Data per kueri.
- Anda tidak dapat menggabungkan tabel data secara langsung ke tabel konteks entitas; Anda harus menggunakan peristiwa UDM sebagai jembatan perantara (misalnya, mengorelasikan
$event.target.hostnamedengan$datatable.hostnamedan$asset.graph.entity.asset.hostname).
Batasan dasbor
| Jenis gabungan | Tabel peristiwa maksimum (UDM atau tabel data) | Tabel entitas maksimum |
|---|---|---|
| Multi-peristiwa (UDM ke UDM) | 2 | T/A |
| UDM ke entity | 2 | 1 |
| UDM ke tabel data | 2 | T/A |
| Kueri multi-tahap | 2 | 1 |
Performa dan pengaman
Sistem memantau kueri gabungan yang kompleks untuk konsumsi resource yang berlebihan. Untuk melindungi performa lingkungan secara keseluruhan, sistem dapat otomatis menjeda atau mengarantina kueri yang melebihi batas keamanan resource.
Jika kueri gagal atau menampilkan error yang menunjukkan bahwa kueri melampaui batas resource, coba pengoptimalan berikut:
- Persempit jangka waktu kueri.
- Tambahkan filter yang lebih spesifik untuk mengurangi ukuran set data sebelum gabungan terjadi.
- Sederhanakan agregasi Anda.
Batasan jenis kueri dan API
- Gabungan didukung di antarmuka pengguna dan
EventService.UDMSearchAPI, tetapi tidak diSearchService.UDMSearchAPI.
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.