Menerapkan gabungan dalam penelusuran dan dasbor
Gabungan membantu mengorelasikan data dari beberapa sumber untuk memberikan lebih banyak konteks untuk investigasi. 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 dalam penelusuran dan dasbor Google Security Operations. Dokumen ini juga membahas jenis gabungan, kasus penggunaan, dan praktik terbaik yang didukung.
Membuat gabungan
Hanya gabungan berbasis statistik yang didukung. Anda harus menentukannya di bagian match kueri.
Jendela waktu korelasi (jendela kecocokan) bergantung pada apakah Anda menggunakan penelusuran atau dasbor:
- Penelusuran: Hingga 48 jam.
- Dasbor: Hingga 365 hari (untuk sebagian besar sumber data).
Anda dapat membuat gabungan dengan menghubungkan kolom secara langsung (misalnya, $e1.hostname = $e2.hostname) atau menggunakan variabel placeholder. Saat menentukan gabungan di bagian match, Anda harus menggunakan variabel placeholder.
Contoh kueri berikut menggabungkan dua kolom dengan tanda sama dengan (=) dan variabel placeholder bersama:
Contoh 1:
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:
$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
Jenis gabungan yang didukung
Bagian ini menjelaskan berbagai jenis gabungan yang dapat Anda gunakan. Contoh di bagian ini menunjukkan sintaksis yang digunakan dalam penelusuran. Untuk mengetahui informasi tentang gabungan di dasbor, lihat Gabungan di dasbor.
Gabungan peristiwa-peristiwa
Gabungan 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 umum:$e1.principal.ip = $ip $e1.metadata.event_type = "USER_LOGIN" $e2.target.ip = $ip $e2.principal.hostname = "altostrat" match: $ip over 5m
Gabungan peristiwa-ECG
Gabungan Peristiwa-ECG menghubungkan peristiwa UDM dengan entity 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 tabel data-peristiwa
Gabungan tabel data-peristiwa menghubungkan peristiwa UDM dengan entri dalam tabel data kustom. Hal ini berguna untuk memeriksa data peristiwa langsung terhadap daftar yang ditentukan pengguna, seperti alamat IP atau pelaku ancaman berbahaya 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
Praktik terbaik
Kueri gabungan dapat menggunakan banyak resource karena menggabungkan banyak hasil. Filter umum yang luas 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 oleh 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.
Gabungan di dasbor
Dasbor mendukung rentang sumber data yang lebih luas dan jendela korelasi yang lebih lama daripada penelusuran.
Sumber data yang didukung
Di dasbor, Anda dapat menggabungkan data dari sumber berikut menggunakan awalan YARA-L masing-masing:
| Awalan | Sumber Data |
|---|---|
case |
Kasus dan pemberitahuan |
case_history |
Tren aktivitas di seluruh siklus proses kasus |
detection |
Histori deteksi aturan dan masukan analis |
ingestion |
Volume log dan metrik kesehatan penyerapan |
ioc |
Kecocokan IoC (indikator penyusupan) |
playbook |
Metrik eksekusi playbook dan respons otomatis |
ruleset / rules |
Metadata tentang kumpulan aturan aktif |
graph |
Data Entity Graph (ECG) |
events |
Peristiwa UDM |
Kepekaan huruf besar/kecil
Tidak seperti penelusuran yang tidak peka huruf besar/kecil secara default, dasbor peka huruf besar/kecil. Untuk melakukan gabungan atau penelusuran yang tidak peka huruf besar/kecil di dasbor, gunakan pengubah nocase.
Contoh: Menggabungkan 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 prioritas 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 Mean Time to Resolve (MTTR) atau Mean Time to Close (MTTC), Anda dapat menggunakan kueri multi-tahap. Hal ini memungkinkan Anda menghitung durasi untuk setiap kasus di tahap pertama, lalu menghitung rata-rata durasi tersebut secara global di blok hasil akhir.
Kueri berikut menghitung waktu rata-rata untuk menutup kasus (dalam menit) di semua kasus di "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))
Batasan
Batasan berikut berlaku saat menggunakan gabungan:
Anda dapat menggunakan maksimum dua peristiwa UDM per kueri dalam penelusuran.
Anda dapat menggunakan maksimum satu peristiwa ECG per kueri dalam penelusuran.
Anda dapat menggunakan maksimum dua Tabel Data per kueri.
Anda tidak dapat menggabungkan peristiwa tabel data, UDM, dan ECG dalam satu kueri.
Rentang waktu kueri maksimum adalah 90 hari.
Jendela waktu
matchmaksimum adalah 48 jam untuk penelusuran dan 365 hari untuk dasbor.Gabungan didukung di antarmuka pengguna dan
EventService.UDMSearchAPI, tetapi tidak diSearchService.UDMSearchAPI.
Kasus penggunaan umum
Bagian ini mencantumkan beberapa cara umum untuk menggunakan gabungan.
Mendeteksi pencurian dan penggunaan kredensial
Tujuan: Menemukan 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 Peristiwa-Peristiwa
Deskripsi: Kueri ini menghubungkan dua peristiwa berbeda yang tidak mencurigakan
dengan sendirinya, tetapi menjadi sangat mencurigakan jika terjadi bersamaan. Kueri ini pertama-tama mencari peristiwa USER_LOGIN, lalu peristiwa FILE_DELETION. Keduanya digabungkan oleh user.userid umum dengan jendela waktu yang singkat.
Contoh kueri:
// 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 langsung dengan informasi aset untuk menemukan koneksi keluar dari server yang tidak boleh berkomunikasi dengan domain eksternal yang jarang digunakan (misalnya, server database produksi).
Jenis gabungan: Gabungan Peristiwa-ECG
Deskripsi: Satu koneksi jaringan ke domain yang jarang digunakan mungkin bukan
prioritas tinggi. Namun, kueri ini meningkatkan pentingnya peristiwa tersebut dengan menggabungkannya dengan Entity Context Graph (ECG). Kueri ini secara khusus mencari peristiwa NETWORK_CONNECTION yang berasal dari aset yang diberi label "Server Database Penting" di grafik entity.
Contoh kueri:
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 mencari Indikator Gangguan (IoC) dengan memeriksa semua kueri DNS langsung terhadap daftar domain yang diketahui digunakan oleh pelaku ancaman tertentu.
Jenis gabungan: Gabungan Tabel Data-Peristiwa
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. Kueri ini akan segera menampilkan instance saat host di jaringan Anda mencoba me-resolve domain dari daftar threat intelligence Anda.
Contoh kueri:
// 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
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.