Menerapkan gabungan dalam penelusuran dan dasbor

Didukung di:

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 $e2
    
  • Contoh 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
    

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_LOGIN dengan 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_CONNECTION dan ASSET dari 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_CONNECTION dengan 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 case dan satu sumber case_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 case dan case_history untuk 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.

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.hostname dengan $datatable.hostname dan $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

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