Aturan deteksi gabungan

Didukung di:

Deteksi komposit di Google SecOps melibatkan penghubungan beberapa aturan YARA-L. Dokumen ini menjelaskan cara membuat aturan komposit. Untuk informasi selengkapnya, lihat Ringkasan deteksi komposit.

Memahami struktur aturan

Aturan deteksi komposit selalu merupakan aturan multiperistiwa dan mengikuti struktur dan sintaksis yang sama dengan aturan peristiwa tunggal.

Aturan komposit memiliki komponen penting berikut:

  • Bagian events: Menentukan input Anda; deteksi atau peristiwa tertentu yang dianalisis oleh aturan.

  • Bagian match: Menentukan cara input harus terhubung selama jangka waktu yang ditentukan.

  • Bagian condition: Berisi logika akhir yang menentukan apakah peristiwa yang digabungkan memenuhi kriteria untuk memicu pemberitahuan.

Tentukan input di bagian events

Langkah pertama dalam membuat aturan deteksi komposit adalah menentukan input aturan di bagian events. Input untuk aturan komposit berasal dari koleksi, yang menyimpan deteksi yang dihasilkan oleh kueri lain. SecOps Google menyediakan dua metode berikut untuk mengakses data dari koleksi.

Merujuk konten deteksi dengan variabel atau label meta

Untuk mengakses data dari deteksi tanpa merujuk ke peristiwa UDM asli, Anda dapat menggunakan variabel outcome, variabel match, atau label meta. Sebaiknya gunakan pendekatan ini karena memberikan fleksibilitas yang lebih besar dan kompatibilitas yang lebih baik di berbagai jenis aturan.

Misalnya, beberapa aturan dapat menyimpan string (seperti URL, nama file, atau kunci registri) dalam variabel outcome umum jika Anda mencari string tersebut di berbagai konteks. Untuk mengakses string ini dari aturan gabungan, mulai dengan detection dan temukan informasi yang relevan menggunakan elemen dari resource Koleksi.

Contoh: Misalkan aturan deteksi menghasilkan informasi berikut:

  • Variabel hasil: dest_domain = "cymbal.com"

  • Kolom UDM: target.hostname = "cymbal.com"

Dalam aturan komposit, Anda dapat mengakses data ini menggunakan jalur berikut:

  • detection.detection.outcomes["dest_domain"] untuk mengakses variabel hasil dest_domain.

  • detection.collection_elements.references.event.target.hostname untuk mengakses kolom UDM target.hostname.

  • detection.time_window.start_time.seconds untuk mengakses stempel waktu mulai deteksi.

Collection API dan SecurityResult API menyediakan akses ke keduanya:

  • Nilai metadata dan hasil deteksi (detection.detection)
  • Peristiwa UDM pokok dari aturan yang dirujuk (collection_elements)

Merujuk konten deteksi dengan ID atau nama aturan

Anda dapat mereferensikan aturan berdasarkan nama atau ID-nya. Sebaiknya gunakan pendekatan ini jika logika deteksi Anda bergantung pada aturan tertentu dan Anda ingin mengurangi data yang dianalisis hanya pada hasil aturan tersebut. Mereferensikan aturan yang relevan menurut nama atau ID akan meningkatkan performa dan mencegah waktu tunggu habis dengan mengurangi data yang dianalisis. Misalnya, Anda dapat langsung membuat kueri kolom seperti target.url atau principal.ip dari deteksi sebelumnya yang diketahui.

  • Merujuk aturan menurut ID aturan (direkomendasikan): Gunakan kolom detection.detection.rule_id untuk merujuk aturan menurut ID. Anda dapat menemukan ID aturan di URL aturan di Google SecOps. Aturan buatan pengguna memiliki ID dalam format ru_UUID, sedangkan deteksi terkurasi memiliki ID dalam format ur_UUID. Contoh:

    detection.detection.rule_id = "ru_e0d3f371-6832-4d20-b0ad-1f4e234acb2b"

  • Merujuk aturan berdasarkan nama aturan: gunakan kolom detection.detection.rule_name untuk merujuk aturan berdasarkan nama. Anda dapat menentukan nama aturan yang tepat atau menggunakan ekspresi reguler untuk mencocokkannya. Contoh:

    • detection.detection.rule_name = "My Rule Name"
    • detection.detection.rule_name = "/PartOfName/"

Gabungkan input di bagian match

Untuk menghubungkan deteksi, peristiwa, atau entitas terkait dalam aturan komposit, tentukan bagian match menggunakan variabel yang ditentukan di bagian events. Variabel ini dapat mencakup label aturan, variabel hasil, variabel kecocokan, kolom deteksi, atau elemen pengumpulan.

