Membuat aturan deteksi gabungan

Didukung di:

Dokumen ini memberikan panduan teknis tentang cara membuat aturan gabungan dalam platform Google Security Operations, sebuah proses yang melibatkan menghubungkan beberapa aturan YARA-L 2.0 untuk mengidentifikasi pola serangan yang kompleks. Deteksi gabungan disusun sebagai aturan multiperistiwa, yang mempertahankan sintaksis mendasar yang sama dengan aturan peristiwa tunggal standar. Untuk mengetahui informasi selengkapnya, lihat Ringkasan deteksi gabungan.

Memahami struktur aturan

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

Aturan gabungan 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.

Menentukan input di bagian events

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

Mereferensikan konten deteksi dengan variabel atau label meta

Untuk mengakses data dari deteksi tanpa mereferensikan 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 the resource Koleksi.

Contoh: Misalkan aturan deteksi menghasilkan informasi berikut:

  • Variabel hasil: dest_domain = "cymbal.com"

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

Dalam aturan gabungan, 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 awal deteksi.

Collection API dan SecurityResult API menyediakan akses ke keduanya:

  • Metadata deteksi dan nilai hasil (detection.detection)
  • Peristiwa UDM yang mendasar dari aturan yang direferensikan (collection_elements)

Mereferensikan 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 ke hasil aturan tersebut. Mereferensikan aturan yang relevan berdasarkan 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.

  • Mereferensikan aturan berdasarkan ID aturan (direkomendasikan): Gunakan kolom detection.detection.rule_id untuk mereferensikan aturan berdasarkan ID. Anda dapat menemukan ID aturan di URL aturan di Google SecOps. Aturan yang dibuat pengguna memiliki ID dalam format ru_UUID, sedangkan pendeteksian terseleksi memiliki ID dalam format ur_UUID. Contoh:

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

  • Mereferensikan aturan berdasarkan nama aturan: gunakan kolom detection.detection.rule_name untuk mereferensikan 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/"

Menggabungkan input di bagian match

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

Untuk mengetahui informasi tentang sintaksis, lihat Sintaksis bagian kecocokan.

Aturan gabungan: interval waktu dan periode hop

Aturan gabungan mencocokkan deteksi dan peristiwa dengan interval waktu, bukan satu titik waktu. Aturan ini cocok dengan periode hop gabungan jika periode waktu deteksi input tumpang-tindih dengan periode hop tersebut (misalnya, aktivitas aktif selama blok waktu tersebut).

Satu deteksi dapat memicu beberapa pemberitahuan jika deteksi mencakup batas antara periode hop yang berdekatan (karena penundaan pipeline, kecocokan historis ini muncul nanti). Secara khusus, periode hop aturan gabungan memicu kecocokan jika periode waktu deteksi input (WindowStart hingga WindowEnd) tumpang-tindih dengan periode hop.

Contoh:

  1. Aturan gabungan memiliki periode hop 60 menit: Hop 1 (18.58 - 19.58) dan Hop 2 (19.58 - 20.58).
  2. Deteksi produser upstream memiliki periode 19.57.54 - 20.56.54 (durasi 59 menit).
  3. Karena periode produser dimulai pada 19.57.54 (6 detik sebelum Hop 1 berakhir) dan berakhir pada 20.56.54 (selama Hop 2), periode tersebut tumpang-tindih dengan kedua periode hop.
  4. Hal ini memicu dua deteksi gabungan (satu untuk Hop 1 dan satu untuk Hop 2), yang membantu mencegah negatif palsu. Jika aturan produser tidak cocok pada tumpang-tindih, deteksi yang tumpang-tindih sebagian tidak akan dipertimbangkan untuk Hop 1 atau Hop 2 dan korelasi antara deteksi dan peristiwa lainnya akan terlewatkan.

Untuk mengetahui informasi dan contoh selengkapnya tentang cara menentukan periode hop, lihat Periode hop.

Menentukan bagian condition

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

Menerapkan teknik lanjutan ke aturan gabungan

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

Menggabungkan peristiwa dan deteksi

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

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

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

  • Menentukan periode kecocokan: 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 gabungan 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 gabungan berurutan, Anda harus menerapkan urutan tersebut dalam aturan. Untuk menerapkan urutan yang diharapkan, gunakan salah satu metode berikut:

  • Periode geser: Tentukan urutan deteksi menggunakan periode 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.