Membuat aturan deteksi gabungan
Dokumen ini memberikan panduan teknis tentang cara membuat aturan komposit dalam platform Google Security Operations, sebuah proses yang melibatkan penghubungan beberapa aturan YARA-L 2.0 untuk mengidentifikasi pola serangan yang kompleks. Deteksi komposit disusun sebagai aturan multiperistiwa, dengan mempertahankan sintaksis mendasar yang sama seperti aturan peristiwa tunggal standar. Untuk mengetahui informasi selengkapnya, lihat Ringkasan deteksi gabungan.
Memahami struktur aturan
Aturan deteksi komposit selalu merupakan aturan multi-peristiwa 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 spesifik 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 komposit berasal dari koleksi, yang menyimpan deteksi yang dihasilkan oleh kueri lain.
Google SecOps 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 gabungan, Anda dapat mengakses data ini menggunakan jalur berikut:
detection.detection.variables["dest_domain"].string_valuntuk mengakses variabel hasildest_domain.detection.collection_elements.references.event.target.hostnameuntuk mengakses kolom UDMtarget.hostname.detection.time_window.start_time.secondsuntuk mengakses stempel waktu mulai deteksi.
Collection API dan SecurityResult API menyediakan akses ke:
- Nilai metadata dan hasil deteksi (
detection.detection) - Peristiwa UDM yang mendasari 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 pada 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.
Merujuk aturan menurut ID aturan (direkomendasikan): Gunakan kolom
detection.detection.rule_iduntuk merujuk aturan menurut ID. Anda dapat menemukan ID aturan di URL aturan di Google SecOps. Aturan buatan pengguna memiliki ID dalam formatru_UUID, sedangkan pendeteksian terseleksi memiliki ID dalam formatur_UUID. Contoh:detection.detection.rule_id = "ru_e0d3f371-6832-4d20-b0ad-1f4e234acb2b"Merujuk aturan berdasarkan nama aturan: gunakan kolom
detection.detection.rule_nameuntuk 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/"
Menggabungkan 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 mengetahui informasi tentang sintaksis, lihat Sintaksis bagian kecocokan.
Aturan gabungan: interval waktu dan periode lompatan
Aturan gabungan mencocokkan deteksi dan peristiwa dengan interval waktu, bukan satu titik waktu. Mereka cocok dengan periode hopping komposit jika jendela waktu deteksi input tumpang-tindih dengan periode hopping tersebut (misalnya, aktivitas aktif selama jangka waktu tersebut).
Satu deteksi dapat memicu beberapa peringatan jika deteksi mencakup batas antara periode hopping yang berdekatan (karena penundaan pipeline, kecocokan historis ini muncul kemudian). Secara khusus, periode lompatan aturan komposit memicu kecocokan jika periode deteksi input (WindowStart hingga WindowEnd) tumpang-tindih dengan periode lompatan.
Contoh:
- Aturan gabungan memiliki periode hopping 60 menit: Hop 1 (18.58 - 19.58) dan Hop 2 (19.58 - 20.58).
- Deteksi produsen upstream memiliki jendela 19:57:54 - 20:56:54 (durasi 59 menit).
- Karena periode produsen dimulai pada 19.57.54 (6 detik sebelum Hop 1 berakhir) dan berakhir pada 20.56.54 (selama Hop 2), periode ini tumpang-tindih dengan kedua periode hop.
- Hal ini memicu dua deteksi gabungan (satu untuk Hop 1 dan satu untuk Hop 2), yang membantu mencegah negatif palsu. Jika aturan produsen tidak cocok pada tumpang-tindih, deteksi tumpang-tindih sebagian tidak akan dipertimbangkan untuk Hop 1 atau Hop 2 dan korelasi antara deteksi dan peristiwa lainnya akan terlewat.
Untuk mengetahui informasi dan contoh selengkapnya tentang cara menentukan periode hopping, lihat Periode hopping.
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 gabungan.
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 yang berbeda per sumber: Tetapkan variabel peristiwa unik ke setiap sumber data (misalnya,
$euntuk peristiwa,$duntuk deteksi), dengan sumber data mencakup peristiwa, entitas, dan deteksi.Gabungkan sumber berdasarkan 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
matchdengan jangka 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 komposit 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 Anda. Untuk menerapkan urutan yang diharapkan, gunakan salah satu metode berikut:
Jendela geser: Tentukan urutan deteksi menggunakan jendela geser dalam kondisi
matchAnda.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.variables["user"].string_val
$hostname = $d1.detection.detection.variables["hostname"].string_val
$d2.detection.detection.rule_name = "processExecution_rule"
$userid = $d2.detection.detection.variables["user"].string_val
$hostname = $d2.detection.detection.variables["hostname"].string_val
$d3.detection.detection.rule_name = "networkEvent_rule"
$userid = $d3.detection.detection.variables["user"].string_val
$hostname = $d3.detection.detection.variables["hostname"].string_val
$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.