Untuk informasi tentang sintaksis, lihat Sintaksis bagian pencocokan.

Menentukan bagian condition

Tentukan bagian condition untuk mengevaluasi hasil bagian match. Jika kondisinya adalah true, pemberitahuan akan dibuat. Untuk mengetahui informasi tentang sintaksis, lihat Sintaksis bagian kondisi.

Menerapkan teknik lanjutan pada aturan gabungan

Bagian ini menjelaskan cara menerapkan teknik lanjutan saat membuat aturan komposit.

Menggabungkan peristiwa dan deteksi

Aturan komposit dapat menggabungkan beberapa sumber data, termasuk peristiwa UDM, data grafik entitas, dan kolom deteksi. Panduan berikut berlaku:

  • Gunakan variabel berbeda per sumber: Tetapkan variabel peristiwa unik ke setiap sumber data (misalnya, $e untuk peristiwa, $d untuk deteksi), dengan sumber data mencakup peristiwa, entitas, dan deteksi.

  • Gabungkan sumber pada konteks bersama: Hubungkan sumber data menggunakan nilai umum, seperti ID pengguna, alamat IP, atau nama domain dalam kondisi aturan Anda.

  • Tentukan periode pencocokan: Selalu sertakan klausa match dengan periode waktu tidak lebih dari 48 jam.

Contoh: menggabungkan peristiwa dan deteksi

rule CheckCuratedDetection_with_EDR_and_EG {
  meta:
    author = "noone@cymbal.com"
  events:
    $d.detection.detection.rule_name = /SCC: Custom Modules: Configurable Bad Domain/
    $d.detection.collection_elements.references.event.network.dns.questions.name = $domain
    $d.detection.collection_elements.references.event.principal.asset.hostname = $hostname

    $e.metadata.log_type = "LIMACHARLIE_EDR"
    $e.metadata.product_event_type = "NETWORK_CONNECTIONS"
    $domain = re.capture($e.principal.process.command_line, "\\s([a-zA-Z0-9.-]+\\.[a-zA-Z0-9.-]+)$")
    $hostname = re.capture($e.principal.hostname, "([^.]*)")

    $prevalence.graph.metadata.entity_type = "DOMAIN_NAME"
    $prevalence.graph.metadata.source_type = "DERIVED_CONTEXT"
    $prevalence.graph.entity.hostname = $domain
    $prevalence.graph.entity.domain.prevalence.day_count = 10
    $prevalence.graph.entity.domain.prevalence.rolling_max <= 5
    $prevalence.graph.entity.domain.prevalence.rolling_max > 0

  match:
    $hostname over 1h

  outcome:
    $risk_score = 80
    $CL_target = array($domain)

  condition:
    $e and $d and $prevalence
}

Membuat deteksi gabungan berurutan

Deteksi komposit berurutan mengidentifikasi pola peristiwa terkait yang urutan deteksinya penting, seperti deteksi upaya login brute force, diikuti dengan login yang berhasil. Pola ini dapat menggabungkan beberapa deteksi dasar, peristiwa UDM mentah, atau keduanya.

Untuk membuat deteksi komposit berurutan, Anda harus menerapkan urutan tersebut dalam aturan. Untuk menerapkan urutan yang diharapkan, gunakan salah satu metode berikut:

  • Jendela geser: Tentukan urutan deteksi menggunakan jendela geser dalam kondisi match Anda.

  • Perbandingan stempel waktu: Bandingkan stempel waktu deteksi dalam logika aturan Anda untuk memverifikasi bahwa deteksi terjadi dalam urutan yang dipilih.

Contoh: deteksi gabungan berurutan

events:
    $d1.detection.detection.rule_name = "fileEvent_rule"
    $userid = $d1.detection.detection.outcomes["user"]
    $hostname = $d1.detection.detection.outcomes["hostname"]

    $d2.detection.detection.rule_name = "processExecution_rule"
    $userid = $d2.detection.detection.outcomes["user"]
    $hostname = $d2.detection.detection.outcomes["hostname"]

    $d3.detection.detection.rule_name = "networkEvent_rule"
    $userid = $d3.detection.detection.outcomes["user"]
    $hostname = $d3.detection.detection.outcomes["hostname"]

$d3.detection.collection_elements.references.event.metadata.event_timestamp.seconds > $d2.detection.collection_elements.references.event.metadata.event_timestamp.seconds

  match:
    $userid over 24h after $d1

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