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 komposit.
Memahami struktur aturan
Aturan deteksi komposit selalu merupakan aturan multi-peristiwa 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 gabungan 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 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 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_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 deteksi terkurasi 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/"
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 mengetahui 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 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 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 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 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.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.